From 48993c97187b14904ea90a94360f24a7ee28aee2 Mon Sep 17 00:00:00 2001 From: Md Moinul Hossain Date: Wed, 16 Jun 2021 17:31:52 +0600 Subject: [PATCH 01/14] BAEL-4994 code added for mvc and mvp architecture --- .../src/com/baeldung/mvc/MvcMainClass.java | 24 ++++++++++ mvc-mvp/src/com/baeldung/mvc/Product.java | 45 +++++++++++++++++++ .../com/baeldung/mvc/ProductController.java | 34 ++++++++++++++ mvc-mvp/src/com/baeldung/mvc/ProductView.java | 11 +++++ .../src/com/baeldung/mvp/MvpMainClass.java | 22 +++++++++ mvc-mvp/src/com/baeldung/mvp/Product.java | 32 +++++++++++++ .../com/baeldung/mvp/ProductController.java | 40 +++++++++++++++++ mvc-mvp/src/com/baeldung/mvp/ProductView.java | 11 +++++ 8 files changed, 219 insertions(+) create mode 100644 mvc-mvp/src/com/baeldung/mvc/MvcMainClass.java create mode 100644 mvc-mvp/src/com/baeldung/mvc/Product.java create mode 100644 mvc-mvp/src/com/baeldung/mvc/ProductController.java create mode 100644 mvc-mvp/src/com/baeldung/mvc/ProductView.java create mode 100644 mvc-mvp/src/com/baeldung/mvp/MvpMainClass.java create mode 100644 mvc-mvp/src/com/baeldung/mvp/Product.java create mode 100644 mvc-mvp/src/com/baeldung/mvp/ProductController.java create mode 100644 mvc-mvp/src/com/baeldung/mvp/ProductView.java diff --git a/mvc-mvp/src/com/baeldung/mvc/MvcMainClass.java b/mvc-mvp/src/com/baeldung/mvc/MvcMainClass.java new file mode 100644 index 0000000000..479c8dd591 --- /dev/null +++ b/mvc-mvp/src/com/baeldung/mvc/MvcMainClass.java @@ -0,0 +1,24 @@ +package com.baeldung.mvc; + +public class MvcMainClass { + + public static void main(String[] args) { + + Product model = retrieveProductFromDatabase(); + ProductView view = new ProductView(); + model.setProductView(view); + model.showProduct(); + + ProductController controller = new ProductController(model); + controller.setProductName("SmartPhone"); + model.showProduct(); + } + + private static Product retrieveProductFromDatabase() { + Product product = new Product(); + product.setProductName("Mobile"); + product.setProductDescription("New Brand"); + product.setProductPrice(1000.0); + return product; + } +} diff --git a/mvc-mvp/src/com/baeldung/mvc/Product.java b/mvc-mvp/src/com/baeldung/mvc/Product.java new file mode 100644 index 0000000000..2e05e26a3a --- /dev/null +++ b/mvc-mvp/src/com/baeldung/mvc/Product.java @@ -0,0 +1,45 @@ +package com.baeldung.mvc; + +public class Product { + private String productName; + private String productDescription; + private Double productPrice; + private ProductView productView; + + public String getProductName() { + return productName; + } + + public void setProductName(String productName) { + this.productName = productName; + } + + public String getProductDescription() { + return productDescription; + } + + public void setProductDescription(String productDescription) { + this.productDescription = productDescription; + } + + public Double getProductPrice() { + return productPrice; + } + + public void setProductPrice(Double productPrice) { + this.productPrice = productPrice; + } + + public ProductView getProductView() { + return productView; + } + + public void setProductView(ProductView productView) { + this.productView = productView; + } + + public void showProduct() { + productView.printProductDetails(productName, productDescription, productPrice); + } + +} diff --git a/mvc-mvp/src/com/baeldung/mvc/ProductController.java b/mvc-mvp/src/com/baeldung/mvc/ProductController.java new file mode 100644 index 0000000000..673b179e57 --- /dev/null +++ b/mvc-mvp/src/com/baeldung/mvc/ProductController.java @@ -0,0 +1,34 @@ +package com.baeldung.mvc; + +public class ProductController { + private final Product product; + + public ProductController(Product product) { + this.product = product; + } + + public String getProductName() { + return product.getProductName(); + } + + public void setProductName(String productName) { + product.setProductName(productName); + } + + public String getProductDescription() { + return product.getProductDescription(); + } + + public void setProductDescription(String productDescription) { + product.setProductDescription(productDescription); + } + + public Double getProductPrice() { + return product.getProductPrice(); + } + + public void setProductPrice(Double productPrice) { + product.setProductPrice(productPrice); + } + +} diff --git a/mvc-mvp/src/com/baeldung/mvc/ProductView.java b/mvc-mvp/src/com/baeldung/mvc/ProductView.java new file mode 100644 index 0000000000..9e1b2e5cb7 --- /dev/null +++ b/mvc-mvp/src/com/baeldung/mvc/ProductView.java @@ -0,0 +1,11 @@ +package com.baeldung.mvc; + +public class ProductView { + public void printProductDetails(String productName, String productDescription, Double productPrice) { + System.out.println("Product details:"); + System.out.println("product Name: " + productName); + System.out.println("product Description: " + productDescription); + System.out.println("product price: " + productPrice); + + } +} diff --git a/mvc-mvp/src/com/baeldung/mvp/MvpMainClass.java b/mvc-mvp/src/com/baeldung/mvp/MvpMainClass.java new file mode 100644 index 0000000000..f40cccca74 --- /dev/null +++ b/mvc-mvp/src/com/baeldung/mvp/MvpMainClass.java @@ -0,0 +1,22 @@ +package com.baeldung.mvp; + +public class MvpMainClass { + + public static void main(String[] args) { + + Product model = retrieveProductFromDatabase(); + ProductView view = new ProductView(); + ProductController controller = new ProductController(model, view); + controller.showProduct(); + controller.setProductName("SmartPhone"); + controller.showProduct(); + } + + private static Product retrieveProductFromDatabase() { + Product product = new Product(); + product.setProductName("Mobile"); + product.setProductDescription("New Brand"); + product.setProductPrice(1000.0); + return product; + } +} diff --git a/mvc-mvp/src/com/baeldung/mvp/Product.java b/mvc-mvp/src/com/baeldung/mvp/Product.java new file mode 100644 index 0000000000..902aa7100c --- /dev/null +++ b/mvc-mvp/src/com/baeldung/mvp/Product.java @@ -0,0 +1,32 @@ +package com.baeldung.mvp; + +public class Product { + private String productName; + private String productDescription; + private Double productPrice; + + public String getProductName() { + return productName; + } + + public void setProductName(String productName) { + this.productName = productName; + } + + public String getProductDescription() { + return productDescription; + } + + public void setProductDescription(String productDescription) { + this.productDescription = productDescription; + } + + public Double getProductPrice() { + return productPrice; + } + + public void setProductPrice(Double productPrice) { + this.productPrice = productPrice; + } + +} diff --git a/mvc-mvp/src/com/baeldung/mvp/ProductController.java b/mvc-mvp/src/com/baeldung/mvp/ProductController.java new file mode 100644 index 0000000000..5cf32b3f0b --- /dev/null +++ b/mvc-mvp/src/com/baeldung/mvp/ProductController.java @@ -0,0 +1,40 @@ +package com.baeldung.mvp; + +public class ProductController { + private final Product product; + private final ProductView productView; + + public ProductController(Product product, ProductView productView) { + this.product = product; + this.productView = productView; + } + + public String getProductName() { + return product.getProductName(); + } + + public void setProductName(String productName) { + product.setProductName(productName); + } + + public String getProductDescription() { + return product.getProductDescription(); + } + + public void setProductDescription(String productDescription) { + product.setProductDescription(productDescription); + } + + public Double getProductPrice() { + return product.getProductPrice(); + } + + public void setProductPrice(Double productPrice) { + product.setProductPrice(productPrice); + } + + public void showProduct() { + productView.printProductDetails(product.getProductName(), product.getProductDescription(), product.getProductPrice()); + } + +} diff --git a/mvc-mvp/src/com/baeldung/mvp/ProductView.java b/mvc-mvp/src/com/baeldung/mvp/ProductView.java new file mode 100644 index 0000000000..edb3dddddc --- /dev/null +++ b/mvc-mvp/src/com/baeldung/mvp/ProductView.java @@ -0,0 +1,11 @@ +package com.baeldung.mvp; + +public class ProductView { + public void printProductDetails(String productName, String productDescription, Double productPrice) { + System.out.println("Product details:"); + System.out.println("product Name: " + productName); + System.out.println("product Description: " + productDescription); + System.out.println("product price: " + productPrice); + + } +} From be2d8a668fd18885a26eaf0e9ffef4bfaaa0e57c Mon Sep 17 00:00:00 2001 From: Md Moinul Hossain Date: Wed, 16 Jun 2021 18:09:58 +0600 Subject: [PATCH 02/14] BAEL-4994 Class name changed in mvp --- mvc-mvp/src/com/baeldung/mvp/MvpMainClass.java | 8 ++++---- .../mvp/{ProductController.java => ProductPresenter.java} | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) rename mvc-mvp/src/com/baeldung/mvp/{ProductController.java => ProductPresenter.java} (90%) diff --git a/mvc-mvp/src/com/baeldung/mvp/MvpMainClass.java b/mvc-mvp/src/com/baeldung/mvp/MvpMainClass.java index f40cccca74..98b616219d 100644 --- a/mvc-mvp/src/com/baeldung/mvp/MvpMainClass.java +++ b/mvc-mvp/src/com/baeldung/mvp/MvpMainClass.java @@ -6,10 +6,10 @@ public class MvpMainClass { Product model = retrieveProductFromDatabase(); ProductView view = new ProductView(); - ProductController controller = new ProductController(model, view); - controller.showProduct(); - controller.setProductName("SmartPhone"); - controller.showProduct(); + ProductPresenter presenter = new ProductPresenter(model, view); + presenter.showProduct(); + presenter.setProductName("SmartPhone"); + presenter.showProduct(); } private static Product retrieveProductFromDatabase() { diff --git a/mvc-mvp/src/com/baeldung/mvp/ProductController.java b/mvc-mvp/src/com/baeldung/mvp/ProductPresenter.java similarity index 90% rename from mvc-mvp/src/com/baeldung/mvp/ProductController.java rename to mvc-mvp/src/com/baeldung/mvp/ProductPresenter.java index 5cf32b3f0b..b9549026a9 100644 --- a/mvc-mvp/src/com/baeldung/mvp/ProductController.java +++ b/mvc-mvp/src/com/baeldung/mvp/ProductPresenter.java @@ -1,10 +1,10 @@ package com.baeldung.mvp; -public class ProductController { +public class ProductPresenter { private final Product product; private final ProductView productView; - public ProductController(Product product, ProductView productView) { + public ProductPresenter(Product product, ProductView productView) { this.product = product; this.productView = productView; } From d478ffc07916f100f56b0bf996cc6bbaa17ea95a Mon Sep 17 00:00:00 2001 From: Md Moinul Hossain Date: Fri, 25 Jun 2021 00:17:10 +0600 Subject: [PATCH 03/14] BAEL-4994 moved to parrtern module --- .../baeldung/mvc_mvp/mvc/MvcMainClass.java | 24 ++++++++++ .../com/baeldung/mvc_mvp/mvc/Product.java | 45 +++++++++++++++++++ .../mvc_mvp/mvc/ProductController.java | 34 ++++++++++++++ .../com/baeldung/mvc_mvp/mvc/ProductView.java | 16 +++++++ .../baeldung/mvc_mvp/mvp/MvpMainClass.java | 22 +++++++++ .../com/baeldung/mvc_mvp/mvp/Product.java | 32 +++++++++++++ .../mvc_mvp/mvp/ProductPresenter.java | 40 +++++++++++++++++ .../com/baeldung/mvc_mvp/mvp/ProductView.java | 16 +++++++ 8 files changed, 229 insertions(+) create mode 100644 patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvc/MvcMainClass.java create mode 100644 patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvc/Product.java create mode 100644 patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvc/ProductController.java create mode 100644 patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvc/ProductView.java create mode 100644 patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvp/MvpMainClass.java create mode 100644 patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvp/Product.java create mode 100644 patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvp/ProductPresenter.java create mode 100644 patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvp/ProductView.java diff --git a/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvc/MvcMainClass.java b/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvc/MvcMainClass.java new file mode 100644 index 0000000000..e89d7239eb --- /dev/null +++ b/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvc/MvcMainClass.java @@ -0,0 +1,24 @@ +package com.baeldung.mvc_mvp.mvc; + +public class MvcMainClass { + + public static void main(String[] args) { + + Product model = retrieveProductFromDatabase(); + ProductView view = new ProductView(); + model.setProductView(view); + model.showProduct(); + + ProductController controller = new ProductController(model); + controller.setProductName("SmartPhone"); + model.showProduct(); + } + + private static Product retrieveProductFromDatabase() { + Product product = new Product(); + product.setProductName("Mobile"); + product.setProductDescription("New Brand"); + product.setProductPrice(1000.0); + return product; + } +} diff --git a/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvc/Product.java b/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvc/Product.java new file mode 100644 index 0000000000..6e04b223e4 --- /dev/null +++ b/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvc/Product.java @@ -0,0 +1,45 @@ +package com.baeldung.mvc_mvp.mvc; + +public class Product { + private String productName; + private String productDescription; + private Double productPrice; + private ProductView productView; + + public String getProductName() { + return productName; + } + + public void setProductName(String productName) { + this.productName = productName; + } + + public String getProductDescription() { + return productDescription; + } + + public void setProductDescription(String productDescription) { + this.productDescription = productDescription; + } + + public Double getProductPrice() { + return productPrice; + } + + public void setProductPrice(Double productPrice) { + this.productPrice = productPrice; + } + + public ProductView getProductView() { + return productView; + } + + public void setProductView(ProductView productView) { + this.productView = productView; + } + + public void showProduct() { + productView.printProductDetails(productName, productDescription, productPrice); + } + +} diff --git a/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvc/ProductController.java b/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvc/ProductController.java new file mode 100644 index 0000000000..922d4d703b --- /dev/null +++ b/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvc/ProductController.java @@ -0,0 +1,34 @@ +package com.baeldung.mvc_mvp.mvc; + +public class ProductController { + private final Product product; + + public ProductController(Product product) { + this.product = product; + } + + public String getProductName() { + return product.getProductName(); + } + + public void setProductName(String productName) { + product.setProductName(productName); + } + + public String getProductDescription() { + return product.getProductDescription(); + } + + public void setProductDescription(String productDescription) { + product.setProductDescription(productDescription); + } + + public Double getProductPrice() { + return product.getProductPrice(); + } + + public void setProductPrice(Double productPrice) { + product.setProductPrice(productPrice); + } + +} diff --git a/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvc/ProductView.java b/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvc/ProductView.java new file mode 100644 index 0000000000..e8031b6398 --- /dev/null +++ b/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvc/ProductView.java @@ -0,0 +1,16 @@ +package com.baeldung.mvc_mvp.mvc; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class ProductView { + private static Logger log = LoggerFactory.getLogger(ProductView.class); + + public void printProductDetails(String productName, String productDescription, Double productPrice) { + log.info("Product details:"); + log.info("product Name: " + productName); + log.info("product Description: " + productDescription); + log.info("product price: " + productPrice); + + } +} diff --git a/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvp/MvpMainClass.java b/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvp/MvpMainClass.java new file mode 100644 index 0000000000..b501ac5ec5 --- /dev/null +++ b/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvp/MvpMainClass.java @@ -0,0 +1,22 @@ +package com.baeldung.mvc_mvp.mvp; + +public class MvpMainClass { + + public static void main(String[] args) { + + Product model = retrieveProductFromDatabase(); + ProductView view = new ProductView(); + ProductPresenter presenter = new ProductPresenter(model, view); + presenter.showProduct(); + presenter.setProductName("SmartPhone"); + presenter.showProduct(); + } + + private static Product retrieveProductFromDatabase() { + Product product = new Product(); + product.setProductName("Mobile"); + product.setProductDescription("New Brand"); + product.setProductPrice(1000.0); + return product; + } +} diff --git a/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvp/Product.java b/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvp/Product.java new file mode 100644 index 0000000000..700ee15ef6 --- /dev/null +++ b/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvp/Product.java @@ -0,0 +1,32 @@ +package com.baeldung.mvc_mvp.mvp; + +public class Product { + private String productName; + private String productDescription; + private Double productPrice; + + public String getProductName() { + return productName; + } + + public void setProductName(String productName) { + this.productName = productName; + } + + public String getProductDescription() { + return productDescription; + } + + public void setProductDescription(String productDescription) { + this.productDescription = productDescription; + } + + public Double getProductPrice() { + return productPrice; + } + + public void setProductPrice(Double productPrice) { + this.productPrice = productPrice; + } + +} diff --git a/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvp/ProductPresenter.java b/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvp/ProductPresenter.java new file mode 100644 index 0000000000..984766b299 --- /dev/null +++ b/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvp/ProductPresenter.java @@ -0,0 +1,40 @@ +package com.baeldung.mvc_mvp.mvp; + +public class ProductPresenter { + private final Product product; + private final ProductView productView; + + public ProductPresenter(Product product, ProductView productView) { + this.product = product; + this.productView = productView; + } + + public String getProductName() { + return product.getProductName(); + } + + public void setProductName(String productName) { + product.setProductName(productName); + } + + public String getProductDescription() { + return product.getProductDescription(); + } + + public void setProductDescription(String productDescription) { + product.setProductDescription(productDescription); + } + + public Double getProductPrice() { + return product.getProductPrice(); + } + + public void setProductPrice(Double productPrice) { + product.setProductPrice(productPrice); + } + + public void showProduct() { + productView.printProductDetails(product.getProductName(), product.getProductDescription(), product.getProductPrice()); + } + +} diff --git a/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvp/ProductView.java b/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvp/ProductView.java new file mode 100644 index 0000000000..7ee931612a --- /dev/null +++ b/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvp/ProductView.java @@ -0,0 +1,16 @@ +package com.baeldung.mvc_mvp.mvp; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class ProductView { + private static Logger log = LoggerFactory.getLogger(ProductView.class); + + public void printProductDetails(String productName, String productDescription, Double productPrice) { + log.info("Product details:"); + log.info("product Name: " + productName); + log.info("product Description: " + productDescription); + log.info("product price: " + productPrice); + + } +} From ff8372aa5573316f93636534f7e9a6f4e157f847 Mon Sep 17 00:00:00 2001 From: Md Moinul Hossain Date: Fri, 25 Jun 2021 00:25:33 +0600 Subject: [PATCH 04/14] Extra white space removed --- .../src/main/java/com/baeldung/mvc_mvp/mvc/ProductView.java | 1 - .../src/main/java/com/baeldung/mvc_mvp/mvp/ProductView.java | 1 - 2 files changed, 2 deletions(-) diff --git a/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvc/ProductView.java b/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvc/ProductView.java index e8031b6398..19ef7d3629 100644 --- a/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvc/ProductView.java +++ b/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvc/ProductView.java @@ -11,6 +11,5 @@ public class ProductView { log.info("product Name: " + productName); log.info("product Description: " + productDescription); log.info("product price: " + productPrice); - } } diff --git a/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvp/ProductView.java b/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvp/ProductView.java index 7ee931612a..4555977439 100644 --- a/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvp/ProductView.java +++ b/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvp/ProductView.java @@ -11,6 +11,5 @@ public class ProductView { log.info("product Name: " + productName); log.info("product Description: " + productDescription); log.info("product price: " + productPrice); - } } From bdec91c26837f82fb5f2d41d53b3712ac3f71326 Mon Sep 17 00:00:00 2001 From: Md Moinul Hossain Date: Tue, 20 Jul 2021 11:21:17 +0600 Subject: [PATCH 05/14] BAEL-4994 names updated --- .../baeldung/mvc_mvp/mvc/MvcMainClass.java | 10 ++--- .../com/baeldung/mvc_mvp/mvc/Product.java | 42 +++++++++---------- .../mvc_mvp/mvc/ProductController.java | 24 +++++------ .../com/baeldung/mvc_mvp/mvc/ProductView.java | 8 ++-- .../baeldung/mvc_mvp/mvp/MvpMainClass.java | 8 ++-- .../com/baeldung/mvc_mvp/mvp/Product.java | 30 ++++++------- .../mvc_mvp/mvp/ProductPresenter.java | 30 ++++++------- .../com/baeldung/mvc_mvp/mvp/ProductView.java | 8 ++-- 8 files changed, 80 insertions(+), 80 deletions(-) diff --git a/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvc/MvcMainClass.java b/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvc/MvcMainClass.java index e89d7239eb..9ccd4ee74c 100644 --- a/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvc/MvcMainClass.java +++ b/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvc/MvcMainClass.java @@ -6,19 +6,19 @@ public class MvcMainClass { Product model = retrieveProductFromDatabase(); ProductView view = new ProductView(); - model.setProductView(view); + model.setView(view); model.showProduct(); ProductController controller = new ProductController(model); - controller.setProductName("SmartPhone"); + controller.setName("SmartPhone"); model.showProduct(); } private static Product retrieveProductFromDatabase() { Product product = new Product(); - product.setProductName("Mobile"); - product.setProductDescription("New Brand"); - product.setProductPrice(1000.0); + product.setName("Mobile"); + product.setDescription("New Brand"); + product.setPrice(1000.0); return product; } } diff --git a/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvc/Product.java b/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvc/Product.java index 6e04b223e4..5c44d4475a 100644 --- a/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvc/Product.java +++ b/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvc/Product.java @@ -1,45 +1,45 @@ package com.baeldung.mvc_mvp.mvc; public class Product { - private String productName; - private String productDescription; - private Double productPrice; - private ProductView productView; + private String name; + private String description; + private Double price; + private ProductView view; - public String getProductName() { - return productName; + public String getName() { + return name; } - public void setProductName(String productName) { - this.productName = productName; + public void setName(String name) { + this.name = name; } - public String getProductDescription() { - return productDescription; + public String getDescription() { + return description; } - public void setProductDescription(String productDescription) { - this.productDescription = productDescription; + public void setDescription(String description) { + this.description = description; } - public Double getProductPrice() { - return productPrice; + public Double getPrice() { + return price; } - public void setProductPrice(Double productPrice) { - this.productPrice = productPrice; + public void setPrice(Double price) { + this.price = price; } - public ProductView getProductView() { - return productView; + public ProductView getView() { + return view; } - public void setProductView(ProductView productView) { - this.productView = productView; + public void setView(ProductView view) { + this.view = view; } public void showProduct() { - productView.printProductDetails(productName, productDescription, productPrice); + view.printProductDetails(name, description, price); } } diff --git a/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvc/ProductController.java b/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvc/ProductController.java index 922d4d703b..62cdb76f23 100644 --- a/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvc/ProductController.java +++ b/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvc/ProductController.java @@ -7,28 +7,28 @@ public class ProductController { this.product = product; } - public String getProductName() { - return product.getProductName(); + public String getName() { + return product.getName(); } - public void setProductName(String productName) { - product.setProductName(productName); + public void setName(String name) { + product.setName(name); } - public String getProductDescription() { - return product.getProductDescription(); + public String getDescription() { + return product.getDescription(); } - public void setProductDescription(String productDescription) { - product.setProductDescription(productDescription); + public void setDescription(String description) { + product.setDescription(description); } - public Double getProductPrice() { - return product.getProductPrice(); + public Double getPrice() { + return product.getPrice(); } - public void setProductPrice(Double productPrice) { - product.setProductPrice(productPrice); + public void setPrice(Double price) { + product.setPrice(price); } } diff --git a/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvc/ProductView.java b/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvc/ProductView.java index 19ef7d3629..43f45b6df7 100644 --- a/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvc/ProductView.java +++ b/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvc/ProductView.java @@ -6,10 +6,10 @@ import org.slf4j.LoggerFactory; public class ProductView { private static Logger log = LoggerFactory.getLogger(ProductView.class); - public void printProductDetails(String productName, String productDescription, Double productPrice) { + public void printProductDetails(String name, String description, Double price) { log.info("Product details:"); - log.info("product Name: " + productName); - log.info("product Description: " + productDescription); - log.info("product price: " + productPrice); + log.info("product Name: " + name); + log.info("product Description: " + description); + log.info("product price: " + price); } } diff --git a/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvp/MvpMainClass.java b/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvp/MvpMainClass.java index b501ac5ec5..7d12a0142c 100644 --- a/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvp/MvpMainClass.java +++ b/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvp/MvpMainClass.java @@ -8,15 +8,15 @@ public class MvpMainClass { ProductView view = new ProductView(); ProductPresenter presenter = new ProductPresenter(model, view); presenter.showProduct(); - presenter.setProductName("SmartPhone"); + presenter.setName("SmartPhone"); presenter.showProduct(); } private static Product retrieveProductFromDatabase() { Product product = new Product(); - product.setProductName("Mobile"); - product.setProductDescription("New Brand"); - product.setProductPrice(1000.0); + product.setName("Mobile"); + product.setDescription("New Brand"); + product.setPrice(1000.0); return product; } } diff --git a/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvp/Product.java b/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvp/Product.java index 700ee15ef6..315e6e69b6 100644 --- a/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvp/Product.java +++ b/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvp/Product.java @@ -1,32 +1,32 @@ package com.baeldung.mvc_mvp.mvp; public class Product { - private String productName; - private String productDescription; - private Double productPrice; + private String name; + private String description; + private Double price; - public String getProductName() { - return productName; + public String getName() { + return name; } - public void setProductName(String productName) { - this.productName = productName; + public void setName(String name) { + this.name = name; } - public String getProductDescription() { - return productDescription; + public String getDescription() { + return description; } - public void setProductDescription(String productDescription) { - this.productDescription = productDescription; + public void setDescription(String description) { + this.description = description; } - public Double getProductPrice() { - return productPrice; + public Double getPrice() { + return price; } - public void setProductPrice(Double productPrice) { - this.productPrice = productPrice; + public void setPrice(Double price) { + this.price = price; } } diff --git a/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvp/ProductPresenter.java b/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvp/ProductPresenter.java index 984766b299..2b87bdbbb5 100644 --- a/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvp/ProductPresenter.java +++ b/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvp/ProductPresenter.java @@ -2,39 +2,39 @@ package com.baeldung.mvc_mvp.mvp; public class ProductPresenter { private final Product product; - private final ProductView productView; + private final ProductView view; - public ProductPresenter(Product product, ProductView productView) { + public ProductPresenter(Product product, ProductView view) { this.product = product; - this.productView = productView; + this.view = view; } - public String getProductName() { - return product.getProductName(); + public String getName() { + return product.getName(); } - public void setProductName(String productName) { - product.setProductName(productName); + public void setName(String name) { + product.setName(name); } - public String getProductDescription() { - return product.getProductDescription(); + public String getDescription() { + return product.getDescription(); } - public void setProductDescription(String productDescription) { - product.setProductDescription(productDescription); + public void setDescription(String description) { + product.setDescription(description); } public Double getProductPrice() { - return product.getProductPrice(); + return product.getPrice(); } - public void setProductPrice(Double productPrice) { - product.setProductPrice(productPrice); + public void setPrice(Double price) { + product.setPrice(price); } public void showProduct() { - productView.printProductDetails(product.getProductName(), product.getProductDescription(), product.getProductPrice()); + view.printProductDetails(product.getName(), product.getDescription(), product.getPrice()); } } diff --git a/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvp/ProductView.java b/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvp/ProductView.java index 4555977439..27ccc6743d 100644 --- a/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvp/ProductView.java +++ b/patterns/design-patterns-architectural/src/main/java/com/baeldung/mvc_mvp/mvp/ProductView.java @@ -6,10 +6,10 @@ import org.slf4j.LoggerFactory; public class ProductView { private static Logger log = LoggerFactory.getLogger(ProductView.class); - public void printProductDetails(String productName, String productDescription, Double productPrice) { + public void printProductDetails(String name, String description, Double price) { log.info("Product details:"); - log.info("product Name: " + productName); - log.info("product Description: " + productDescription); - log.info("product price: " + productPrice); + log.info("product Name: " + name); + log.info("product Description: " + description); + log.info("product price: " + price); } } From 91bbabd97a7abfbf48e402d0f76e2e8907f289b7 Mon Sep 17 00:00:00 2001 From: gjohnson Date: Fri, 23 Jul 2021 01:00:45 +0100 Subject: [PATCH 06/14] First Draft - BAEL-4122 - A Quick Guide to Autocommit in JDBC --- .../com/baeldung/jdbcautocommit/Person.java | 51 ++++ .../jdbcautocommit/AutoCommitUnitTest.java | 259 ++++++++++++++++++ 2 files changed, 310 insertions(+) create mode 100644 persistence-modules/core-java-persistence-2/src/main/java/com/baeldung/jdbcautocommit/Person.java create mode 100644 persistence-modules/core-java-persistence-2/src/test/java/com/baeldung/jdbcautocommit/AutoCommitUnitTest.java diff --git a/persistence-modules/core-java-persistence-2/src/main/java/com/baeldung/jdbcautocommit/Person.java b/persistence-modules/core-java-persistence-2/src/main/java/com/baeldung/jdbcautocommit/Person.java new file mode 100644 index 0000000000..81c60a0db1 --- /dev/null +++ b/persistence-modules/core-java-persistence-2/src/main/java/com/baeldung/jdbcautocommit/Person.java @@ -0,0 +1,51 @@ +package com.baeldung.jdbcautocommit; + +public class Person { + + private Integer id; + private String name; + private String lastName; + private Integer age; + + public Person() { + } + + public Person(Integer id, String name, String lastName, Integer age) { + this.id = id; + this.name = name; + this.lastName = lastName; + this.age = age; + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public Integer getAge() { + return age; + } + + public void setAge(Integer age) { + this.age = age; + } +} diff --git a/persistence-modules/core-java-persistence-2/src/test/java/com/baeldung/jdbcautocommit/AutoCommitUnitTest.java b/persistence-modules/core-java-persistence-2/src/test/java/com/baeldung/jdbcautocommit/AutoCommitUnitTest.java new file mode 100644 index 0000000000..a3e3d8f34c --- /dev/null +++ b/persistence-modules/core-java-persistence-2/src/test/java/com/baeldung/jdbcautocommit/AutoCommitUnitTest.java @@ -0,0 +1,259 @@ +package com.baeldung.jdbcautocommit; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.is; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.List; + +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +public class AutoCommitUnitTest { + + private static final String INSERT_PERSON_SQL = "INSERT INTO Person VALUES (?,?,?,?)"; + private static final String SELECT_ALL_PEOPLE_SQL = "SELECT * FROM Person"; + private static final String UPDATE_PERSON_AGE_BY_ID_SQL = "UPDATE Person SET age = ? WHERE id = ?"; + private static final String DELETE_ALL_PEOPLE_SQL = "DELETE FROM Person"; + private static final String UPDATE_PERSON_AGE_BY_NAME_SQL + = "UPDATE Person SET age = ? WHERE id = (SELECT id FROM Person WHERE name = ?)"; + private static final String CREATE_PERSON_TABLE_SQL + = "CREATE TABLE Person (id INTEGER not null, name VARCHAR(50), lastName VARCHAR(50), age INTEGER, PRIMARY KEY (id))"; + + private static Connection connection1; + private static Connection connection2; + + @BeforeAll + static void setup() throws SQLException { + connection1 = DriverManager.getConnection("jdbc:h2:mem:autocommit", "sa", ""); + createPersonTable(connection1); + + connection2 = DriverManager.getConnection("jdbc:h2:mem:autocommit", "sa", ""); + } + + @Test + void givenAutoCommitTrue_whenInsertAndUpdateRecord_thenDataPersistedAfterEachWithoutCommit() throws SQLException { + + connection1.setAutoCommit(true); + + Person person = new Person(1, "John", "Doe", 45); + insertPerson(connection1, person); + + // no explicit commit needed here when auto-commit true + + // viewed from different connection, connection2 : assert person has been persisted into + // the database + List people = selectAllPeople(connection2); + assertThat("person record inserted OK into empty table", people.size(), is(equalTo(1))); + Person personInserted = people.iterator().next(); + assertThat("id correct", personInserted.getId(), is(equalTo(1))); + + // update age for person in database + updatePersonAgeById(connection1, 1, 65); + + // no explicit commit needed here + + // viewed from connection2 : assert person's age has been updated to database + people = selectAllPeople(connection2); + Person personUpdated = people.iterator().next(); + assertThat("updated age correct", personUpdated.getAge(), is(equalTo(65))); + } + + @Test + void givenAutoCommitFalse_whenInsertCommitAndUpdateCommit_thenDataViewableAfterEachCommit() throws SQLException { + + connection1.setAutoCommit(false); + + Person person = new Person(1, "John", "Doe", 45); + insertPerson(connection1, person); + + // viewed from different connection, connection2 : assert that person has not yet been + // persisted to database before issuing commit + List people = selectAllPeople(connection2); + assertThat("No people have been inserted into database yet", people.size(), is(equalTo(0))); + + connection1.commit(); + + // viewed from connection2 : assert that person has been persisted to database after + // issuing commit + people = selectAllPeople(connection2); + assertThat("Person has been inserted into empty table after commit", people.size(), is(equalTo(1))); + Person personInserted = people.iterator().next(); + assertThat("id correct", personInserted.getId(), is(equalTo(1))); + + updatePersonAgeById(connection1, 1, 65); + + // assert that person's age has not been updated before issuing commit + people = selectAllPeople(connection2); + Person personUpdated = people.iterator().next(); + assertThat("person's age still 45, not updated", personUpdated.getAge(), is(equalTo(45))); + + connection1.commit(); + + // viewed from connection2 : assert that person's age has been updated after issuing commit + people = selectAllPeople(connection2); + personUpdated = people.iterator().next(); + assertThat("person's age updated to 65", personUpdated.getAge(), is(equalTo(65))); + } + + @Test + void givenAutoCommitFalse_whenInsertAndUpdateWithCommitOnlyAtEnd_thenDataOnlyViewableAfterCommit() throws SQLException { + + connection1.setAutoCommit(false); + + Person person = new Person(1, "John", "Doe", 45); + insertPerson(connection1, person); + + // viewed from different connection, connection2 : assert that person has not yet been + // persisted to database before issuing commit + List people = selectAllPeople(connection2); + assertThat("No people have been inserted into database yet", people.size(), is(equalTo(0))); + + updatePersonAgeById(connection1, 1, 65); + + // viewed from connection2 : assert that person has still not yet been + // persisted to database before issuing commit + people = selectAllPeople(connection2); + assertThat("No people have been inserted into database yet", people.size(), is(equalTo(0))); + + connection1.commit(); + + // viewed from connection2 : assert that person record has been persisted to + // database and person's age has been updated after issuing commit + people = selectAllPeople(connection2); + Person personUpdated = people.iterator().next(); + assertThat("person's age updated to 65", personUpdated.getAge(), is(equalTo(65))); + } + + @Test + void givenAutoCommitTrue_whenUpdateWithNestedSelect_thenUpdatePersistedWithoutCommit() throws SQLException { + + connection1.setAutoCommit(true); + + Person person = new Person(1, "John", "Doe", 45); + insertPerson(connection1, person); + + updatePersonAgeByName(connection1, "John", 77); + + // viewed from connection2 : assert person's age has been updated correctly to database + // without issuing commit + List people = selectAllPeople(connection2); + Person personUpdated = people.iterator().next(); + assertThat("updated age correct", personUpdated.getAge(), is(equalTo(77))); + } + + @Test + void givenAutoCommitFalse_whenModeChangedToTrueAfterSQLUpdate_thenUpdatePersistedWithoutCommit() throws SQLException { + + connection1.setAutoCommit(false); + + Person person = new Person(1, "John", "Doe", 45); + insertPerson(connection1, person); + updatePersonAgeByName(connection1, "John", 77); + + connection1.setAutoCommit(true); + + // viewed from connection2 : assert record inserted and person's age has been updated + // correctly to database after auto-commit changed false -> true ... without explicit commit needed + List people = selectAllPeople(connection2); + Person personUpdated = people.iterator().next(); + assertThat("updated age correct", personUpdated.getAge(), is(equalTo(77))); + } + + @AfterEach + void deleteAllRecords() throws SQLException { + + if (connection1.getAutoCommit() == false) { + connection1.setAutoCommit(true); + } + + deleteAllPeople(connection1); + } + + @AfterAll + static void closeConnections() throws SQLException { + + connection1.close(); + connection2.close(); + } + + private static void createPersonTable(Connection connection) throws SQLException { + try(Statement statement = connection.createStatement()) { + statement.executeUpdate(CREATE_PERSON_TABLE_SQL); + } + } + + private static int insertPerson(Connection connection, Person person) throws SQLException { + + try (PreparedStatement preparedStatement = connection.prepareStatement(INSERT_PERSON_SQL)) { + + preparedStatement.setInt(1, person.getId()); + preparedStatement.setString(2, person.getName()); + preparedStatement.setString(3, person.getLastName()); + preparedStatement.setInt(4, person.getAge()); + + // execute statement and return the number of rows inserted + return preparedStatement.executeUpdate(); + } + } + + private static void deleteAllPeople(Connection connection) throws SQLException { + try (Statement statement = connection.createStatement()) { + statement.execute(DELETE_ALL_PEOPLE_SQL); + } + } + + private static List selectAllPeople(Connection connection) throws SQLException { + + List people = null; + + try (Statement statement = connection.createStatement()) { + + people = new ArrayList<>(); + ResultSet resultSet = statement.executeQuery(SELECT_ALL_PEOPLE_SQL); + + while (resultSet.next()) { + Person person = new Person(); + + person.setId(resultSet.getInt("id")); + person.setName(resultSet.getString("name")); + person.setLastName(resultSet.getString("lastName")); + person.setAge(resultSet.getInt("age")); + + people.add(person); + } + } + + return people; + } + + private static void updatePersonAgeById(Connection connection, int id, int newAge) throws SQLException { + + try (PreparedStatement preparedStatement = connection.prepareStatement(UPDATE_PERSON_AGE_BY_ID_SQL)) { + + preparedStatement.setInt(1, newAge); + preparedStatement.setInt(2, id); + + preparedStatement.executeUpdate(); + } + } + + private static void updatePersonAgeByName(Connection connection, String name, int newAge) throws SQLException { + try (PreparedStatement preparedStatement = connection.prepareStatement(UPDATE_PERSON_AGE_BY_NAME_SQL)) { + + preparedStatement.setInt(1, newAge); + preparedStatement.setString(2, name); + + preparedStatement.executeUpdate(); + } + } +} From c5bada9f8b570b570c897767de3e9d54788dd301 Mon Sep 17 00:00:00 2001 From: Md Moinul Hossain Date: Wed, 28 Jul 2021 23:40:25 +0600 Subject: [PATCH 07/14] BAEL-4994 extra mvc-mvp module removed --- .../src/com/baeldung/mvc/MvcMainClass.java | 24 ---------- mvc-mvp/src/com/baeldung/mvc/Product.java | 45 ------------------- .../com/baeldung/mvc/ProductController.java | 34 -------------- mvc-mvp/src/com/baeldung/mvc/ProductView.java | 11 ----- .../src/com/baeldung/mvp/MvpMainClass.java | 22 --------- mvc-mvp/src/com/baeldung/mvp/Product.java | 32 ------------- .../com/baeldung/mvp/ProductPresenter.java | 40 ----------------- mvc-mvp/src/com/baeldung/mvp/ProductView.java | 11 ----- 8 files changed, 219 deletions(-) delete mode 100644 mvc-mvp/src/com/baeldung/mvc/MvcMainClass.java delete mode 100644 mvc-mvp/src/com/baeldung/mvc/Product.java delete mode 100644 mvc-mvp/src/com/baeldung/mvc/ProductController.java delete mode 100644 mvc-mvp/src/com/baeldung/mvc/ProductView.java delete mode 100644 mvc-mvp/src/com/baeldung/mvp/MvpMainClass.java delete mode 100644 mvc-mvp/src/com/baeldung/mvp/Product.java delete mode 100644 mvc-mvp/src/com/baeldung/mvp/ProductPresenter.java delete mode 100644 mvc-mvp/src/com/baeldung/mvp/ProductView.java diff --git a/mvc-mvp/src/com/baeldung/mvc/MvcMainClass.java b/mvc-mvp/src/com/baeldung/mvc/MvcMainClass.java deleted file mode 100644 index 479c8dd591..0000000000 --- a/mvc-mvp/src/com/baeldung/mvc/MvcMainClass.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.baeldung.mvc; - -public class MvcMainClass { - - public static void main(String[] args) { - - Product model = retrieveProductFromDatabase(); - ProductView view = new ProductView(); - model.setProductView(view); - model.showProduct(); - - ProductController controller = new ProductController(model); - controller.setProductName("SmartPhone"); - model.showProduct(); - } - - private static Product retrieveProductFromDatabase() { - Product product = new Product(); - product.setProductName("Mobile"); - product.setProductDescription("New Brand"); - product.setProductPrice(1000.0); - return product; - } -} diff --git a/mvc-mvp/src/com/baeldung/mvc/Product.java b/mvc-mvp/src/com/baeldung/mvc/Product.java deleted file mode 100644 index 2e05e26a3a..0000000000 --- a/mvc-mvp/src/com/baeldung/mvc/Product.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.baeldung.mvc; - -public class Product { - private String productName; - private String productDescription; - private Double productPrice; - private ProductView productView; - - public String getProductName() { - return productName; - } - - public void setProductName(String productName) { - this.productName = productName; - } - - public String getProductDescription() { - return productDescription; - } - - public void setProductDescription(String productDescription) { - this.productDescription = productDescription; - } - - public Double getProductPrice() { - return productPrice; - } - - public void setProductPrice(Double productPrice) { - this.productPrice = productPrice; - } - - public ProductView getProductView() { - return productView; - } - - public void setProductView(ProductView productView) { - this.productView = productView; - } - - public void showProduct() { - productView.printProductDetails(productName, productDescription, productPrice); - } - -} diff --git a/mvc-mvp/src/com/baeldung/mvc/ProductController.java b/mvc-mvp/src/com/baeldung/mvc/ProductController.java deleted file mode 100644 index 673b179e57..0000000000 --- a/mvc-mvp/src/com/baeldung/mvc/ProductController.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.baeldung.mvc; - -public class ProductController { - private final Product product; - - public ProductController(Product product) { - this.product = product; - } - - public String getProductName() { - return product.getProductName(); - } - - public void setProductName(String productName) { - product.setProductName(productName); - } - - public String getProductDescription() { - return product.getProductDescription(); - } - - public void setProductDescription(String productDescription) { - product.setProductDescription(productDescription); - } - - public Double getProductPrice() { - return product.getProductPrice(); - } - - public void setProductPrice(Double productPrice) { - product.setProductPrice(productPrice); - } - -} diff --git a/mvc-mvp/src/com/baeldung/mvc/ProductView.java b/mvc-mvp/src/com/baeldung/mvc/ProductView.java deleted file mode 100644 index 9e1b2e5cb7..0000000000 --- a/mvc-mvp/src/com/baeldung/mvc/ProductView.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.baeldung.mvc; - -public class ProductView { - public void printProductDetails(String productName, String productDescription, Double productPrice) { - System.out.println("Product details:"); - System.out.println("product Name: " + productName); - System.out.println("product Description: " + productDescription); - System.out.println("product price: " + productPrice); - - } -} diff --git a/mvc-mvp/src/com/baeldung/mvp/MvpMainClass.java b/mvc-mvp/src/com/baeldung/mvp/MvpMainClass.java deleted file mode 100644 index 98b616219d..0000000000 --- a/mvc-mvp/src/com/baeldung/mvp/MvpMainClass.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.baeldung.mvp; - -public class MvpMainClass { - - public static void main(String[] args) { - - Product model = retrieveProductFromDatabase(); - ProductView view = new ProductView(); - ProductPresenter presenter = new ProductPresenter(model, view); - presenter.showProduct(); - presenter.setProductName("SmartPhone"); - presenter.showProduct(); - } - - private static Product retrieveProductFromDatabase() { - Product product = new Product(); - product.setProductName("Mobile"); - product.setProductDescription("New Brand"); - product.setProductPrice(1000.0); - return product; - } -} diff --git a/mvc-mvp/src/com/baeldung/mvp/Product.java b/mvc-mvp/src/com/baeldung/mvp/Product.java deleted file mode 100644 index 902aa7100c..0000000000 --- a/mvc-mvp/src/com/baeldung/mvp/Product.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.baeldung.mvp; - -public class Product { - private String productName; - private String productDescription; - private Double productPrice; - - public String getProductName() { - return productName; - } - - public void setProductName(String productName) { - this.productName = productName; - } - - public String getProductDescription() { - return productDescription; - } - - public void setProductDescription(String productDescription) { - this.productDescription = productDescription; - } - - public Double getProductPrice() { - return productPrice; - } - - public void setProductPrice(Double productPrice) { - this.productPrice = productPrice; - } - -} diff --git a/mvc-mvp/src/com/baeldung/mvp/ProductPresenter.java b/mvc-mvp/src/com/baeldung/mvp/ProductPresenter.java deleted file mode 100644 index b9549026a9..0000000000 --- a/mvc-mvp/src/com/baeldung/mvp/ProductPresenter.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.baeldung.mvp; - -public class ProductPresenter { - private final Product product; - private final ProductView productView; - - public ProductPresenter(Product product, ProductView productView) { - this.product = product; - this.productView = productView; - } - - public String getProductName() { - return product.getProductName(); - } - - public void setProductName(String productName) { - product.setProductName(productName); - } - - public String getProductDescription() { - return product.getProductDescription(); - } - - public void setProductDescription(String productDescription) { - product.setProductDescription(productDescription); - } - - public Double getProductPrice() { - return product.getProductPrice(); - } - - public void setProductPrice(Double productPrice) { - product.setProductPrice(productPrice); - } - - public void showProduct() { - productView.printProductDetails(product.getProductName(), product.getProductDescription(), product.getProductPrice()); - } - -} diff --git a/mvc-mvp/src/com/baeldung/mvp/ProductView.java b/mvc-mvp/src/com/baeldung/mvp/ProductView.java deleted file mode 100644 index edb3dddddc..0000000000 --- a/mvc-mvp/src/com/baeldung/mvp/ProductView.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.baeldung.mvp; - -public class ProductView { - public void printProductDetails(String productName, String productDescription, Double productPrice) { - System.out.println("Product details:"); - System.out.println("product Name: " + productName); - System.out.println("product Description: " + productDescription); - System.out.println("product price: " + productPrice); - - } -} From ef23c27c9e25d65c610f9cc74cf2b738d4726e3e Mon Sep 17 00:00:00 2001 From: Mladen Savic Date: Thu, 29 Jul 2021 17:15:46 +0200 Subject: [PATCH 08/14] EntityNotFoundException in Hibernate (#11085) * JPA Entities and the Serializable Interface * JPA Entities and the Serializable Interface - edit after review * JPA Entities and the Serializable Interface - formatting * JPA Entities and the Serializable Interface - indentation * EntityNotFoundException in Hibernate --- .../entitynotfoundexception/Category.java | 42 +++++++++++++++++ .../entitynotfoundexception/Item.java | 44 ++++++++++++++++++ .../entitynotfoundexception/User.java | 28 ++++++++++++ .../main/resources/META-INF/persistence.xml | 18 ++++++++ ...ntityNotFoundExceptionIntegrationTest.java | 45 +++++++++++++++++++ 5 files changed, 177 insertions(+) create mode 100644 persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/entitynotfoundexception/Category.java create mode 100644 persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/entitynotfoundexception/Item.java create mode 100644 persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/entitynotfoundexception/User.java create mode 100644 persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/entitynotfoundexception/EntityNotFoundExceptionIntegrationTest.java diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/entitynotfoundexception/Category.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/entitynotfoundexception/Category.java new file mode 100644 index 0000000000..25d31d50c7 --- /dev/null +++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/entitynotfoundexception/Category.java @@ -0,0 +1,42 @@ +package com.baeldung.hibernate.entitynotfoundexception; + +import javax.persistence.*; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +@Entity +public class Category implements Serializable { + + @Id + @Column(unique = true, nullable = false) + private long id; + private String name; + @OneToMany + @JoinColumn(name = "category_id", foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT)) + private List items = new ArrayList<>(); + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public List getItems() { + return items; + } + + public void setItems(List items) { + this.items = items; + } +} diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/entitynotfoundexception/Item.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/entitynotfoundexception/Item.java new file mode 100644 index 0000000000..ee6f677d7d --- /dev/null +++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/entitynotfoundexception/Item.java @@ -0,0 +1,44 @@ +package com.baeldung.hibernate.entitynotfoundexception; + +import org.hibernate.annotations.NotFound; +import org.hibernate.annotations.NotFoundAction; + +import javax.persistence.*; +import java.io.Serializable; + +@Entity +public class Item implements Serializable { + + @Id + @Column(unique = true, nullable = false) + private long id; + private String name; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "category_id", foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT)) + @NotFound(action = NotFoundAction.IGNORE) + private Category category; + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Category getCategory() { + return category; + } + + public void setCategory(Category category) { + this.category = category; + } +} diff --git a/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/entitynotfoundexception/User.java b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/entitynotfoundexception/User.java new file mode 100644 index 0000000000..d89047195c --- /dev/null +++ b/persistence-modules/hibernate-jpa/src/main/java/com/baeldung/hibernate/entitynotfoundexception/User.java @@ -0,0 +1,28 @@ +package com.baeldung.hibernate.entitynotfoundexception; + +import javax.persistence.Entity; +import javax.persistence.Id; + +@Entity +public class User { + + @Id + private long id; + private String name; + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/persistence-modules/hibernate-jpa/src/main/resources/META-INF/persistence.xml b/persistence-modules/hibernate-jpa/src/main/resources/META-INF/persistence.xml index 3482414b9d..29cd4faf05 100644 --- a/persistence-modules/hibernate-jpa/src/main/resources/META-INF/persistence.xml +++ b/persistence-modules/hibernate-jpa/src/main/resources/META-INF/persistence.xml @@ -119,4 +119,22 @@ + + + EntityManager EntityNotFoundException persistence unit + com.baeldung.hibernate.entitynotfoundexception.Category + com.baeldung.hibernate.entitynotfoundexception.Item + com.baeldung.hibernate.entitynotfoundexception.User + true + + + + + + + + + + + \ No newline at end of file diff --git a/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/entitynotfoundexception/EntityNotFoundExceptionIntegrationTest.java b/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/entitynotfoundexception/EntityNotFoundExceptionIntegrationTest.java new file mode 100644 index 0000000000..bcb4e3eb95 --- /dev/null +++ b/persistence-modules/hibernate-jpa/src/test/java/com/baeldung/hibernate/entitynotfoundexception/EntityNotFoundExceptionIntegrationTest.java @@ -0,0 +1,45 @@ +package com.baeldung.hibernate.entitynotfoundexception; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import javax.persistence.EntityManager; +import javax.persistence.EntityManagerFactory; +import javax.persistence.EntityNotFoundException; +import javax.persistence.Persistence; +import java.io.IOException; + +public class EntityNotFoundExceptionIntegrationTest { + + private static EntityManager entityManager; + + @Before + public void setUp() throws IOException { + EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("com.baeldung.hibernate.entitynotfoundexception.h2_persistence_unit"); + entityManager = entityManagerFactory.createEntityManager(); + entityManager.getTransaction().begin(); + + } + + + @Test(expected = EntityNotFoundException.class) + public void givenNonExistingUserId_whenGetReferenceIsUsed_thenExceptionIsThrown() { + User user = entityManager.getReference(User.class, 1L); + user.getName(); + } + + @Test(expected = EntityNotFoundException.class) + public void givenItem_whenManyToOneEntityIsMissing_thenExceptionIsThrown() { + entityManager.createNativeQuery("Insert into Item (category_id, name, id) values (1, 'test', 1)").executeUpdate(); + entityManager.flush(); + Item item = entityManager.find(Item.class, 1L); + item.getCategory().getName(); + } + + @After + public void tearDown() { + entityManager.close(); + } + +} From 3ff0ae10d0463343024c7bdb1d0797a075fce1dd Mon Sep 17 00:00:00 2001 From: kwoyke Date: Thu, 29 Jul 2021 17:39:38 +0200 Subject: [PATCH 09/14] JAVA-6298: Enable spring-mybatis module (#11074) * JAVA-6298: Enable spring-mybatis module * JAVA-6298: Rename to unit tests --- persistence-modules/pom.xml | 2 +- persistence-modules/spring-mybatis/pom.xml | 2 +- ...rBootIntegrationTest.java => ArticleMapperBootUnitTest.java} | 2 +- ...leMapperCommonTest.java => ArticleMapperCommonUnitTest.java} | 2 +- ...cleMapperIntegrationTest.java => ArticleMapperUnitTest.java} | 2 +- ...perXMLIntegrationTest.java => ArticleMapperXMLUnitTest.java} | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) rename persistence-modules/spring-mybatis/src/test/java/com/baeldung/mybatis/spring/{ArticleMapperBootIntegrationTest.java => ArticleMapperBootUnitTest.java} (82%) rename persistence-modules/spring-mybatis/src/test/java/com/baeldung/mybatis/spring/{ArticleMapperCommonTest.java => ArticleMapperCommonUnitTest.java} (94%) rename persistence-modules/spring-mybatis/src/test/java/com/baeldung/mybatis/spring/{ArticleMapperIntegrationTest.java => ArticleMapperUnitTest.java} (80%) rename persistence-modules/spring-mybatis/src/test/java/com/baeldung/mybatis/spring/{ArticleMapperXMLIntegrationTest.java => ArticleMapperXMLUnitTest.java} (79%) diff --git a/persistence-modules/pom.xml b/persistence-modules/pom.xml index 77f3fdb625..92af416b94 100644 --- a/persistence-modules/pom.xml +++ b/persistence-modules/pom.xml @@ -87,7 +87,7 @@ spring-jpa-2 spring-jdbc spring-jooq - + spring-mybatis spring-persistence-simple diff --git a/persistence-modules/spring-mybatis/pom.xml b/persistence-modules/spring-mybatis/pom.xml index 9247d59fe4..1a55e76900 100644 --- a/persistence-modules/spring-mybatis/pom.xml +++ b/persistence-modules/spring-mybatis/pom.xml @@ -84,7 +84,7 @@ - 5.1.8.RELEASE + 5.3.8 2.0.2 3.5.2 diff --git a/persistence-modules/spring-mybatis/src/test/java/com/baeldung/mybatis/spring/ArticleMapperBootIntegrationTest.java b/persistence-modules/spring-mybatis/src/test/java/com/baeldung/mybatis/spring/ArticleMapperBootUnitTest.java similarity index 82% rename from persistence-modules/spring-mybatis/src/test/java/com/baeldung/mybatis/spring/ArticleMapperBootIntegrationTest.java rename to persistence-modules/spring-mybatis/src/test/java/com/baeldung/mybatis/spring/ArticleMapperBootUnitTest.java index 531356ffa2..d9f757aa30 100644 --- a/persistence-modules/spring-mybatis/src/test/java/com/baeldung/mybatis/spring/ArticleMapperBootIntegrationTest.java +++ b/persistence-modules/spring-mybatis/src/test/java/com/baeldung/mybatis/spring/ArticleMapperBootUnitTest.java @@ -8,6 +8,6 @@ import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class) @SpringBootTest @ContextConfiguration(classes = PersistenceAutoConfig.class) -public class ArticleMapperBootIntegrationTest extends ArticleMapperCommonTest { +public class ArticleMapperBootUnitTest extends ArticleMapperCommonUnitTest { } diff --git a/persistence-modules/spring-mybatis/src/test/java/com/baeldung/mybatis/spring/ArticleMapperCommonTest.java b/persistence-modules/spring-mybatis/src/test/java/com/baeldung/mybatis/spring/ArticleMapperCommonUnitTest.java similarity index 94% rename from persistence-modules/spring-mybatis/src/test/java/com/baeldung/mybatis/spring/ArticleMapperCommonTest.java rename to persistence-modules/spring-mybatis/src/test/java/com/baeldung/mybatis/spring/ArticleMapperCommonUnitTest.java index 33071dc0c1..2a93ca3d61 100644 --- a/persistence-modules/spring-mybatis/src/test/java/com/baeldung/mybatis/spring/ArticleMapperCommonTest.java +++ b/persistence-modules/spring-mybatis/src/test/java/com/baeldung/mybatis/spring/ArticleMapperCommonUnitTest.java @@ -5,7 +5,7 @@ import org.springframework.beans.factory.annotation.Autowired; import static org.assertj.core.api.Assertions.assertThat; -class ArticleMapperCommonTest { +class ArticleMapperCommonUnitTest { @Autowired ArticleMapper articleMapper; diff --git a/persistence-modules/spring-mybatis/src/test/java/com/baeldung/mybatis/spring/ArticleMapperIntegrationTest.java b/persistence-modules/spring-mybatis/src/test/java/com/baeldung/mybatis/spring/ArticleMapperUnitTest.java similarity index 80% rename from persistence-modules/spring-mybatis/src/test/java/com/baeldung/mybatis/spring/ArticleMapperIntegrationTest.java rename to persistence-modules/spring-mybatis/src/test/java/com/baeldung/mybatis/spring/ArticleMapperUnitTest.java index 9298714cb2..9c677ecee5 100644 --- a/persistence-modules/spring-mybatis/src/test/java/com/baeldung/mybatis/spring/ArticleMapperIntegrationTest.java +++ b/persistence-modules/spring-mybatis/src/test/java/com/baeldung/mybatis/spring/ArticleMapperUnitTest.java @@ -6,6 +6,6 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = PersistenceConfig.class) -public class ArticleMapperIntegrationTest extends ArticleMapperCommonTest { +public class ArticleMapperUnitTest extends ArticleMapperCommonUnitTest { } diff --git a/persistence-modules/spring-mybatis/src/test/java/com/baeldung/mybatis/spring/ArticleMapperXMLIntegrationTest.java b/persistence-modules/spring-mybatis/src/test/java/com/baeldung/mybatis/spring/ArticleMapperXMLUnitTest.java similarity index 79% rename from persistence-modules/spring-mybatis/src/test/java/com/baeldung/mybatis/spring/ArticleMapperXMLIntegrationTest.java rename to persistence-modules/spring-mybatis/src/test/java/com/baeldung/mybatis/spring/ArticleMapperXMLUnitTest.java index de8974d4ad..96c7c162c5 100644 --- a/persistence-modules/spring-mybatis/src/test/java/com/baeldung/mybatis/spring/ArticleMapperXMLIntegrationTest.java +++ b/persistence-modules/spring-mybatis/src/test/java/com/baeldung/mybatis/spring/ArticleMapperXMLUnitTest.java @@ -6,6 +6,6 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = "classpath:/beans.xml") -public class ArticleMapperXMLIntegrationTest extends ArticleMapperCommonTest { +public class ArticleMapperXMLUnitTest extends ArticleMapperCommonUnitTest { } From 5247181211ca6d8208d8bfeee6adeb5802bc4e6d Mon Sep 17 00:00:00 2001 From: kwoyke Date: Thu, 29 Jul 2021 17:43:29 +0200 Subject: [PATCH 10/14] JAVA-6657: Use mulesoft repo instead of the bedatadriven (#11086) --- libraries-6/pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries-6/pom.xml b/libraries-6/pom.xml index 289597adc9..8d05d2013c 100644 --- a/libraries-6/pom.xml +++ b/libraries-6/pom.xml @@ -123,9 +123,9 @@ - bedatadriven - bedatadriven public repo - https://nexus.bedatadriven.com/content/groups/public/ + mulesoft + Mulesoft Repository + https://repository.mulesoft.org/nexus/content/repositories/public/ From aee4c48bdd335f4eae3738f09cbc32e8be795340 Mon Sep 17 00:00:00 2001 From: Benjamin Caure Date: Thu, 29 Jul 2021 23:14:59 +0200 Subject: [PATCH 11/14] BAEL-4698 Added HTTP Response Body as String with WebClient (#11083) --- httpclient-2/pom.xml | 6 ++++++ .../SpringWebClientUnitTest.java | 17 +++++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 httpclient-2/src/test/java/com/baeldung/httpclient/readresponsebodystring/SpringWebClientUnitTest.java diff --git a/httpclient-2/pom.xml b/httpclient-2/pom.xml index a6b2ede900..85fc1d87e7 100644 --- a/httpclient-2/pom.xml +++ b/httpclient-2/pom.xml @@ -43,6 +43,12 @@ ${spring-boot.version} test + + + org.springframework.boot + spring-boot-starter-webflux + ${spring-boot.version} + diff --git a/httpclient-2/src/test/java/com/baeldung/httpclient/readresponsebodystring/SpringWebClientUnitTest.java b/httpclient-2/src/test/java/com/baeldung/httpclient/readresponsebodystring/SpringWebClientUnitTest.java new file mode 100644 index 0000000000..9bd2f825ad --- /dev/null +++ b/httpclient-2/src/test/java/com/baeldung/httpclient/readresponsebodystring/SpringWebClientUnitTest.java @@ -0,0 +1,17 @@ +package com.baeldung.httpclient.readresponsebodystring; + +import org.junit.Test; +import org.springframework.web.reactive.function.client.WebClient; +import reactor.core.publisher.Mono; + +public class SpringWebClientUnitTest { + public static final String DUMMY_URL = "https://postman-echo.com/get"; + + @Test + public void whenUseWebClientRetrieve_thenCorrect() { + WebClient webClient = WebClient.create(DUMMY_URL); + Mono body = webClient.get().retrieve().bodyToMono(String.class); + String s = body.block(); + System.out.println(s); + } +} From 4f7a1b58d7b8779a59f17eef0137fe105220b640 Mon Sep 17 00:00:00 2001 From: Sagar Verma Date: Sat, 31 Jul 2021 19:44:16 +0530 Subject: [PATCH 12/14] Changes for hosting maven repo on github by sgrverma23 (#11080) Co-authored-by: Sagar Verma --- maven-modules/host-maven-repo-example/pom.xml | 108 ++++++++++++++++++ .../com/baeldung/maven/plugin/MainApp.java | 7 ++ maven-modules/pom.xml | 1 + 3 files changed, 116 insertions(+) create mode 100644 maven-modules/host-maven-repo-example/pom.xml create mode 100644 maven-modules/host-maven-repo-example/src/java/com/baeldung/maven/plugin/MainApp.java diff --git a/maven-modules/host-maven-repo-example/pom.xml b/maven-modules/host-maven-repo-example/pom.xml new file mode 100644 index 0000000000..9434e4a3b3 --- /dev/null +++ b/maven-modules/host-maven-repo-example/pom.xml @@ -0,0 +1,108 @@ + + + 4.0.0 + + com.baeldung.maven.plugin + host-maven-repo-example + 1.0-SNAPSHOT + + https://github.com/sgrverma23/host-maven-repo-example.git + + + github + 8 + 8 + + + + https://github.com/sgrverma23/host-maven-repo-example.git + scm:git:git@github.com:sgrverma23/host-maven-repo-example.git + scm:git:git@github.com:sgrverma23/host-maven-repo-example.git + + + + + + internal.repo + Temporary Staging Repository + file://${project.build.directory}/mvn-artifact + + + + + + org.apache.maven.plugins + maven-source-plugin + 3.1.0 + + + attach-sources + + jar + + + + + + com.github.github + site-maven-plugin + 0.12 + + Maven artifacts for ${project.version} + true + ${project.build.directory} + refs/heads/main + + **/* + + true + host-maven-repo-example + sgrverma23 + github + + + + + site + + deploy + + + + + maven-deploy-plugin + 2.8.2 + + + internal.repo::default::file://${project.build.directory}/mvn-artifact + + + + + org.apache.maven.plugins + maven-source-plugin + 3.1.0 + + + attach-sources + + jar + + + + + + + + + PROJECT-REPO-URL + https://github.com/sgrverma23/host-maven-repo-example/main + + true + always + + + + \ No newline at end of file diff --git a/maven-modules/host-maven-repo-example/src/java/com/baeldung/maven/plugin/MainApp.java b/maven-modules/host-maven-repo-example/src/java/com/baeldung/maven/plugin/MainApp.java new file mode 100644 index 0000000000..521606313c --- /dev/null +++ b/maven-modules/host-maven-repo-example/src/java/com/baeldung/maven/plugin/MainApp.java @@ -0,0 +1,7 @@ +package com.baeldung.maven.plugin; + +public class MainApp { + public static void main(String[] args){ + System.out.println("Maven Repo Add"); + } +} diff --git a/maven-modules/pom.xml b/maven-modules/pom.xml index 0700c6e637..9fc201f46d 100644 --- a/maven-modules/pom.xml +++ b/maven-modules/pom.xml @@ -33,6 +33,7 @@ versions-maven-plugin maven-printing-plugins maven-builder-plugin + host-maven-repo-example plugin-management From d36b90a1d02a1ec3149147296e25b39c6ed8baec Mon Sep 17 00:00:00 2001 From: nrsureshdeveloper <86210937+nrsureshdeveloper@users.noreply.github.com> Date: Sat, 31 Jul 2021 14:40:19 -0500 Subject: [PATCH 13/14] Bael-5023 data cassandra test (#11082) * Example implementation of Hexagonal Architecture pattern * Example Cassandra Springboot application demonstrating the usage of @DataCassandraTest annotation * Example Cassandra Springboot application demonstrating the usage of @DataCassandraTest annotation * temporarily ignoring the unit test * removed ddd-hexagonal-arch module * changed the test to LiveTest added readme * refactored test names * changes per review comments * upgraded Cassandra java core driver versino Co-authored-by: Suresh Raghavan --- persistence-modules/pom.xml | 1 + .../spring-data-cassandra-test/README.md | 16 ++++ .../spring-data-cassandra-test/pom.xml | 77 ++++++++++++++++++ .../test/CassandraDataTestApplication.java | 11 +++ .../test/api/InventoryController.java | 43 ++++++++++ .../test/config/CassandraConfig.java | 24 ++++++ .../data/cassandra/test/domain/Vehicle.java | 17 ++++ .../test/repository/InventoryRepository.java | 26 ++++++ .../test/service/InventoryService.java | 47 +++++++++++ .../src/main/resources/application.yml | 0 .../src/main/resources/logback.xml | 14 ++++ .../service/InventoryServiceLiveTest.java | 71 +++++++++++++++++ .../src/test/resources/bootstrap-test.cql | 20 +++++ .../src/test/resources/compose-test.yml | 79 +++++++++++++++++++ 14 files changed, 446 insertions(+) create mode 100644 persistence-modules/spring-data-cassandra-test/README.md create mode 100644 persistence-modules/spring-data-cassandra-test/pom.xml create mode 100644 persistence-modules/spring-data-cassandra-test/src/main/java/com/baeldung/spring/data/cassandra/test/CassandraDataTestApplication.java create mode 100644 persistence-modules/spring-data-cassandra-test/src/main/java/com/baeldung/spring/data/cassandra/test/api/InventoryController.java create mode 100644 persistence-modules/spring-data-cassandra-test/src/main/java/com/baeldung/spring/data/cassandra/test/config/CassandraConfig.java create mode 100644 persistence-modules/spring-data-cassandra-test/src/main/java/com/baeldung/spring/data/cassandra/test/domain/Vehicle.java create mode 100644 persistence-modules/spring-data-cassandra-test/src/main/java/com/baeldung/spring/data/cassandra/test/repository/InventoryRepository.java create mode 100644 persistence-modules/spring-data-cassandra-test/src/main/java/com/baeldung/spring/data/cassandra/test/service/InventoryService.java create mode 100644 persistence-modules/spring-data-cassandra-test/src/main/resources/application.yml create mode 100644 persistence-modules/spring-data-cassandra-test/src/main/resources/logback.xml create mode 100644 persistence-modules/spring-data-cassandra-test/src/test/java/com/baeldung/spring/data/cassandra/test/service/InventoryServiceLiveTest.java create mode 100644 persistence-modules/spring-data-cassandra-test/src/test/resources/bootstrap-test.cql create mode 100644 persistence-modules/spring-data-cassandra-test/src/test/resources/compose-test.yml diff --git a/persistence-modules/pom.xml b/persistence-modules/pom.xml index 92af416b94..86e496e3f8 100644 --- a/persistence-modules/pom.xml +++ b/persistence-modules/pom.xml @@ -58,6 +58,7 @@ spring-boot-persistence-h2 spring-boot-persistence-mongodb spring-data-cassandra + spring-data-cassandra-test spring-data-cassandra-reactive spring-data-cosmosdb spring-data-couchbase-2 diff --git a/persistence-modules/spring-data-cassandra-test/README.md b/persistence-modules/spring-data-cassandra-test/README.md new file mode 100644 index 0000000000..cfad972cb3 --- /dev/null +++ b/persistence-modules/spring-data-cassandra-test/README.md @@ -0,0 +1,16 @@ +## Spring @DataCassandraTest + +### Build the Project +``` +mvn clean install +``` + +### Prerequisite To Run Test +- Docker Engine must be running on the system +- Docker Compose must be installed + +### Run Tests Directly +``` +mvn test +``` + diff --git a/persistence-modules/spring-data-cassandra-test/pom.xml b/persistence-modules/spring-data-cassandra-test/pom.xml new file mode 100644 index 0000000000..f2cbc834de --- /dev/null +++ b/persistence-modules/spring-data-cassandra-test/pom.xml @@ -0,0 +1,77 @@ + + + 4.0.0 + spring-data-cassandra-test + spring-data-cassandra-test + jar + + + com.baeldung + parent-boot-2 + 0.0.1-SNAPSHOT + ../../parent-boot-2 + + + + 2.5.3 + 1.18.18 + 4.13.0 + 4.3.1.0 + 1.15.3 + 1.5.0 + + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-data-cassandra + ${spring-boot-starter-data-cassandra.version} + + + + com.datastax.oss + java-driver-core + ${java-driver-core.version} + + + + org.projectlombok + lombok + ${lombok.version} + + + + com.datastax.oss + native-protocol + ${native-protocol.version} + + + + org.springframework.boot + spring-boot-starter-test + test + + + + org.testcontainers + testcontainers + ${testcontainers.version} + test + + + + org.testcontainers + cassandra + ${testcontainers.version} + test + + + + \ No newline at end of file diff --git a/persistence-modules/spring-data-cassandra-test/src/main/java/com/baeldung/spring/data/cassandra/test/CassandraDataTestApplication.java b/persistence-modules/spring-data-cassandra-test/src/main/java/com/baeldung/spring/data/cassandra/test/CassandraDataTestApplication.java new file mode 100644 index 0000000000..f0e6ba3c88 --- /dev/null +++ b/persistence-modules/spring-data-cassandra-test/src/main/java/com/baeldung/spring/data/cassandra/test/CassandraDataTestApplication.java @@ -0,0 +1,11 @@ +package com.baeldung.spring.data.cassandra.test; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class CassandraDataTestApplication { + public static void main(String[] args) { + SpringApplication.run(CassandraDataTestApplication.class, args); + } +} diff --git a/persistence-modules/spring-data-cassandra-test/src/main/java/com/baeldung/spring/data/cassandra/test/api/InventoryController.java b/persistence-modules/spring-data-cassandra-test/src/main/java/com/baeldung/spring/data/cassandra/test/api/InventoryController.java new file mode 100644 index 0000000000..6c4dfe055c --- /dev/null +++ b/persistence-modules/spring-data-cassandra-test/src/main/java/com/baeldung/spring/data/cassandra/test/api/InventoryController.java @@ -0,0 +1,43 @@ +package com.baeldung.spring.data.cassandra.test.api; + +import com.baeldung.spring.data.cassandra.test.domain.Vehicle; +import com.baeldung.spring.data.cassandra.test.service.InventoryService; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping("/v1/api/inventory") +public class InventoryController { + private InventoryService inventoryService; + + public InventoryController(InventoryService inventoryService) { + this.inventoryService = inventoryService; + } + + @GetMapping("/vehicles") + public List getVehicles() { + return this.inventoryService.getVehicles(); + } + + @PostMapping("/vehicles") + public void addVehicles(@RequestBody List vehicles) { + this.inventoryService.addVehicles(vehicles); + } + + @PutMapping("/vehicles") + public void updateVehicles(@RequestBody List vehicles) { + this.inventoryService.updateVehicles(vehicles); + } + + @PutMapping("/vehicles/{vin}") + public void updateVehicles(@PathVariable(name = "vin") String vin, + @RequestBody Vehicle vehicles) { + this.inventoryService.updateVehicle(vin, vehicles); + } + + @DeleteMapping("/vehicles/{vin}") + public void removeVehicle(@PathVariable(name = "vin") String vin) { + this.inventoryService.deleteVehicle(vin); + } +} diff --git a/persistence-modules/spring-data-cassandra-test/src/main/java/com/baeldung/spring/data/cassandra/test/config/CassandraConfig.java b/persistence-modules/spring-data-cassandra-test/src/main/java/com/baeldung/spring/data/cassandra/test/config/CassandraConfig.java new file mode 100644 index 0000000000..d362d67a68 --- /dev/null +++ b/persistence-modules/spring-data-cassandra-test/src/main/java/com/baeldung/spring/data/cassandra/test/config/CassandraConfig.java @@ -0,0 +1,24 @@ +package com.baeldung.spring.data.cassandra.test.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.data.cassandra.config.AbstractCassandraConfiguration; + +@Configuration +public class CassandraConfig extends AbstractCassandraConfiguration { + @Override + protected String getKeyspaceName() { + return "inventory"; + } + + @Override + public String getContactPoints() { + return "localhost"; + } + + @Override + protected String getLocalDataCenter() { + return "datacenter1"; + } + + +} diff --git a/persistence-modules/spring-data-cassandra-test/src/main/java/com/baeldung/spring/data/cassandra/test/domain/Vehicle.java b/persistence-modules/spring-data-cassandra-test/src/main/java/com/baeldung/spring/data/cassandra/test/domain/Vehicle.java new file mode 100644 index 0000000000..aa16440c83 --- /dev/null +++ b/persistence-modules/spring-data-cassandra-test/src/main/java/com/baeldung/spring/data/cassandra/test/domain/Vehicle.java @@ -0,0 +1,17 @@ +package com.baeldung.spring.data.cassandra.test.domain; + +import lombok.AllArgsConstructor; +import lombok.Data; +import org.springframework.data.annotation.Id; +import org.springframework.data.cassandra.core.mapping.Table; + +@Data +@Table("vehicles") +@AllArgsConstructor +public class Vehicle { + @Id + private String vin; + private Integer year; + private String make; + private String model; +} diff --git a/persistence-modules/spring-data-cassandra-test/src/main/java/com/baeldung/spring/data/cassandra/test/repository/InventoryRepository.java b/persistence-modules/spring-data-cassandra-test/src/main/java/com/baeldung/spring/data/cassandra/test/repository/InventoryRepository.java new file mode 100644 index 0000000000..c6fe4a91fe --- /dev/null +++ b/persistence-modules/spring-data-cassandra-test/src/main/java/com/baeldung/spring/data/cassandra/test/repository/InventoryRepository.java @@ -0,0 +1,26 @@ +package com.baeldung.spring.data.cassandra.test.repository; + +import com.baeldung.spring.data.cassandra.test.domain.Vehicle; +import com.datastax.oss.driver.api.core.DefaultConsistencyLevel; +import org.springframework.data.cassandra.repository.Consistency; +import org.springframework.data.cassandra.repository.Query; +import org.springframework.data.repository.CrudRepository; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.Optional; + +@Repository +public interface InventoryRepository extends CrudRepository { + + @Query("select * from vehicles") + @Consistency(DefaultConsistencyLevel.LOCAL_QUORUM) + List findAllVehicles(); + + @Consistency(DefaultConsistencyLevel.LOCAL_QUORUM) + Optional findByVin(@Param("vin") String vin); + + @Consistency(DefaultConsistencyLevel.LOCAL_QUORUM) + void deleteByVin(String vin); +} diff --git a/persistence-modules/spring-data-cassandra-test/src/main/java/com/baeldung/spring/data/cassandra/test/service/InventoryService.java b/persistence-modules/spring-data-cassandra-test/src/main/java/com/baeldung/spring/data/cassandra/test/service/InventoryService.java new file mode 100644 index 0000000000..75a198738a --- /dev/null +++ b/persistence-modules/spring-data-cassandra-test/src/main/java/com/baeldung/spring/data/cassandra/test/service/InventoryService.java @@ -0,0 +1,47 @@ +package com.baeldung.spring.data.cassandra.test.service; + +import com.baeldung.spring.data.cassandra.test.domain.Vehicle; +import com.baeldung.spring.data.cassandra.test.repository.InventoryRepository; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class InventoryService { + private final InventoryRepository inventoryRepository; + + public InventoryService(InventoryRepository inventoryRepository) { + this.inventoryRepository = inventoryRepository; + } + + public List getVehicles() { + return this.inventoryRepository.findAllVehicles(); + } + + public Vehicle getVehicle(String vin) { + return this.inventoryRepository.findByVin(vin).orElse(null); + } + + public void addVehicles(List vehicles) { + this.inventoryRepository.saveAll(vehicles); + } + + public void updateVehicles(List vehicles) { + this.inventoryRepository.saveAll(vehicles); + } + + public void updateVehicle(String vin, Vehicle vehicle) { + Vehicle existingVehicle = this.inventoryRepository.findByVin(vin) + .orElseThrow(() -> new RuntimeException("Vehicle not found")); + + existingVehicle.setMake(vehicle.getMake()); + existingVehicle.setYear(vehicle.getYear()); + existingVehicle.setModel(vehicle.getModel()); + + this.inventoryRepository.save(existingVehicle); + } + + public void deleteVehicle(String vin) { + this.inventoryRepository.deleteByVin(vin); + } +} diff --git a/persistence-modules/spring-data-cassandra-test/src/main/resources/application.yml b/persistence-modules/spring-data-cassandra-test/src/main/resources/application.yml new file mode 100644 index 0000000000..e69de29bb2 diff --git a/persistence-modules/spring-data-cassandra-test/src/main/resources/logback.xml b/persistence-modules/spring-data-cassandra-test/src/main/resources/logback.xml new file mode 100644 index 0000000000..612e9cac40 --- /dev/null +++ b/persistence-modules/spring-data-cassandra-test/src/main/resources/logback.xml @@ -0,0 +1,14 @@ + + + + + %d{dd-MM-yyyy HH:mm:ss.SSS} %magenta([%thread]) %highlight(%-5level) %logger{36}.%M - %msg%n + + + + + + + + + \ No newline at end of file diff --git a/persistence-modules/spring-data-cassandra-test/src/test/java/com/baeldung/spring/data/cassandra/test/service/InventoryServiceLiveTest.java b/persistence-modules/spring-data-cassandra-test/src/test/java/com/baeldung/spring/data/cassandra/test/service/InventoryServiceLiveTest.java new file mode 100644 index 0000000000..80958d01d2 --- /dev/null +++ b/persistence-modules/spring-data-cassandra-test/src/test/java/com/baeldung/spring/data/cassandra/test/service/InventoryServiceLiveTest.java @@ -0,0 +1,71 @@ +package com.baeldung.spring.data.cassandra.test.service; + +import com.baeldung.spring.data.cassandra.test.config.CassandraConfig; +import com.baeldung.spring.data.cassandra.test.domain.Vehicle; +import com.baeldung.spring.data.cassandra.test.repository.InventoryRepository; +import org.junit.Before; +import org.junit.ClassRule; +import org.junit.Ignore; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.data.cassandra.DataCassandraTest; +import org.springframework.context.annotation.Import; +import org.springframework.test.context.junit4.SpringRunner; +import org.testcontainers.containers.DockerComposeContainer; + +import java.io.File; +import java.util.Arrays; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +@RunWith(SpringRunner.class) +@DataCassandraTest +@Import(CassandraConfig.class) +public class InventoryServiceLiveTest { + @Autowired + private InventoryRepository repository; + + private InventoryService inventoryService; + + @ClassRule + public static DockerComposeContainer environment = + new DockerComposeContainer(new File("src/test/resources/compose-test.yml")); + + @Before + public void setUp() { + inventoryService = new InventoryService(this.repository); + } + + @Test + public void givenVehiclesInDBInitially_whenRetrieved_thenReturnAllVehiclesFromDB() { + List vehicles = inventoryService.getVehicles(); + assertThat(vehicles).isNotNull(); + assertThat(vehicles).isNotEmpty(); + } + + @Test + public void whenAddMoreVehiclesToDB_thenRetrievalReturnsAllVehicles() { + String vin1 = "ABC123"; + String vin2 = "XYZ123"; + List vehicles = Arrays.asList( + new Vehicle(vin1, 2020, "Toyota", "Camry"), + new Vehicle(vin2, 2019, "Honda", "Prius") + ); + inventoryService.addVehicles(vehicles); + + vehicles = inventoryService.getVehicles(); + assertThat(vehicles).isNotNull(); + assertThat(vehicles).isNotEmpty(); + assertThat(vehicles.size()).isEqualTo(5); + + Vehicle vehicle = inventoryService.getVehicle(vin1); + assertThat(vehicle).isNotNull(); + assertThat(vehicle.getVin()).isEqualTo(vin1); + + vehicle = inventoryService.getVehicle(vin2); + assertThat(vehicle).isNotNull(); + assertThat(vehicle.getVin()).isEqualTo(vin2); + } +} diff --git a/persistence-modules/spring-data-cassandra-test/src/test/resources/bootstrap-test.cql b/persistence-modules/spring-data-cassandra-test/src/test/resources/bootstrap-test.cql new file mode 100644 index 0000000000..6f3821ed83 --- /dev/null +++ b/persistence-modules/spring-data-cassandra-test/src/test/resources/bootstrap-test.cql @@ -0,0 +1,20 @@ +CREATE KEYSPACE inventory +WITH replication = { + 'class' : 'NetworkTopologyStrategy', + 'datacenter1' : 3 +}; + +use inventory; + +CREATE TABLE vehicles ( + vin text PRIMARY KEY, + year int, + make varchar, + model varchar +); + +consistency LOCAL_QUORUM; + +insert into vehicles (vin, year, make, model) values ('387KSJHFK23874GH', 2020, 'Ford', 'F-150'); +insert into vehicles (vin, year, make, model) values ('534HNDHFK23873EF', 2020, 'Honda', 'Accord'); +insert into vehicles (vin, year, make, model) values ('953TOYJEK23853DB', 2020, 'Toyota', 'Camry'); \ No newline at end of file diff --git a/persistence-modules/spring-data-cassandra-test/src/test/resources/compose-test.yml b/persistence-modules/spring-data-cassandra-test/src/test/resources/compose-test.yml new file mode 100644 index 0000000000..50f0f448f6 --- /dev/null +++ b/persistence-modules/spring-data-cassandra-test/src/test/resources/compose-test.yml @@ -0,0 +1,79 @@ +version: '2.1' +services: + cassandra1: + image: cassandra:3.11.10 + hostname: cassandra1 + networks: + - cassandranet + ports: + - "9042:9042" + environment: + CASSANDRA_SEEDS: "cassandra1" + CASSANDRA_DC: datacenter1 + CASSANDRA_RACK: rack1 + CASSANDRA_ENDPOINT_SNITCH: GossipingPropertyFileSnitch + healthcheck: + test: [ "CMD", "cqlsh", "-u cassandra", "-p cassandra" ,"-e describe keyspaces" ] + interval: 15s + timeout: 10s + retries: 10 + + cassandra2: + image: cassandra:3.11.10 + hostname: cassandra2 + networks: + - cassandranet + depends_on: + cassandra1: + condition: service_healthy + ports: + - "9043:9042" + environment: + CASSANDRA_SEEDS: "cassandra1" + CASSANDRA_DC: datacenter1 + CASSANDRA_RACK: rack1 + CASSANDRA_ENDPOINT_SNITCH: GossipingPropertyFileSnitch + healthcheck: + test: [ "CMD", "cqlsh", "-u cassandra", "-p cassandra" ,"-e describe keyspaces" ] + interval: 15s + timeout: 10s + retries: 10 + + cassandra3: + image: cassandra:3.11.10 + hostname: cassandra3 + networks: + - cassandranet + depends_on: + cassandra2: + condition: service_healthy + ports: + - "9044:9042" + environment: + CASSANDRA_SEEDS: "cassandra1" + CASSANDRA_DC: datacenter1 + CASSANDRA_RACK: rack1 + CASSANDRA_ENDPOINT_SNITCH: GossipingPropertyFileSnitch + healthcheck: + test: [ "CMD", "cqlsh", "-u cassandra", "-p cassandra" ,"-e describe keyspaces" ] + interval: 15s + timeout: 10s + retries: 10 + + cassandra-load-keyspace: + image: cassandra:3.11.10 + networks: + - cassandranet + depends_on: + cassandra1: + condition: service_healthy + cassandra2: + condition: service_healthy + cassandra3: + condition: service_healthy + volumes: + - ./bootstrap-test.cql:/schema.cql + command: /bin/bash -c "echo loading cassandra keyspace && cqlsh cassandra1 -f /schema.cql" + +networks: + cassandranet: \ No newline at end of file From b80ed90d5c352fa3ef1a60d5462fb039188a507f Mon Sep 17 00:00:00 2001 From: vunamtien Date: Sun, 1 Aug 2021 13:46:51 +0700 Subject: [PATCH 14/14] [BAEL-5033] How to create Password-protected Zip files and Unzip them in Java (#11066) Co-authored-by: tienvn4 --- libraries-io/pom.xml | 5 ++++ .../java/io/zip4j/CreateSplitZipFile.java | 22 +++++++++++++++ .../java/io/zip4j/ExtractAllFile.java | 12 +++++++++ .../java/io/zip4j/ExtractSingleFile.java | 12 +++++++++ .../com/baeldung/java/io/zip4j/ZipFolder.java | 19 +++++++++++++ .../baeldung/java/io/zip4j/ZipMultiFile.java | 27 +++++++++++++++++++ .../baeldung/java/io/zip4j/ZipSingleFile.java | 21 +++++++++++++++ 7 files changed, 118 insertions(+) create mode 100644 libraries-io/src/main/java/com/baeldung/java/io/zip4j/CreateSplitZipFile.java create mode 100644 libraries-io/src/main/java/com/baeldung/java/io/zip4j/ExtractAllFile.java create mode 100644 libraries-io/src/main/java/com/baeldung/java/io/zip4j/ExtractSingleFile.java create mode 100644 libraries-io/src/main/java/com/baeldung/java/io/zip4j/ZipFolder.java create mode 100644 libraries-io/src/main/java/com/baeldung/java/io/zip4j/ZipMultiFile.java create mode 100644 libraries-io/src/main/java/com/baeldung/java/io/zip4j/ZipSingleFile.java diff --git a/libraries-io/pom.xml b/libraries-io/pom.xml index 2f65fd989b..0cea9ae9ac 100644 --- a/libraries-io/pom.xml +++ b/libraries-io/pom.xml @@ -29,6 +29,11 @@ commons-vfs2 ${vfs.version} + + net.lingala.zip4j + zip4j + 2.9.0 + diff --git a/libraries-io/src/main/java/com/baeldung/java/io/zip4j/CreateSplitZipFile.java b/libraries-io/src/main/java/com/baeldung/java/io/zip4j/CreateSplitZipFile.java new file mode 100644 index 0000000000..cc39bc9dd2 --- /dev/null +++ b/libraries-io/src/main/java/com/baeldung/java/io/zip4j/CreateSplitZipFile.java @@ -0,0 +1,22 @@ +package com.baeldung.java.io.zip4j; + +import net.lingala.zip4j.ZipFile; +import net.lingala.zip4j.exception.ZipException; +import net.lingala.zip4j.model.ZipParameters; +import net.lingala.zip4j.model.enums.EncryptionMethod; + +import java.io.File; +import java.util.Arrays; + +public class CreateSplitZipFile { + + public static void main(String[] args) throws ZipException { + ZipParameters zipParameters = new ZipParameters(); + zipParameters.setEncryptFiles(true); + zipParameters.setEncryptionMethod(EncryptionMethod.AES); + ZipFile zipFile = new ZipFile("compressed.zip", "password".toCharArray()); + int splitLength = 1024 * 1024 * 10; //10MB + zipFile.createSplitZipFile(Arrays.asList(new File("aFile.txt")), zipParameters, true, splitLength); + zipFile.createSplitZipFileFromFolder(new File("/users/folder_to_add"), zipParameters, true, splitLength); + } +} diff --git a/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ExtractAllFile.java b/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ExtractAllFile.java new file mode 100644 index 0000000000..10e7ddd339 --- /dev/null +++ b/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ExtractAllFile.java @@ -0,0 +1,12 @@ +package com.baeldung.java.io.zip4j; + +import net.lingala.zip4j.ZipFile; +import net.lingala.zip4j.exception.ZipException; + +public class ExtractAllFile { + + public static void main(String[] args) throws ZipException { + ZipFile zipFile = new ZipFile("compressed.zip", "password".toCharArray()); + zipFile.extractAll("/destination_directory"); + } +} diff --git a/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ExtractSingleFile.java b/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ExtractSingleFile.java new file mode 100644 index 0000000000..4cf466d02b --- /dev/null +++ b/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ExtractSingleFile.java @@ -0,0 +1,12 @@ +package com.baeldung.java.io.zip4j; + +import net.lingala.zip4j.ZipFile; +import net.lingala.zip4j.exception.ZipException; + +public class ExtractSingleFile { + + public static void main(String[] args) throws ZipException { + ZipFile zipFile = new ZipFile("compressed.zip", "password".toCharArray()); + zipFile.extractFile("aFile.txt", "/destination_directory"); + } +} diff --git a/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ZipFolder.java b/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ZipFolder.java new file mode 100644 index 0000000000..4d89e8665f --- /dev/null +++ b/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ZipFolder.java @@ -0,0 +1,19 @@ +package com.baeldung.java.io.zip4j; + +import net.lingala.zip4j.ZipFile; +import net.lingala.zip4j.exception.ZipException; +import net.lingala.zip4j.model.ZipParameters; +import net.lingala.zip4j.model.enums.EncryptionMethod; + +import java.io.File; + +public class ZipFolder { + + public static void main(String[] args) throws ZipException { + ZipParameters zipParameters = new ZipParameters(); + zipParameters.setEncryptFiles(true); + zipParameters.setEncryptionMethod(EncryptionMethod.AES); + ZipFile zipFile = new ZipFile("compressed.zip", "password".toCharArray()); + zipFile.addFolder(new File("/users/folder_to_add"), zipParameters); + } +} diff --git a/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ZipMultiFile.java b/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ZipMultiFile.java new file mode 100644 index 0000000000..dcb860ef92 --- /dev/null +++ b/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ZipMultiFile.java @@ -0,0 +1,27 @@ +package com.baeldung.java.io.zip4j; + +import net.lingala.zip4j.ZipFile; +import net.lingala.zip4j.exception.ZipException; +import net.lingala.zip4j.model.ZipParameters; +import net.lingala.zip4j.model.enums.EncryptionMethod; + +import java.io.File; +import java.util.Arrays; +import java.util.List; + +public class ZipMultiFile { + + public static void main(String[] args) throws ZipException { + ZipParameters zipParameters = new ZipParameters(); + zipParameters.setEncryptFiles(true); + zipParameters.setEncryptionMethod(EncryptionMethod.AES); + + List filesToAdd = Arrays.asList( + new File("aFile.txt"), + new File("bFile.txt") + ); + + ZipFile zipFile = new ZipFile("compressed.zip", "password".toCharArray()); + zipFile.addFiles(filesToAdd, zipParameters); + } +} diff --git a/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ZipSingleFile.java b/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ZipSingleFile.java new file mode 100644 index 0000000000..a5f600df47 --- /dev/null +++ b/libraries-io/src/main/java/com/baeldung/java/io/zip4j/ZipSingleFile.java @@ -0,0 +1,21 @@ +package com.baeldung.java.io.zip4j; + +import net.lingala.zip4j.ZipFile; +import net.lingala.zip4j.exception.ZipException; +import net.lingala.zip4j.model.ZipParameters; +import net.lingala.zip4j.model.enums.CompressionLevel; +import net.lingala.zip4j.model.enums.EncryptionMethod; + +import java.io.File; + +public class ZipSingleFile { + + public static void main(String[] args) throws ZipException { + ZipParameters zipParameters = new ZipParameters(); + zipParameters.setEncryptFiles(true); + zipParameters.setCompressionLevel(CompressionLevel.HIGHER); + zipParameters.setEncryptionMethod(EncryptionMethod.AES); + ZipFile zipFile = new ZipFile("compressed.zip", "password".toCharArray()); + zipFile.addFile(new File("aFile.txt")); + } +}