diff --git a/algorithms-sorting/src/main/java/com/baeldung/algorithms/radixsort/RadixSort.java b/algorithms-sorting/src/main/java/com/baeldung/algorithms/radixsort/RadixSort.java
index 26c5c9a486..723a2f5a80 100644
--- a/algorithms-sorting/src/main/java/com/baeldung/algorithms/radixsort/RadixSort.java
+++ b/algorithms-sorting/src/main/java/com/baeldung/algorithms/radixsort/RadixSort.java
@@ -29,7 +29,7 @@ public class RadixSort {
frequency[digit]++;
}
- for (int i = 1; i < 10; i++) {
+ for (int i = 1; i < range; i++) {
frequency[i] += frequency[i - 1];
}
diff --git a/algorithms-sorting/src/test/java/com/baeldung/algorithms/radixsort/RadixSortUnitTest.java b/algorithms-sorting/src/test/java/com/baeldung/algorithms/radixsort/RadixSortUnitTest.java
index f1b50f5c99..0f6c751ade 100644
--- a/algorithms-sorting/src/test/java/com/baeldung/algorithms/radixsort/RadixSortUnitTest.java
+++ b/algorithms-sorting/src/test/java/com/baeldung/algorithms/radixsort/RadixSortUnitTest.java
@@ -7,7 +7,7 @@ import org.junit.Test;
public class RadixSortUnitTest {
@Test
- public void givenUnsortedArrayWhenRadixSortThenArraySorted() {
+ public void givenUnsortedArray_whenRadixSort_thenArraySorted() {
int[] numbers = { 387, 468, 134, 123, 68, 221, 769, 37, 7 };
RadixSort.sort(numbers);
int[] numbersSorted = { 7, 37, 68, 123, 134, 221, 387, 468, 769 };
diff --git a/apache-shiro/pom.xml b/apache-shiro/pom.xml
index 644d70b30a..7f0d07589c 100644
--- a/apache-shiro/pom.xml
+++ b/apache-shiro/pom.xml
@@ -38,17 +38,6 @@
jcl-over-slf4j
runtime
-
- org.slf4j
- slf4j-log4j12
- runtime
-
-
- log4j
- log4j
- ${log4j-version}
- runtime
-
@@ -56,4 +45,4 @@
1.2.17
-
\ No newline at end of file
+
diff --git a/apache-shiro/src/main/java/com/baeldung/controllers/ShiroSpringController.java b/apache-shiro/src/main/java/com/baeldung/controllers/ShiroSpringController.java
index e6e72b2579..2713786d71 100644
--- a/apache-shiro/src/main/java/com/baeldung/controllers/ShiroSpringController.java
+++ b/apache-shiro/src/main/java/com/baeldung/controllers/ShiroSpringController.java
@@ -18,22 +18,17 @@ import javax.servlet.http.HttpServletRequest;
@Controller
public class ShiroSpringController {
-
-
@GetMapping("/")
public String index() {
return "index";
}
-
@RequestMapping( value = "/login", method = {RequestMethod.GET, RequestMethod.POST})
public String login(HttpServletRequest req, UserCredentials cred, RedirectAttributes attr) {
if(req.getMethod().equals(RequestMethod.GET.toString())) {
return "login";
- }
- else {
-
+ } else {
Subject subject = SecurityUtils.getSubject();
if(!subject.isAuthenticated()) {
diff --git a/apache-shiro/src/main/java/com/baeldung/shiro/permissions/custom/Main.java b/apache-shiro/src/main/java/com/baeldung/shiro/permissions/custom/Main.java
new file mode 100644
index 0000000000..a373122d6c
--- /dev/null
+++ b/apache-shiro/src/main/java/com/baeldung/shiro/permissions/custom/Main.java
@@ -0,0 +1,68 @@
+package com.baeldung.shiro.permissions.custom;
+
+import com.baeldung.MyCustomRealm;
+import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.authc.*;
+import org.apache.shiro.config.Ini;
+import org.apache.shiro.mgt.DefaultSecurityManager;
+import org.apache.shiro.mgt.SecurityManager;
+import org.apache.shiro.realm.Realm;
+import org.apache.shiro.realm.text.IniRealm;
+import org.apache.shiro.session.Session;
+import org.apache.shiro.subject.Subject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class Main {
+
+ private static final transient Logger log = LoggerFactory.getLogger(Main.class);
+
+ public static void main(String[] args) {
+
+ IniRealm realm = new IniRealm();
+ Ini ini = Ini.fromResourcePath(Main.class.getResource("/com/baeldung/shiro/permissions/custom/shiro.ini").getPath());
+ realm.setIni(ini);
+ realm.setPermissionResolver(new PathPermissionResolver());
+ realm.init();
+ SecurityManager securityManager = new DefaultSecurityManager(realm);
+
+ SecurityUtils.setSecurityManager(securityManager);
+ Subject currentUser = SecurityUtils.getSubject();
+
+ if (!currentUser.isAuthenticated()) {
+ UsernamePasswordToken token = new UsernamePasswordToken("paul.reader", "password4");
+ token.setRememberMe(true);
+ try {
+ currentUser.login(token);
+ } catch (UnknownAccountException uae) {
+ log.error("Username Not Found!", uae);
+ } catch (IncorrectCredentialsException ice) {
+ log.error("Invalid Credentials!", ice);
+ } catch (LockedAccountException lae) {
+ log.error("Your Account is Locked!", lae);
+ } catch (AuthenticationException ae) {
+ log.error("Unexpected Error!", ae);
+ }
+ }
+
+ log.info("User [" + currentUser.getPrincipal() + "] logged in successfully.");
+
+ if (currentUser.hasRole("admin")) {
+ log.info("Welcome Admin");
+ } else if(currentUser.hasRole("editor")) {
+ log.info("Welcome, Editor!");
+ } else if(currentUser.hasRole("author")) {
+ log.info("Welcome, Author");
+ } else {
+ log.info("Welcome, Guest");
+ }
+
+ if(currentUser.isPermitted("/articles/drafts/new-article")) {
+ log.info("You can access articles");
+ } else {
+ log.info("You cannot access articles!");
+ }
+ currentUser.logout();
+ }
+
+}
diff --git a/apache-shiro/src/main/java/com/baeldung/shiro/permissions/custom/PathPermission.java b/apache-shiro/src/main/java/com/baeldung/shiro/permissions/custom/PathPermission.java
new file mode 100644
index 0000000000..f7dfbda06a
--- /dev/null
+++ b/apache-shiro/src/main/java/com/baeldung/shiro/permissions/custom/PathPermission.java
@@ -0,0 +1,22 @@
+package com.baeldung.shiro.permissions.custom;
+
+import org.apache.shiro.authz.Permission;
+
+import java.nio.file.Path;
+
+public class PathPermission implements Permission {
+
+ private final Path path;
+
+ public PathPermission(Path path) {
+ this.path = path;
+ }
+
+ @Override
+ public boolean implies(Permission p) {
+ if(p instanceof PathPermission) {
+ return ((PathPermission) p).path.startsWith(path);
+ }
+ return false;
+ }
+}
diff --git a/apache-shiro/src/main/java/com/baeldung/shiro/permissions/custom/PathPermissionResolver.java b/apache-shiro/src/main/java/com/baeldung/shiro/permissions/custom/PathPermissionResolver.java
new file mode 100644
index 0000000000..4b60d2fbd4
--- /dev/null
+++ b/apache-shiro/src/main/java/com/baeldung/shiro/permissions/custom/PathPermissionResolver.java
@@ -0,0 +1,13 @@
+package com.baeldung.shiro.permissions.custom;
+
+import org.apache.shiro.authz.Permission;
+import org.apache.shiro.authz.permission.PermissionResolver;
+
+import java.nio.file.Paths;
+
+public class PathPermissionResolver implements PermissionResolver {
+ @Override
+ public Permission resolvePermission(String permissionString) {
+ return new PathPermission(Paths.get(permissionString));
+ }
+}
diff --git a/apache-shiro/src/main/resources/com/baeldung/shiro/permissions/custom/shiro.ini b/apache-shiro/src/main/resources/com/baeldung/shiro/permissions/custom/shiro.ini
new file mode 100644
index 0000000000..732ff8b60d
--- /dev/null
+++ b/apache-shiro/src/main/resources/com/baeldung/shiro/permissions/custom/shiro.ini
@@ -0,0 +1,10 @@
+[users]
+jane.admin = password, admin
+john.editor = password2, editor
+zoe.author = password3, author
+paul.reader = password4
+
+[roles]
+admin = /
+editor = /articles
+author = /articles/drafts
diff --git a/core-java-modules/core-java-collections-list-2/src/test/java/com/baeldung/java/listInitialization/ListInitializationUnitTest.java b/core-java-modules/core-java-collections-list-2/src/test/java/com/baeldung/java/listInitialization/ListInitializationUnitTest.java
index b484eecef7..25f39e9a13 100644
--- a/core-java-modules/core-java-collections-list-2/src/test/java/com/baeldung/java/listInitialization/ListInitializationUnitTest.java
+++ b/core-java-modules/core-java-collections-list-2/src/test/java/com/baeldung/java/listInitialization/ListInitializationUnitTest.java
@@ -42,7 +42,7 @@ public class ListInitializationUnitTest {
}
@Test
- public void givenArrayAsList_whenCreated_thenShareReference() {
+ public void givenArraysAsList_whenCreated_thenShareReference() {
String[] array = { "foo", "bar" };
List list = Arrays.asList(array);
array[0] = "baz";
diff --git a/core-java-modules/core-java-concurrency-2/.gitignore b/core-java-modules/core-java-concurrency-2/.gitignore
new file mode 100644
index 0000000000..3de4cc647e
--- /dev/null
+++ b/core-java-modules/core-java-concurrency-2/.gitignore
@@ -0,0 +1,26 @@
+*.class
+
+0.*
+
+#folders#
+/target
+/neoDb*
+/data
+/src/main/webapp/WEB-INF/classes
+*/META-INF/*
+.resourceCache
+
+# Packaged files #
+*.jar
+*.war
+*.ear
+
+# Files generated by integration tests
+*.txt
+backup-pom.xml
+/bin/
+/temp
+
+#IntelliJ specific
+.idea/
+*.iml
\ No newline at end of file
diff --git a/core-java-modules/core-java-concurrency-2/README.md b/core-java-modules/core-java-concurrency-2/README.md
new file mode 100644
index 0000000000..749d174968
--- /dev/null
+++ b/core-java-modules/core-java-concurrency-2/README.md
@@ -0,0 +1,7 @@
+=========
+
+## Core Java Concurrency 2 Examples
+
+### Relevant Articles:
+- [Using a Mutex Object in Java](https://www.baeldung.com/java-mutex)
+
diff --git a/core-java-modules/core-java-concurrency-2/pom.xml b/core-java-modules/core-java-concurrency-2/pom.xml
new file mode 100644
index 0000000000..6b179a29c7
--- /dev/null
+++ b/core-java-modules/core-java-concurrency-2/pom.xml
@@ -0,0 +1,27 @@
+
+ 4.0.0
+ com.baeldung
+ core-java-concurrency-2
+ 0.1.0-SNAPSHOT
+ core-java-concurrency-2
+ jar
+
+
+ com.baeldung
+ parent-java
+ 0.0.1-SNAPSHOT
+ ../../parent-java
+
+
+
+ core-java-concurrency-2
+
+
+ src/main/resources
+ true
+
+
+
+
+
diff --git a/core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/mutex/SequenceGenerator.java b/core-java-modules/core-java-concurrency-2/src/main/java/com/baeldung/concurrent/mutex/SequenceGenerator.java
similarity index 100%
rename from core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/mutex/SequenceGenerator.java
rename to core-java-modules/core-java-concurrency-2/src/main/java/com/baeldung/concurrent/mutex/SequenceGenerator.java
diff --git a/core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/mutex/SequenceGeneratorUsingMonitor.java b/core-java-modules/core-java-concurrency-2/src/main/java/com/baeldung/concurrent/mutex/SequenceGeneratorUsingMonitor.java
similarity index 100%
rename from core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/mutex/SequenceGeneratorUsingMonitor.java
rename to core-java-modules/core-java-concurrency-2/src/main/java/com/baeldung/concurrent/mutex/SequenceGeneratorUsingMonitor.java
diff --git a/core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/mutex/SequenceGeneratorUsingReentrantLock.java b/core-java-modules/core-java-concurrency-2/src/main/java/com/baeldung/concurrent/mutex/SequenceGeneratorUsingReentrantLock.java
similarity index 100%
rename from core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/mutex/SequenceGeneratorUsingReentrantLock.java
rename to core-java-modules/core-java-concurrency-2/src/main/java/com/baeldung/concurrent/mutex/SequenceGeneratorUsingReentrantLock.java
diff --git a/core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/mutex/SequenceGeneratorUsingSemaphore.java b/core-java-modules/core-java-concurrency-2/src/main/java/com/baeldung/concurrent/mutex/SequenceGeneratorUsingSemaphore.java
similarity index 100%
rename from core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/mutex/SequenceGeneratorUsingSemaphore.java
rename to core-java-modules/core-java-concurrency-2/src/main/java/com/baeldung/concurrent/mutex/SequenceGeneratorUsingSemaphore.java
diff --git a/core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/mutex/SequenceGeneratorUsingSynchronizedBlock.java b/core-java-modules/core-java-concurrency-2/src/main/java/com/baeldung/concurrent/mutex/SequenceGeneratorUsingSynchronizedBlock.java
similarity index 100%
rename from core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/mutex/SequenceGeneratorUsingSynchronizedBlock.java
rename to core-java-modules/core-java-concurrency-2/src/main/java/com/baeldung/concurrent/mutex/SequenceGeneratorUsingSynchronizedBlock.java
diff --git a/core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/mutex/SequenceGeneratorUsingSynchronizedMethod.java b/core-java-modules/core-java-concurrency-2/src/main/java/com/baeldung/concurrent/mutex/SequenceGeneratorUsingSynchronizedMethod.java
similarity index 100%
rename from core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/mutex/SequenceGeneratorUsingSynchronizedMethod.java
rename to core-java-modules/core-java-concurrency-2/src/main/java/com/baeldung/concurrent/mutex/SequenceGeneratorUsingSynchronizedMethod.java
diff --git a/core-java-modules/core-java-concurrency-2/src/main/resources/logback.xml b/core-java-modules/core-java-concurrency-2/src/main/resources/logback.xml
new file mode 100644
index 0000000000..56af2d397e
--- /dev/null
+++ b/core-java-modules/core-java-concurrency-2/src/main/resources/logback.xml
@@ -0,0 +1,19 @@
+
+
+
+
+ %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/core-java-modules/core-java-concurrency-basic/src/test/java/com/baeldung/concurrent/mutex/MutexUnitTest.java b/core-java-modules/core-java-concurrency-2/src/test/java/com/baeldung/concurrent/mutex/MutexUnitTest.java
similarity index 100%
rename from core-java-modules/core-java-concurrency-basic/src/test/java/com/baeldung/concurrent/mutex/MutexUnitTest.java
rename to core-java-modules/core-java-concurrency-2/src/test/java/com/baeldung/concurrent/mutex/MutexUnitTest.java
diff --git a/core-java-modules/core-java-concurrency-2/src/test/resources/.gitignore b/core-java-modules/core-java-concurrency-2/src/test/resources/.gitignore
new file mode 100644
index 0000000000..83c05e60c8
--- /dev/null
+++ b/core-java-modules/core-java-concurrency-2/src/test/resources/.gitignore
@@ -0,0 +1,13 @@
+*.class
+
+#folders#
+/target
+/neoDb*
+/data
+/src/main/webapp/WEB-INF/classes
+*/META-INF/*
+
+# Packaged files #
+*.jar
+*.war
+*.ear
\ No newline at end of file
diff --git a/core-java-modules/core-java-io/src/test/java/com/baeldung/file/FileOperationsManualTest.java b/core-java-modules/core-java-io/src/test/java/com/baeldung/readfile/FileOperationsManualTest.java
similarity index 99%
rename from core-java-modules/core-java-io/src/test/java/com/baeldung/file/FileOperationsManualTest.java
rename to core-java-modules/core-java-io/src/test/java/com/baeldung/readfile/FileOperationsManualTest.java
index e781489808..b837c6b4dd 100644
--- a/core-java-modules/core-java-io/src/test/java/com/baeldung/file/FileOperationsManualTest.java
+++ b/core-java-modules/core-java-io/src/test/java/com/baeldung/readfile/FileOperationsManualTest.java
@@ -1,4 +1,4 @@
-package com.baeldung.file;
+package com.baeldung.readfile;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
diff --git a/core-java-modules/core-java-jvm/src/main/java/com/baeldung/systemgc/DemoApplication.java b/core-java-modules/core-java-jvm/src/main/java/com/baeldung/systemgc/DemoApplication.java
new file mode 100644
index 0000000000..8bca55c5f0
--- /dev/null
+++ b/core-java-modules/core-java-jvm/src/main/java/com/baeldung/systemgc/DemoApplication.java
@@ -0,0 +1,33 @@
+package com.baeldung.systemgc;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Scanner;
+
+import static java.util.UUID.randomUUID;
+
+public class DemoApplication {
+
+ private static final Map cache = new HashMap();
+
+ public static void main(String[] args) {
+ Scanner scanner = new Scanner(System.in);
+
+ while (scanner.hasNext()) {
+ final String next = scanner.next();
+ if ("fill".equals(next)) {
+ for (int i = 0; i < 1000000; i++) {
+ cache.put(randomUUID().toString(), randomUUID().toString());
+ }
+ } else if ("invalidate".equals(next)) {
+ cache.clear();
+ } else if ("gc".equals(next)) {
+ System.gc();
+ } else if ("exit".equals(next)) {
+ System.exit(0);
+ } else {
+ System.out.println("unknown");
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/core-java-modules/core-java-lang-oop-2/README.md b/core-java-modules/core-java-lang-oop-2/README.md
index 72c3c6742b..7fee77d4bb 100644
--- a/core-java-modules/core-java-lang-oop-2/README.md
+++ b/core-java-modules/core-java-lang-oop-2/README.md
@@ -7,3 +7,9 @@
- [Cannot Reference “X” Before Supertype Constructor Has Been Called](https://www.baeldung.com/java-cannot-reference-x-before-supertype-constructor-error)
- [Anonymous Classes in Java](https://www.baeldung.com/java-anonymous-classes)
- [Raw Types in Java](https://www.baeldung.com/raw-types-java)
+- [Java ‘private’ Access Modifier](https://www.baeldung.com/java-private-keyword)
+- [Marker Interfaces in Java](https://www.baeldung.com/java-marker-interfaces)
+- [Java equals() and hashCode() Contracts](https://www.baeldung.com/java-equals-hashcode-contracts)
+- [Immutable Objects in Java](http://www.baeldung.com/java-immutable-object)
+- [Inheritance and Composition (Is-a vs Has-a relationship) in Java](http://www.baeldung.com/java-inheritance-composition)
+- [A Guide to Constructors in Java](https://www.baeldung.com/java-constructors)
diff --git a/core-java-modules/core-java-lang-oop-2/pom.xml b/core-java-modules/core-java-lang-oop-2/pom.xml
index b7bd72372b..d27df147b7 100644
--- a/core-java-modules/core-java-lang-oop-2/pom.xml
+++ b/core-java-modules/core-java-lang-oop-2/pom.xml
@@ -15,16 +15,26 @@
-
- com.h2database
- h2
- ${h2.version}
- test
-
+
+
+ org.assertj
+ assertj-core
+ ${assertj-core.version}
+ test
+
+
+ nl.jqno.equalsverifier
+ equalsverifier
+ ${equalsverifier.version}
+ test
+
1.4.199
+
+ 3.10.0
+ 3.0.3
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/basicmethods/PersonName.java b/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/basicmethods/PersonName.java
new file mode 100644
index 0000000000..43bbf0dd62
--- /dev/null
+++ b/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/basicmethods/PersonName.java
@@ -0,0 +1,37 @@
+package com.baeldung.basicmethods;
+
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+public class PersonName {
+
+ public String getName(String firstName, String lastName) throws RuntimeException {
+ return firstName + " " + lastName;
+ }
+
+ public String getName(String firstName, String middleName, String lastName) {
+ if (!middleName.equals("")) {
+ return firstName + " " + lastName;
+ }
+ return firstName + " " + middleName + " " + lastName;
+ }
+
+ public void printFullName(String firstName, String lastName) {
+ System.out.println(firstName + " " + lastName);
+ }
+
+ public void writeName(String name) throws IOException {
+ PrintWriter out = new PrintWriter(new FileWriter("OutFile.txt"));
+ out.println("Name: " + name);
+ out.close();
+ }
+
+ public static String getNameStatic(String firstName, String lastName) {
+ return firstName + " " + lastName;
+ }
+
+ public static void callToStaticMethod() {
+ System.out.println("Name is: " + PersonName.getNameStatic("Alan", "Turing"));
+ }
+}
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/constructors/BankAccount.java b/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/constructors/BankAccount.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/constructors/BankAccount.java
rename to core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/constructors/BankAccount.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/constructors/Transaction.java b/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/constructors/Transaction.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/constructors/Transaction.java
rename to core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/constructors/Transaction.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/equalshashcode/Money.java b/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/equalshashcode/Money.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/equalshashcode/Money.java
rename to core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/equalshashcode/Money.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/equalshashcode/Team.java b/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/equalshashcode/Team.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/equalshashcode/Team.java
rename to core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/equalshashcode/Team.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/equalshashcode/Voucher.java b/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/equalshashcode/Voucher.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/equalshashcode/Voucher.java
rename to core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/equalshashcode/Voucher.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/equalshashcode/WrongTeam.java b/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/equalshashcode/WrongTeam.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/equalshashcode/WrongTeam.java
rename to core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/equalshashcode/WrongTeam.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/equalshashcode/WrongVoucher.java b/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/equalshashcode/WrongVoucher.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/equalshashcode/WrongVoucher.java
rename to core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/equalshashcode/WrongVoucher.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/equalshashcode/entities/ComplexClass.java b/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/equalshashcode/entities/ComplexClass.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/equalshashcode/entities/ComplexClass.java
rename to core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/equalshashcode/entities/ComplexClass.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/equalshashcode/entities/PrimitiveClass.java b/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/equalshashcode/entities/PrimitiveClass.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/equalshashcode/entities/PrimitiveClass.java
rename to core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/equalshashcode/entities/PrimitiveClass.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/equalshashcode/entities/Rectangle.java b/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/equalshashcode/entities/Rectangle.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/equalshashcode/entities/Rectangle.java
rename to core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/equalshashcode/entities/Rectangle.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/equalshashcode/entities/Shape.java b/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/equalshashcode/entities/Shape.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/equalshashcode/entities/Shape.java
rename to core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/equalshashcode/entities/Shape.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/equalshashcode/entities/Square.java b/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/equalshashcode/entities/Square.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/equalshashcode/entities/Square.java
rename to core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/equalshashcode/entities/Square.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/immutableobjects/Currency.java b/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/immutableobjects/Currency.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/immutableobjects/Currency.java
rename to core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/immutableobjects/Currency.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/immutableobjects/Money.java b/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/immutableobjects/Money.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/immutableobjects/Money.java
rename to core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/immutableobjects/Money.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/inheritancecomposition/application/Application.java b/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/inheritancecomposition/application/Application.java
similarity index 67%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/inheritancecomposition/application/Application.java
rename to core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/inheritancecomposition/application/Application.java
index 7761fdce56..fc6db9411c 100644
--- a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/inheritancecomposition/application/Application.java
+++ b/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/inheritancecomposition/application/Application.java
@@ -1,12 +1,6 @@
package com.baeldung.inheritancecomposition.application;
-import com.baeldung.inheritancecomposition.model.Actress;
-import com.baeldung.inheritancecomposition.model.Computer;
-import com.baeldung.inheritancecomposition.model.StandardMemory;
-import com.baeldung.inheritancecomposition.model.Person;
-import com.baeldung.inheritancecomposition.model.StandardProcessor;
-import com.baeldung.inheritancecomposition.model.StandardSoundCard;
-import com.baeldung.inheritancecomposition.model.Waitress;
+import com.baeldung.inheritancecomposition.model.*;
public class Application {
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/inheritancecomposition/model/Actress.java b/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/inheritancecomposition/model/Actress.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/inheritancecomposition/model/Actress.java
rename to core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/inheritancecomposition/model/Actress.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/inheritancecomposition/model/Computer.java b/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/inheritancecomposition/model/Computer.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/inheritancecomposition/model/Computer.java
rename to core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/inheritancecomposition/model/Computer.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/inheritancecomposition/model/Memory.java b/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/inheritancecomposition/model/Memory.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/inheritancecomposition/model/Memory.java
rename to core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/inheritancecomposition/model/Memory.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/inheritancecomposition/model/Person.java b/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/inheritancecomposition/model/Person.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/inheritancecomposition/model/Person.java
rename to core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/inheritancecomposition/model/Person.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/inheritancecomposition/model/Processor.java b/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/inheritancecomposition/model/Processor.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/inheritancecomposition/model/Processor.java
rename to core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/inheritancecomposition/model/Processor.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/inheritancecomposition/model/SoundCard.java b/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/inheritancecomposition/model/SoundCard.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/inheritancecomposition/model/SoundCard.java
rename to core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/inheritancecomposition/model/SoundCard.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/inheritancecomposition/model/StandardMemory.java b/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/inheritancecomposition/model/StandardMemory.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/inheritancecomposition/model/StandardMemory.java
rename to core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/inheritancecomposition/model/StandardMemory.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/inheritancecomposition/model/StandardProcessor.java b/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/inheritancecomposition/model/StandardProcessor.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/inheritancecomposition/model/StandardProcessor.java
rename to core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/inheritancecomposition/model/StandardProcessor.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/inheritancecomposition/model/StandardSoundCard.java b/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/inheritancecomposition/model/StandardSoundCard.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/inheritancecomposition/model/StandardSoundCard.java
rename to core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/inheritancecomposition/model/StandardSoundCard.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/inheritancecomposition/model/Waitress.java b/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/inheritancecomposition/model/Waitress.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/inheritancecomposition/model/Waitress.java
rename to core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/inheritancecomposition/model/Waitress.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/markerinterface/DeletableShape.java b/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/markerinterface/DeletableShape.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/markerinterface/DeletableShape.java
rename to core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/markerinterface/DeletableShape.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/markerinterface/Rectangle.java b/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/markerinterface/Rectangle.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/markerinterface/Rectangle.java
rename to core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/markerinterface/Rectangle.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/markerinterface/Shape.java b/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/markerinterface/Shape.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/markerinterface/Shape.java
rename to core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/markerinterface/Shape.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/markerinterface/ShapeDao.java b/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/markerinterface/ShapeDao.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/markerinterface/ShapeDao.java
rename to core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/markerinterface/ShapeDao.java
diff --git a/core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/constructors/ConstructorUnitTest.java b/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/constructors/ConstructorUnitTest.java
similarity index 96%
rename from core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/constructors/ConstructorUnitTest.java
rename to core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/constructors/ConstructorUnitTest.java
index 66c8520e34..274fe77764 100644
--- a/core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/constructors/ConstructorUnitTest.java
+++ b/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/constructors/ConstructorUnitTest.java
@@ -1,11 +1,9 @@
package com.baeldung.constructors;
-import com.google.common.collect.Comparators;
import org.junit.Test;
import java.time.LocalDateTime;
import java.time.Month;
-import java.util.ArrayList;
import java.util.logging.Logger;
import static org.assertj.core.api.Assertions.*;
diff --git a/core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/equalshashcode/MoneyUnitTest.java b/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/equalshashcode/MoneyUnitTest.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/equalshashcode/MoneyUnitTest.java
rename to core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/equalshashcode/MoneyUnitTest.java
index 60584fdb53..8fc99e0e81 100644
--- a/core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/equalshashcode/MoneyUnitTest.java
+++ b/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/equalshashcode/MoneyUnitTest.java
@@ -1,10 +1,10 @@
package com.baeldung.equalshashcode;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.assertFalse;
-
import org.junit.Test;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
public class MoneyUnitTest {
@Test
diff --git a/core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/equalshashcode/TeamUnitTest.java b/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/equalshashcode/TeamUnitTest.java
similarity index 99%
rename from core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/equalshashcode/TeamUnitTest.java
rename to core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/equalshashcode/TeamUnitTest.java
index a2de408796..7dfc6d47a3 100644
--- a/core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/equalshashcode/TeamUnitTest.java
+++ b/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/equalshashcode/TeamUnitTest.java
@@ -1,14 +1,13 @@
package com.baeldung.equalshashcode;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
+import nl.jqno.equalsverifier.EqualsVerifier;
+import org.junit.Test;
import java.util.HashMap;
import java.util.Map;
-import org.junit.Test;
-
-import nl.jqno.equalsverifier.EqualsVerifier;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
public class TeamUnitTest {
diff --git a/core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/equalshashcode/entities/ComplexClassUnitTest.java b/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/equalshashcode/entities/ComplexClassUnitTest.java
similarity index 94%
rename from core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/equalshashcode/entities/ComplexClassUnitTest.java
rename to core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/equalshashcode/entities/ComplexClassUnitTest.java
index 0cb4ace0ab..05b1e3e0b9 100644
--- a/core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/equalshashcode/entities/ComplexClassUnitTest.java
+++ b/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/equalshashcode/entities/ComplexClassUnitTest.java
@@ -1,13 +1,11 @@
package com.baeldung.equalshashcode.entities;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-
import org.junit.Assert;
import org.junit.Test;
-import com.baeldung.equalshashcode.entities.ComplexClass;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
public class ComplexClassUnitTest {
diff --git a/core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/equalshashcode/entities/PrimitiveClassUnitTest.java b/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/equalshashcode/entities/PrimitiveClassUnitTest.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/equalshashcode/entities/PrimitiveClassUnitTest.java
rename to core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/equalshashcode/entities/PrimitiveClassUnitTest.java
diff --git a/core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/equalshashcode/entities/SquareClassUnitTest.java b/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/equalshashcode/entities/SquareClassUnitTest.java
similarity index 89%
rename from core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/equalshashcode/entities/SquareClassUnitTest.java
rename to core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/equalshashcode/entities/SquareClassUnitTest.java
index a25e8bd486..7722ee7605 100644
--- a/core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/equalshashcode/entities/SquareClassUnitTest.java
+++ b/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/equalshashcode/entities/SquareClassUnitTest.java
@@ -1,11 +1,9 @@
package com.baeldung.equalshashcode.entities;
-import java.awt.Color;
-
import org.junit.Assert;
import org.junit.Test;
-import com.baeldung.equalshashcode.entities.Square;
+import java.awt.*;
public class SquareClassUnitTest {
diff --git a/core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/immutableobjects/ImmutableObjectsUnitTest.java b/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/immutableobjects/ImmutableObjectsUnitTest.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/immutableobjects/ImmutableObjectsUnitTest.java
rename to core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/immutableobjects/ImmutableObjectsUnitTest.java
index 01dfeac050..7b917023ee 100644
--- a/core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/immutableobjects/ImmutableObjectsUnitTest.java
+++ b/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/immutableobjects/ImmutableObjectsUnitTest.java
@@ -1,11 +1,11 @@
package com.baeldung.immutableobjects;
-import static org.junit.Assert.assertEquals;
+import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
-import org.junit.Test;
+import static org.junit.Assert.assertEquals;
public class ImmutableObjectsUnitTest {
diff --git a/core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/inheritancecomposition/test/ActressUnitTest.java b/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/inheritancecomposition/ActressUnitTest.java
similarity index 95%
rename from core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/inheritancecomposition/test/ActressUnitTest.java
rename to core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/inheritancecomposition/ActressUnitTest.java
index 6dbf2302ae..e174ceceae 100644
--- a/core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/inheritancecomposition/test/ActressUnitTest.java
+++ b/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/inheritancecomposition/ActressUnitTest.java
@@ -1,8 +1,9 @@
-package com.baeldung.inheritancecomposition.test;
+package com.baeldung.inheritancecomposition;
import com.baeldung.inheritancecomposition.model.Actress;
import org.junit.BeforeClass;
import org.junit.Test;
+
import static org.assertj.core.api.Assertions.*;
public class ActressUnitTest {
diff --git a/core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/inheritancecomposition/test/CompositionUnitTest.java b/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/inheritancecomposition/CompositionUnitTest.java
similarity index 61%
rename from core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/inheritancecomposition/test/CompositionUnitTest.java
rename to core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/inheritancecomposition/CompositionUnitTest.java
index 987af047a5..7699ecb4a7 100644
--- a/core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/inheritancecomposition/test/CompositionUnitTest.java
+++ b/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/inheritancecomposition/CompositionUnitTest.java
@@ -1,15 +1,12 @@
-package com.baeldung.inheritancecomposition.test;
+package com.baeldung.inheritancecomposition;
-import com.baeldung.inheritancecomposition.model.Computer;
-import com.baeldung.inheritancecomposition.model.Memory;
-import com.baeldung.inheritancecomposition.model.Processor;
-import com.baeldung.inheritancecomposition.model.StandardMemory;
-import com.baeldung.inheritancecomposition.model.StandardProcessor;
-import com.baeldung.inheritancecomposition.model.StandardSoundCard;
-import java.util.Optional;
-import static org.assertj.core.api.Assertions.assertThat;
+import com.baeldung.inheritancecomposition.model.*;
import org.junit.Test;
+import java.util.Optional;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
public class CompositionUnitTest {
diff --git a/core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/inheritancecomposition/test/InheritanceUnitTest.java b/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/inheritancecomposition/InheritanceUnitTest.java
similarity index 93%
rename from core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/inheritancecomposition/test/InheritanceUnitTest.java
rename to core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/inheritancecomposition/InheritanceUnitTest.java
index 3ddbc19607..515e05528b 100644
--- a/core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/inheritancecomposition/test/InheritanceUnitTest.java
+++ b/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/inheritancecomposition/InheritanceUnitTest.java
@@ -1,11 +1,12 @@
-package com.baeldung.inheritancecomposition.test;
+package com.baeldung.inheritancecomposition;
import com.baeldung.inheritancecomposition.model.Actress;
import com.baeldung.inheritancecomposition.model.Person;
import com.baeldung.inheritancecomposition.model.Waitress;
-import static org.assertj.core.api.Assertions.assertThat;
import org.junit.Test;
+import static org.assertj.core.api.Assertions.assertThat;
+
public class InheritanceUnitTest {
@Test
diff --git a/core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/inheritancecomposition/test/PersonUnitTest.java b/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/inheritancecomposition/PersonUnitTest.java
similarity index 94%
rename from core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/inheritancecomposition/test/PersonUnitTest.java
rename to core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/inheritancecomposition/PersonUnitTest.java
index 313070b274..ea0b87f6e6 100644
--- a/core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/inheritancecomposition/test/PersonUnitTest.java
+++ b/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/inheritancecomposition/PersonUnitTest.java
@@ -1,8 +1,9 @@
-package com.baeldung.inheritancecomposition.test;
+package com.baeldung.inheritancecomposition;
import com.baeldung.inheritancecomposition.model.Person;
import org.junit.BeforeClass;
import org.junit.Test;
+
import static org.assertj.core.api.Assertions.*;
public class PersonUnitTest {
diff --git a/core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/inheritancecomposition/test/WaitressUnitTest.java b/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/inheritancecomposition/WaitressUnitTest.java
similarity index 96%
rename from core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/inheritancecomposition/test/WaitressUnitTest.java
rename to core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/inheritancecomposition/WaitressUnitTest.java
index c23fc4d403..816868be13 100644
--- a/core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/inheritancecomposition/test/WaitressUnitTest.java
+++ b/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/inheritancecomposition/WaitressUnitTest.java
@@ -1,8 +1,9 @@
-package com.baeldung.inheritancecomposition.test;
+package com.baeldung.inheritancecomposition;
import com.baeldung.inheritancecomposition.model.Waitress;
import org.junit.BeforeClass;
import org.junit.Test;
+
import static org.assertj.core.api.Assertions.*;
public class WaitressUnitTest {
diff --git a/core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/markerinterface/MarkerInterfaceUnitTest.java b/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/markerinterface/MarkerInterfaceUnitTest.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/markerinterface/MarkerInterfaceUnitTest.java
rename to core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/markerinterface/MarkerInterfaceUnitTest.java
index 81cd51ce51..64e5d8cdb1 100644
--- a/core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/markerinterface/MarkerInterfaceUnitTest.java
+++ b/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/markerinterface/MarkerInterfaceUnitTest.java
@@ -1,9 +1,9 @@
package com.baeldung.markerinterface;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-
import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
public class MarkerInterfaceUnitTest {
@Test
diff --git a/core-java-modules/core-java-lang-oop-3/.gitignore b/core-java-modules/core-java-lang-oop-3/.gitignore
new file mode 100644
index 0000000000..3de4cc647e
--- /dev/null
+++ b/core-java-modules/core-java-lang-oop-3/.gitignore
@@ -0,0 +1,26 @@
+*.class
+
+0.*
+
+#folders#
+/target
+/neoDb*
+/data
+/src/main/webapp/WEB-INF/classes
+*/META-INF/*
+.resourceCache
+
+# Packaged files #
+*.jar
+*.war
+*.ear
+
+# Files generated by integration tests
+*.txt
+backup-pom.xml
+/bin/
+/temp
+
+#IntelliJ specific
+.idea/
+*.iml
\ No newline at end of file
diff --git a/core-java-modules/core-java-lang-oop-3/README.md b/core-java-modules/core-java-lang-oop-3/README.md
new file mode 100644
index 0000000000..57df2c1769
--- /dev/null
+++ b/core-java-modules/core-java-lang-oop-3/README.md
@@ -0,0 +1,11 @@
+=========
+
+## Core Java Lang OOP 3 Cookbooks and Examples
+
+### Relevant Articles:
+- [Pass-By-Value as a Parameter Passing Mechanism in Java](http://www.baeldung.com/java-pass-by-value-or-pass-by-reference)
+- [Access Modifiers in Java](http://www.baeldung.com/java-access-modifiers)
+- [Guide to the super Java Keyword](http://www.baeldung.com/java-super)
+- [Guide to the this Java Keyword](http://www.baeldung.com/java-this)
+- [Java Public Access Modifier](https://www.baeldung.com/java-public-keyword)
+- [Composition, Aggregation and Association in Java](https://www.baeldung.com/java-composition-aggregation-association)
\ No newline at end of file
diff --git a/core-java-modules/core-java-lang-oop-3/pom.xml b/core-java-modules/core-java-lang-oop-3/pom.xml
new file mode 100644
index 0000000000..29807b5bef
--- /dev/null
+++ b/core-java-modules/core-java-lang-oop-3/pom.xml
@@ -0,0 +1,26 @@
+
+ 4.0.0
+ com.baeldung
+ core-java-lang-oop-3
+ 0.1.0-SNAPSHOT
+ core-java-lang-oop-3
+ jar
+
+
+ com.baeldung
+ parent-java
+ 0.0.1-SNAPSHOT
+ ../../parent-java
+
+
+
+
+ com.h2database
+ h2
+ ${h2.version}
+ test
+
+
+
+
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/accessmodifiers/Public.java b/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/accessmodifiers/Public.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/accessmodifiers/Public.java
rename to core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/accessmodifiers/Public.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/accessmodifiers/SubClass.java b/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/accessmodifiers/SubClass.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/accessmodifiers/SubClass.java
rename to core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/accessmodifiers/SubClass.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/accessmodifiers/SuperPublic.java b/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/accessmodifiers/SuperPublic.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/accessmodifiers/SuperPublic.java
rename to core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/accessmodifiers/SuperPublic.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/accessmodifiers/another/AnotherPublic.java b/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/accessmodifiers/another/AnotherPublic.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/accessmodifiers/another/AnotherPublic.java
rename to core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/accessmodifiers/another/AnotherPublic.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/accessmodifiers/another/AnotherSubClass.java b/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/accessmodifiers/another/AnotherSubClass.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/accessmodifiers/another/AnotherSubClass.java
rename to core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/accessmodifiers/another/AnotherSubClass.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/accessmodifiers/another/AnotherSuperPublic.java b/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/accessmodifiers/another/AnotherSuperPublic.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/accessmodifiers/another/AnotherSuperPublic.java
rename to core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/accessmodifiers/another/AnotherSuperPublic.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/accessmodifiers/publicmodifier/ListOfThree.java b/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/accessmodifiers/publicmodifier/ListOfThree.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/accessmodifiers/publicmodifier/ListOfThree.java
rename to core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/accessmodifiers/publicmodifier/ListOfThree.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/accessmodifiers/publicmodifier/SpecialCharacters.java b/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/accessmodifiers/publicmodifier/SpecialCharacters.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/accessmodifiers/publicmodifier/SpecialCharacters.java
rename to core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/accessmodifiers/publicmodifier/SpecialCharacters.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/accessmodifiers/publicmodifier/Student.java b/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/accessmodifiers/publicmodifier/Student.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/accessmodifiers/publicmodifier/Student.java
rename to core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/accessmodifiers/publicmodifier/Student.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/keyword/KeywordDemo.java b/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/keyword/KeywordDemo.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/keyword/KeywordDemo.java
rename to core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/keyword/KeywordDemo.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/keyword/superkeyword/SuperBase.java b/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/keyword/superkeyword/SuperBase.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/keyword/superkeyword/SuperBase.java
rename to core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/keyword/superkeyword/SuperBase.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/keyword/superkeyword/SuperSub.java b/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/keyword/superkeyword/SuperSub.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/keyword/superkeyword/SuperSub.java
rename to core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/keyword/superkeyword/SuperSub.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/keyword/thiskeyword/KeywordUnitTest.java b/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/keyword/thiskeyword/KeywordUnitTest.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/keyword/thiskeyword/KeywordUnitTest.java
rename to core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/keyword/thiskeyword/KeywordUnitTest.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/relationships/aggregation/Car.java b/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/relationships/aggregation/Car.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/relationships/aggregation/Car.java
rename to core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/relationships/aggregation/Car.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/relationships/aggregation/CarWithStaticInnerWheel.java b/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/relationships/aggregation/CarWithStaticInnerWheel.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/relationships/aggregation/CarWithStaticInnerWheel.java
rename to core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/relationships/aggregation/CarWithStaticInnerWheel.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/relationships/aggregation/Wheel.java b/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/relationships/aggregation/Wheel.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/relationships/aggregation/Wheel.java
rename to core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/relationships/aggregation/Wheel.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/relationships/association/Child.java b/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/relationships/association/Child.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/relationships/association/Child.java
rename to core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/relationships/association/Child.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/relationships/association/Mother.java b/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/relationships/association/Mother.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/relationships/association/Mother.java
rename to core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/relationships/association/Mother.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/relationships/composition/Building.java b/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/relationships/composition/Building.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/relationships/composition/Building.java
rename to core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/relationships/composition/Building.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/relationships/composition/BuildingWithDefinitionRoomInMethod.java b/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/relationships/composition/BuildingWithDefinitionRoomInMethod.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/relationships/composition/BuildingWithDefinitionRoomInMethod.java
rename to core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/relationships/composition/BuildingWithDefinitionRoomInMethod.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/relationships/university/Department.java b/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/relationships/university/Department.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/relationships/university/Department.java
rename to core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/relationships/university/Department.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/relationships/university/Professor.java b/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/relationships/university/Professor.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/relationships/university/Professor.java
rename to core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/relationships/university/Professor.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/relationships/university/University.java b/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/relationships/university/University.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/relationships/university/University.java
rename to core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/relationships/university/University.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/accessmodifiers/PublicAccessModifierUnitTest.java b/core-java-modules/core-java-lang-oop-3/src/test/java/com/baeldung/accessmodifiers/PublicAccessModifierUnitTest.java
similarity index 99%
rename from core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/accessmodifiers/PublicAccessModifierUnitTest.java
rename to core-java-modules/core-java-lang-oop-3/src/test/java/com/baeldung/accessmodifiers/PublicAccessModifierUnitTest.java
index a2d891ac93..ed8fb4f45a 100644
--- a/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/accessmodifiers/PublicAccessModifierUnitTest.java
+++ b/core-java-modules/core-java-lang-oop-3/src/test/java/com/baeldung/accessmodifiers/PublicAccessModifierUnitTest.java
@@ -1,14 +1,11 @@
package com.baeldung.accessmodifiers;
+import com.baeldung.accessmodifiers.publicmodifier.ListOfThree;
+import com.baeldung.accessmodifiers.publicmodifier.Student;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInstance;
import org.junit.jupiter.api.TestInstance.Lifecycle;
-import com.baeldung.accessmodifiers.publicmodifier.ListOfThree;
-import com.baeldung.accessmodifiers.publicmodifier.Student;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.jupiter.api.Assertions.assertEquals;
import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.DriverManager;
@@ -17,6 +14,10 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
@TestInstance(Lifecycle.PER_CLASS)
public class PublicAccessModifierUnitTest {
diff --git a/core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/parameterpassing/NonPrimitivesUnitTest.java b/core-java-modules/core-java-lang-oop-3/src/test/java/com/baeldung/parameterpassing/NonPrimitivesUnitTest.java
similarity index 99%
rename from core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/parameterpassing/NonPrimitivesUnitTest.java
rename to core-java-modules/core-java-lang-oop-3/src/test/java/com/baeldung/parameterpassing/NonPrimitivesUnitTest.java
index 62f891d11b..bf0d12936d 100644
--- a/core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/parameterpassing/NonPrimitivesUnitTest.java
+++ b/core-java-modules/core-java-lang-oop-3/src/test/java/com/baeldung/parameterpassing/NonPrimitivesUnitTest.java
@@ -27,7 +27,7 @@ public class NonPrimitivesUnitTest {
b1.num++;
}
}
-
+
class Foo {
public int num;
diff --git a/core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/parameterpassing/PrimitivesUnitTest.java b/core-java-modules/core-java-lang-oop-3/src/test/java/com/baeldung/parameterpassing/PrimitivesUnitTest.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/parameterpassing/PrimitivesUnitTest.java
rename to core-java-modules/core-java-lang-oop-3/src/test/java/com/baeldung/parameterpassing/PrimitivesUnitTest.java
diff --git a/core-java-modules/core-java-lang-oop/README.md b/core-java-modules/core-java-lang-oop/README.md
index c9ee9a9e94..1751da8b3e 100644
--- a/core-java-modules/core-java-lang-oop/README.md
+++ b/core-java-modules/core-java-lang-oop/README.md
@@ -12,13 +12,4 @@
- [Object Type Casting in Java](http://www.baeldung.com/java-type-casting)
- [The “final” Keyword in Java](http://www.baeldung.com/java-final)
- [Type Erasure in Java Explained](http://www.baeldung.com/java-type-erasure)
-- [Pass-By-Value as a Parameter Passing Mechanism in Java](http://www.baeldung.com/java-pass-by-value-or-pass-by-reference)
- [Variable and Method Hiding in Java](http://www.baeldung.com/java-variable-method-hiding)
-- [Access Modifiers in Java](http://www.baeldung.com/java-access-modifiers)
-- [Guide to the super Java Keyword](http://www.baeldung.com/java-super)
-- [Guide to the this Java Keyword](http://www.baeldung.com/java-this)
-- [Immutable Objects in Java](http://www.baeldung.com/java-immutable-object)
-- [Inheritance and Composition (Is-a vs Has-a relationship) in Java](http://www.baeldung.com/java-inheritance-composition)
-- [A Guide to Constructors in Java](https://www.baeldung.com/java-constructors)
-- [Java equals() and hashCode() Contracts](https://www.baeldung.com/java-equals-hashcode-contracts)
-- [Marker Interfaces in Java](https://www.baeldung.com/java-marker-interfaces)
diff --git a/core-java-modules/core-java-lang-oop/pom.xml b/core-java-modules/core-java-lang-oop/pom.xml
index 46003b132b..d86347b51f 100644
--- a/core-java-modules/core-java-lang-oop/pom.xml
+++ b/core-java-modules/core-java-lang-oop/pom.xml
@@ -56,12 +56,6 @@
${assertj-core.version}
test
-
- nl.jqno.equalsverifier
- equalsverifier
- ${equalsverifier.version}
- test
-
@@ -78,7 +72,6 @@
2.8.2
3.10.0
- 3.0.3
diff --git a/core-java-modules/core-java-networking-2/README.md b/core-java-modules/core-java-networking-2/README.md
index 2bc648449a..62dec41356 100644
--- a/core-java-modules/core-java-networking-2/README.md
+++ b/core-java-modules/core-java-networking-2/README.md
@@ -3,3 +3,5 @@
- [Checking if a URL Exists in Java](https://www.baeldung.com/java-check-url-exists)
- [Making a JSON POST Request With HttpURLConnection](https://www.baeldung.com/httpurlconnection-post)
- [Using Curl in Java](https://www.baeldung.com/java-curl)
+- [Do a Simple HTTP Request in Java](http://www.baeldung.com/java-http-request)
+- [Sending Emails with Java](http://www.baeldung.com/java-email)
diff --git a/core-java-modules/core-java-networking-2/pom.xml b/core-java-modules/core-java-networking-2/pom.xml
index 8a26f6ab9f..1e46a9ef7f 100644
--- a/core-java-modules/core-java-networking-2/pom.xml
+++ b/core-java-modules/core-java-networking-2/pom.xml
@@ -12,9 +12,23 @@
+
+ org.apache.commons
+ commons-lang3
+ ${commons-lang3.version}
+
+
+ javax.mail
+ mail
+ ${javax.mail.version}
+
core-java-networking-2
-
+
+
+
+ 1.5.0-b01
+
diff --git a/core-java-modules/core-java-networking/src/main/java/com/baeldung/httprequest/FullResponseBuilder.java b/core-java-modules/core-java-networking-2/src/main/java/com/baeldung/httprequest/FullResponseBuilder.java
similarity index 100%
rename from core-java-modules/core-java-networking/src/main/java/com/baeldung/httprequest/FullResponseBuilder.java
rename to core-java-modules/core-java-networking-2/src/main/java/com/baeldung/httprequest/FullResponseBuilder.java
diff --git a/core-java-modules/core-java-networking/src/main/java/com/baeldung/httprequest/ParameterStringBuilder.java b/core-java-modules/core-java-networking-2/src/main/java/com/baeldung/httprequest/ParameterStringBuilder.java
similarity index 100%
rename from core-java-modules/core-java-networking/src/main/java/com/baeldung/httprequest/ParameterStringBuilder.java
rename to core-java-modules/core-java-networking-2/src/main/java/com/baeldung/httprequest/ParameterStringBuilder.java
diff --git a/core-java-modules/core-java-networking/src/main/java/com/baeldung/mail/EmailService.java b/core-java-modules/core-java-networking-2/src/main/java/com/baeldung/mail/EmailService.java
similarity index 97%
rename from core-java-modules/core-java-networking/src/main/java/com/baeldung/mail/EmailService.java
rename to core-java-modules/core-java-networking-2/src/main/java/com/baeldung/mail/EmailService.java
index e775b9f708..bd2024fdfa 100644
--- a/core-java-modules/core-java-networking/src/main/java/com/baeldung/mail/EmailService.java
+++ b/core-java-modules/core-java-networking-2/src/main/java/com/baeldung/mail/EmailService.java
@@ -1,15 +1,12 @@
package com.baeldung.mail;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.File;
-import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
+import java.io.File;
+import java.util.Properties;
public class EmailService {
diff --git a/core-java-modules/core-java-networking/src/test/java/com/baeldung/httprequest/HttpRequestLiveTest.java b/core-java-modules/core-java-networking-2/src/test/java/com/baeldung/httprequest/HttpRequestLiveTest.java
similarity index 96%
rename from core-java-modules/core-java-networking/src/test/java/com/baeldung/httprequest/HttpRequestLiveTest.java
rename to core-java-modules/core-java-networking-2/src/test/java/com/baeldung/httprequest/HttpRequestLiveTest.java
index 77bf9bc8db..41e0f2d6af 100644
--- a/core-java-modules/core-java-networking/src/test/java/com/baeldung/httprequest/HttpRequestLiveTest.java
+++ b/core-java-modules/core-java-networking-2/src/test/java/com/baeldung/httprequest/HttpRequestLiveTest.java
@@ -3,14 +3,7 @@ package com.baeldung.httprequest;
import org.apache.commons.lang3.StringUtils;
import org.junit.Test;
-import com.baeldung.httprequest.FullResponseBuilder;
-import com.baeldung.httprequest.ParameterStringBuilder;
-
-import java.io.BufferedReader;
-import java.io.DataOutputStream;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.Reader;
+import java.io.*;
import java.net.CookieManager;
import java.net.HttpCookie;
import java.net.HttpURLConnection;
diff --git a/core-java-modules/core-java-networking/README.md b/core-java-modules/core-java-networking/README.md
index 2341520df7..33fc3684a3 100644
--- a/core-java-modules/core-java-networking/README.md
+++ b/core-java-modules/core-java-networking/README.md
@@ -7,12 +7,10 @@
- [Connecting Through Proxy Servers in Core Java](https://www.baeldung.com/java-connect-via-proxy-server)
- [Broadcasting and Multicasting in Java](http://www.baeldung.com/java-broadcast-multicast)
- [A Guide To UDP In Java](http://www.baeldung.com/udp-in-java)
-- [Sending Emails with Java](http://www.baeldung.com/java-email)
- [A Guide To HTTP Cookies In Java](http://www.baeldung.com/cookies-java)
- [A Guide to the Java URL](http://www.baeldung.com/java-url)
- [Working with Network Interfaces in Java](http://www.baeldung.com/java-network-interfaces)
- [A Guide to Java Sockets](http://www.baeldung.com/a-guide-to-java-sockets)
- [Guide to Java URL Encoding/Decoding](http://www.baeldung.com/java-url-encoding-decoding)
-- [Do a Simple HTTP Request in Java](http://www.baeldung.com/java-http-request)
- [Difference between URL and URI](http://www.baeldung.com/java-url-vs-uri)
- [Read an InputStream using the Java Server Socket](https://www.baeldung.com/java-inputstream-server-socket)
diff --git a/core-java-modules/core-java-networking/pom.xml b/core-java-modules/core-java-networking/pom.xml
index e2ee7b2fcc..b5071bf7df 100644
--- a/core-java-modules/core-java-networking/pom.xml
+++ b/core-java-modules/core-java-networking/pom.xml
@@ -14,11 +14,6 @@
-
- javax.mail
- mail
- ${javax.mail.version}
-
commons-io
commons-io
@@ -29,11 +24,6 @@
spring-web
${springframework.spring-web.version}
-
- org.apache.commons
- commons-lang3
- ${commons-lang3.version}
-
@@ -41,7 +31,6 @@
- 1.5.0-b01
4.3.4.RELEASE
diff --git a/core-java-modules/core-java/src/main/java/com/baeldung/jsonposturlconnection/PostJSONWithHttpURLConnection.java b/core-java-modules/core-java/src/main/java/com/baeldung/jsonposturlconnection/PostJSONWithHttpURLConnection.java
new file mode 100644
index 0000000000..b2469ac984
--- /dev/null
+++ b/core-java-modules/core-java/src/main/java/com/baeldung/jsonposturlconnection/PostJSONWithHttpURLConnection.java
@@ -0,0 +1,46 @@
+package com.baeldung.jsonposturlconnection;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+public class PostJSONWithHttpURLConnection {
+
+ public static void main (String []args) throws IOException{
+ //Change the URL with any other publicly accessible POST resource, which accepts JSON request body
+ URL url = new URL ("https://reqres.in/api/users");
+
+ HttpURLConnection con = (HttpURLConnection)url.openConnection();
+ con.setRequestMethod("POST");
+
+ con.setRequestProperty("Content-Type", "application/json; utf-8");
+ con.setRequestProperty("Accept", "application/json");
+
+ con.setDoOutput(true);
+
+ //JSON String need to be constructed for the specific resource.
+ //We may construct complex JSON using any third-party JSON libraries such as jackson or org.json
+ String jsonInputString = "{\"name\": \"Upendra\", \"job\": \"Programmer\"}";
+
+ try(OutputStream os = con.getOutputStream()){
+ byte[] input = jsonInputString.getBytes("utf-8");
+ os.write(input, 0, input.length);
+ }
+
+ int code = con.getResponseCode();
+ System.out.println(code);
+
+ try(BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(), "utf-8"))){
+ StringBuilder response = new StringBuilder();
+ String responseLine = null;
+ while ((responseLine = br.readLine()) != null) {
+ response.append(responseLine.trim());
+ }
+ System.out.println(response.toString());
+ }
+ }
+
+}
diff --git a/guava-io/README.md b/guava-io/README.md
new file mode 100644
index 0000000000..df7775a36d
--- /dev/null
+++ b/guava-io/README.md
@@ -0,0 +1,4 @@
+### Relevant Articles:
+
+- [Using Guava CountingOutputStream](http://www.baeldung.com/guava-counting-outputstream)
+- [Guava – Write to File, Read from File](http://www.baeldung.com/guava-write-to-file-read-from-file)
diff --git a/guava-io/pom.xml b/guava-io/pom.xml
new file mode 100644
index 0000000000..2a66baba80
--- /dev/null
+++ b/guava-io/pom.xml
@@ -0,0 +1,26 @@
+
+ 4.0.0
+ com.baeldung
+ guava-io
+ 0.1.0-SNAPSHOT
+ guava-io
+
+
+ com.baeldung
+ parent-java
+ 0.0.1-SNAPSHOT
+ ../parent-java
+
+
+
+ guava-io
+
+
+ src/main/resources
+ true
+
+
+
+
+
\ No newline at end of file
diff --git a/guava/src/test/java/org/baeldung/guava/GuavaCountingOutputStreamUnitTest.java b/guava-io/src/main/test/java/com/baeldung/guava/GuavaCountingOutputStreamUnitTest.java
similarity index 100%
rename from guava/src/test/java/org/baeldung/guava/GuavaCountingOutputStreamUnitTest.java
rename to guava-io/src/main/test/java/com/baeldung/guava/GuavaCountingOutputStreamUnitTest.java
diff --git a/guava/src/test/java/org/baeldung/guava/GuavaIOUnitTest.java b/guava-io/src/main/test/java/com/baeldung/guava/GuavaIOUnitTest.java
similarity index 100%
rename from guava/src/test/java/org/baeldung/guava/GuavaIOUnitTest.java
rename to guava-io/src/main/test/java/com/baeldung/guava/GuavaIOUnitTest.java
diff --git a/guava/README.md b/guava/README.md
index 60754dbe57..d3bbbf6de5 100644
--- a/guava/README.md
+++ b/guava/README.md
@@ -1,11 +1,8 @@
-=========
-
-## Guava and Hamcrest Cookbooks and Examples
+## Guava Examples
### Relevant Articles:
- [Guava Functional Cookbook](http://www.baeldung.com/guava-functions-predicates)
-- [Guava – Write to File, Read from File](http://www.baeldung.com/guava-write-to-file-read-from-file)
- [Guide to Guava’s Ordering](http://www.baeldung.com/guava-ordering)
- [Guide to Guava’s PreConditions](http://www.baeldung.com/guava-preconditions)
- [Introduction to Guava CacheLoader](http://www.baeldung.com/guava-cacheloader)
@@ -14,7 +11,5 @@
- [Guide to Guava’s Reflection Utilities](http://www.baeldung.com/guava-reflection)
- [Guide to Mathematical Utilities in Guava](http://www.baeldung.com/guava-math)
- [Bloom Filter in Java using Guava](http://www.baeldung.com/guava-bloom-filter)
-- [Using Guava CountingOutputStream](http://www.baeldung.com/guava-counting-outputstream)
-- [Hamcrest Text Matchers](http://www.baeldung.com/hamcrest-text-matchers)
- [Quick Guide to the Guava RateLimiter](http://www.baeldung.com/guava-rate-limiter)
-- [Hamcrest File Matchers](https://www.baeldung.com/hamcrest-file-matchers)
+
diff --git a/guava/pom.xml b/guava/pom.xml
index 34eb7eafa6..3a19901a02 100644
--- a/guava/pom.xml
+++ b/guava/pom.xml
@@ -27,13 +27,7 @@
test
-
-
- org.hamcrest
- java-hamcrest
- ${java-hamcrest.version}
- test
-
+
@@ -52,7 +46,6 @@
3.6.1
- 2.0.0.0
\ No newline at end of file
diff --git a/jackson/src/test/java/com/baeldung/jackson/test/JacksonExceptionsUnitTest.java b/jackson/src/test/java/com/baeldung/jackson/exception/test/JacksonExceptionsUnitTest.java
similarity index 99%
rename from jackson/src/test/java/com/baeldung/jackson/test/JacksonExceptionsUnitTest.java
rename to jackson/src/test/java/com/baeldung/jackson/exception/test/JacksonExceptionsUnitTest.java
index cd2c2925d6..dd0fe8dc56 100644
--- a/jackson/src/test/java/com/baeldung/jackson/test/JacksonExceptionsUnitTest.java
+++ b/jackson/src/test/java/com/baeldung/jackson/exception/test/JacksonExceptionsUnitTest.java
@@ -1,4 +1,4 @@
-package com.baeldung.jackson.test;
+package com.baeldung.jackson.exception.test;
import static org.hamcrest.Matchers.containsString;
import static org.junit.Assert.assertEquals;
diff --git a/java-math/README.md b/java-math/README.md
index 244417d1a5..b0921e55ae 100644
--- a/java-math/README.md
+++ b/java-math/README.md
@@ -9,3 +9,4 @@
- [Calculate Percentage in Java](https://www.baeldung.com/java-calculate-percentage)
- [Convert Latitude and Longitude to a 2D Point in Java](https://www.baeldung.com/java-convert-latitude-longitude)
- [Debugging with Eclipse](https://www.baeldung.com/eclipse-debugging)
+- [Matrix Multiplication in Java](https://www.baeldung.com/java-matrix-multiplication)
diff --git a/java-numbers-2/README.md b/java-numbers-2/README.md
index 52ffc822b9..1d2919aa63 100644
--- a/java-numbers-2/README.md
+++ b/java-numbers-2/README.md
@@ -1,2 +1,10 @@
## Relevant Articles
- [Lossy Conversion in Java](https://www.baeldung.com/java-lossy-conversion)
+- [A Guide to the Java Math Class](https://www.baeldung.com/java-lang-math)
+- [Calculate the Area of a Circle in Java](https://www.baeldung.com/java-calculate-circle-area)
+- [NaN in Java](http://www.baeldung.com/java-not-a-number)
+- [Generating Prime Numbers in Java](http://www.baeldung.com/java-generate-prime-numbers)
+- [Using Math.pow in Java](http://www.baeldung.com/java-math-pow)
+- [Check If a Number Is Prime in Java](http://www.baeldung.com/java-prime-numbers)
+- [Binary Numbers in Java](https://www.baeldung.com/java-binary-numbers)
+- [Finding the Least Common Multiple in Java](https://www.baeldung.com/java-least-common-multiple)
diff --git a/java-numbers/src/main/java/com/baeldung/algorithms/primechecker/BigIntegerPrimeChecker.java b/java-numbers-2/src/main/java/com/baeldung/algorithms/primechecker/BigIntegerPrimeChecker.java
similarity index 100%
rename from java-numbers/src/main/java/com/baeldung/algorithms/primechecker/BigIntegerPrimeChecker.java
rename to java-numbers-2/src/main/java/com/baeldung/algorithms/primechecker/BigIntegerPrimeChecker.java
diff --git a/java-numbers/src/main/java/com/baeldung/algorithms/primechecker/BruteForcePrimeChecker.java b/java-numbers-2/src/main/java/com/baeldung/algorithms/primechecker/BruteForcePrimeChecker.java
similarity index 100%
rename from java-numbers/src/main/java/com/baeldung/algorithms/primechecker/BruteForcePrimeChecker.java
rename to java-numbers-2/src/main/java/com/baeldung/algorithms/primechecker/BruteForcePrimeChecker.java
diff --git a/java-numbers/src/main/java/com/baeldung/algorithms/primechecker/OptimisedPrimeChecker.java b/java-numbers-2/src/main/java/com/baeldung/algorithms/primechecker/OptimisedPrimeChecker.java
similarity index 100%
rename from java-numbers/src/main/java/com/baeldung/algorithms/primechecker/OptimisedPrimeChecker.java
rename to java-numbers-2/src/main/java/com/baeldung/algorithms/primechecker/OptimisedPrimeChecker.java
diff --git a/java-numbers/src/main/java/com/baeldung/algorithms/primechecker/PrimeChecker.java b/java-numbers-2/src/main/java/com/baeldung/algorithms/primechecker/PrimeChecker.java
similarity index 100%
rename from java-numbers/src/main/java/com/baeldung/algorithms/primechecker/PrimeChecker.java
rename to java-numbers-2/src/main/java/com/baeldung/algorithms/primechecker/PrimeChecker.java
diff --git a/java-numbers/src/main/java/com/baeldung/algorithms/primechecker/PrimesPrimeChecker.java b/java-numbers-2/src/main/java/com/baeldung/algorithms/primechecker/PrimesPrimeChecker.java
similarity index 100%
rename from java-numbers/src/main/java/com/baeldung/algorithms/primechecker/PrimesPrimeChecker.java
rename to java-numbers-2/src/main/java/com/baeldung/algorithms/primechecker/PrimesPrimeChecker.java
diff --git a/java-numbers/src/main/java/com/baeldung/area/circle/Circle.java b/java-numbers-2/src/main/java/com/baeldung/area/circle/Circle.java
similarity index 100%
rename from java-numbers/src/main/java/com/baeldung/area/circle/Circle.java
rename to java-numbers-2/src/main/java/com/baeldung/area/circle/Circle.java
diff --git a/java-numbers/src/main/java/com/baeldung/area/circle/CircleArea.java b/java-numbers-2/src/main/java/com/baeldung/area/circle/CircleArea.java
similarity index 100%
rename from java-numbers/src/main/java/com/baeldung/area/circle/CircleArea.java
rename to java-numbers-2/src/main/java/com/baeldung/area/circle/CircleArea.java
diff --git a/java-numbers/src/main/java/com/baeldung/nan/NaNExample.java b/java-numbers-2/src/main/java/com/baeldung/nan/NaNExample.java
similarity index 100%
rename from java-numbers/src/main/java/com/baeldung/nan/NaNExample.java
rename to java-numbers-2/src/main/java/com/baeldung/nan/NaNExample.java
diff --git a/java-numbers/src/main/java/com/baeldung/pow/PowerExample.java b/java-numbers-2/src/main/java/com/baeldung/pow/PowerExample.java
similarity index 100%
rename from java-numbers/src/main/java/com/baeldung/pow/PowerExample.java
rename to java-numbers-2/src/main/java/com/baeldung/pow/PowerExample.java
diff --git a/java-numbers/src/main/java/com/baeldung/prime/PrimeGenerator.java b/java-numbers-2/src/main/java/com/baeldung/prime/PrimeGenerator.java
similarity index 96%
rename from java-numbers/src/main/java/com/baeldung/prime/PrimeGenerator.java
rename to java-numbers-2/src/main/java/com/baeldung/prime/PrimeGenerator.java
index 750807ce77..7511141a84 100644
--- a/java-numbers/src/main/java/com/baeldung/prime/PrimeGenerator.java
+++ b/java-numbers-2/src/main/java/com/baeldung/prime/PrimeGenerator.java
@@ -1,59 +1,59 @@
-package com.baeldung.prime;
-
-import java.util.Arrays;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.stream.Collectors;
-import java.util.stream.IntStream;
-
-public class PrimeGenerator {
- public static List sieveOfEratosthenes(int n) {
- final boolean prime[] = new boolean[n + 1];
- Arrays.fill(prime, true);
-
- for (int p = 2; p * p <= n; p++) {
- if (prime[p]) {
- for (int i = p * 2; i <= n; i += p)
- prime[i] = false;
- }
- }
-
- final List primes = new LinkedList<>();
- for (int i = 2; i <= n; i++) {
- if (prime[i])
- primes.add(i);
- }
- return primes;
- }
-
- public static List primeNumbersBruteForce(int max) {
- final List primeNumbers = new LinkedList();
- for (int i = 2; i <= max; i++) {
- if (isPrimeBruteForce(i)) {
- primeNumbers.add(i);
- }
- }
- return primeNumbers;
- }
-
- private static boolean isPrimeBruteForce(int x) {
- for (int i = 2; i < x; i++) {
- if (x % i == 0) {
- return false;
- }
- }
- return true;
- }
-
- public static List primeNumbersTill(int max) {
- return IntStream.rangeClosed(2, max)
- .filter(x -> isPrime(x))
- .boxed()
- .collect(Collectors.toList());
- }
-
- private static boolean isPrime(int x) {
- return IntStream.rangeClosed(2, (int) (Math.sqrt(x)))
- .allMatch(n -> x % n != 0);
- }
-}
+package com.baeldung.prime;
+
+import java.util.Arrays;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
+
+public class PrimeGenerator {
+ public static List sieveOfEratosthenes(int n) {
+ final boolean prime[] = new boolean[n + 1];
+ Arrays.fill(prime, true);
+
+ for (int p = 2; p * p <= n; p++) {
+ if (prime[p]) {
+ for (int i = p * 2; i <= n; i += p)
+ prime[i] = false;
+ }
+ }
+
+ final List primes = new LinkedList<>();
+ for (int i = 2; i <= n; i++) {
+ if (prime[i])
+ primes.add(i);
+ }
+ return primes;
+ }
+
+ public static List primeNumbersBruteForce(int max) {
+ final List primeNumbers = new LinkedList();
+ for (int i = 2; i <= max; i++) {
+ if (isPrimeBruteForce(i)) {
+ primeNumbers.add(i);
+ }
+ }
+ return primeNumbers;
+ }
+
+ private static boolean isPrimeBruteForce(int x) {
+ for (int i = 2; i < x; i++) {
+ if (x % i == 0) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ public static List primeNumbersTill(int max) {
+ return IntStream.rangeClosed(2, max)
+ .filter(x -> isPrime(x))
+ .boxed()
+ .collect(Collectors.toList());
+ }
+
+ private static boolean isPrime(int x) {
+ return IntStream.rangeClosed(2, (int) (Math.sqrt(x)))
+ .allMatch(n -> x % n != 0);
+ }
+}
diff --git a/java-numbers/src/test/java/com/baeldung/algorithms/primechecker/PrimeCheckerUnitTest.java b/java-numbers-2/src/test/java/com/baeldung/algorithms/primechecker/PrimeCheckerUnitTest.java
similarity index 100%
rename from java-numbers/src/test/java/com/baeldung/algorithms/primechecker/PrimeCheckerUnitTest.java
rename to java-numbers-2/src/test/java/com/baeldung/algorithms/primechecker/PrimeCheckerUnitTest.java
diff --git a/java-numbers/src/test/java/com/baeldung/java/math/MathUnitTest.java b/java-numbers-2/src/test/java/com/baeldung/java/math/MathUnitTest.java
similarity index 100%
rename from java-numbers/src/test/java/com/baeldung/java/math/MathUnitTest.java
rename to java-numbers-2/src/test/java/com/baeldung/java/math/MathUnitTest.java
diff --git a/java-numbers/src/test/java/com/baeldung/prime/PrimeGeneratorUnitTest.java b/java-numbers-2/src/test/java/com/baeldung/prime/PrimeGeneratorUnitTest.java
similarity index 97%
rename from java-numbers/src/test/java/com/baeldung/prime/PrimeGeneratorUnitTest.java
rename to java-numbers-2/src/test/java/com/baeldung/prime/PrimeGeneratorUnitTest.java
index 210bde076b..2509bd73d4 100644
--- a/java-numbers/src/test/java/com/baeldung/prime/PrimeGeneratorUnitTest.java
+++ b/java-numbers-2/src/test/java/com/baeldung/prime/PrimeGeneratorUnitTest.java
@@ -1,28 +1,29 @@
-package com.baeldung.prime;
-
-import java.util.Arrays;
-import java.util.List;
-import org.junit.Test;
-
-import static com.baeldung.prime.PrimeGenerator.*;
-import static org.junit.Assert.*;
-
-public class PrimeGeneratorUnitTest {
- @Test
- public void whenBruteForced_returnsSuccessfully() {
- final List primeNumbers = primeNumbersBruteForce(20);
- assertEquals(Arrays.asList(new Integer[] { 2, 3, 5, 7, 11, 13, 17, 19 }), primeNumbers);
- }
-
- @Test
- public void whenOptimized_returnsSuccessfully() {
- final List primeNumbers = primeNumbersTill(20);
- assertEquals(Arrays.asList(new Integer[] { 2, 3, 5, 7, 11, 13, 17, 19 }), primeNumbers);
- }
-
- @Test
- public void whenSieveOfEratosthenes_returnsSuccessfully() {
- final List primeNumbers = sieveOfEratosthenes(20);
- assertEquals(Arrays.asList(new Integer[] { 2, 3, 5, 7, 11, 13, 17, 19 }), primeNumbers);
- }
-}
+package com.baeldung.prime;
+
+import org.junit.Test;
+
+import java.util.Arrays;
+import java.util.List;
+
+import static com.baeldung.prime.PrimeGenerator.*;
+import static org.junit.Assert.*;
+
+public class PrimeGeneratorUnitTest {
+ @Test
+ public void whenBruteForced_returnsSuccessfully() {
+ final List primeNumbers = primeNumbersBruteForce(20);
+ assertEquals(Arrays.asList(new Integer[] { 2, 3, 5, 7, 11, 13, 17, 19 }), primeNumbers);
+ }
+
+ @Test
+ public void whenOptimized_returnsSuccessfully() {
+ final List primeNumbers = primeNumbersTill(20);
+ assertEquals(Arrays.asList(new Integer[] { 2, 3, 5, 7, 11, 13, 17, 19 }), primeNumbers);
+ }
+
+ @Test
+ public void whenSieveOfEratosthenes_returnsSuccessfully() {
+ final List primeNumbers = sieveOfEratosthenes(20);
+ assertEquals(Arrays.asList(new Integer[] { 2, 3, 5, 7, 11, 13, 17, 19 }), primeNumbers);
+ }
+}
diff --git a/java-numbers/README.md b/java-numbers/README.md
index 2b1131f325..7885232c46 100644
--- a/java-numbers/README.md
+++ b/java-numbers/README.md
@@ -4,11 +4,7 @@
### Relevant Articles:
- [Number of Digits in an Integer in Java](http://www.baeldung.com/java-number-of-digits-in-int)
-- [NaN in Java](http://www.baeldung.com/java-not-a-number)
- [How to Round a Number to N Decimal Places in Java](http://www.baeldung.com/java-round-decimal-number)
-- [Check If a Number Is Prime in Java](http://www.baeldung.com/java-prime-numbers)
-- [Using Math.pow in Java](http://www.baeldung.com/java-math-pow)
-- [Generating Prime Numbers in Java](http://www.baeldung.com/java-generate-prime-numbers)
- [BigDecimal and BigInteger in Java](http://www.baeldung.com/java-bigdecimal-biginteger)
- [Find All Pairs of Numbers in an Array That Add Up to a Given Sum](http://www.baeldung.com/java-algorithm-number-pairs-sum)
- [Java – Random Long, Float, Integer and Double](http://www.baeldung.com/java-generate-random-long-float-integer-double)
@@ -17,5 +13,3 @@
- [Calculating the nth Root in Java](https://www.baeldung.com/java-nth-root)
- [Convert Double to String, Removing Decimal Places](https://www.baeldung.com/java-double-to-string)
- [Changing the Order in a Sum Operation Can Produce Different Results?](https://www.baeldung.com/java-floating-point-sum-order)
-- [Calculate the Area of a Circle in Java](https://www.baeldung.com/java-calculate-circle-area)
-- [A Guide to the Java Math Class](https://www.baeldung.com/java-lang-math)
\ No newline at end of file
diff --git a/java-strings-3/pom.xml b/java-strings-3/pom.xml
index 1e5f757943..4589780c15 100644
--- a/java-strings-3/pom.xml
+++ b/java-strings-3/pom.xml
@@ -68,6 +68,12 @@
${assertj.version}
test
+
+ org.bitbucket.cowwoc
+ diff-match-patch
+ 1.2
+ test
+
diff --git a/java-strings-3/src/test/java/com/baeldung/stringdiff/StringDiffBenchmarkUnitTest.java b/java-strings-3/src/test/java/com/baeldung/stringdiff/StringDiffBenchmarkUnitTest.java
new file mode 100644
index 0000000000..20e87a1f4e
--- /dev/null
+++ b/java-strings-3/src/test/java/com/baeldung/stringdiff/StringDiffBenchmarkUnitTest.java
@@ -0,0 +1,73 @@
+package com.baeldung.stringdiff;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+import org.apache.commons.lang3.RandomStringUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.bitbucket.cowwoc.diffmatchpatch.DiffMatchPatch;
+import org.openjdk.jmh.annotations.Benchmark;
+import org.openjdk.jmh.annotations.BenchmarkMode;
+import org.openjdk.jmh.annotations.Mode;
+import org.openjdk.jmh.annotations.OutputTimeUnit;
+import org.openjdk.jmh.annotations.Scope;
+import org.openjdk.jmh.annotations.State;
+import org.openjdk.jmh.runner.Runner;
+import org.openjdk.jmh.runner.RunnerException;
+import org.openjdk.jmh.runner.options.Options;
+import org.openjdk.jmh.runner.options.OptionsBuilder;
+
+@BenchmarkMode(Mode.AverageTime)
+@OutputTimeUnit(TimeUnit.MILLISECONDS)
+@State(Scope.Benchmark)
+public class StringDiffBenchmarkUnitTest {
+
+ private DiffMatchPatch diffMatchPatch = new DiffMatchPatch();
+
+ private List inputs = randomizeInputs(10000);
+
+ public static void main(String[] args) throws RunnerException {
+ Options opts = new OptionsBuilder().include(".*")
+ .warmupIterations(1)
+ .measurementIterations(50)
+ .jvmArgs("-Xms2g", "-Xmx2g")
+ .shouldDoGC(true)
+ .forks(1)
+ .build();
+
+ new Runner(opts).run();
+ }
+
+ @Benchmark
+ public int diffMatchPatch() {
+ for (int i = 0; i < inputs.size() - 1; i++) {
+ diffMatchPatch.diffMain(inputs.get(i), inputs.get(i + 1), false);
+ }
+ return inputs.size();
+ }
+
+ @Benchmark
+ public int stringUtils() {
+ for (int i = 0; i < inputs.size() - 1; i++) {
+ StringUtils.difference(inputs.get(i), inputs.get(i + 1));
+ }
+ return inputs.size();
+ }
+
+ /**
+ * Creates a list of a given size, containing 30 character long strings,
+ * each starting with a static prefix of 10 characters and followed by
+ * a random 20 character suffix
+ *
+ * @return a {@link List} of randomised strings
+ */
+ private List randomizeInputs(int size) {
+ String staticPart = "ABCDEF1234";
+ List inputs = new ArrayList<>();
+ for (int i = 0; i < size; i++) {
+ inputs.add(staticPart + RandomStringUtils.randomAlphabetic(20));
+ }
+ return inputs;
+ }
+}
diff --git a/java-strings-3/src/test/java/com/baeldung/stringdiff/StringDiffUnitTest.java b/java-strings-3/src/test/java/com/baeldung/stringdiff/StringDiffUnitTest.java
new file mode 100644
index 0000000000..94b7deb64d
--- /dev/null
+++ b/java-strings-3/src/test/java/com/baeldung/stringdiff/StringDiffUnitTest.java
@@ -0,0 +1,39 @@
+package com.baeldung.stringdiff;
+
+import static org.hamcrest.Matchers.containsInAnyOrder;
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertThat;
+
+import org.apache.commons.lang3.StringUtils;
+import org.bitbucket.cowwoc.diffmatchpatch.DiffMatchPatch;
+import org.bitbucket.cowwoc.diffmatchpatch.DiffMatchPatch.Operation;
+import org.junit.Test;
+
+public class StringDiffUnitTest {
+
+ private DiffMatchPatch diffMatchPatch = new DiffMatchPatch();
+
+ // Test samples
+ private final String text1 = "ABCDELMN";
+ private final String text2 = "ABCFGLMN";
+
+ @Test
+ public void givenTwoStrings_whenDiffMatchPatch_thenReturnCorrectDiff() {
+ assertThat(diffMatchPatch.diffMain(text1, text2, false), containsInAnyOrder(
+ new DiffMatchPatch.Diff(Operation.EQUAL, "ABC"),
+ new DiffMatchPatch.Diff(Operation.DELETE, "DE"),
+ new DiffMatchPatch.Diff(Operation.INSERT, "FG"),
+ new DiffMatchPatch.Diff(Operation.EQUAL, "LMN")));
+ assertThat(diffMatchPatch.diffMain(text2, text1, false), containsInAnyOrder(
+ new DiffMatchPatch.Diff(Operation.EQUAL, "ABC"),
+ new DiffMatchPatch.Diff(Operation.INSERT, "DE"),
+ new DiffMatchPatch.Diff(Operation.DELETE, "FG"),
+ new DiffMatchPatch.Diff(Operation.EQUAL, "LMN")));
+ }
+
+ @Test
+ public void givenTwoStrings_whenStringUtilsDifference_thenReturnCorrectDiff() {
+ assertThat(StringUtils.difference(text1, text2), is("FGLMN"));
+ assertThat(StringUtils.difference(text2, text1), is("DELMN"));
+ }
+}
diff --git a/javaxval/src/main/java/org/baeldung/javabeanconstraints/validationgroup/CompleteInfo.java b/javaxval/src/main/java/org/baeldung/javabeanconstraints/validationgroup/CompleteInfo.java
new file mode 100644
index 0000000000..c989ea3a6f
--- /dev/null
+++ b/javaxval/src/main/java/org/baeldung/javabeanconstraints/validationgroup/CompleteInfo.java
@@ -0,0 +1,8 @@
+package org.baeldung.javabeanconstraints.validationgroup;
+
+import javax.validation.GroupSequence;
+
+@GroupSequence({BasicInfo.class, AdvanceInfo.class})
+public interface CompleteInfo {
+
+}
diff --git a/javaxval/src/main/java/org/baeldung/javabeanconstraints/validationgroup/RegistrationForm.java b/javaxval/src/main/java/org/baeldung/javabeanconstraints/validationgroup/RegistrationForm.java
index 154d9821b6..ac8da5c26b 100644
--- a/javaxval/src/main/java/org/baeldung/javabeanconstraints/validationgroup/RegistrationForm.java
+++ b/javaxval/src/main/java/org/baeldung/javabeanconstraints/validationgroup/RegistrationForm.java
@@ -13,6 +13,9 @@ public class RegistrationForm {
@NotBlank(groups = BasicInfo.class)
private String phone;
+ @NotBlank(groups = { BasicInfo.class, AdvanceInfo.class })
+ private String captcha;
+
@NotBlank(groups = AdvanceInfo.class)
private String street;
@NotBlank(groups = AdvanceInfo.class)
@@ -95,5 +98,13 @@ public class RegistrationForm {
public void setPhone(String phone) {
this.phone = phone;
}
+
+ public String getCaptcha() {
+ return captcha;
+ }
+
+ public void setCaptcha(String captcha) {
+ this.captcha = captcha;
+ }
}
diff --git a/javaxval/src/test/java/org/baeldung/javabeanconstraints/validationgroup/RegistrationFormUnitTest.java b/javaxval/src/test/java/org/baeldung/javabeanconstraints/validationgroup/RegistrationFormUnitTest.java
index f8944524f3..bd7034476e 100644
--- a/javaxval/src/test/java/org/baeldung/javabeanconstraints/validationgroup/RegistrationFormUnitTest.java
+++ b/javaxval/src/test/java/org/baeldung/javabeanconstraints/validationgroup/RegistrationFormUnitTest.java
@@ -43,6 +43,61 @@ public class RegistrationFormUnitTest {
});
}
+ @Test
+ public void whenCaptchaIsBlank_thenShouldGiveConstraintViolationsForBasicInfo() {
+ RegistrationForm form = buildRegistrationFormWithBasicInfo();
+ form.setCaptcha("");
+ Set> violations = validator.validate(form, BasicInfo.class);
+ assertThat(violations.size()).isEqualTo(1);
+ violations.forEach(action -> {
+ assertThat(action.getMessage()).isEqualTo("must not be blank");
+ assertThat(action.getPropertyPath().toString()).isEqualTo("captcha");
+ });
+ }
+
+ @Test
+ public void whenCaptchaIsBlank_thenShouldGiveConstraintViolationsForAdvanceInfo() {
+ RegistrationForm form = buildRegistrationFormWithAdvanceInfo();
+ form.setCaptcha("");
+ Set> violations = validator.validate(form, AdvanceInfo.class);
+ assertThat(violations.size()).isEqualTo(1);
+ violations.forEach(action -> {
+ assertThat(action.getMessage()).isEqualTo("must not be blank");
+ assertThat(action.getPropertyPath().toString()).isEqualTo("captcha");
+ });
+ }
+
+ @Test
+ public void whenBasicInfoIsNotComplete_thenShouldGiveConstraintViolationsForBasicInfoOnly() {
+ RegistrationForm form = buildRegistrationFormWithBasicInfo();
+ form.setFirstName("");
+ Set> violations = validator.validate(form, CompleteInfo.class);
+ assertThat(violations.size()).isEqualTo(1);
+ violations.forEach(action -> {
+ assertThat(action.getMessage()).isEqualTo("must not be blank");
+ assertThat(action.getPropertyPath().toString()).isEqualTo("firstName");
+ });
+ }
+
+ @Test
+ public void whenBasicInfoIsCompleteAndAdvanceInfoIsNotComplete_thenShouldGiveConstraintViolationsForAdvanceInfo() {
+ RegistrationForm form = buildRegistrationFormWithBasicAndAdvanceInfo();
+ form.setZipCode("");
+ Set> violations = validator.validate(form, CompleteInfo.class);
+ assertThat(violations.size()).isEqualTo(1);
+ violations.forEach(action -> {
+ assertThat(action.getMessage()).isEqualTo("must not be blank");
+ assertThat(action.getPropertyPath().toString()).isEqualTo("zipCode");
+ });
+ }
+
+ @Test
+ public void whenBasicAndAdvanceInfoIsComplete_thenShouldNotGiveConstraintViolationsWithCompleteInfoValidationGroup() {
+ RegistrationForm form = buildRegistrationFormWithBasicAndAdvanceInfo();
+ Set> violations = validator.validate(form, CompleteInfo.class);
+ assertThat(violations.size()).isEqualTo(0);
+ }
+
@Test
public void whenBasicAndAdvanceInfoIsComplete_thenShouldNotGiveConstraintViolations() {
RegistrationForm form = buildRegistrationFormWithBasicAndAdvanceInfo();
@@ -56,6 +111,7 @@ public class RegistrationFormUnitTest {
form.setLastName("kumar");
form.setEmail("anyemail@yopmail.com");
form.setPhone("12345");
+ form.setCaptcha("Y2HAhU5T");
return form;
}
@@ -70,6 +126,7 @@ public class RegistrationFormUnitTest {
form.setStreet("alexa str.");
form.setZipCode("19923");
form.setHouseNumber("2a");
+ form.setCaptcha("Y2HAhU5T");
return form;
}
diff --git a/libraries-2/README.md b/libraries-2/README.md
index 400aa475d1..7d7fc67fa7 100644
--- a/libraries-2/README.md
+++ b/libraries-2/README.md
@@ -8,6 +8,5 @@
- [A Guide to Crawler4j](https://www.baeldung.com/crawler4j)
- [Decode an OkHttp JSON Response](https://www.baeldung.com/okhttp-json-response)
- [Key Value Store with Chronicle Map](https://www.baeldung.com/java-chronicle-map)
-- [Matrix Multiplication in Java](https://www.baeldung.com/java-matrix-multiplication)
- [Guide to MapDB](https://www.baeldung.com/mapdb)
- [A Guide to Apache Mesos](https://www.baeldung.com/apache-mesos)
diff --git a/libraries-testing/README.md b/libraries-testing/README.md
index 6b25a3b875..b4010056f7 100644
--- a/libraries-testing/README.md
+++ b/libraries-testing/README.md
@@ -5,4 +5,6 @@
- [Serenity BDD and Screenplay](http://www.baeldung.com/serenity-screenplay)
- [Serenity BDD with Spring and JBehave](http://www.baeldung.com/serenity-spring-jbehave)
- [Introduction to Awaitlity](http://www.baeldung.com/awaitlity-testing)
-- [Introduction to Hoverfly in Java](http://www.baeldung.com/hoverfly)
\ No newline at end of file
+- [Introduction to Hoverfly in Java](http://www.baeldung.com/hoverfly)
+- [Hamcrest File Matchers](https://www.baeldung.com/hamcrest-file-matchers)
+- [Hamcrest Text Matchers](http://www.baeldung.com/hamcrest-text-matchers)
\ No newline at end of file
diff --git a/libraries-testing/pom.xml b/libraries-testing/pom.xml
index 8f7a27bbfa..7cc5a8f775 100644
--- a/libraries-testing/pom.xml
+++ b/libraries-testing/pom.xml
@@ -112,6 +112,13 @@
assertj-core
${assertj.version}
+
+
+ org.hamcrest
+ java-hamcrest
+ ${java-hamcrest.version}
+ test
+
net.serenity-bdd
@@ -165,6 +172,7 @@
4.3.8.RELEASE
3.0.3
3.6.2
+ 2.0.0.0
diff --git a/guava/src/test/java/org/baeldung/hamcrest/Animal.java b/libraries-testing/src/test/java/com/baeldung/hamcrest/Animal.java
similarity index 100%
rename from guava/src/test/java/org/baeldung/hamcrest/Animal.java
rename to libraries-testing/src/test/java/com/baeldung/hamcrest/Animal.java
diff --git a/guava/src/test/java/org/baeldung/hamcrest/Cat.java b/libraries-testing/src/test/java/com/baeldung/hamcrest/Cat.java
similarity index 100%
rename from guava/src/test/java/org/baeldung/hamcrest/Cat.java
rename to libraries-testing/src/test/java/com/baeldung/hamcrest/Cat.java
diff --git a/guava/src/test/java/org/baeldung/hamcrest/HamcrestMatcherUnitTest.java b/libraries-testing/src/test/java/com/baeldung/hamcrest/HamcrestMatcherUnitTest.java
similarity index 100%
rename from guava/src/test/java/org/baeldung/hamcrest/HamcrestMatcherUnitTest.java
rename to libraries-testing/src/test/java/com/baeldung/hamcrest/HamcrestMatcherUnitTest.java
diff --git a/guava/src/test/java/org/baeldung/hamcrest/IsPositiveInteger.java b/libraries-testing/src/test/java/com/baeldung/hamcrest/IsPositiveInteger.java
similarity index 100%
rename from guava/src/test/java/org/baeldung/hamcrest/IsPositiveInteger.java
rename to libraries-testing/src/test/java/com/baeldung/hamcrest/IsPositiveInteger.java
diff --git a/guava/src/test/java/org/baeldung/hamcrest/Person.java b/libraries-testing/src/test/java/com/baeldung/hamcrest/Person.java
similarity index 100%
rename from guava/src/test/java/org/baeldung/hamcrest/Person.java
rename to libraries-testing/src/test/java/com/baeldung/hamcrest/Person.java
diff --git a/guava/src/test/java/org/baeldung/hamcrest/README.md b/libraries-testing/src/test/java/com/baeldung/hamcrest/README.md
similarity index 100%
rename from guava/src/test/java/org/baeldung/hamcrest/README.md
rename to libraries-testing/src/test/java/com/baeldung/hamcrest/README.md
diff --git a/linux-bash/loops/src/main/bash/find_directories.sh b/linux-bash/loops/src/main/bash/find_directories.sh
new file mode 100755
index 0000000000..8a9b20294d
--- /dev/null
+++ b/linux-bash/loops/src/main/bash/find_directories.sh
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+find . -maxdepth 1 -mindepth 1 -type d -printf '%f\n'
+
+find . -maxdepth 1 -mindepth 1 -type d | while read dir; do
+ echo "$dir"
+done
+
+find . -maxdepth 1 -type d -exec echo {} \;
\ No newline at end of file
diff --git a/linux-bash/loops/src/main/bash/loop_directories.sh b/linux-bash/loops/src/main/bash/loop_directories.sh
new file mode 100755
index 0000000000..77e661d710
--- /dev/null
+++ b/linux-bash/loops/src/main/bash/loop_directories.sh
@@ -0,0 +1,11 @@
+#!/bin/bash
+
+for dir in */; do
+ echo "$dir"
+done
+
+for file in *; do
+ if [ -d "$file" ]; then
+ echo "$file"
+ fi
+done
\ No newline at end of file
diff --git a/lombok/src/main/java/com/baeldung/lombok/getter/GetterLazy.java b/lombok/src/main/java/com/baeldung/lombok/intro/GetterLazy.java
similarity index 96%
rename from lombok/src/main/java/com/baeldung/lombok/getter/GetterLazy.java
rename to lombok/src/main/java/com/baeldung/lombok/intro/GetterLazy.java
index 604c45be3b..8397aeb759 100644
--- a/lombok/src/main/java/com/baeldung/lombok/getter/GetterLazy.java
+++ b/lombok/src/main/java/com/baeldung/lombok/intro/GetterLazy.java
@@ -1,4 +1,4 @@
-package com.baeldung.lombok.getter;
+package com.baeldung.lombok.intro;
import java.util.HashMap;
import java.util.List;
diff --git a/mapstruct/pom.xml b/mapstruct/pom.xml
index 0493775f85..2613dcf083 100644
--- a/mapstruct/pom.xml
+++ b/mapstruct/pom.xml
@@ -65,7 +65,7 @@
- 1.3.0.Beta2
+ 1.3.0.Final
4.3.4.RELEASE
1.8
1.8
diff --git a/mapstruct/src/main/java/com/baeldung/dto/UserBodyImperialValuesDTO.java b/mapstruct/src/main/java/com/baeldung/dto/UserBodyImperialValuesDTO.java
new file mode 100644
index 0000000000..9817b76bc8
--- /dev/null
+++ b/mapstruct/src/main/java/com/baeldung/dto/UserBodyImperialValuesDTO.java
@@ -0,0 +1,11 @@
+package com.baeldung.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class UserBodyImperialValuesDTO {
+ private int inch;
+ private int pound;
+}
\ No newline at end of file
diff --git a/mapstruct/src/main/java/com/baeldung/entity/UserBodyValues.java b/mapstruct/src/main/java/com/baeldung/entity/UserBodyValues.java
new file mode 100644
index 0000000000..b23463cb93
--- /dev/null
+++ b/mapstruct/src/main/java/com/baeldung/entity/UserBodyValues.java
@@ -0,0 +1,11 @@
+package com.baeldung.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class UserBodyValues {
+ private double kilogram;
+ private double centimeter;
+}
\ No newline at end of file
diff --git a/mapstruct/src/main/java/com/baeldung/mapper/PoundToKilogramMapper.java b/mapstruct/src/main/java/com/baeldung/mapper/PoundToKilogramMapper.java
new file mode 100644
index 0000000000..e75022a5e8
--- /dev/null
+++ b/mapstruct/src/main/java/com/baeldung/mapper/PoundToKilogramMapper.java
@@ -0,0 +1,13 @@
+package com.baeldung.mapper;
+
+import org.mapstruct.Qualifier;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Qualifier
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.CLASS)
+public @interface PoundToKilogramMapper {}
diff --git a/mapstruct/src/main/java/com/baeldung/mapper/UserBodyValuesMapper.java b/mapstruct/src/main/java/com/baeldung/mapper/UserBodyValuesMapper.java
new file mode 100644
index 0000000000..4c992f91e1
--- /dev/null
+++ b/mapstruct/src/main/java/com/baeldung/mapper/UserBodyValuesMapper.java
@@ -0,0 +1,28 @@
+package com.baeldung.mapper;
+
+import com.baeldung.dto.UserBodyImperialValuesDTO;
+import com.baeldung.entity.UserBodyValues;
+import org.mapstruct.Mapper;
+import org.mapstruct.Mapping;
+import org.mapstruct.Named;
+import org.mapstruct.factory.Mappers;
+
+@Mapper
+public interface UserBodyValuesMapper {
+
+ UserBodyValuesMapper INSTANCE = Mappers.getMapper(UserBodyValuesMapper.class);
+
+ @Mapping(source = "pound", target = "kilogram", qualifiedBy = PoundToKilogramMapper.class)
+ @Mapping(source = "inch", target = "centimeter", qualifiedByName = "inchToCentimeter")
+ public UserBodyValues userBodyValuesMapper(UserBodyImperialValuesDTO dto);
+
+ @Named("inchToCentimeter")
+ public static double inchToCentimeter(int inch) {
+ return inch * 2.54;
+ }
+
+ @PoundToKilogramMapper
+ public static double poundToKilogram(int pound) {
+ return pound * 0.4535;
+ }
+}
\ No newline at end of file
diff --git a/mapstruct/src/test/java/com/baeldung/mapper/UserBodyValuesMapperUnitTest.java b/mapstruct/src/test/java/com/baeldung/mapper/UserBodyValuesMapperUnitTest.java
new file mode 100644
index 0000000000..a875d6faf7
--- /dev/null
+++ b/mapstruct/src/test/java/com/baeldung/mapper/UserBodyValuesMapperUnitTest.java
@@ -0,0 +1,47 @@
+package com.baeldung.mapper;
+
+import com.baeldung.dto.UserBodyImperialValuesDTO;
+import com.baeldung.entity.UserBodyValues;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+
+public class UserBodyValuesMapperUnitTest {
+
+ @Test
+ public void givenUserBodyImperialValuesDTOToUserBodyValuesObject_whenMaps_thenCorrect() {
+ UserBodyImperialValuesDTO dto = new UserBodyImperialValuesDTO();
+ dto.setInch(10);
+ dto.setPound(100);
+
+ UserBodyValues obj = UserBodyValuesMapper.INSTANCE.userBodyValuesMapper(dto);
+
+ assertNotNull(obj);
+ assertEquals(25.4, obj.getCentimeter(), 0);
+ assertEquals(45.35, obj.getKilogram(), 0);
+ }
+
+ @Test
+ public void givenUserBodyImperialValuesDTOWithInchToUserBodyValuesObject_whenMaps_thenCorrect() {
+ UserBodyImperialValuesDTO dto = new UserBodyImperialValuesDTO();
+ dto.setInch(10);
+
+ UserBodyValues obj = UserBodyValuesMapper.INSTANCE.userBodyValuesMapper(dto);
+
+ assertNotNull(obj);
+ assertEquals(25.4, obj.getCentimeter(), 0);
+ }
+
+ @Test
+ public void givenUserBodyImperialValuesDTOWithPoundToUserBodyValuesObject_whenMaps_thenCorrect() {
+ UserBodyImperialValuesDTO dto = new UserBodyImperialValuesDTO();
+ dto.setPound(100);
+
+ UserBodyValues obj = UserBodyValuesMapper.INSTANCE.userBodyValuesMapper(dto);
+
+ assertNotNull(obj);
+ assertEquals(45.35, obj.getKilogram(), 0);
+ }
+}
\ No newline at end of file
diff --git a/patterns/design-patterns-2/README.md b/patterns/design-patterns-2/README.md
deleted file mode 100644
index 8e4ef657e1..0000000000
--- a/patterns/design-patterns-2/README.md
+++ /dev/null
@@ -1,5 +0,0 @@
-### Relevant Articles
-
-- [The Mediator Pattern in Java](https://www.baeldung.com/java-mediator-pattern)
-- [Introduction to the Null Object Pattern](https://www.baeldung.com/java-null-object-pattern)
-- [Avoid Check for Null Statement in Java](https://www.baeldung.com/java-avoid-null-check)
diff --git a/patterns/design-patterns-architectural/README.md b/patterns/design-patterns-architectural/README.md
new file mode 100644
index 0000000000..fbe4221752
--- /dev/null
+++ b/patterns/design-patterns-architectural/README.md
@@ -0,0 +1,3 @@
+### Relevant Articles:
+- [Service Locator Pattern](https://www.baeldung.com/java-service-locator-pattern)
+- [The DAO Pattern in Java](https://www.baeldung.com/java-dao-pattern)
diff --git a/patterns/design-patterns/pom.xml b/patterns/design-patterns-architectural/pom.xml
similarity index 78%
rename from patterns/design-patterns/pom.xml
rename to patterns/design-patterns-architectural/pom.xml
index e6bff64f9e..cf99919e7c 100644
--- a/patterns/design-patterns/pom.xml
+++ b/patterns/design-patterns-architectural/pom.xml
@@ -2,9 +2,9 @@
4.0.0
- design-patterns
+ design-patterns-architectural
1.0
- design-patterns
+ design-patterns-architectural
jar
@@ -21,7 +21,8 @@
${assertj-core.version}
test
-
+
+
javax
javaee-api
${javaee.version}
@@ -37,24 +38,15 @@
${mysql-connector.version}
jar
-
- log4j
- log4j
- ${log4j.version}
-
-
- com.googlecode.grep4j
- grep4j
- ${grep4j.version}
-
UTF-8
1.8
1.8
- 1.8.7
+
3.9.1
+
8.0
5.2.16.Final
6.0.6
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/daopattern/application/UserApplication.java b/patterns/design-patterns-architectural/src/main/java/com/baeldung/daopattern/application/UserApplication.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/daopattern/application/UserApplication.java
rename to patterns/design-patterns-architectural/src/main/java/com/baeldung/daopattern/application/UserApplication.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/daopattern/config/JpaEntityManagerFactory.java b/patterns/design-patterns-architectural/src/main/java/com/baeldung/daopattern/config/JpaEntityManagerFactory.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/daopattern/config/JpaEntityManagerFactory.java
rename to patterns/design-patterns-architectural/src/main/java/com/baeldung/daopattern/config/JpaEntityManagerFactory.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/daopattern/config/PersistenceUnitInfoImpl.java b/patterns/design-patterns-architectural/src/main/java/com/baeldung/daopattern/config/PersistenceUnitInfoImpl.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/daopattern/config/PersistenceUnitInfoImpl.java
rename to patterns/design-patterns-architectural/src/main/java/com/baeldung/daopattern/config/PersistenceUnitInfoImpl.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/daopattern/daos/Dao.java b/patterns/design-patterns-architectural/src/main/java/com/baeldung/daopattern/daos/Dao.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/daopattern/daos/Dao.java
rename to patterns/design-patterns-architectural/src/main/java/com/baeldung/daopattern/daos/Dao.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/daopattern/daos/JpaUserDao.java b/patterns/design-patterns-architectural/src/main/java/com/baeldung/daopattern/daos/JpaUserDao.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/daopattern/daos/JpaUserDao.java
rename to patterns/design-patterns-architectural/src/main/java/com/baeldung/daopattern/daos/JpaUserDao.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/daopattern/daos/UserDao.java b/patterns/design-patterns-architectural/src/main/java/com/baeldung/daopattern/daos/UserDao.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/daopattern/daos/UserDao.java
rename to patterns/design-patterns-architectural/src/main/java/com/baeldung/daopattern/daos/UserDao.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/daopattern/entities/User.java b/patterns/design-patterns-architectural/src/main/java/com/baeldung/daopattern/entities/User.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/daopattern/entities/User.java
rename to patterns/design-patterns-architectural/src/main/java/com/baeldung/daopattern/entities/User.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/service/locator/Cache.java b/patterns/design-patterns-architectural/src/main/java/com/baeldung/service/locator/Cache.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/service/locator/Cache.java
rename to patterns/design-patterns-architectural/src/main/java/com/baeldung/service/locator/Cache.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/service/locator/EmailService.java b/patterns/design-patterns-architectural/src/main/java/com/baeldung/service/locator/EmailService.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/service/locator/EmailService.java
rename to patterns/design-patterns-architectural/src/main/java/com/baeldung/service/locator/EmailService.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/service/locator/InitialContext.java b/patterns/design-patterns-architectural/src/main/java/com/baeldung/service/locator/InitialContext.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/service/locator/InitialContext.java
rename to patterns/design-patterns-architectural/src/main/java/com/baeldung/service/locator/InitialContext.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/service/locator/Main.java b/patterns/design-patterns-architectural/src/main/java/com/baeldung/service/locator/Main.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/service/locator/Main.java
rename to patterns/design-patterns-architectural/src/main/java/com/baeldung/service/locator/Main.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/service/locator/MessagingService.java b/patterns/design-patterns-architectural/src/main/java/com/baeldung/service/locator/MessagingService.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/service/locator/MessagingService.java
rename to patterns/design-patterns-architectural/src/main/java/com/baeldung/service/locator/MessagingService.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/service/locator/SMSService.java b/patterns/design-patterns-architectural/src/main/java/com/baeldung/service/locator/SMSService.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/service/locator/SMSService.java
rename to patterns/design-patterns-architectural/src/main/java/com/baeldung/service/locator/SMSService.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/service/locator/ServiceLocator.java b/patterns/design-patterns-architectural/src/main/java/com/baeldung/service/locator/ServiceLocator.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/service/locator/ServiceLocator.java
rename to patterns/design-patterns-architectural/src/main/java/com/baeldung/service/locator/ServiceLocator.java
diff --git a/patterns/design-patterns/src/main/resources/META-INF/persistence.xml b/patterns/design-patterns-architectural/src/main/resources/META-INF/persistence.xml
similarity index 100%
rename from patterns/design-patterns/src/main/resources/META-INF/persistence.xml
rename to patterns/design-patterns-architectural/src/main/resources/META-INF/persistence.xml
diff --git a/patterns/design-patterns/src/test/java/com/baeldung/daopattern/test/UserDaoUnitTest.java b/patterns/design-patterns-architectural/src/test/java/com/baeldung/daopattern/test/UserDaoUnitTest.java
similarity index 100%
rename from patterns/design-patterns/src/test/java/com/baeldung/daopattern/test/UserDaoUnitTest.java
rename to patterns/design-patterns-architectural/src/test/java/com/baeldung/daopattern/test/UserDaoUnitTest.java
diff --git a/patterns/design-patterns-behavioral-2/README.md b/patterns/design-patterns-behavioral-2/README.md
new file mode 100644
index 0000000000..9618a9c458
--- /dev/null
+++ b/patterns/design-patterns-behavioral-2/README.md
@@ -0,0 +1,2 @@
+### Relevant Articles:
+- [Memento Design Pattern in Java](https://www.baeldung.com/java-memento-design-pattern)
diff --git a/patterns/design-patterns-behavioral-2/pom.xml b/patterns/design-patterns-behavioral-2/pom.xml
new file mode 100644
index 0000000000..7e73c0ad19
--- /dev/null
+++ b/patterns/design-patterns-behavioral-2/pom.xml
@@ -0,0 +1,33 @@
+
+
+ 4.0.0
+ design-patterns-behavioral-2
+ 1.0
+ design-patterns-behavioral-2
+ jar
+
+
+ com.baeldung
+ patterns
+ 1.0.0-SNAPSHOT
+ ..
+
+
+
+
+ org.assertj
+ assertj-core
+ ${assertj.version}
+ test
+
+
+
+
+ UTF-8
+ 1.8
+ 1.8
+
+ 3.12.2
+
+
diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/memento/TextEditor.java b/patterns/design-patterns-behavioral-2/src/main/java/com/baeldung/memento/TextEditor.java
similarity index 100%
rename from patterns/design-patterns-2/src/main/java/com/baeldung/memento/TextEditor.java
rename to patterns/design-patterns-behavioral-2/src/main/java/com/baeldung/memento/TextEditor.java
diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/memento/TextWindow.java b/patterns/design-patterns-behavioral-2/src/main/java/com/baeldung/memento/TextWindow.java
similarity index 100%
rename from patterns/design-patterns-2/src/main/java/com/baeldung/memento/TextWindow.java
rename to patterns/design-patterns-behavioral-2/src/main/java/com/baeldung/memento/TextWindow.java
diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/memento/TextWindowState.java b/patterns/design-patterns-behavioral-2/src/main/java/com/baeldung/memento/TextWindowState.java
similarity index 100%
rename from patterns/design-patterns-2/src/main/java/com/baeldung/memento/TextWindowState.java
rename to patterns/design-patterns-behavioral-2/src/main/java/com/baeldung/memento/TextWindowState.java
diff --git a/patterns/design-patterns-2/src/test/java/com/baeldung/memento/TextEditorUnitTest.java b/patterns/design-patterns-behavioral-2/src/test/java/com/baeldung/memento/TextEditorUnitTest.java
similarity index 100%
rename from patterns/design-patterns-2/src/test/java/com/baeldung/memento/TextEditorUnitTest.java
rename to patterns/design-patterns-behavioral-2/src/test/java/com/baeldung/memento/TextEditorUnitTest.java
diff --git a/patterns/design-patterns-behavioral/README.md b/patterns/design-patterns-behavioral/README.md
new file mode 100644
index 0000000000..42514e0ad8
--- /dev/null
+++ b/patterns/design-patterns-behavioral/README.md
@@ -0,0 +1,11 @@
+### Relevant Articles:
+- [The Observer Pattern in Java](https://www.baeldung.com/java-observer-pattern)
+- [Visitor Design Pattern in Java](https://www.baeldung.com/java-visitor-pattern)
+- [Interpreter Design Pattern in Java](https://www.baeldung.com/java-interpreter-pattern)
+- [State Design Pattern in Java](https://www.baeldung.com/java-state-design-pattern)
+- [Implementing the Template Method Pattern in Java](https://www.baeldung.com/java-template-method-pattern)
+- [Chain of Responsibility Design Pattern in Java](https://www.baeldung.com/chain-of-responsibility-pattern)
+- [The Command Pattern in Java](https://www.baeldung.com/java-command-pattern)
+- [The Mediator Pattern in Java](https://www.baeldung.com/java-mediator-pattern)
+- [Introduction to the Null Object Pattern](https://www.baeldung.com/java-null-object-pattern)
+- [Avoid Check for Null Statement in Java](https://www.baeldung.com/java-avoid-null-check)
diff --git a/patterns/design-patterns-2/pom.xml b/patterns/design-patterns-behavioral/pom.xml
similarity index 69%
rename from patterns/design-patterns-2/pom.xml
rename to patterns/design-patterns-behavioral/pom.xml
index f99bb4dc9c..d6603f94ec 100644
--- a/patterns/design-patterns-2/pom.xml
+++ b/patterns/design-patterns-behavioral/pom.xml
@@ -2,9 +2,9 @@
4.0.0
- design-patterns-2
+ design-patterns-behavioral
1.0
- design-patterns-2
+ design-patterns-behavioral
jar
@@ -31,32 +31,21 @@
commons-lang3
${commons-lang3.version}
+
org.assertj
assertj-core
- ${assertj.version}
+ ${assertj-core.version}
test
-
-
- org.inferred
- freebuilder
- ${freebuilder.version}
- true
-
-
- com.google.code.findbugs
- jsr305
- ${javax.annotations.version}
-
+
UTF-8
1.8
1.8
+
16.0.2
- 3.12.2
- 2.4.1
- 3.0.2
+ 3.9.1
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/chainofresponsibility/AuthenticationProcessor.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/chainofresponsibility/AuthenticationProcessor.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/chainofresponsibility/AuthenticationProcessor.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/chainofresponsibility/AuthenticationProcessor.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/chainofresponsibility/AuthenticationProvider.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/chainofresponsibility/AuthenticationProvider.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/chainofresponsibility/AuthenticationProvider.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/chainofresponsibility/AuthenticationProvider.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/chainofresponsibility/OAuthAuthenticationProcessor.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/chainofresponsibility/OAuthAuthenticationProcessor.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/chainofresponsibility/OAuthAuthenticationProcessor.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/chainofresponsibility/OAuthAuthenticationProcessor.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/chainofresponsibility/OAuthTokenProvider.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/chainofresponsibility/OAuthTokenProvider.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/chainofresponsibility/OAuthTokenProvider.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/chainofresponsibility/OAuthTokenProvider.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/chainofresponsibility/SamlAuthenticationProvider.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/chainofresponsibility/SamlAuthenticationProvider.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/chainofresponsibility/SamlAuthenticationProvider.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/chainofresponsibility/SamlAuthenticationProvider.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/chainofresponsibility/UsernamePasswordAuthenticationProcessor.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/chainofresponsibility/UsernamePasswordAuthenticationProcessor.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/chainofresponsibility/UsernamePasswordAuthenticationProcessor.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/chainofresponsibility/UsernamePasswordAuthenticationProcessor.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/chainofresponsibility/UsernamePasswordProvider.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/chainofresponsibility/UsernamePasswordProvider.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/chainofresponsibility/UsernamePasswordProvider.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/chainofresponsibility/UsernamePasswordProvider.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/command/client/TextFileApplication.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/command/client/TextFileApplication.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/command/client/TextFileApplication.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/command/client/TextFileApplication.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/command/command/OpenTextFileOperation.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/command/command/OpenTextFileOperation.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/command/command/OpenTextFileOperation.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/command/command/OpenTextFileOperation.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/command/command/SaveTextFileOperation.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/command/command/SaveTextFileOperation.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/command/command/SaveTextFileOperation.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/command/command/SaveTextFileOperation.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/command/command/TextFileOperation.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/command/command/TextFileOperation.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/command/command/TextFileOperation.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/command/command/TextFileOperation.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/command/invoker/TextFileOperationExecutor.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/command/invoker/TextFileOperationExecutor.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/command/invoker/TextFileOperationExecutor.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/command/invoker/TextFileOperationExecutor.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/command/receiver/TextFile.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/command/receiver/TextFile.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/command/receiver/TextFile.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/command/receiver/TextFile.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/interpreter/Context.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/interpreter/Context.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/interpreter/Context.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/interpreter/Context.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/interpreter/Expression.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/interpreter/Expression.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/interpreter/Expression.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/interpreter/Expression.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/interpreter/From.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/interpreter/From.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/interpreter/From.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/interpreter/From.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/interpreter/InterpreterDemo.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/interpreter/InterpreterDemo.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/interpreter/InterpreterDemo.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/interpreter/InterpreterDemo.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/interpreter/Row.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/interpreter/Row.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/interpreter/Row.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/interpreter/Row.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/interpreter/Select.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/interpreter/Select.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/interpreter/Select.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/interpreter/Select.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/interpreter/Where.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/interpreter/Where.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/interpreter/Where.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/interpreter/Where.java
diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/mediator/Button.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/mediator/Button.java
similarity index 100%
rename from patterns/design-patterns-2/src/main/java/com/baeldung/mediator/Button.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/mediator/Button.java
diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/mediator/Fan.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/mediator/Fan.java
similarity index 100%
rename from patterns/design-patterns-2/src/main/java/com/baeldung/mediator/Fan.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/mediator/Fan.java
diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/mediator/Mediator.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/mediator/Mediator.java
similarity index 100%
rename from patterns/design-patterns-2/src/main/java/com/baeldung/mediator/Mediator.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/mediator/Mediator.java
diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/mediator/PowerSupplier.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/mediator/PowerSupplier.java
similarity index 100%
rename from patterns/design-patterns-2/src/main/java/com/baeldung/mediator/PowerSupplier.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/mediator/PowerSupplier.java
diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/nullobject/JmsRouter.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/nullobject/JmsRouter.java
similarity index 100%
rename from patterns/design-patterns-2/src/main/java/com/baeldung/nullobject/JmsRouter.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/nullobject/JmsRouter.java
diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/nullobject/Message.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/nullobject/Message.java
similarity index 100%
rename from patterns/design-patterns-2/src/main/java/com/baeldung/nullobject/Message.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/nullobject/Message.java
diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/nullobject/NullRouter.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/nullobject/NullRouter.java
similarity index 100%
rename from patterns/design-patterns-2/src/main/java/com/baeldung/nullobject/NullRouter.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/nullobject/NullRouter.java
diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/nullobject/Router.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/nullobject/Router.java
similarity index 100%
rename from patterns/design-patterns-2/src/main/java/com/baeldung/nullobject/Router.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/nullobject/Router.java
diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/nullobject/RouterFactory.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/nullobject/RouterFactory.java
similarity index 100%
rename from patterns/design-patterns-2/src/main/java/com/baeldung/nullobject/RouterFactory.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/nullobject/RouterFactory.java
diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/nullobject/RoutingHandler.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/nullobject/RoutingHandler.java
similarity index 100%
rename from patterns/design-patterns-2/src/main/java/com/baeldung/nullobject/RoutingHandler.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/nullobject/RoutingHandler.java
diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/nullobject/SmsRouter.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/nullobject/SmsRouter.java
similarity index 100%
rename from patterns/design-patterns-2/src/main/java/com/baeldung/nullobject/SmsRouter.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/nullobject/SmsRouter.java
diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/nulls/APIContracts.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/nulls/APIContracts.java
similarity index 100%
rename from patterns/design-patterns-2/src/main/java/com/baeldung/nulls/APIContracts.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/nulls/APIContracts.java
diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/nulls/Assertions.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/nulls/Assertions.java
similarity index 100%
rename from patterns/design-patterns-2/src/main/java/com/baeldung/nulls/Assertions.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/nulls/Assertions.java
diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/nulls/EmptyCollections.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/nulls/EmptyCollections.java
similarity index 100%
rename from patterns/design-patterns-2/src/main/java/com/baeldung/nulls/EmptyCollections.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/nulls/EmptyCollections.java
diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/nulls/FindBugsAnnotations.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/nulls/FindBugsAnnotations.java
similarity index 100%
rename from patterns/design-patterns-2/src/main/java/com/baeldung/nulls/FindBugsAnnotations.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/nulls/FindBugsAnnotations.java
diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/nulls/Preconditions.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/nulls/Preconditions.java
similarity index 100%
rename from patterns/design-patterns-2/src/main/java/com/baeldung/nulls/Preconditions.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/nulls/Preconditions.java
diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/nulls/PrimitivesAndWrapper.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/nulls/PrimitivesAndWrapper.java
similarity index 100%
rename from patterns/design-patterns-2/src/main/java/com/baeldung/nulls/PrimitivesAndWrapper.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/nulls/PrimitivesAndWrapper.java
diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/nulls/UsingLombok.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/nulls/UsingLombok.java
similarity index 100%
rename from patterns/design-patterns-2/src/main/java/com/baeldung/nulls/UsingLombok.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/nulls/UsingLombok.java
diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/nulls/UsingObjects.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/nulls/UsingObjects.java
similarity index 100%
rename from patterns/design-patterns-2/src/main/java/com/baeldung/nulls/UsingObjects.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/nulls/UsingObjects.java
diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/nulls/UsingOptional.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/nulls/UsingOptional.java
similarity index 100%
rename from patterns/design-patterns-2/src/main/java/com/baeldung/nulls/UsingOptional.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/nulls/UsingOptional.java
diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/nulls/UsingStringUtils.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/nulls/UsingStringUtils.java
similarity index 100%
rename from patterns/design-patterns-2/src/main/java/com/baeldung/nulls/UsingStringUtils.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/nulls/UsingStringUtils.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/observer/Channel.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/observer/Channel.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/observer/Channel.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/observer/Channel.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/observer/NewsAgency.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/observer/NewsAgency.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/observer/NewsAgency.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/observer/NewsAgency.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/observer/NewsChannel.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/observer/NewsChannel.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/observer/NewsChannel.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/observer/NewsChannel.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/observer/ONewsAgency.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/observer/ONewsAgency.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/observer/ONewsAgency.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/observer/ONewsAgency.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/observer/ONewsChannel.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/observer/ONewsChannel.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/observer/ONewsChannel.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/observer/ONewsChannel.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/observer/PCLNewsAgency.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/observer/PCLNewsAgency.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/observer/PCLNewsAgency.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/observer/PCLNewsAgency.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/observer/PCLNewsChannel.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/observer/PCLNewsChannel.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/observer/PCLNewsChannel.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/observer/PCLNewsChannel.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/state/DeliveredState.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/state/DeliveredState.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/state/DeliveredState.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/state/DeliveredState.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/state/OrderedState.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/state/OrderedState.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/state/OrderedState.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/state/OrderedState.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/state/Package.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/state/Package.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/state/Package.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/state/Package.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/state/PackageState.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/state/PackageState.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/state/PackageState.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/state/PackageState.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/state/ReceivedState.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/state/ReceivedState.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/state/ReceivedState.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/state/ReceivedState.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/state/StateDemo.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/state/StateDemo.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/state/StateDemo.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/state/StateDemo.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/templatemethod/application/Application.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/templatemethod/application/Application.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/templatemethod/application/Application.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/templatemethod/application/Application.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/templatemethod/model/Computer.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/templatemethod/model/Computer.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/templatemethod/model/Computer.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/templatemethod/model/Computer.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/templatemethod/model/ComputerBuilder.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/templatemethod/model/ComputerBuilder.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/templatemethod/model/ComputerBuilder.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/templatemethod/model/ComputerBuilder.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/templatemethod/model/HighEndComputer.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/templatemethod/model/HighEndComputer.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/templatemethod/model/HighEndComputer.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/templatemethod/model/HighEndComputer.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/templatemethod/model/HighEndComputerBuilder.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/templatemethod/model/HighEndComputerBuilder.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/templatemethod/model/HighEndComputerBuilder.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/templatemethod/model/HighEndComputerBuilder.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/templatemethod/model/StandardComputer.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/templatemethod/model/StandardComputer.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/templatemethod/model/StandardComputer.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/templatemethod/model/StandardComputer.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/templatemethod/model/StandardComputerBuilder.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/templatemethod/model/StandardComputerBuilder.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/templatemethod/model/StandardComputerBuilder.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/templatemethod/model/StandardComputerBuilder.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/visitor/Document.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/visitor/Document.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/visitor/Document.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/visitor/Document.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/visitor/Element.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/visitor/Element.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/visitor/Element.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/visitor/Element.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/visitor/ElementVisitor.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/visitor/ElementVisitor.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/visitor/ElementVisitor.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/visitor/ElementVisitor.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/visitor/JsonElement.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/visitor/JsonElement.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/visitor/JsonElement.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/visitor/JsonElement.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/visitor/Visitor.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/visitor/Visitor.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/visitor/Visitor.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/visitor/Visitor.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/visitor/VisitorDemo.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/visitor/VisitorDemo.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/visitor/VisitorDemo.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/visitor/VisitorDemo.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/visitor/XmlElement.java b/patterns/design-patterns-behavioral/src/main/java/com/baeldung/visitor/XmlElement.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/visitor/XmlElement.java
rename to patterns/design-patterns-behavioral/src/main/java/com/baeldung/visitor/XmlElement.java
diff --git a/patterns/design-patterns/src/test/java/com/baeldung/chainofresponsibility/ChainOfResponsibilityIntegrationTest.java b/patterns/design-patterns-behavioral/src/test/java/com/baeldung/chainofresponsibility/ChainOfResponsibilityIntegrationTest.java
similarity index 100%
rename from patterns/design-patterns/src/test/java/com/baeldung/chainofresponsibility/ChainOfResponsibilityIntegrationTest.java
rename to patterns/design-patterns-behavioral/src/test/java/com/baeldung/chainofresponsibility/ChainOfResponsibilityIntegrationTest.java
diff --git a/patterns/design-patterns/src/test/java/com/baeldung/command/test/OpenTextFileOperationUnitTest.java b/patterns/design-patterns-behavioral/src/test/java/com/baeldung/command/test/OpenTextFileOperationUnitTest.java
similarity index 100%
rename from patterns/design-patterns/src/test/java/com/baeldung/command/test/OpenTextFileOperationUnitTest.java
rename to patterns/design-patterns-behavioral/src/test/java/com/baeldung/command/test/OpenTextFileOperationUnitTest.java
diff --git a/patterns/design-patterns/src/test/java/com/baeldung/command/test/SaveTextFileOperationUnitTest.java b/patterns/design-patterns-behavioral/src/test/java/com/baeldung/command/test/SaveTextFileOperationUnitTest.java
similarity index 100%
rename from patterns/design-patterns/src/test/java/com/baeldung/command/test/SaveTextFileOperationUnitTest.java
rename to patterns/design-patterns-behavioral/src/test/java/com/baeldung/command/test/SaveTextFileOperationUnitTest.java
diff --git a/patterns/design-patterns/src/test/java/com/baeldung/command/test/TextFileOperationExecutorUnitTest.java b/patterns/design-patterns-behavioral/src/test/java/com/baeldung/command/test/TextFileOperationExecutorUnitTest.java
similarity index 100%
rename from patterns/design-patterns/src/test/java/com/baeldung/command/test/TextFileOperationExecutorUnitTest.java
rename to patterns/design-patterns-behavioral/src/test/java/com/baeldung/command/test/TextFileOperationExecutorUnitTest.java
diff --git a/patterns/design-patterns/src/test/java/com/baeldung/command/test/TextFileUnitTest.java b/patterns/design-patterns-behavioral/src/test/java/com/baeldung/command/test/TextFileUnitTest.java
similarity index 100%
rename from patterns/design-patterns/src/test/java/com/baeldung/command/test/TextFileUnitTest.java
rename to patterns/design-patterns-behavioral/src/test/java/com/baeldung/command/test/TextFileUnitTest.java
diff --git a/patterns/design-patterns-2/src/test/java/com/baeldung/mediator/MediatorIntegrationTest.java b/patterns/design-patterns-behavioral/src/test/java/com/baeldung/mediator/MediatorIntegrationTest.java
similarity index 100%
rename from patterns/design-patterns-2/src/test/java/com/baeldung/mediator/MediatorIntegrationTest.java
rename to patterns/design-patterns-behavioral/src/test/java/com/baeldung/mediator/MediatorIntegrationTest.java
diff --git a/patterns/design-patterns-2/src/test/java/com/baeldung/nulls/PrimitivesAndWrapperUnitTest.java b/patterns/design-patterns-behavioral/src/test/java/com/baeldung/nulls/PrimitivesAndWrapperUnitTest.java
similarity index 100%
rename from patterns/design-patterns-2/src/test/java/com/baeldung/nulls/PrimitivesAndWrapperUnitTest.java
rename to patterns/design-patterns-behavioral/src/test/java/com/baeldung/nulls/PrimitivesAndWrapperUnitTest.java
diff --git a/patterns/design-patterns-2/src/test/java/com/baeldung/nulls/UsingLombokUnitTest.java b/patterns/design-patterns-behavioral/src/test/java/com/baeldung/nulls/UsingLombokUnitTest.java
similarity index 100%
rename from patterns/design-patterns-2/src/test/java/com/baeldung/nulls/UsingLombokUnitTest.java
rename to patterns/design-patterns-behavioral/src/test/java/com/baeldung/nulls/UsingLombokUnitTest.java
diff --git a/patterns/design-patterns-2/src/test/java/com/baeldung/nulls/UsingObjectsUnitTest.java b/patterns/design-patterns-behavioral/src/test/java/com/baeldung/nulls/UsingObjectsUnitTest.java
similarity index 100%
rename from patterns/design-patterns-2/src/test/java/com/baeldung/nulls/UsingObjectsUnitTest.java
rename to patterns/design-patterns-behavioral/src/test/java/com/baeldung/nulls/UsingObjectsUnitTest.java
diff --git a/patterns/design-patterns-2/src/test/java/com/baeldung/nulls/UsingOptionalUnitTest.java b/patterns/design-patterns-behavioral/src/test/java/com/baeldung/nulls/UsingOptionalUnitTest.java
similarity index 100%
rename from patterns/design-patterns-2/src/test/java/com/baeldung/nulls/UsingOptionalUnitTest.java
rename to patterns/design-patterns-behavioral/src/test/java/com/baeldung/nulls/UsingOptionalUnitTest.java
diff --git a/patterns/design-patterns-2/src/test/java/com/baeldung/nulls/UsingStringUtilsUnitTest.java b/patterns/design-patterns-behavioral/src/test/java/com/baeldung/nulls/UsingStringUtilsUnitTest.java
similarity index 100%
rename from patterns/design-patterns-2/src/test/java/com/baeldung/nulls/UsingStringUtilsUnitTest.java
rename to patterns/design-patterns-behavioral/src/test/java/com/baeldung/nulls/UsingStringUtilsUnitTest.java
diff --git a/patterns/design-patterns/src/test/java/com/baeldung/observer/ObserverIntegrationTest.java b/patterns/design-patterns-behavioral/src/test/java/com/baeldung/observer/ObserverIntegrationTest.java
similarity index 100%
rename from patterns/design-patterns/src/test/java/com/baeldung/observer/ObserverIntegrationTest.java
rename to patterns/design-patterns-behavioral/src/test/java/com/baeldung/observer/ObserverIntegrationTest.java
diff --git a/patterns/design-patterns/src/test/java/com/baeldung/state/StatePatternUnitTest.java b/patterns/design-patterns-behavioral/src/test/java/com/baeldung/state/StatePatternUnitTest.java
similarity index 100%
rename from patterns/design-patterns/src/test/java/com/baeldung/state/StatePatternUnitTest.java
rename to patterns/design-patterns-behavioral/src/test/java/com/baeldung/state/StatePatternUnitTest.java
diff --git a/patterns/design-patterns/src/test/java/com/baeldung/templatemethod/test/TemplateMethodPatternIntegrationTest.java b/patterns/design-patterns-behavioral/src/test/java/com/baeldung/templatemethod/test/TemplateMethodPatternIntegrationTest.java
similarity index 100%
rename from patterns/design-patterns/src/test/java/com/baeldung/templatemethod/test/TemplateMethodPatternIntegrationTest.java
rename to patterns/design-patterns-behavioral/src/test/java/com/baeldung/templatemethod/test/TemplateMethodPatternIntegrationTest.java
diff --git a/patterns/design-patterns-creational/README.md b/patterns/design-patterns-creational/README.md
new file mode 100644
index 0000000000..0c00dc7b3a
--- /dev/null
+++ b/patterns/design-patterns-creational/README.md
@@ -0,0 +1,8 @@
+### Relevant Articles:
+- [Singletons in Java](https://www.baeldung.com/java-singleton)
+- [Introduction to Creational Design Patterns](https://www.baeldung.com/creational-design-patterns)
+- [Abstract Factory Pattern in Java](https://www.baeldung.com/java-abstract-factory-pattern)
+- [Flyweight Pattern in Java](https://www.baeldung.com/java-flyweight)
+- [Double-Checked Locking with Singleton](https://www.baeldung.com/java-singleton-double-checked-locking)
+- [Java Constructors vs Static Factory Methods](https://www.baeldung.com/java-constructors-vs-static-factory-methods)
+- [Automatic Generation of the Builder Pattern with FreeBuilder](https://www.baeldung.com/java-builder-pattern-freebuilder)
diff --git a/patterns/design-patterns-creational/pom.xml b/patterns/design-patterns-creational/pom.xml
new file mode 100644
index 0000000000..351f69f749
--- /dev/null
+++ b/patterns/design-patterns-creational/pom.xml
@@ -0,0 +1,47 @@
+
+
+ 4.0.0
+ design-patterns-creational
+ 1.0
+ design-patterns-creational
+ jar
+
+
+ com.baeldung
+ patterns
+ 1.0.0-SNAPSHOT
+ ..
+
+
+
+
+ org.inferred
+ freebuilder
+ ${freebuilder.version}
+ true
+
+
+ com.google.code.findbugs
+ jsr305
+ ${javax.annotations.version}
+
+
+
+ org.assertj
+ assertj-core
+ ${assertj-core.version}
+ test
+
+
+
+
+ UTF-8
+ 1.8
+ 1.8
+
+ 2.4.1
+ 3.0.2
+ 3.9.1
+
+
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/constructorsstaticfactorymethods/application/Application.java b/patterns/design-patterns-creational/src/main/java/com/baeldung/constructorsstaticfactorymethods/application/Application.java
similarity index 97%
rename from patterns/design-patterns/src/main/java/com/baeldung/constructorsstaticfactorymethods/application/Application.java
rename to patterns/design-patterns-creational/src/main/java/com/baeldung/constructorsstaticfactorymethods/application/Application.java
index d19772072f..8730542dcb 100644
--- a/patterns/design-patterns/src/main/java/com/baeldung/constructorsstaticfactorymethods/application/Application.java
+++ b/patterns/design-patterns-creational/src/main/java/com/baeldung/constructorsstaticfactorymethods/application/Application.java
@@ -1,12 +1,12 @@
-package com.baeldung.constructorsstaticfactorymethods.application;
-
-import com.baeldung.constructorsstaticfactorymethods.entities.User;
-
-public class Application {
-
- public static void main(String[] args) {
- User user1 = User.createWithDefaultCountry("John", "john@domain.com");
- User user2 = User.createWithLoggedInstantiationTime("John", "john@domain.com", "Argentina");
- User user3 = User.getSingletonInstance("John", "john@domain.com", "Argentina");
- }
+package com.baeldung.constructorsstaticfactorymethods.application;
+
+import com.baeldung.constructorsstaticfactorymethods.entities.User;
+
+public class Application {
+
+ public static void main(String[] args) {
+ User user1 = User.createWithDefaultCountry("John", "john@domain.com");
+ User user2 = User.createWithLoggedInstantiationTime("John", "john@domain.com", "Argentina");
+ User user3 = User.getSingletonInstance("John", "john@domain.com", "Argentina");
+ }
}
\ No newline at end of file
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/constructorsstaticfactorymethods/entities/User.java b/patterns/design-patterns-creational/src/main/java/com/baeldung/constructorsstaticfactorymethods/entities/User.java
similarity index 96%
rename from patterns/design-patterns/src/main/java/com/baeldung/constructorsstaticfactorymethods/entities/User.java
rename to patterns/design-patterns-creational/src/main/java/com/baeldung/constructorsstaticfactorymethods/entities/User.java
index 4036b622c6..f05a3baaa3 100644
--- a/patterns/design-patterns/src/main/java/com/baeldung/constructorsstaticfactorymethods/entities/User.java
+++ b/patterns/design-patterns-creational/src/main/java/com/baeldung/constructorsstaticfactorymethods/entities/User.java
@@ -1,63 +1,63 @@
-package com.baeldung.constructorsstaticfactorymethods.entities;
-
-import java.time.LocalTime;
-import java.util.logging.ConsoleHandler;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import java.util.logging.SimpleFormatter;
-
-public class User {
-
- private static volatile User instance = null;
- private static final Logger LOGGER = Logger.getLogger(User.class.getName());
- private final String name;
- private final String email;
- private final String country;
-
- public static User createWithDefaultCountry(String name, String email) {
- return new User(name, email, "Argentina");
- }
-
- public static User createWithLoggedInstantiationTime(String name, String email, String country) {
- setLoggerProperties();
- LOGGER.log(Level.INFO, "Creating User instance at : {0}", LocalTime.now());
- return new User(name, email, country);
- }
-
- public static User getSingletonInstance(String name, String email, String country) {
- if (instance == null) {
- synchronized (User.class) {
- if (instance == null) {
- instance = new User(name, email, country);
- }
- }
- }
- return instance;
-
- }
-
- private User(String name, String email, String country) {
- this.name = name;
- this.email = email;
- this.country = country;
- }
-
- public String getName() {
- return name;
- }
-
- public String getEmail() {
- return email;
- }
-
- public String getCountry() {
- return country;
- }
-
- private static void setLoggerProperties() {
- ConsoleHandler handler = new ConsoleHandler();
- handler.setLevel(Level.INFO);
- handler.setFormatter(new SimpleFormatter());
- LOGGER.addHandler(handler);
- }
-}
+package com.baeldung.constructorsstaticfactorymethods.entities;
+
+import java.time.LocalTime;
+import java.util.logging.ConsoleHandler;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.logging.SimpleFormatter;
+
+public class User {
+
+ private static volatile User instance = null;
+ private static final Logger LOGGER = Logger.getLogger(User.class.getName());
+ private final String name;
+ private final String email;
+ private final String country;
+
+ public static User createWithDefaultCountry(String name, String email) {
+ return new User(name, email, "Argentina");
+ }
+
+ public static User createWithLoggedInstantiationTime(String name, String email, String country) {
+ setLoggerProperties();
+ LOGGER.log(Level.INFO, "Creating User instance at : {0}", LocalTime.now());
+ return new User(name, email, country);
+ }
+
+ public static User getSingletonInstance(String name, String email, String country) {
+ if (instance == null) {
+ synchronized (User.class) {
+ if (instance == null) {
+ instance = new User(name, email, country);
+ }
+ }
+ }
+ return instance;
+
+ }
+
+ private User(String name, String email, String country) {
+ this.name = name;
+ this.email = email;
+ this.country = country;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public String getEmail() {
+ return email;
+ }
+
+ public String getCountry() {
+ return country;
+ }
+
+ private static void setLoggerProperties() {
+ ConsoleHandler handler = new ConsoleHandler();
+ handler.setLevel(Level.INFO);
+ handler.setFormatter(new SimpleFormatter());
+ LOGGER.addHandler(handler);
+ }
+}
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/creational/abstractfactory/AbstractFactory.java b/patterns/design-patterns-creational/src/main/java/com/baeldung/creational/abstractfactory/AbstractFactory.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/creational/abstractfactory/AbstractFactory.java
rename to patterns/design-patterns-creational/src/main/java/com/baeldung/creational/abstractfactory/AbstractFactory.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/creational/abstractfactory/AbstractPatternDriver.java b/patterns/design-patterns-creational/src/main/java/com/baeldung/creational/abstractfactory/AbstractPatternDriver.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/creational/abstractfactory/AbstractPatternDriver.java
rename to patterns/design-patterns-creational/src/main/java/com/baeldung/creational/abstractfactory/AbstractPatternDriver.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/creational/abstractfactory/Animal.java b/patterns/design-patterns-creational/src/main/java/com/baeldung/creational/abstractfactory/Animal.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/creational/abstractfactory/Animal.java
rename to patterns/design-patterns-creational/src/main/java/com/baeldung/creational/abstractfactory/Animal.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/creational/abstractfactory/AnimalFactory.java b/patterns/design-patterns-creational/src/main/java/com/baeldung/creational/abstractfactory/AnimalFactory.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/creational/abstractfactory/AnimalFactory.java
rename to patterns/design-patterns-creational/src/main/java/com/baeldung/creational/abstractfactory/AnimalFactory.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/creational/abstractfactory/Brown.java b/patterns/design-patterns-creational/src/main/java/com/baeldung/creational/abstractfactory/Brown.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/creational/abstractfactory/Brown.java
rename to patterns/design-patterns-creational/src/main/java/com/baeldung/creational/abstractfactory/Brown.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/creational/abstractfactory/Color.java b/patterns/design-patterns-creational/src/main/java/com/baeldung/creational/abstractfactory/Color.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/creational/abstractfactory/Color.java
rename to patterns/design-patterns-creational/src/main/java/com/baeldung/creational/abstractfactory/Color.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/creational/abstractfactory/ColorFactory.java b/patterns/design-patterns-creational/src/main/java/com/baeldung/creational/abstractfactory/ColorFactory.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/creational/abstractfactory/ColorFactory.java
rename to patterns/design-patterns-creational/src/main/java/com/baeldung/creational/abstractfactory/ColorFactory.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/creational/abstractfactory/Dog.java b/patterns/design-patterns-creational/src/main/java/com/baeldung/creational/abstractfactory/Dog.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/creational/abstractfactory/Dog.java
rename to patterns/design-patterns-creational/src/main/java/com/baeldung/creational/abstractfactory/Dog.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/creational/abstractfactory/Duck.java b/patterns/design-patterns-creational/src/main/java/com/baeldung/creational/abstractfactory/Duck.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/creational/abstractfactory/Duck.java
rename to patterns/design-patterns-creational/src/main/java/com/baeldung/creational/abstractfactory/Duck.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/creational/abstractfactory/FactoryProvider.java b/patterns/design-patterns-creational/src/main/java/com/baeldung/creational/abstractfactory/FactoryProvider.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/creational/abstractfactory/FactoryProvider.java
rename to patterns/design-patterns-creational/src/main/java/com/baeldung/creational/abstractfactory/FactoryProvider.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/creational/abstractfactory/White.java b/patterns/design-patterns-creational/src/main/java/com/baeldung/creational/abstractfactory/White.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/creational/abstractfactory/White.java
rename to patterns/design-patterns-creational/src/main/java/com/baeldung/creational/abstractfactory/White.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/creational/builder/BankAccount.java b/patterns/design-patterns-creational/src/main/java/com/baeldung/creational/builder/BankAccount.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/creational/builder/BankAccount.java
rename to patterns/design-patterns-creational/src/main/java/com/baeldung/creational/builder/BankAccount.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/creational/builder/BuilderPatternDriver.java b/patterns/design-patterns-creational/src/main/java/com/baeldung/creational/builder/BuilderPatternDriver.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/creational/builder/BuilderPatternDriver.java
rename to patterns/design-patterns-creational/src/main/java/com/baeldung/creational/builder/BuilderPatternDriver.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/creational/factory/FactoryDriver.java b/patterns/design-patterns-creational/src/main/java/com/baeldung/creational/factory/FactoryDriver.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/creational/factory/FactoryDriver.java
rename to patterns/design-patterns-creational/src/main/java/com/baeldung/creational/factory/FactoryDriver.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/creational/factory/Heptagon.java b/patterns/design-patterns-creational/src/main/java/com/baeldung/creational/factory/Heptagon.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/creational/factory/Heptagon.java
rename to patterns/design-patterns-creational/src/main/java/com/baeldung/creational/factory/Heptagon.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/creational/factory/Octagon.java b/patterns/design-patterns-creational/src/main/java/com/baeldung/creational/factory/Octagon.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/creational/factory/Octagon.java
rename to patterns/design-patterns-creational/src/main/java/com/baeldung/creational/factory/Octagon.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/creational/factory/Pentagon.java b/patterns/design-patterns-creational/src/main/java/com/baeldung/creational/factory/Pentagon.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/creational/factory/Pentagon.java
rename to patterns/design-patterns-creational/src/main/java/com/baeldung/creational/factory/Pentagon.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/creational/factory/Polygon.java b/patterns/design-patterns-creational/src/main/java/com/baeldung/creational/factory/Polygon.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/creational/factory/Polygon.java
rename to patterns/design-patterns-creational/src/main/java/com/baeldung/creational/factory/Polygon.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/creational/factory/PolygonFactory.java b/patterns/design-patterns-creational/src/main/java/com/baeldung/creational/factory/PolygonFactory.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/creational/factory/PolygonFactory.java
rename to patterns/design-patterns-creational/src/main/java/com/baeldung/creational/factory/PolygonFactory.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/creational/factory/Square.java b/patterns/design-patterns-creational/src/main/java/com/baeldung/creational/factory/Square.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/creational/factory/Square.java
rename to patterns/design-patterns-creational/src/main/java/com/baeldung/creational/factory/Square.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/creational/factory/Triangle.java b/patterns/design-patterns-creational/src/main/java/com/baeldung/creational/factory/Triangle.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/creational/factory/Triangle.java
rename to patterns/design-patterns-creational/src/main/java/com/baeldung/creational/factory/Triangle.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/creational/singleton/Singleton.java b/patterns/design-patterns-creational/src/main/java/com/baeldung/creational/singleton/Singleton.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/creational/singleton/Singleton.java
rename to patterns/design-patterns-creational/src/main/java/com/baeldung/creational/singleton/Singleton.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/creational/singleton/SingletonDriver.java b/patterns/design-patterns-creational/src/main/java/com/baeldung/creational/singleton/SingletonDriver.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/creational/singleton/SingletonDriver.java
rename to patterns/design-patterns-creational/src/main/java/com/baeldung/creational/singleton/SingletonDriver.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/flyweight/Car.java b/patterns/design-patterns-creational/src/main/java/com/baeldung/flyweight/Car.java
similarity index 95%
rename from patterns/design-patterns/src/main/java/com/baeldung/flyweight/Car.java
rename to patterns/design-patterns-creational/src/main/java/com/baeldung/flyweight/Car.java
index a0b1a7cdf5..80ef992abb 100644
--- a/patterns/design-patterns/src/main/java/com/baeldung/flyweight/Car.java
+++ b/patterns/design-patterns-creational/src/main/java/com/baeldung/flyweight/Car.java
@@ -2,8 +2,6 @@ package com.baeldung.flyweight;
import java.awt.Color;
-import javax.annotation.concurrent.Immutable;
-
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -12,7 +10,6 @@ import org.slf4j.LoggerFactory;
*
* @author Donato Rimenti
*/
-@Immutable
public class Car implements Vehicle {
/**
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/flyweight/Engine.java b/patterns/design-patterns-creational/src/main/java/com/baeldung/flyweight/Engine.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/flyweight/Engine.java
rename to patterns/design-patterns-creational/src/main/java/com/baeldung/flyweight/Engine.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/flyweight/Vehicle.java b/patterns/design-patterns-creational/src/main/java/com/baeldung/flyweight/Vehicle.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/flyweight/Vehicle.java
rename to patterns/design-patterns-creational/src/main/java/com/baeldung/flyweight/Vehicle.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/flyweight/VehicleFactory.java b/patterns/design-patterns-creational/src/main/java/com/baeldung/flyweight/VehicleFactory.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/flyweight/VehicleFactory.java
rename to patterns/design-patterns-creational/src/main/java/com/baeldung/flyweight/VehicleFactory.java
diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/freebuilder/Address.java b/patterns/design-patterns-creational/src/main/java/com/baeldung/freebuilder/Address.java
similarity index 100%
rename from patterns/design-patterns-2/src/main/java/com/baeldung/freebuilder/Address.java
rename to patterns/design-patterns-creational/src/main/java/com/baeldung/freebuilder/Address.java
diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/freebuilder/Employee.java b/patterns/design-patterns-creational/src/main/java/com/baeldung/freebuilder/Employee.java
similarity index 100%
rename from patterns/design-patterns-2/src/main/java/com/baeldung/freebuilder/Employee.java
rename to patterns/design-patterns-creational/src/main/java/com/baeldung/freebuilder/Employee.java
diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/freebuilder/builder/Employee.java b/patterns/design-patterns-creational/src/main/java/com/baeldung/freebuilder/builder/Employee.java
similarity index 100%
rename from patterns/design-patterns-2/src/main/java/com/baeldung/freebuilder/builder/Employee.java
rename to patterns/design-patterns-creational/src/main/java/com/baeldung/freebuilder/builder/Employee.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/singleton/ClassSingleton.java b/patterns/design-patterns-creational/src/main/java/com/baeldung/singleton/ClassSingleton.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/singleton/ClassSingleton.java
rename to patterns/design-patterns-creational/src/main/java/com/baeldung/singleton/ClassSingleton.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/singleton/EnumSingleton.java b/patterns/design-patterns-creational/src/main/java/com/baeldung/singleton/EnumSingleton.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/singleton/EnumSingleton.java
rename to patterns/design-patterns-creational/src/main/java/com/baeldung/singleton/EnumSingleton.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/singleton/Sandbox.java b/patterns/design-patterns-creational/src/main/java/com/baeldung/singleton/Sandbox.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/singleton/Sandbox.java
rename to patterns/design-patterns-creational/src/main/java/com/baeldung/singleton/Sandbox.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/singleton/synchronization/DclSingleton.java b/patterns/design-patterns-creational/src/main/java/com/baeldung/singleton/synchronization/DclSingleton.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/singleton/synchronization/DclSingleton.java
rename to patterns/design-patterns-creational/src/main/java/com/baeldung/singleton/synchronization/DclSingleton.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/singleton/synchronization/DraconianSingleton.java b/patterns/design-patterns-creational/src/main/java/com/baeldung/singleton/synchronization/DraconianSingleton.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/singleton/synchronization/DraconianSingleton.java
rename to patterns/design-patterns-creational/src/main/java/com/baeldung/singleton/synchronization/DraconianSingleton.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/singleton/synchronization/EarlyInitSingleton.java b/patterns/design-patterns-creational/src/main/java/com/baeldung/singleton/synchronization/EarlyInitSingleton.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/singleton/synchronization/EarlyInitSingleton.java
rename to patterns/design-patterns-creational/src/main/java/com/baeldung/singleton/synchronization/EarlyInitSingleton.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/singleton/synchronization/EnumSingleton.java b/patterns/design-patterns-creational/src/main/java/com/baeldung/singleton/synchronization/EnumSingleton.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/singleton/synchronization/EnumSingleton.java
rename to patterns/design-patterns-creational/src/main/java/com/baeldung/singleton/synchronization/EnumSingleton.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/singleton/synchronization/InitOnDemandSingleton.java b/patterns/design-patterns-creational/src/main/java/com/baeldung/singleton/synchronization/InitOnDemandSingleton.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/singleton/synchronization/InitOnDemandSingleton.java
rename to patterns/design-patterns-creational/src/main/java/com/baeldung/singleton/synchronization/InitOnDemandSingleton.java
diff --git a/patterns/design-patterns/src/test/java/com/baeldung/constructorsstaticfactorymethods/UserUnitTest.java b/patterns/design-patterns-creational/src/test/java/com/baeldung/constructorsstaticfactorymethods/UserUnitTest.java
similarity index 97%
rename from patterns/design-patterns/src/test/java/com/baeldung/constructorsstaticfactorymethods/UserUnitTest.java
rename to patterns/design-patterns-creational/src/test/java/com/baeldung/constructorsstaticfactorymethods/UserUnitTest.java
index 0c0266a111..ee8698b18d 100644
--- a/patterns/design-patterns/src/test/java/com/baeldung/constructorsstaticfactorymethods/UserUnitTest.java
+++ b/patterns/design-patterns-creational/src/test/java/com/baeldung/constructorsstaticfactorymethods/UserUnitTest.java
@@ -1,43 +1,43 @@
-package com.baeldung.constructorsstaticfactorymethods;
-
-import com.baeldung.constructorsstaticfactorymethods.entities.User;
-import static org.assertj.core.api.Assertions.assertThat;
-import org.junit.Test;
-
-public class UserUnitTest {
-
- @Test
- public void givenUserClass_whenCalledcreateWithDefaultCountry_thenCorrect() {
- assertThat(User.createWithDefaultCountry("John", "john@domain.com")).isInstanceOf(User.class);
- }
-
- @Test
- public void givenUserIntanceCreatedWithcreateWithDefaultCountry_whenCalledgetName_thenCorrect() {
- User user = User.createWithDefaultCountry("John", "john@domain.com");
- assertThat(user.getName()).isEqualTo("John");
- }
-
- @Test
- public void givenUserIntanceCreatedWithcreateWithDefaultCountry_whenCalledgetEmail_thenCorrect() {
- User user = User.createWithDefaultCountry("John", "john@domain.com");
- assertThat(user.getEmail()).isEqualTo("john@domain.com");
- }
-
- @Test
- public void givenUserIntanceCreatedWithcreateWithDefaultCountry_whenCalledgetCountry_thenCorrect() {
- User user = User.createWithDefaultCountry("John", "john@domain.com");
- assertThat(user.getCountry()).isEqualTo("Argentina");
- }
-
- @Test
- public void givenUserInstanceCreatedWithcreateWithInstantiationTime_whenCalledcreateWithInstantiationTime_thenCorrect() {
- assertThat(User.createWithLoggedInstantiationTime("John", "john@domain.com", "Argentina")).isInstanceOf(User.class);
- }
-
- @Test
- public void givenUserInstanceCreatedWithgetSingletonIntance_whenCalledgetSingletonInstance_thenCorrect() {
- User user1 = User.getSingletonInstance("John", "john@domain.com", "Argentina");
- User user2 = User.getSingletonInstance("John", "john@domain.com", "Argentina");
- assertThat(user1).isEqualTo(user2);
- }
+package com.baeldung.constructorsstaticfactorymethods;
+
+import com.baeldung.constructorsstaticfactorymethods.entities.User;
+import static org.assertj.core.api.Assertions.assertThat;
+import org.junit.Test;
+
+public class UserUnitTest {
+
+ @Test
+ public void givenUserClass_whenCalledcreateWithDefaultCountry_thenCorrect() {
+ assertThat(User.createWithDefaultCountry("John", "john@domain.com")).isInstanceOf(User.class);
+ }
+
+ @Test
+ public void givenUserIntanceCreatedWithcreateWithDefaultCountry_whenCalledgetName_thenCorrect() {
+ User user = User.createWithDefaultCountry("John", "john@domain.com");
+ assertThat(user.getName()).isEqualTo("John");
+ }
+
+ @Test
+ public void givenUserIntanceCreatedWithcreateWithDefaultCountry_whenCalledgetEmail_thenCorrect() {
+ User user = User.createWithDefaultCountry("John", "john@domain.com");
+ assertThat(user.getEmail()).isEqualTo("john@domain.com");
+ }
+
+ @Test
+ public void givenUserIntanceCreatedWithcreateWithDefaultCountry_whenCalledgetCountry_thenCorrect() {
+ User user = User.createWithDefaultCountry("John", "john@domain.com");
+ assertThat(user.getCountry()).isEqualTo("Argentina");
+ }
+
+ @Test
+ public void givenUserInstanceCreatedWithcreateWithInstantiationTime_whenCalledcreateWithInstantiationTime_thenCorrect() {
+ assertThat(User.createWithLoggedInstantiationTime("John", "john@domain.com", "Argentina")).isInstanceOf(User.class);
+ }
+
+ @Test
+ public void givenUserInstanceCreatedWithgetSingletonIntance_whenCalledgetSingletonInstance_thenCorrect() {
+ User user1 = User.getSingletonInstance("John", "john@domain.com", "Argentina");
+ User user2 = User.getSingletonInstance("John", "john@domain.com", "Argentina");
+ assertThat(user1).isEqualTo(user2);
+ }
}
\ No newline at end of file
diff --git a/patterns/design-patterns/src/test/java/com/baeldung/creational/abstractfactory/AbstractPatternIntegrationTest.java b/patterns/design-patterns-creational/src/test/java/com/baeldung/creational/abstractfactory/AbstractPatternIntegrationTest.java
similarity index 100%
rename from patterns/design-patterns/src/test/java/com/baeldung/creational/abstractfactory/AbstractPatternIntegrationTest.java
rename to patterns/design-patterns-creational/src/test/java/com/baeldung/creational/abstractfactory/AbstractPatternIntegrationTest.java
diff --git a/patterns/design-patterns/src/test/java/com/baeldung/creational/builder/BuilderPatternIntegrationTest.java b/patterns/design-patterns-creational/src/test/java/com/baeldung/creational/builder/BuilderPatternIntegrationTest.java
similarity index 100%
rename from patterns/design-patterns/src/test/java/com/baeldung/creational/builder/BuilderPatternIntegrationTest.java
rename to patterns/design-patterns-creational/src/test/java/com/baeldung/creational/builder/BuilderPatternIntegrationTest.java
diff --git a/patterns/design-patterns/src/test/java/com/baeldung/creational/factory/FactoryIntegrationTest.java b/patterns/design-patterns-creational/src/test/java/com/baeldung/creational/factory/FactoryIntegrationTest.java
similarity index 100%
rename from patterns/design-patterns/src/test/java/com/baeldung/creational/factory/FactoryIntegrationTest.java
rename to patterns/design-patterns-creational/src/test/java/com/baeldung/creational/factory/FactoryIntegrationTest.java
diff --git a/patterns/design-patterns/src/test/java/com/baeldung/creational/singleton/SingletonIntegrationTest.java b/patterns/design-patterns-creational/src/test/java/com/baeldung/creational/singleton/SingletonIntegrationTest.java
similarity index 100%
rename from patterns/design-patterns/src/test/java/com/baeldung/creational/singleton/SingletonIntegrationTest.java
rename to patterns/design-patterns-creational/src/test/java/com/baeldung/creational/singleton/SingletonIntegrationTest.java
diff --git a/patterns/design-patterns/src/test/java/com/baeldung/flyweight/FlyweightUnitTest.java b/patterns/design-patterns-creational/src/test/java/com/baeldung/flyweight/FlyweightUnitTest.java
similarity index 100%
rename from patterns/design-patterns/src/test/java/com/baeldung/flyweight/FlyweightUnitTest.java
rename to patterns/design-patterns-creational/src/test/java/com/baeldung/flyweight/FlyweightUnitTest.java
diff --git a/patterns/design-patterns-2/src/test/java/com/baeldung/freebuilder/EmployeeBuilderUnitTest.java b/patterns/design-patterns-creational/src/test/java/com/baeldung/freebuilder/EmployeeBuilderUnitTest.java
similarity index 100%
rename from patterns/design-patterns-2/src/test/java/com/baeldung/freebuilder/EmployeeBuilderUnitTest.java
rename to patterns/design-patterns-creational/src/test/java/com/baeldung/freebuilder/EmployeeBuilderUnitTest.java
diff --git a/patterns/design-patterns-2/src/test/java/com/baeldung/freebuilder/builder/EmployeeBuilderUnitTest.java b/patterns/design-patterns-creational/src/test/java/com/baeldung/freebuilder/builder/EmployeeBuilderUnitTest.java
similarity index 100%
rename from patterns/design-patterns-2/src/test/java/com/baeldung/freebuilder/builder/EmployeeBuilderUnitTest.java
rename to patterns/design-patterns-creational/src/test/java/com/baeldung/freebuilder/builder/EmployeeBuilderUnitTest.java
diff --git a/patterns/design-patterns/src/test/java/com/baeldung/singleton/synchronization/SingletonSynchronizationIntegrationTest.java b/patterns/design-patterns-creational/src/test/java/com/baeldung/singleton/synchronization/SingletonSynchronizationIntegrationTest.java
similarity index 100%
rename from patterns/design-patterns/src/test/java/com/baeldung/singleton/synchronization/SingletonSynchronizationIntegrationTest.java
rename to patterns/design-patterns-creational/src/test/java/com/baeldung/singleton/synchronization/SingletonSynchronizationIntegrationTest.java
diff --git a/patterns/design-patterns-functional/README.md b/patterns/design-patterns-functional/README.md
new file mode 100644
index 0000000000..04e21bafd5
--- /dev/null
+++ b/patterns/design-patterns-functional/README.md
@@ -0,0 +1,2 @@
+### Relevant Articles:
+- [Currying in Java](https://www.baeldung.com/java-currying)
diff --git a/patterns/design-patterns-functional/pom.xml b/patterns/design-patterns-functional/pom.xml
new file mode 100644
index 0000000000..5df7cc0cb9
--- /dev/null
+++ b/patterns/design-patterns-functional/pom.xml
@@ -0,0 +1,25 @@
+
+
+ 4.0.0
+ design-patterns-functional
+ 1.0
+ design-patterns-functional
+ jar
+
+
+ com.baeldung
+ patterns
+ 1.0.0-SNAPSHOT
+ ..
+
+
+
+
+
+
+ UTF-8
+ 1.8
+ 1.8
+
+
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/currying/Letter.java b/patterns/design-patterns-functional/src/main/java/com/baeldung/currying/Letter.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/currying/Letter.java
rename to patterns/design-patterns-functional/src/main/java/com/baeldung/currying/Letter.java
diff --git a/patterns/design-patterns/src/test/java/com/baeldung/currying/LetterUnitTest.java b/patterns/design-patterns-functional/src/test/java/com/baeldung/currying/LetterUnitTest.java
similarity index 100%
rename from patterns/design-patterns/src/test/java/com/baeldung/currying/LetterUnitTest.java
rename to patterns/design-patterns-functional/src/test/java/com/baeldung/currying/LetterUnitTest.java
diff --git a/patterns/design-patterns-structural/README.md b/patterns/design-patterns-structural/README.md
new file mode 100644
index 0000000000..91620a522e
--- /dev/null
+++ b/patterns/design-patterns-structural/README.md
@@ -0,0 +1,7 @@
+### Relevant Articles:
+- [Facade Design Pattern in Java](https://www.baeldung.com/java-facade-pattern)
+- [Proxy, Decorator, Adapter and Bridge Patterns](https://www.baeldung.com/java-structural-design-patterns)
+- [Composite Design Pattern in Java](https://www.baeldung.com/java-composite-pattern)
+- [The Decorator Pattern in Java](https://www.baeldung.com/java-decorator-pattern)
+- [The Adapter Pattern in Java](https://www.baeldung.com/java-adapter-pattern)
+- [The Proxy Pattern in Java](https://www.baeldung.com/java-proxy-pattern)
diff --git a/patterns/design-patterns-structural/pom.xml b/patterns/design-patterns-structural/pom.xml
new file mode 100644
index 0000000000..63806058c9
--- /dev/null
+++ b/patterns/design-patterns-structural/pom.xml
@@ -0,0 +1,30 @@
+
+
+ 4.0.0
+ design-patterns-structural
+ 1.0
+ design-patterns-structural
+ jar
+
+
+ com.baeldung
+ patterns
+ 1.0.0-SNAPSHOT
+ ..
+
+
+
+
+ log4j
+ log4j
+ ${log4j.version}
+
+
+
+
+ UTF-8
+ 1.8
+ 1.8
+
+
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/adapter/AdapterPatternDriver.java b/patterns/design-patterns-structural/src/main/java/com/baeldung/adapter/AdapterPatternDriver.java
similarity index 94%
rename from patterns/design-patterns/src/main/java/com/baeldung/adapter/AdapterPatternDriver.java
rename to patterns/design-patterns-structural/src/main/java/com/baeldung/adapter/AdapterPatternDriver.java
index a4e10a0868..9f696a5f40 100644
--- a/patterns/design-patterns/src/main/java/com/baeldung/adapter/AdapterPatternDriver.java
+++ b/patterns/design-patterns-structural/src/main/java/com/baeldung/adapter/AdapterPatternDriver.java
@@ -1,6 +1,6 @@
package com.baeldung.adapter;
-import static com.baeldung.util.LogerUtil.LOG;
+import static com.baeldung.util.LoggerUtil.LOG;
public class AdapterPatternDriver {
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/adapter/AstonMartin.java b/patterns/design-patterns-structural/src/main/java/com/baeldung/adapter/AstonMartin.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/adapter/AstonMartin.java
rename to patterns/design-patterns-structural/src/main/java/com/baeldung/adapter/AstonMartin.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/adapter/BugattiVeyron.java b/patterns/design-patterns-structural/src/main/java/com/baeldung/adapter/BugattiVeyron.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/adapter/BugattiVeyron.java
rename to patterns/design-patterns-structural/src/main/java/com/baeldung/adapter/BugattiVeyron.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/adapter/McLaren.java b/patterns/design-patterns-structural/src/main/java/com/baeldung/adapter/McLaren.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/adapter/McLaren.java
rename to patterns/design-patterns-structural/src/main/java/com/baeldung/adapter/McLaren.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/adapter/Movable.java b/patterns/design-patterns-structural/src/main/java/com/baeldung/adapter/Movable.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/adapter/Movable.java
rename to patterns/design-patterns-structural/src/main/java/com/baeldung/adapter/Movable.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/adapter/MovableAdapter.java b/patterns/design-patterns-structural/src/main/java/com/baeldung/adapter/MovableAdapter.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/adapter/MovableAdapter.java
rename to patterns/design-patterns-structural/src/main/java/com/baeldung/adapter/MovableAdapter.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/adapter/MovableAdapterImpl.java b/patterns/design-patterns-structural/src/main/java/com/baeldung/adapter/MovableAdapterImpl.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/adapter/MovableAdapterImpl.java
rename to patterns/design-patterns-structural/src/main/java/com/baeldung/adapter/MovableAdapterImpl.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/bridge/Blue.java b/patterns/design-patterns-structural/src/main/java/com/baeldung/bridge/Blue.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/bridge/Blue.java
rename to patterns/design-patterns-structural/src/main/java/com/baeldung/bridge/Blue.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/bridge/BridgePatternDriver.java b/patterns/design-patterns-structural/src/main/java/com/baeldung/bridge/BridgePatternDriver.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/bridge/BridgePatternDriver.java
rename to patterns/design-patterns-structural/src/main/java/com/baeldung/bridge/BridgePatternDriver.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/bridge/Color.java b/patterns/design-patterns-structural/src/main/java/com/baeldung/bridge/Color.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/bridge/Color.java
rename to patterns/design-patterns-structural/src/main/java/com/baeldung/bridge/Color.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/bridge/Red.java b/patterns/design-patterns-structural/src/main/java/com/baeldung/bridge/Red.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/bridge/Red.java
rename to patterns/design-patterns-structural/src/main/java/com/baeldung/bridge/Red.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/bridge/Shape.java b/patterns/design-patterns-structural/src/main/java/com/baeldung/bridge/Shape.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/bridge/Shape.java
rename to patterns/design-patterns-structural/src/main/java/com/baeldung/bridge/Shape.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/bridge/Square.java b/patterns/design-patterns-structural/src/main/java/com/baeldung/bridge/Square.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/bridge/Square.java
rename to patterns/design-patterns-structural/src/main/java/com/baeldung/bridge/Square.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/bridge/Triangle.java b/patterns/design-patterns-structural/src/main/java/com/baeldung/bridge/Triangle.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/bridge/Triangle.java
rename to patterns/design-patterns-structural/src/main/java/com/baeldung/bridge/Triangle.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/composite/CompositeDemo.java b/patterns/design-patterns-structural/src/main/java/com/baeldung/composite/CompositeDemo.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/composite/CompositeDemo.java
rename to patterns/design-patterns-structural/src/main/java/com/baeldung/composite/CompositeDemo.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/composite/Department.java b/patterns/design-patterns-structural/src/main/java/com/baeldung/composite/Department.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/composite/Department.java
rename to patterns/design-patterns-structural/src/main/java/com/baeldung/composite/Department.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/composite/FinancialDepartment.java b/patterns/design-patterns-structural/src/main/java/com/baeldung/composite/FinancialDepartment.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/composite/FinancialDepartment.java
rename to patterns/design-patterns-structural/src/main/java/com/baeldung/composite/FinancialDepartment.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/composite/HeadDepartment.java b/patterns/design-patterns-structural/src/main/java/com/baeldung/composite/HeadDepartment.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/composite/HeadDepartment.java
rename to patterns/design-patterns-structural/src/main/java/com/baeldung/composite/HeadDepartment.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/composite/SalesDepartment.java b/patterns/design-patterns-structural/src/main/java/com/baeldung/composite/SalesDepartment.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/composite/SalesDepartment.java
rename to patterns/design-patterns-structural/src/main/java/com/baeldung/composite/SalesDepartment.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/decorator/BubbleLights.java b/patterns/design-patterns-structural/src/main/java/com/baeldung/decorator/BubbleLights.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/decorator/BubbleLights.java
rename to patterns/design-patterns-structural/src/main/java/com/baeldung/decorator/BubbleLights.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/decorator/ChristmasTree.java b/patterns/design-patterns-structural/src/main/java/com/baeldung/decorator/ChristmasTree.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/decorator/ChristmasTree.java
rename to patterns/design-patterns-structural/src/main/java/com/baeldung/decorator/ChristmasTree.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/decorator/ChristmasTreeImpl.java b/patterns/design-patterns-structural/src/main/java/com/baeldung/decorator/ChristmasTreeImpl.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/decorator/ChristmasTreeImpl.java
rename to patterns/design-patterns-structural/src/main/java/com/baeldung/decorator/ChristmasTreeImpl.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/decorator/DecoratorPatternDriver.java b/patterns/design-patterns-structural/src/main/java/com/baeldung/decorator/DecoratorPatternDriver.java
similarity index 90%
rename from patterns/design-patterns/src/main/java/com/baeldung/decorator/DecoratorPatternDriver.java
rename to patterns/design-patterns-structural/src/main/java/com/baeldung/decorator/DecoratorPatternDriver.java
index c20c23ff6e..6a9da7c78c 100644
--- a/patterns/design-patterns/src/main/java/com/baeldung/decorator/DecoratorPatternDriver.java
+++ b/patterns/design-patterns-structural/src/main/java/com/baeldung/decorator/DecoratorPatternDriver.java
@@ -1,6 +1,6 @@
package com.baeldung.decorator;
-import static com.baeldung.util.LogerUtil.LOG;
+import static com.baeldung.util.LoggerUtil.LOG;
public class DecoratorPatternDriver {
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/decorator/Garland.java b/patterns/design-patterns-structural/src/main/java/com/baeldung/decorator/Garland.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/decorator/Garland.java
rename to patterns/design-patterns-structural/src/main/java/com/baeldung/decorator/Garland.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/decorator/TreeDecorator.java b/patterns/design-patterns-structural/src/main/java/com/baeldung/decorator/TreeDecorator.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/decorator/TreeDecorator.java
rename to patterns/design-patterns-structural/src/main/java/com/baeldung/decorator/TreeDecorator.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/facade/CarEngineFacade.java b/patterns/design-patterns-structural/src/main/java/com/baeldung/facade/CarEngineFacade.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/facade/CarEngineFacade.java
rename to patterns/design-patterns-structural/src/main/java/com/baeldung/facade/CarEngineFacade.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/facade/carsystem/AirFlowController.java b/patterns/design-patterns-structural/src/main/java/com/baeldung/facade/carsystem/AirFlowController.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/facade/carsystem/AirFlowController.java
rename to patterns/design-patterns-structural/src/main/java/com/baeldung/facade/carsystem/AirFlowController.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/facade/carsystem/AirFlowMeter.java b/patterns/design-patterns-structural/src/main/java/com/baeldung/facade/carsystem/AirFlowMeter.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/facade/carsystem/AirFlowMeter.java
rename to patterns/design-patterns-structural/src/main/java/com/baeldung/facade/carsystem/AirFlowMeter.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/facade/carsystem/CatalyticConverter.java b/patterns/design-patterns-structural/src/main/java/com/baeldung/facade/carsystem/CatalyticConverter.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/facade/carsystem/CatalyticConverter.java
rename to patterns/design-patterns-structural/src/main/java/com/baeldung/facade/carsystem/CatalyticConverter.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/facade/carsystem/CoolingController.java b/patterns/design-patterns-structural/src/main/java/com/baeldung/facade/carsystem/CoolingController.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/facade/carsystem/CoolingController.java
rename to patterns/design-patterns-structural/src/main/java/com/baeldung/facade/carsystem/CoolingController.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/facade/carsystem/FuelInjector.java b/patterns/design-patterns-structural/src/main/java/com/baeldung/facade/carsystem/FuelInjector.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/facade/carsystem/FuelInjector.java
rename to patterns/design-patterns-structural/src/main/java/com/baeldung/facade/carsystem/FuelInjector.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/facade/carsystem/FuelPump.java b/patterns/design-patterns-structural/src/main/java/com/baeldung/facade/carsystem/FuelPump.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/facade/carsystem/FuelPump.java
rename to patterns/design-patterns-structural/src/main/java/com/baeldung/facade/carsystem/FuelPump.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/facade/carsystem/Radiator.java b/patterns/design-patterns-structural/src/main/java/com/baeldung/facade/carsystem/Radiator.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/facade/carsystem/Radiator.java
rename to patterns/design-patterns-structural/src/main/java/com/baeldung/facade/carsystem/Radiator.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/facade/carsystem/Starter.java b/patterns/design-patterns-structural/src/main/java/com/baeldung/facade/carsystem/Starter.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/facade/carsystem/Starter.java
rename to patterns/design-patterns-structural/src/main/java/com/baeldung/facade/carsystem/Starter.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/facade/carsystem/TemperatureSensor.java b/patterns/design-patterns-structural/src/main/java/com/baeldung/facade/carsystem/TemperatureSensor.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/facade/carsystem/TemperatureSensor.java
rename to patterns/design-patterns-structural/src/main/java/com/baeldung/facade/carsystem/TemperatureSensor.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/proxy/ExpensiveObject.java b/patterns/design-patterns-structural/src/main/java/com/baeldung/proxy/ExpensiveObject.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/proxy/ExpensiveObject.java
rename to patterns/design-patterns-structural/src/main/java/com/baeldung/proxy/ExpensiveObject.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/proxy/ExpensiveObjectImpl.java b/patterns/design-patterns-structural/src/main/java/com/baeldung/proxy/ExpensiveObjectImpl.java
similarity index 88%
rename from patterns/design-patterns/src/main/java/com/baeldung/proxy/ExpensiveObjectImpl.java
rename to patterns/design-patterns-structural/src/main/java/com/baeldung/proxy/ExpensiveObjectImpl.java
index 7ade31da88..6d38672a63 100644
--- a/patterns/design-patterns/src/main/java/com/baeldung/proxy/ExpensiveObjectImpl.java
+++ b/patterns/design-patterns-structural/src/main/java/com/baeldung/proxy/ExpensiveObjectImpl.java
@@ -1,6 +1,6 @@
package com.baeldung.proxy;
-import static com.baeldung.util.LogerUtil.LOG;;
+import static com.baeldung.util.LoggerUtil.LOG;
public class ExpensiveObjectImpl implements ExpensiveObject {
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/proxy/ExpensiveObjectProxy.java b/patterns/design-patterns-structural/src/main/java/com/baeldung/proxy/ExpensiveObjectProxy.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/proxy/ExpensiveObjectProxy.java
rename to patterns/design-patterns-structural/src/main/java/com/baeldung/proxy/ExpensiveObjectProxy.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/proxy/ProxyPatternDriver.java b/patterns/design-patterns-structural/src/main/java/com/baeldung/proxy/ProxyPatternDriver.java
similarity index 100%
rename from patterns/design-patterns/src/main/java/com/baeldung/proxy/ProxyPatternDriver.java
rename to patterns/design-patterns-structural/src/main/java/com/baeldung/proxy/ProxyPatternDriver.java
diff --git a/patterns/design-patterns/src/main/java/com/baeldung/util/LogerUtil.java b/patterns/design-patterns-structural/src/main/java/com/baeldung/util/LoggerUtil.java
similarity index 87%
rename from patterns/design-patterns/src/main/java/com/baeldung/util/LogerUtil.java
rename to patterns/design-patterns-structural/src/main/java/com/baeldung/util/LoggerUtil.java
index 7217a4bc40..9702cba0f5 100644
--- a/patterns/design-patterns/src/main/java/com/baeldung/util/LogerUtil.java
+++ b/patterns/design-patterns-structural/src/main/java/com/baeldung/util/LoggerUtil.java
@@ -8,7 +8,7 @@ import java.util.Properties;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
-public class LogerUtil {
+public class LoggerUtil {
public final static Logger LOG = Logger.getLogger("GLOBAL");
@@ -22,7 +22,7 @@ public class LogerUtil {
props.load(
new BufferedReader(
new InputStreamReader(
- LogerUtil.class.getResourceAsStream("/log4jstructuraldp.properties")
+ LoggerUtil.class.getResourceAsStream("/log4jstructuraldp.properties")
)
)
);
diff --git a/patterns/design-patterns/src/main/resources/log4jstructuraldp.properties b/patterns/design-patterns-structural/src/main/resources/log4jstructuraldp.properties
similarity index 100%
rename from patterns/design-patterns/src/main/resources/log4jstructuraldp.properties
rename to patterns/design-patterns-structural/src/main/resources/log4jstructuraldp.properties
diff --git a/patterns/design-patterns/src/test/java/com/baeldung/AdapterPatternIntegrationTest.java b/patterns/design-patterns-structural/src/test/java/com/baeldung/adapter/AdapterPatternIntegrationTest.java
similarity index 75%
rename from patterns/design-patterns/src/test/java/com/baeldung/AdapterPatternIntegrationTest.java
rename to patterns/design-patterns-structural/src/test/java/com/baeldung/adapter/AdapterPatternIntegrationTest.java
index 78a1492d83..536caf7341 100644
--- a/patterns/design-patterns/src/test/java/com/baeldung/AdapterPatternIntegrationTest.java
+++ b/patterns/design-patterns-structural/src/test/java/com/baeldung/adapter/AdapterPatternIntegrationTest.java
@@ -1,16 +1,9 @@
-package com.baeldung;
+package com.baeldung.adapter;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
-import com.baeldung.adapter.AstonMartin;
-import com.baeldung.adapter.BugattiVeyron;
-import com.baeldung.adapter.McLaren;
-import com.baeldung.adapter.Movable;
-import com.baeldung.adapter.MovableAdapter;
-import com.baeldung.adapter.MovableAdapterImpl;
-
public class AdapterPatternIntegrationTest {
@Test
public void givenMovableAdapter_WhenConvertingMPHToKMPH_thenSuccessfullyConverted() {
diff --git a/patterns/design-patterns/src/test/java/com/baeldung/BridgePatternIntegrationTest.java b/patterns/design-patterns-structural/src/test/java/com/baeldung/bridge/BridgePatternIntegrationTest.java
similarity index 72%
rename from patterns/design-patterns/src/test/java/com/baeldung/BridgePatternIntegrationTest.java
rename to patterns/design-patterns-structural/src/test/java/com/baeldung/bridge/BridgePatternIntegrationTest.java
index adcb5cdd2c..814a91c070 100644
--- a/patterns/design-patterns/src/test/java/com/baeldung/BridgePatternIntegrationTest.java
+++ b/patterns/design-patterns-structural/src/test/java/com/baeldung/bridge/BridgePatternIntegrationTest.java
@@ -1,15 +1,9 @@
-package com.baeldung;
+package com.baeldung.bridge;
import static org.junit.Assert.*;
import org.junit.Test;
-import com.baeldung.bridge.Blue;
-import com.baeldung.bridge.Red;
-import com.baeldung.bridge.Shape;
-import com.baeldung.bridge.Square;
-import com.baeldung.bridge.Triangle;
-
public class BridgePatternIntegrationTest {
@Test
diff --git a/patterns/design-patterns/src/test/java/com/baeldung/DecoratorPatternIntegrationTest.java b/patterns/design-patterns-structural/src/test/java/com/baeldung/decorator/DecoratorPatternIntegrationTest.java
similarity index 75%
rename from patterns/design-patterns/src/test/java/com/baeldung/DecoratorPatternIntegrationTest.java
rename to patterns/design-patterns-structural/src/test/java/com/baeldung/decorator/DecoratorPatternIntegrationTest.java
index 23a717ae2e..0f2e262346 100644
--- a/patterns/design-patterns/src/test/java/com/baeldung/DecoratorPatternIntegrationTest.java
+++ b/patterns/design-patterns-structural/src/test/java/com/baeldung/decorator/DecoratorPatternIntegrationTest.java
@@ -1,14 +1,9 @@
-package com.baeldung;
+package com.baeldung.decorator;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
-import com.baeldung.decorator.BubbleLights;
-import com.baeldung.decorator.ChristmasTree;
-import com.baeldung.decorator.ChristmasTreeImpl;
-import com.baeldung.decorator.Garland;
-
public class DecoratorPatternIntegrationTest {
@Test
public void givenDecoratorPattern_WhenDecoratorsInjectedAtRuntime_thenConfigSuccess() {
diff --git a/patterns/design-patterns/src/test/java/com/baeldung/facade/CarEngineFacadeIntegrationTest.java b/patterns/design-patterns-structural/src/test/java/com/baeldung/facade/CarEngineFacadeIntegrationTest.java
similarity index 100%
rename from patterns/design-patterns/src/test/java/com/baeldung/facade/CarEngineFacadeIntegrationTest.java
rename to patterns/design-patterns-structural/src/test/java/com/baeldung/facade/CarEngineFacadeIntegrationTest.java
diff --git a/patterns/design-patterns/src/test/java/com/baeldung/ProxyPatternIntegrationTest.java b/patterns/design-patterns-structural/src/test/java/com/baeldung/proxy/ProxyPatternIntegrationTest.java
similarity index 87%
rename from patterns/design-patterns/src/test/java/com/baeldung/ProxyPatternIntegrationTest.java
rename to patterns/design-patterns-structural/src/test/java/com/baeldung/proxy/ProxyPatternIntegrationTest.java
index c035793b64..6db19f7cea 100644
--- a/patterns/design-patterns/src/test/java/com/baeldung/ProxyPatternIntegrationTest.java
+++ b/patterns/design-patterns-structural/src/test/java/com/baeldung/proxy/ProxyPatternIntegrationTest.java
@@ -1,6 +1,6 @@
-package com.baeldung;
+package com.baeldung.proxy;
-import static com.baeldung.util.LogerUtil.LOG;
+import static com.baeldung.util.LoggerUtil.LOG;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
@@ -11,9 +11,6 @@ import org.junit.After;
import org.junit.Before;
import org.junit.Test;
-import com.baeldung.proxy.ExpensiveObject;
-import com.baeldung.proxy.ExpensiveObjectProxy;
-
public class ProxyPatternIntegrationTest {
public static TestAppenderDP appender;
diff --git a/patterns/design-patterns/src/test/java/com/baeldung/TestAppenderDP.java b/patterns/design-patterns-structural/src/test/java/com/baeldung/proxy/TestAppenderDP.java
similarity index 95%
rename from patterns/design-patterns/src/test/java/com/baeldung/TestAppenderDP.java
rename to patterns/design-patterns-structural/src/test/java/com/baeldung/proxy/TestAppenderDP.java
index 2b3bc47292..1c6d9a2064 100644
--- a/patterns/design-patterns/src/test/java/com/baeldung/TestAppenderDP.java
+++ b/patterns/design-patterns-structural/src/test/java/com/baeldung/proxy/TestAppenderDP.java
@@ -1,4 +1,4 @@
-package com.baeldung;
+package com.baeldung.proxy;
import java.util.ArrayList;
import java.util.List;
diff --git a/patterns/design-patterns/README.md b/patterns/design-patterns/README.md
deleted file mode 100644
index 1c611f05d2..0000000000
--- a/patterns/design-patterns/README.md
+++ /dev/null
@@ -1,23 +0,0 @@
-### Relevant Articles:
-- [Facade Design Pattern in Java](http://www.baeldung.com/java-facade-pattern)
-- [Singletons in Java](http://www.baeldung.com/java-singleton)
-- [Proxy, Decorator, Adapter and Bridge Patterns](http://www.baeldung.com/java-structural-design-patterns)
-- [Introduction to Creational Design Patterns](http://www.baeldung.com/creational-design-patterns)
-- [The Observer Pattern in Java](http://www.baeldung.com/java-observer-pattern)
-- [Flyweight Pattern in Java](http://www.baeldung.com/java-flyweight)
-- [Service Locator Pattern](http://www.baeldung.com/java-service-locator-pattern)
-- [Double-Checked Locking with Singleton](http://www.baeldung.com/java-singleton-double-checked-locking)
-- [Composite Design Pattern in Java](http://www.baeldung.com/java-composite-pattern)
-- [Visitor Design Pattern in Java](http://www.baeldung.com/java-visitor-pattern)
-- [The DAO Pattern in Java](http://www.baeldung.com/java-dao-pattern)
-- [Interpreter Design Pattern in Java](http://www.baeldung.com/java-interpreter-pattern)
-- [State Design Pattern in Java](https://www.baeldung.com/java-state-design-pattern)
-- [The Decorator Pattern in Java](https://www.baeldung.com/java-decorator-pattern)
-- [Abstract Factory Pattern in Java](https://www.baeldung.com/java-abstract-factory-pattern)
-- [Implementing the Template Method Pattern in Java](http://www.baeldung.com/java-template-method-pattern)
-- [Chain of Responsibility Design Pattern in Java](http://www.baeldung.com/chain-of-responsibility-pattern)
-- [The Command Pattern in Java](http://www.baeldung.com/java-command-pattern)
-- [Java Constructors vs Static Factory Methods](https://www.baeldung.com/java-constructors-vs-static-factory-methods)
-- [The Adapter Pattern in Java](https://www.baeldung.com/java-adapter-pattern)
-- [Currying in Java](https://www.baeldung.com/java-currying)
-- [The Proxy Pattern in Java](https://www.baeldung.com/java-proxy-pattern)
diff --git a/patterns/pom.xml b/patterns/pom.xml
index 7f7368ca07..196c3c3319 100644
--- a/patterns/pom.xml
+++ b/patterns/pom.xml
@@ -16,8 +16,12 @@
front-controller
intercepting-filter
- design-patterns
- design-patterns-2
+ design-patterns-architectural
+ design-patterns-behavioral
+ design-patterns-behavioral-2
+ design-patterns-creational
+ design-patterns-functional
+ design-patterns-structural
solid
dip
backoff-jitter
diff --git a/persistence-modules/java-cassandra/README.md b/persistence-modules/java-cassandra/README.md
index 3ab6f5f099..f3710c9d69 100644
--- a/persistence-modules/java-cassandra/README.md
+++ b/persistence-modules/java-cassandra/README.md
@@ -1,2 +1,3 @@
### Relevant Articles:
- [A Guide to Cassandra with Java](http://www.baeldung.com/cassandra-with-java)
+- [Intro to DataStax Java Driver for Apache Cassandra](https://www.baeldung.com/cassandra-datastax-java-driver)
diff --git a/persistence-modules/java-sql2o/README.md b/persistence-modules/persistence-libraries/README.md
similarity index 100%
rename from persistence-modules/java-sql2o/README.md
rename to persistence-modules/persistence-libraries/README.md
diff --git a/persistence-modules/java-sql2o/pom.xml b/persistence-modules/persistence-libraries/pom.xml
similarity index 97%
rename from persistence-modules/java-sql2o/pom.xml
rename to persistence-modules/persistence-libraries/pom.xml
index fe5a0e5dc8..cce051f303 100644
--- a/persistence-modules/java-sql2o/pom.xml
+++ b/persistence-modules/persistence-libraries/pom.xml
@@ -2,7 +2,7 @@
4.0.0
- java-sql2o
+ persistence-libraries
1.0-SNAPSHOT
diff --git a/persistence-modules/java-sql2o/src/test/java/com/baeldung/persistence/sql2o/Sql2oIntegrationTest.java b/persistence-modules/persistence-libraries/src/test/java/com/baeldung/persistence/sql2o/Sql2oIntegrationTest.java
similarity index 100%
rename from persistence-modules/java-sql2o/src/test/java/com/baeldung/persistence/sql2o/Sql2oIntegrationTest.java
rename to persistence-modules/persistence-libraries/src/test/java/com/baeldung/persistence/sql2o/Sql2oIntegrationTest.java
diff --git a/persistence-modules/pom.xml b/persistence-modules/pom.xml
index 9ae24efcc1..5dd0611f41 100644
--- a/persistence-modules/pom.xml
+++ b/persistence-modules/pom.xml
@@ -30,7 +30,7 @@
java-jpa
java-jpa-2
java-mongodb
- java-sql2o
+ persistence-libraries
jnosql
liquibase
orientdb
@@ -59,7 +59,7 @@
spring-jpa
spring-persistence-simple
jpa-hibernate-cascade-type
- r2dbc
+ r2dbc
spring-boot-jdbi
diff --git a/pom.xml b/pom.xml
index 7f92acef6c..b3701016d1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -408,6 +408,7 @@
core-java-modules/core-java-lang-2
core-java-modules/core-java-lang-oop
core-java-modules/core-java-lang-oop-2
+ core-java-modules/core-java-lang-oop-3
core-java-modules
core-java-modules/core-java-networking
core-java-modules/core-java-perf
@@ -442,6 +443,7 @@
grpc
gson
guava
+ guava-io
guava-collections
guava-collections-set
guava-modules
@@ -1135,6 +1137,7 @@
core-java-modules/core-java-lang-2
core-java-modules/core-java-lang-oop
core-java-modules/core-java-lang-oop-2
+ core-java-modules/core-java-lang-oop-3
core-java-modules
core-java-modules/core-java-networking
core-java-modules/core-java-perf
@@ -1166,6 +1169,7 @@
grpc
gson
guava
+ guava-io
guava-collections
guava-collections-set
guava-modules
diff --git a/spring-5/src/test/java/com/baeldung/connectionpool/ApplicationWithHikariConnectionPool.java b/spring-4/src/test/java/com/baeldung/hikari/ApplicationWithHikariConnectionPool.java
similarity index 89%
rename from spring-5/src/test/java/com/baeldung/connectionpool/ApplicationWithHikariConnectionPool.java
rename to spring-4/src/test/java/com/baeldung/hikari/ApplicationWithHikariConnectionPool.java
index 0bd8637681..7f8736ae87 100644
--- a/spring-5/src/test/java/com/baeldung/connectionpool/ApplicationWithHikariConnectionPool.java
+++ b/spring-4/src/test/java/com/baeldung/hikari/ApplicationWithHikariConnectionPool.java
@@ -1,4 +1,4 @@
-package com.baeldung.connectionpool;
+package com.baeldung.hikari;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
diff --git a/spring-4/src/test/java/com/baeldung/connectionpool/HikariIntegrationTest.java b/spring-4/src/test/java/com/baeldung/hikari/HikariIntegrationTest.java
similarity index 95%
rename from spring-4/src/test/java/com/baeldung/connectionpool/HikariIntegrationTest.java
rename to spring-4/src/test/java/com/baeldung/hikari/HikariIntegrationTest.java
index 0cc876d5b1..e3ed608521 100644
--- a/spring-4/src/test/java/com/baeldung/connectionpool/HikariIntegrationTest.java
+++ b/spring-4/src/test/java/com/baeldung/hikari/HikariIntegrationTest.java
@@ -1,4 +1,4 @@
-package com.baeldung.connectionpool;
+package com.baeldung.hikari;
import static org.junit.Assert.*;
diff --git a/spring-5-data-reactive/pom.xml b/spring-5-data-reactive/pom.xml
index 5372803842..296da87529 100644
--- a/spring-5-data-reactive/pom.xml
+++ b/spring-5-data-reactive/pom.xml
@@ -14,6 +14,14 @@
+
+ io.projectreactor
+ reactor-core
+
+
+ org.springframework.boot
+ spring-boot-starter-data-couchbase-reactive
+
org.springframework.boot
spring-boot-starter-data-mongodb-reactive
@@ -105,6 +113,12 @@
httpclient
${httpclient.version}
+
+ com.couchbase.mock
+ CouchbaseMock
+ ${couchbaseMock.version}
+ test
+
@@ -224,6 +238,7 @@
0.8.0.M8
4.5.2
1.4.199
+ 1.5.23
diff --git a/spring-5-data-reactive/src/main/java/com/baeldung/couchbase/ReactiveCouchbaseApplication.java b/spring-5-data-reactive/src/main/java/com/baeldung/couchbase/ReactiveCouchbaseApplication.java
new file mode 100644
index 0000000000..917bcfdaa8
--- /dev/null
+++ b/spring-5-data-reactive/src/main/java/com/baeldung/couchbase/ReactiveCouchbaseApplication.java
@@ -0,0 +1,12 @@
+package com.baeldung.couchbase;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class ReactiveCouchbaseApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(ReactiveCouchbaseApplication.class, args);
+ }
+}
diff --git a/spring-5-data-reactive/src/main/java/com/baeldung/couchbase/configuration/CouchbaseProperties.java b/spring-5-data-reactive/src/main/java/com/baeldung/couchbase/configuration/CouchbaseProperties.java
new file mode 100644
index 0000000000..480c96e986
--- /dev/null
+++ b/spring-5-data-reactive/src/main/java/com/baeldung/couchbase/configuration/CouchbaseProperties.java
@@ -0,0 +1,40 @@
+package com.baeldung.couchbase.configuration;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.Collections;
+import java.util.List;
+
+@Configuration
+public class CouchbaseProperties {
+
+ private final List bootstrapHosts;
+ private final String bucketName;
+ private final String bucketPassword;
+ private final int port;
+
+ public CouchbaseProperties(@Value("${spring.couchbase.bootstrap-hosts}") final List bootstrapHosts, @Value("${spring.couchbase.bucket.name}") final String bucketName, @Value("${spring.couchbase.bucket.password}") final String bucketPassword,
+ @Value("${spring.couchbase.port}") final int port) {
+ this.bootstrapHosts = Collections.unmodifiableList(bootstrapHosts);
+ this.bucketName = bucketName;
+ this.bucketPassword = bucketPassword;
+ this.port = port;
+ }
+
+ public List getBootstrapHosts() {
+ return bootstrapHosts;
+ }
+
+ public String getBucketName() {
+ return bucketName;
+ }
+
+ public String getBucketPassword() {
+ return bucketPassword;
+ }
+
+ public int getPort() {
+ return port;
+ }
+}
diff --git a/spring-5-data-reactive/src/main/java/com/baeldung/couchbase/configuration/N1QLReactiveCouchbaseConfiguration.java b/spring-5-data-reactive/src/main/java/com/baeldung/couchbase/configuration/N1QLReactiveCouchbaseConfiguration.java
new file mode 100644
index 0000000000..059bd36cae
--- /dev/null
+++ b/spring-5-data-reactive/src/main/java/com/baeldung/couchbase/configuration/N1QLReactiveCouchbaseConfiguration.java
@@ -0,0 +1,15 @@
+package com.baeldung.couchbase.configuration;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+import org.springframework.data.couchbase.repository.config.EnableReactiveCouchbaseRepositories;
+
+@Configuration
+@EnableReactiveCouchbaseRepositories("com.baeldung.couchbase.domain.repository.n1ql")
+@Primary
+public class N1QLReactiveCouchbaseConfiguration extends ReactiveCouchbaseConfiguration {
+
+ public N1QLReactiveCouchbaseConfiguration(CouchbaseProperties couchbaseProperties) {
+ super(couchbaseProperties);
+ }
+}
diff --git a/spring-5-data-reactive/src/main/java/com/baeldung/couchbase/configuration/ReactiveCouchbaseConfiguration.java b/spring-5-data-reactive/src/main/java/com/baeldung/couchbase/configuration/ReactiveCouchbaseConfiguration.java
new file mode 100644
index 0000000000..2f3b5486d8
--- /dev/null
+++ b/spring-5-data-reactive/src/main/java/com/baeldung/couchbase/configuration/ReactiveCouchbaseConfiguration.java
@@ -0,0 +1,39 @@
+package com.baeldung.couchbase.configuration;
+
+import com.couchbase.client.java.env.CouchbaseEnvironment;
+import com.couchbase.client.java.env.DefaultCouchbaseEnvironment;
+import org.springframework.data.couchbase.config.AbstractReactiveCouchbaseConfiguration;
+
+import java.util.List;
+
+public abstract class ReactiveCouchbaseConfiguration extends AbstractReactiveCouchbaseConfiguration {
+
+ private CouchbaseProperties couchbaseProperties;
+
+ public ReactiveCouchbaseConfiguration(final CouchbaseProperties couchbaseProperties) {
+ this.couchbaseProperties = couchbaseProperties;
+ }
+
+ @Override
+ protected List getBootstrapHosts() {
+ return couchbaseProperties.getBootstrapHosts();
+ }
+
+ @Override
+ protected String getBucketName() {
+ return couchbaseProperties.getBucketName();
+ }
+
+ @Override
+ protected String getBucketPassword() {
+ return couchbaseProperties.getBucketPassword();
+ }
+
+ @Override
+ public CouchbaseEnvironment couchbaseEnvironment() {
+ return DefaultCouchbaseEnvironment
+ .builder()
+ .bootstrapHttpDirectPort(couchbaseProperties.getPort())
+ .build();
+ }
+}
diff --git a/spring-5-data-reactive/src/main/java/com/baeldung/couchbase/configuration/ViewReactiveCouchbaseConfiguration.java b/spring-5-data-reactive/src/main/java/com/baeldung/couchbase/configuration/ViewReactiveCouchbaseConfiguration.java
new file mode 100644
index 0000000000..9b4d9b0319
--- /dev/null
+++ b/spring-5-data-reactive/src/main/java/com/baeldung/couchbase/configuration/ViewReactiveCouchbaseConfiguration.java
@@ -0,0 +1,13 @@
+package com.baeldung.couchbase.configuration;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.couchbase.repository.config.EnableReactiveCouchbaseRepositories;
+
+@Configuration
+@EnableReactiveCouchbaseRepositories("com.baeldung.couchbase.domain.repository.view")
+public class ViewReactiveCouchbaseConfiguration extends ReactiveCouchbaseConfiguration {
+
+ public ViewReactiveCouchbaseConfiguration(CouchbaseProperties couchbaseProperties) {
+ super(couchbaseProperties);
+ }
+}
diff --git a/spring-5-data-reactive/src/main/java/com/baeldung/couchbase/domain/Person.java b/spring-5-data-reactive/src/main/java/com/baeldung/couchbase/domain/Person.java
new file mode 100644
index 0000000000..285de34df8
--- /dev/null
+++ b/spring-5-data-reactive/src/main/java/com/baeldung/couchbase/domain/Person.java
@@ -0,0 +1,43 @@
+package com.baeldung.couchbase.domain;
+
+import org.springframework.data.annotation.Id;
+import org.springframework.data.couchbase.core.mapping.Document;
+
+import java.util.Objects;
+import java.util.UUID;
+
+@Document
+public class Person {
+
+ @Id private UUID id;
+ private String firstName;
+
+ public Person(final UUID id, final String firstName) {
+ this.id = id;
+ this.firstName = firstName;
+ }
+
+ private Person() {
+ }
+
+ public UUID getId() {
+ return id;
+ }
+
+ public String getFirstName() {
+ return firstName;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ Person person = (Person) o;
+ return Objects.equals(id, person.id) && Objects.equals(firstName, person.firstName);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(id, firstName);
+ }
+}
diff --git a/spring-5-data-reactive/src/main/java/com/baeldung/couchbase/domain/repository/n1ql/N1QLPersonRepository.java b/spring-5-data-reactive/src/main/java/com/baeldung/couchbase/domain/repository/n1ql/N1QLPersonRepository.java
new file mode 100644
index 0000000000..6f73a77ceb
--- /dev/null
+++ b/spring-5-data-reactive/src/main/java/com/baeldung/couchbase/domain/repository/n1ql/N1QLPersonRepository.java
@@ -0,0 +1,16 @@
+package com.baeldung.couchbase.domain.repository.n1ql;
+
+import com.baeldung.couchbase.domain.Person;
+import org.springframework.data.couchbase.core.query.N1qlPrimaryIndexed;
+import org.springframework.data.repository.reactive.ReactiveCrudRepository;
+import org.springframework.stereotype.Repository;
+import reactor.core.publisher.Flux;
+
+import java.util.UUID;
+
+@Repository
+@N1qlPrimaryIndexed
+public interface N1QLPersonRepository extends ReactiveCrudRepository {
+
+ Flux findAllByFirstName(final String firstName);
+}
diff --git a/spring-5-data-reactive/src/main/java/com/baeldung/couchbase/domain/repository/n1ql/N1QLSortingPersonRepository.java b/spring-5-data-reactive/src/main/java/com/baeldung/couchbase/domain/repository/n1ql/N1QLSortingPersonRepository.java
new file mode 100644
index 0000000000..57dd149425
--- /dev/null
+++ b/spring-5-data-reactive/src/main/java/com/baeldung/couchbase/domain/repository/n1ql/N1QLSortingPersonRepository.java
@@ -0,0 +1,13 @@
+package com.baeldung.couchbase.domain.repository.n1ql;
+
+import com.baeldung.couchbase.domain.Person;
+import org.springframework.data.couchbase.core.query.N1qlPrimaryIndexed;
+import org.springframework.data.repository.reactive.ReactiveSortingRepository;
+import org.springframework.stereotype.Repository;
+
+import java.util.UUID;
+
+@Repository
+@N1qlPrimaryIndexed
+public interface N1QLSortingPersonRepository extends ReactiveSortingRepository {
+}
diff --git a/spring-5-data-reactive/src/main/java/com/baeldung/couchbase/domain/repository/view/ViewPersonRepository.java b/spring-5-data-reactive/src/main/java/com/baeldung/couchbase/domain/repository/view/ViewPersonRepository.java
new file mode 100644
index 0000000000..28a7ec1b78
--- /dev/null
+++ b/spring-5-data-reactive/src/main/java/com/baeldung/couchbase/domain/repository/view/ViewPersonRepository.java
@@ -0,0 +1,20 @@
+package com.baeldung.couchbase.domain.repository.view;
+
+import com.baeldung.couchbase.domain.Person;
+import org.springframework.data.couchbase.core.query.View;
+import org.springframework.data.couchbase.core.query.ViewIndexed;
+import org.springframework.data.repository.reactive.ReactiveCrudRepository;
+import org.springframework.stereotype.Repository;
+import reactor.core.publisher.Flux;
+
+import java.util.UUID;
+
+@Repository
+@ViewIndexed(designDoc = ViewPersonRepository.DESIGN_DOCUMENT)
+public interface ViewPersonRepository extends ReactiveCrudRepository {
+
+ String DESIGN_DOCUMENT = "persons";
+
+ @View(designDocument = ViewPersonRepository.DESIGN_DOCUMENT)
+ Flux findByFirstName(String firstName);
+}
diff --git a/spring-5-data-reactive/src/test/java/com/baeldung/couchbase/domain/repository/CouchbaseMockConfiguration.java b/spring-5-data-reactive/src/test/java/com/baeldung/couchbase/domain/repository/CouchbaseMockConfiguration.java
new file mode 100644
index 0000000000..2a09fce4b0
--- /dev/null
+++ b/spring-5-data-reactive/src/test/java/com/baeldung/couchbase/domain/repository/CouchbaseMockConfiguration.java
@@ -0,0 +1,54 @@
+package com.baeldung.couchbase.domain.repository;
+
+import com.baeldung.couchbase.configuration.CouchbaseProperties;
+import com.couchbase.mock.Bucket;
+import com.couchbase.mock.BucketConfiguration;
+import com.couchbase.mock.CouchbaseMock;
+import org.springframework.boot.test.context.TestConfiguration;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.PreDestroy;
+import java.io.IOException;
+import java.io.UncheckedIOException;
+import java.util.Collections;
+
+@TestConfiguration
+public class CouchbaseMockConfiguration {
+
+ private CouchbaseMock couchbaseMock;
+
+ public CouchbaseMockConfiguration(final CouchbaseProperties couchbaseProperties) {
+ final BucketConfiguration bucketConfiguration = new BucketConfiguration();
+ bucketConfiguration.numNodes = 1;
+ bucketConfiguration.numReplicas = 1;
+ bucketConfiguration.numVBuckets = 1024;
+ bucketConfiguration.name = couchbaseProperties.getBucketName();
+ bucketConfiguration.type = Bucket.BucketType.COUCHBASE;
+ bucketConfiguration.password = couchbaseProperties.getBucketPassword();
+
+ try {
+ couchbaseMock = new CouchbaseMock(couchbaseProperties.getPort(), Collections.singletonList(bucketConfiguration));
+ } catch (final IOException ex) {
+ throw new UncheckedIOException(ex);
+ }
+ }
+
+ @PostConstruct
+ public void postConstruct() {
+ try {
+ couchbaseMock.start();
+ } catch (final IOException ex) {
+ throw new UncheckedIOException(ex);
+ }
+ try {
+ couchbaseMock.waitForStartup();
+ } catch (final InterruptedException ex) {
+ throw new RuntimeException(ex);
+ }
+ }
+
+ @PreDestroy
+ public void preDestroy() {
+ couchbaseMock.stop();
+ }
+}
diff --git a/spring-5-data-reactive/src/test/java/com/baeldung/couchbase/domain/repository/n1ql/N1QLPersonRepositoryLiveTest.java b/spring-5-data-reactive/src/test/java/com/baeldung/couchbase/domain/repository/n1ql/N1QLPersonRepositoryLiveTest.java
new file mode 100644
index 0000000000..0c1b6bde6c
--- /dev/null
+++ b/spring-5-data-reactive/src/test/java/com/baeldung/couchbase/domain/repository/n1ql/N1QLPersonRepositoryLiveTest.java
@@ -0,0 +1,55 @@
+package com.baeldung.couchbase.domain.repository.n1ql;
+
+import com.baeldung.couchbase.domain.Person;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+import reactor.core.publisher.Flux;
+import reactor.test.StepVerifier;
+
+import java.util.UUID;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class N1QLPersonRepositoryLiveTest {
+
+ @Autowired private N1QLPersonRepository personRepository;
+
+ @Test
+ public void shouldFindAll_byLastName() {
+ //Given
+ final String firstName = "John";
+ final Person matchingPerson = new Person(UUID.randomUUID(), firstName);
+ final Person nonMatchingPerson = new Person(UUID.randomUUID(), "NotJohn");
+ wrap(() -> {
+ personRepository
+ .save(matchingPerson)
+ .subscribe();
+ personRepository
+ .save(nonMatchingPerson)
+ .subscribe();
+ //When
+ final Flux allByFirstName = personRepository.findAllByFirstName(firstName);
+ //Then
+ StepVerifier
+ .create(allByFirstName)
+ .expectNext(matchingPerson)
+ .verifyComplete();
+
+ }, matchingPerson, nonMatchingPerson);
+ }
+
+ private void wrap(final Runnable runnable, final Person... people) {
+ try {
+ runnable.run();
+ } finally {
+ for (final Person person : people) {
+ personRepository
+ .delete(person)
+ .subscribe();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/spring-5-data-reactive/src/test/java/com/baeldung/couchbase/domain/repository/n1ql/N1QLSortingPersonRepositoryLiveTest.java b/spring-5-data-reactive/src/test/java/com/baeldung/couchbase/domain/repository/n1ql/N1QLSortingPersonRepositoryLiveTest.java
new file mode 100644
index 0000000000..4ba2206e0a
--- /dev/null
+++ b/spring-5-data-reactive/src/test/java/com/baeldung/couchbase/domain/repository/n1ql/N1QLSortingPersonRepositoryLiveTest.java
@@ -0,0 +1,60 @@
+package com.baeldung.couchbase.domain.repository.n1ql;
+
+import com.baeldung.couchbase.domain.Person;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.data.domain.Sort;
+import org.springframework.test.context.junit4.SpringRunner;
+import reactor.core.publisher.Flux;
+import reactor.test.StepVerifier;
+
+import java.util.UUID;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class N1QLSortingPersonRepositoryLiveTest {
+
+ @Autowired private N1QLSortingPersonRepository personRepository;
+
+ @Test
+ public void shouldFindAll_sortedByFirstName() {
+ //Given
+ final Person firstPerson = new Person(UUID.randomUUID(), "John");
+ final Person secondPerson = new Person(UUID.randomUUID(), "Mikki");
+ wrap(() -> {
+ personRepository
+ .save(firstPerson)
+ .subscribe();
+ personRepository
+ .save(secondPerson)
+ .subscribe();
+ //When
+ final Flux allByFirstName = personRepository.findAll(Sort.by(Sort.Direction.DESC, "firstName"));
+ //Then
+ StepVerifier
+ .create(allByFirstName)
+ .expectNextMatches(person -> person
+ .getFirstName()
+ .equals(secondPerson.getFirstName()))
+ .expectNextMatches(person -> person
+ .getFirstName()
+ .equals(firstPerson.getFirstName()))
+ .verifyComplete();
+ }, firstPerson, secondPerson);
+ }
+
+ //workaround for deleteAll()
+ private void wrap(final Runnable runnable, final Person... people) {
+ try {
+ runnable.run();
+ } finally {
+ for (final Person person : people) {
+ personRepository
+ .delete(person)
+ .subscribe();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/spring-5-data-reactive/src/test/java/com/baeldung/couchbase/domain/repository/view/ViewPersonRepositoryIntegrationTest.java b/spring-5-data-reactive/src/test/java/com/baeldung/couchbase/domain/repository/view/ViewPersonRepositoryIntegrationTest.java
new file mode 100644
index 0000000000..712e7b0d37
--- /dev/null
+++ b/spring-5-data-reactive/src/test/java/com/baeldung/couchbase/domain/repository/view/ViewPersonRepositoryIntegrationTest.java
@@ -0,0 +1,79 @@
+package com.baeldung.couchbase.domain.repository.view;
+
+import com.baeldung.couchbase.configuration.CouchbaseProperties;
+import com.baeldung.couchbase.configuration.ViewReactiveCouchbaseConfiguration;
+import com.baeldung.couchbase.domain.Person;
+import com.baeldung.couchbase.domain.repository.CouchbaseMockConfiguration;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+import reactor.core.publisher.Flux;
+import reactor.core.publisher.Mono;
+import reactor.test.StepVerifier;
+
+import java.util.UUID;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest(properties = { "spring.couchbase.port=10010" }, classes = { ViewReactiveCouchbaseConfiguration.class, CouchbaseProperties.class, CouchbaseMockConfiguration.class })
+public class ViewPersonRepositoryIntegrationTest {
+
+ @Autowired private ViewPersonRepository personRepository;
+
+ @Test
+ public void shouldSavePerson_findById_thenDeleteIt() {
+ //Given
+ final UUID id = UUID.randomUUID();
+ final Person person = new Person(id, "John");
+ wrap(() -> {
+ personRepository
+ .save(person)
+ .subscribe();
+ //When
+ final Mono byId = personRepository.findById(id);
+ //Then
+ StepVerifier
+ .create(byId)
+ .expectNextMatches(result -> result
+ .getId()
+ .equals(id))
+ .expectComplete()
+ .verify();
+ }, person);
+ }
+
+ @Test
+ public void shouldFindAll_thenDeleteIt() {
+ //Given
+ final Person person = new Person(UUID.randomUUID(), "John");
+ final Person secondPerson = new Person(UUID.randomUUID(), "Mikki");
+ wrap(() -> {
+ personRepository
+ .save(person)
+ .subscribe();
+ personRepository
+ .save(secondPerson)
+ .subscribe();
+ //When
+ final Flux all = personRepository.findAll();
+ //Then
+ StepVerifier
+ .create(all)
+ .expectNextCount(2)
+ .verifyComplete();
+ }, person, secondPerson);
+ }
+
+ private void wrap(final Runnable runnable, final Person... people) {
+ try {
+ runnable.run();
+ } finally {
+ for (final Person person : people) {
+ personRepository
+ .delete(person)
+ .subscribe();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/spring-4/src/test/java/com/baeldung/connectionpool/ApplicationWithHikariConnectionPool.java b/spring-5/src/test/java/com/baeldung/hikari/ApplicationWithHikariConnectionPool.java
similarity index 89%
rename from spring-4/src/test/java/com/baeldung/connectionpool/ApplicationWithHikariConnectionPool.java
rename to spring-5/src/test/java/com/baeldung/hikari/ApplicationWithHikariConnectionPool.java
index 0bd8637681..7f8736ae87 100644
--- a/spring-4/src/test/java/com/baeldung/connectionpool/ApplicationWithHikariConnectionPool.java
+++ b/spring-5/src/test/java/com/baeldung/hikari/ApplicationWithHikariConnectionPool.java
@@ -1,4 +1,4 @@
-package com.baeldung.connectionpool;
+package com.baeldung.hikari;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
diff --git a/spring-5/src/test/java/com/baeldung/connectionpool/HikariIntegrationTest.java b/spring-5/src/test/java/com/baeldung/hikari/HikariIntegrationTest.java
similarity index 94%
rename from spring-5/src/test/java/com/baeldung/connectionpool/HikariIntegrationTest.java
rename to spring-5/src/test/java/com/baeldung/hikari/HikariIntegrationTest.java
index d91cca85ee..0c4b91bd8a 100644
--- a/spring-5/src/test/java/com/baeldung/connectionpool/HikariIntegrationTest.java
+++ b/spring-5/src/test/java/com/baeldung/hikari/HikariIntegrationTest.java
@@ -1,4 +1,4 @@
-package com.baeldung.connectionpool;
+package com.baeldung.hikari;
import static org.junit.Assert.*;
diff --git a/spring-all/src/main/java/org/baeldung/spring/config/ScopesConfig.java b/spring-all/src/main/java/org/baeldung/scopes/ScopesConfig.java
similarity index 94%
rename from spring-all/src/main/java/org/baeldung/spring/config/ScopesConfig.java
rename to spring-all/src/main/java/org/baeldung/scopes/ScopesConfig.java
index b5fe494ee2..11d3806b6e 100644
--- a/spring-all/src/main/java/org/baeldung/spring/config/ScopesConfig.java
+++ b/spring-all/src/main/java/org/baeldung/scopes/ScopesConfig.java
@@ -1,7 +1,5 @@
-package org.baeldung.spring.config;
+package org.baeldung.scopes;
-import org.baeldung.scopes.HelloMessageGenerator;
-import org.baeldung.scopes.Person;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
diff --git a/spring-boot/src/main/java/com/baeldung/validation/application/Application.java b/spring-boot/src/main/java/com/baeldung/beanvalidation/application/Application.java
similarity index 78%
rename from spring-boot/src/main/java/com/baeldung/validation/application/Application.java
rename to spring-boot/src/main/java/com/baeldung/beanvalidation/application/Application.java
index af8f768193..b37eec9da0 100644
--- a/spring-boot/src/main/java/com/baeldung/validation/application/Application.java
+++ b/spring-boot/src/main/java/com/baeldung/beanvalidation/application/Application.java
@@ -1,7 +1,8 @@
-package com.baeldung.validation.application;
+package com.baeldung.beanvalidation.application;
+
+import com.baeldung.beanvalidation.application.entities.User;
+import com.baeldung.beanvalidation.application.repositories.UserRepository;
-import com.baeldung.validation.application.entities.User;
-import com.baeldung.validation.application.repositories.UserRepository;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
diff --git a/spring-boot/src/main/java/com/baeldung/validation/application/controllers/UserController.java b/spring-boot/src/main/java/com/baeldung/beanvalidation/application/controllers/UserController.java
similarity index 87%
rename from spring-boot/src/main/java/com/baeldung/validation/application/controllers/UserController.java
rename to spring-boot/src/main/java/com/baeldung/beanvalidation/application/controllers/UserController.java
index a4aeefb70b..0c47e27e25 100644
--- a/spring-boot/src/main/java/com/baeldung/validation/application/controllers/UserController.java
+++ b/spring-boot/src/main/java/com/baeldung/beanvalidation/application/controllers/UserController.java
@@ -1,7 +1,8 @@
-package com.baeldung.validation.application.controllers;
+package com.baeldung.beanvalidation.application.controllers;
+
+import com.baeldung.beanvalidation.application.entities.User;
+import com.baeldung.beanvalidation.application.repositories.UserRepository;
-import com.baeldung.validation.application.entities.User;
-import com.baeldung.validation.application.repositories.UserRepository;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
diff --git a/spring-boot/src/main/java/com/baeldung/validation/application/entities/User.java b/spring-boot/src/main/java/com/baeldung/beanvalidation/application/entities/User.java
similarity index 90%
rename from spring-boot/src/main/java/com/baeldung/validation/application/entities/User.java
rename to spring-boot/src/main/java/com/baeldung/beanvalidation/application/entities/User.java
index 529368f132..8233d08f4e 100644
--- a/spring-boot/src/main/java/com/baeldung/validation/application/entities/User.java
+++ b/spring-boot/src/main/java/com/baeldung/beanvalidation/application/entities/User.java
@@ -1,4 +1,4 @@
-package com.baeldung.validation.application.entities;
+package com.baeldung.beanvalidation.application.entities;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
diff --git a/spring-boot/src/main/java/com/baeldung/validation/application/repositories/UserRepository.java b/spring-boot/src/main/java/com/baeldung/beanvalidation/application/repositories/UserRepository.java
similarity index 59%
rename from spring-boot/src/main/java/com/baeldung/validation/application/repositories/UserRepository.java
rename to spring-boot/src/main/java/com/baeldung/beanvalidation/application/repositories/UserRepository.java
index b579addcaa..8bf7a9f8b2 100644
--- a/spring-boot/src/main/java/com/baeldung/validation/application/repositories/UserRepository.java
+++ b/spring-boot/src/main/java/com/baeldung/beanvalidation/application/repositories/UserRepository.java
@@ -1,8 +1,9 @@
-package com.baeldung.validation.application.repositories;
+package com.baeldung.beanvalidation.application.repositories;
-import com.baeldung.validation.application.entities.User;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
+import com.baeldung.beanvalidation.application.entities.User;
+
@Repository
public interface UserRepository extends CrudRepository {}
diff --git a/spring-boot/src/test/java/com/baeldung/validation/application/UserControllerIntegrationTest.java b/spring-boot/src/test/java/com/baeldung/beanvalidation/application/UserControllerIntegrationTest.java
similarity index 91%
rename from spring-boot/src/test/java/com/baeldung/validation/application/UserControllerIntegrationTest.java
rename to spring-boot/src/test/java/com/baeldung/beanvalidation/application/UserControllerIntegrationTest.java
index 77a230ee6c..07d9b0807e 100644
--- a/spring-boot/src/test/java/com/baeldung/validation/application/UserControllerIntegrationTest.java
+++ b/spring-boot/src/test/java/com/baeldung/beanvalidation/application/UserControllerIntegrationTest.java
@@ -1,7 +1,8 @@
-package com.baeldung.validation.application;
+package com.baeldung.beanvalidation.application;
+
+import com.baeldung.beanvalidation.application.controllers.UserController;
+import com.baeldung.beanvalidation.application.repositories.UserRepository;
-import com.baeldung.validation.application.controllers.UserController;
-import com.baeldung.validation.application.repositories.UserRepository;
import java.nio.charset.Charset;
import static org.assertj.core.api.Assertions.assertThat;
import org.hamcrest.core.Is;
diff --git a/spring-core/src/main/java/com/baeldung/definition/Config.java b/spring-core/src/main/java/com/baeldung/springbean/Config.java
similarity index 74%
rename from spring-core/src/main/java/com/baeldung/definition/Config.java
rename to spring-core/src/main/java/com/baeldung/springbean/Config.java
index 126e6259ca..27275dbb0f 100644
--- a/spring-core/src/main/java/com/baeldung/definition/Config.java
+++ b/spring-core/src/main/java/com/baeldung/springbean/Config.java
@@ -1,11 +1,12 @@
-package com.baeldung.definition;
+package com.baeldung.springbean;
-import com.baeldung.definition.domain.Address;
-import com.baeldung.definition.domain.Company;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
+import com.baeldung.springbean.domain.Address;
+import com.baeldung.springbean.domain.Company;
+
@Configuration
@ComponentScan(basePackageClasses = Company.class)
public class Config {
diff --git a/spring-core/src/main/java/com/baeldung/definition/domain/Address.java b/spring-core/src/main/java/com/baeldung/springbean/domain/Address.java
similarity index 84%
rename from spring-core/src/main/java/com/baeldung/definition/domain/Address.java
rename to spring-core/src/main/java/com/baeldung/springbean/domain/Address.java
index 91be18398e..5704be4bf8 100644
--- a/spring-core/src/main/java/com/baeldung/definition/domain/Address.java
+++ b/spring-core/src/main/java/com/baeldung/springbean/domain/Address.java
@@ -1,4 +1,4 @@
-package com.baeldung.definition.domain;
+package com.baeldung.springbean.domain;
import lombok.Data;
diff --git a/spring-core/src/main/java/com/baeldung/definition/domain/Company.java b/spring-core/src/main/java/com/baeldung/springbean/domain/Company.java
similarity index 84%
rename from spring-core/src/main/java/com/baeldung/definition/domain/Company.java
rename to spring-core/src/main/java/com/baeldung/springbean/domain/Company.java
index eabde8afdf..68c177dab7 100644
--- a/spring-core/src/main/java/com/baeldung/definition/domain/Company.java
+++ b/spring-core/src/main/java/com/baeldung/springbean/domain/Company.java
@@ -1,4 +1,4 @@
-package com.baeldung.definition.domain;
+package com.baeldung.springbean.domain;
import lombok.Data;
import org.springframework.stereotype.Component;
diff --git a/spring-core/src/test/java/com/baeldung/definition/SpringBeanIntegrationTest.java b/spring-core/src/test/java/com/baeldung/springbean/SpringBeanIntegrationTest.java
similarity index 88%
rename from spring-core/src/test/java/com/baeldung/definition/SpringBeanIntegrationTest.java
rename to spring-core/src/test/java/com/baeldung/springbean/SpringBeanIntegrationTest.java
index 0057611308..e148ab2dd9 100644
--- a/spring-core/src/test/java/com/baeldung/definition/SpringBeanIntegrationTest.java
+++ b/spring-core/src/test/java/com/baeldung/springbean/SpringBeanIntegrationTest.java
@@ -1,11 +1,12 @@
-package com.baeldung.definition;
+package com.baeldung.springbean;
+
+import static org.junit.Assert.assertEquals;
-import com.baeldung.definition.domain.Company;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
-import static org.junit.Assert.assertEquals;
+import com.baeldung.springbean.domain.Company;
public class SpringBeanIntegrationTest {
@Test
diff --git a/spring-data-rest-querydsl/pom.xml b/spring-data-rest-querydsl/pom.xml
index 55ff78f0cb..2c75990c65 100644
--- a/spring-data-rest-querydsl/pom.xml
+++ b/spring-data-rest-querydsl/pom.xml
@@ -1,5 +1,6 @@
-
4.0.0
com.baeldung
@@ -44,6 +45,11 @@
spring-boot-starter-test
test
+
+ com.h2database
+ h2
+ test
+
diff --git a/spring-data-rest-querydsl/src/main/java/com/baeldung/Application.java b/spring-data-rest-querydsl/src/main/java/com/baeldung/Application.java
index 28d084a4dc..4b2f567090 100644
--- a/spring-data-rest-querydsl/src/main/java/com/baeldung/Application.java
+++ b/spring-data-rest-querydsl/src/main/java/com/baeldung/Application.java
@@ -13,6 +13,9 @@ import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import javax.annotation.PostConstruct;
+/**
+ * Note: In the IDE, remember to generate query type classes before running the Integration Test (e.g. in Eclipse right-click on the project > Run As > Maven generate sources)
+ */
@SpringBootApplication
@EntityScan("com.baeldung.entity")
@EnableJpaRepositories("com.baeldung.controller.repository")
diff --git a/spring-data-rest-querydsl/src/test/java/org/baeldung/SpringContextIntegrationTest.java b/spring-data-rest-querydsl/src/test/java/com/baeldung/SpringContextTest.java
similarity index 60%
rename from spring-data-rest-querydsl/src/test/java/org/baeldung/SpringContextIntegrationTest.java
rename to spring-data-rest-querydsl/src/test/java/com/baeldung/SpringContextTest.java
index 7f906bdbcd..48c4630fa5 100644
--- a/spring-data-rest-querydsl/src/test/java/org/baeldung/SpringContextIntegrationTest.java
+++ b/spring-data-rest-querydsl/src/test/java/com/baeldung/SpringContextTest.java
@@ -1,4 +1,4 @@
-package org.baeldung;
+package com.baeldung;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -7,9 +7,13 @@ import org.springframework.test.context.junit4.SpringRunner;
import com.baeldung.Application;
+/**
+ * Note: In the IDE, remember to generate query type classes before running the Integration Test (e.g. in Eclipse right-click on the project > Run As > Maven generate sources)
+ *
+ */
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
-public class SpringContextIntegrationTest {
+public class SpringContextTest {
@Test
public void whenSpringContextIsBootstrapped_thenNoExceptions() {
diff --git a/spring-data-rest-querydsl/src/test/java/org/baeldung/SpringContextLiveTest.java b/spring-data-rest-querydsl/src/test/java/org/baeldung/SpringContextLiveTest.java
deleted file mode 100644
index 5cb0a8167e..0000000000
--- a/spring-data-rest-querydsl/src/test/java/org/baeldung/SpringContextLiveTest.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package org.baeldung;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.junit4.SpringRunner;
-
-import com.baeldung.Application;
-
-@RunWith(SpringRunner.class)
-@SpringBootTest(classes = Application.class)
-public class SpringContextLiveTest {
-
- @Test
- public void whenSpringContextIsBootstrapped_thenNoExceptions() {
- }
-}
diff --git a/spring-data-rest-querydsl/src/test/resources/application.yml b/spring-data-rest-querydsl/src/test/resources/application.yml
new file mode 100644
index 0000000000..33b7231838
--- /dev/null
+++ b/spring-data-rest-querydsl/src/test/resources/application.yml
@@ -0,0 +1,11 @@
+spring:
+ datasource:
+ url: jdbc:h2:mem:springcloud
+ username: sa
+ password:
+ jpa:
+ hibernate:
+ ddl-auto: create-drop
+ properties:
+ hibernate:
+ dialect: org.hibernate.dialect.H2Dialect
\ No newline at end of file
diff --git a/spring-ejb/spring-ejb-client/src/test/java/org/baeldung/SpringContextLiveTest.java b/spring-ejb/spring-ejb-client/src/test/java/com/baeldung/SpringContextLiveTest.java
similarity index 71%
rename from spring-ejb/spring-ejb-client/src/test/java/org/baeldung/SpringContextLiveTest.java
rename to spring-ejb/spring-ejb-client/src/test/java/com/baeldung/SpringContextLiveTest.java
index bbd3b6c2ba..4d6724f10f 100644
--- a/spring-ejb/spring-ejb-client/src/test/java/org/baeldung/SpringContextLiveTest.java
+++ b/spring-ejb/spring-ejb-client/src/test/java/com/baeldung/SpringContextLiveTest.java
@@ -1,4 +1,4 @@
-package org.baeldung;
+package com.baeldung;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -7,6 +7,11 @@ import org.springframework.test.context.junit4.SpringRunner;
import com.baeldung.springejbclient.SpringEjbClientApplication;
+/**
+ * This Live Test requires:
+ * * run the `spring-ejb-remote` module with the following command: `mvn clean package cargo:run -Pwildfly-standalone`
+ *
+ */
@RunWith(SpringRunner.class)
@SpringBootTest(classes = SpringEjbClientApplication.class)
public class SpringContextLiveTest {
diff --git a/spring-ejb/spring-ejb-client/src/test/java/org/baeldung/SpringContextIntegrationTest.java b/spring-ejb/spring-ejb-client/src/test/java/org/baeldung/SpringContextIntegrationTest.java
deleted file mode 100644
index 4d2d83646d..0000000000
--- a/spring-ejb/spring-ejb-client/src/test/java/org/baeldung/SpringContextIntegrationTest.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package org.baeldung;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.junit4.SpringRunner;
-
-import com.baeldung.springejbclient.SpringEjbClientApplication;
-
-@RunWith(SpringRunner.class)
-@SpringBootTest(classes = SpringEjbClientApplication.class)
-public class SpringContextIntegrationTest {
-
- @Test
- public void whenSpringContextIsBootstrapped_thenNoExceptions() {
- }
-}
diff --git a/spring-ejb/spring-ejb-remote/pom.xml b/spring-ejb/spring-ejb-remote/pom.xml
index 4f4ddb0b54..4a365180f2 100644
--- a/spring-ejb/spring-ejb-remote/pom.xml
+++ b/spring-ejb/spring-ejb-remote/pom.xml
@@ -1,11 +1,12 @@
-
4.0.0
spring-ejb-remote
- spring-ejb-remote
+ spring-ejb-remote
ejb
-
+
com.baeldung.spring.ejb
spring-ejb
@@ -46,7 +47,7 @@
wildfly10x
- http://download.jboss.org/wildfly/12.0.0.Final/wildfly-12.0.0.Final.zip
+ https://download.jboss.org/wildfly/12.0.0.Final/wildfly-12.0.0.Final.zip
diff --git a/spring-mvc-java/pom.xml b/spring-mvc-java/pom.xml
index cb16e91bc4..ea0acdcb00 100644
--- a/spring-mvc-java/pom.xml
+++ b/spring-mvc-java/pom.xml
@@ -8,17 +8,20 @@
war
- parent-spring-5
+ parent-boot-2
com.baeldung
0.0.1-SNAPSHOT
- ../parent-spring-5
+ ../parent-boot-2
- org.springframework
- spring-webmvc
- ${spring.version}
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.boot
+ spring-boot-starter-tomcat
javax.servlet
@@ -33,7 +36,11 @@
javax.servlet
jstl
- ${jstl.version}
+
+
+ org.apache.tomcat.embed
+ tomcat-embed-jasper
+ provided
@@ -55,17 +62,6 @@
-
- commons-fileupload
- commons-fileupload
- ${commons-fileupload.version}
-
-
- commons-io
- commons-io
-
-
-
net.sourceforge.htmlunit
htmlunit
@@ -106,9 +102,8 @@
2.4.0
- org.springframework
- spring-test
- ${spring.version}
+ org.springframework.boot
+ spring-boot-starter-test
test
@@ -134,15 +129,8 @@
2.8.5
- org.springframework
- spring-websocket
- ${spring.version}
-
-
-
- org.springframework
- spring-messaging
- ${spring.version}
+ org.springframework.boot
+ spring-boot-starter-websocket
org.glassfish
@@ -296,6 +284,7 @@
3.16-beta1
3.0.1-b09
+ com.baeldung.SpringMVCApplication
diff --git a/spring-mvc-java/src/main/java/com/baeldung/SpringMVCApplication.java b/spring-mvc-java/src/main/java/com/baeldung/SpringMVCApplication.java
new file mode 100644
index 0000000000..a456dc125e
--- /dev/null
+++ b/spring-mvc-java/src/main/java/com/baeldung/SpringMVCApplication.java
@@ -0,0 +1,12 @@
+package com.baeldung;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
+
+@SpringBootApplication
+public class SpringMVCApplication extends SpringBootServletInitializer {
+ public static void main(String[] args) {
+ SpringApplication.run(SpringMVCApplication.class, args);
+ }
+}
\ No newline at end of file
diff --git a/spring-mvc-java/src/main/java/com/baeldung/aop/LoggingAspect.java b/spring-mvc-java/src/main/java/com/baeldung/aop/LoggingAspect.java
index 7ae37404be..169d664471 100644
--- a/spring-mvc-java/src/main/java/com/baeldung/aop/LoggingAspect.java
+++ b/spring-mvc-java/src/main/java/com/baeldung/aop/LoggingAspect.java
@@ -23,15 +23,15 @@ public class LoggingAspect {
}
};
- @Pointcut("@target(org.springframework.stereotype.Repository)")
+ @Pointcut("within(com.baeldung..*) && execution(* com.baeldung.dao.FooDao.*(..))")
public void repositoryMethods() {
}
- @Pointcut("@annotation(com.baeldung.aop.annotations.Loggable)")
+ @Pointcut("within(com.baeldung..*) && @annotation(com.baeldung.aop.annotations.Loggable)")
public void loggableMethods() {
}
- @Pointcut("@args(com.baeldung.aop.annotations.Entity)")
+ @Pointcut("within(com.baeldung..*) && @args(com.baeldung.aop.annotations.Entity)")
public void methodsAcceptingEntities() {
}
diff --git a/spring-mvc-java/src/main/java/com/baeldung/aop/PerformanceAspect.java b/spring-mvc-java/src/main/java/com/baeldung/aop/PerformanceAspect.java
index 1f2076adff..8f374cc1e5 100644
--- a/spring-mvc-java/src/main/java/com/baeldung/aop/PerformanceAspect.java
+++ b/spring-mvc-java/src/main/java/com/baeldung/aop/PerformanceAspect.java
@@ -15,7 +15,7 @@ public class PerformanceAspect {
private static Logger logger = Logger.getLogger(PerformanceAspect.class.getName());
- @Pointcut("within(@org.springframework.stereotype.Repository *)")
+ @Pointcut("within(com.baeldung..*) && execution(* com.baeldung.dao.FooDao.*(..))")
public void repositoryClassMethods() {
}
diff --git a/spring-mvc-java/src/main/java/com/baeldung/aop/PublishingAspect.java b/spring-mvc-java/src/main/java/com/baeldung/aop/PublishingAspect.java
index 7791c63e7b..a45402dc18 100644
--- a/spring-mvc-java/src/main/java/com/baeldung/aop/PublishingAspect.java
+++ b/spring-mvc-java/src/main/java/com/baeldung/aop/PublishingAspect.java
@@ -20,11 +20,11 @@ public class PublishingAspect {
this.eventPublisher = eventPublisher;
}
- @Pointcut("@target(org.springframework.stereotype.Repository)")
+ @Pointcut("within(com.baeldung..*) && execution(* com.baeldung.dao.FooDao.*(..))")
public void repositoryMethods() {
}
- @Pointcut("execution(* *..create*(Long,..))")
+ @Pointcut("within(com.baeldung..*) && execution(* com.baeldung.dao.FooDao.create*(Long,..))")
public void firstLongParamMethods() {
}
diff --git a/spring-mvc-java/src/main/java/com/baeldung/config/AppInitializer.java b/spring-mvc-java/src/main/java/com/baeldung/config/AppInitializer.java
deleted file mode 100644
index eec12f466f..0000000000
--- a/spring-mvc-java/src/main/java/com/baeldung/config/AppInitializer.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.baeldung.config;
-
-import org.springframework.web.WebApplicationInitializer;
-import org.springframework.web.context.ContextLoaderListener;
-import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
-import org.springframework.web.servlet.DispatcherServlet;
-
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRegistration;
-
-public class AppInitializer implements WebApplicationInitializer {
-
- @Override
- public void onStartup(ServletContext container) throws ServletException {
- AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
-
- context.scan("com.baeldung");
-
- container.addListener(new ContextLoaderListener(context));
-
- ServletRegistration.Dynamic dispatcher = container.addServlet("mvc", new DispatcherServlet(context));
- dispatcher.setLoadOnStartup(1);
- dispatcher.addMapping("/");
-
- // final MultipartConfigElement multipartConfigElement = new
- // MultipartConfigElement(TMP_FOLDER, MAX_UPLOAD_SIZE,
- // MAX_UPLOAD_SIZE * 2, MAX_UPLOAD_SIZE / 2);
- //
- // appServlet.setMultipartConfig(multipartConfigElement);
- }
-
-}
diff --git a/spring-mvc-java/src/main/java/com/baeldung/spring/web/config/WebConfig.java b/spring-mvc-java/src/main/java/com/baeldung/spring/web/config/WebConfig.java
index 44fef92917..96e300464b 100644
--- a/spring-mvc-java/src/main/java/com/baeldung/spring/web/config/WebConfig.java
+++ b/spring-mvc-java/src/main/java/com/baeldung/spring/web/config/WebConfig.java
@@ -3,9 +3,6 @@ package com.baeldung.spring.web.config;
import java.util.ArrayList;
import java.util.List;
-import javax.servlet.ServletContext;
-
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
@@ -15,7 +12,6 @@ import org.springframework.context.support.ResourceBundleMessageSource;
import org.springframework.http.MediaType;
import org.springframework.http.converter.ByteArrayHttpMessageConverter;
import org.springframework.http.converter.HttpMessageConverter;
-import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.PathMatchConfigurer;
@@ -26,8 +22,9 @@ import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.JstlView;
import org.springframework.web.util.UrlPathHelper;
import org.thymeleaf.spring4.SpringTemplateEngine;
+import org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver;
import org.thymeleaf.spring4.view.ThymeleafViewResolver;
-import org.thymeleaf.templateresolver.ServletContextTemplateResolver;
+import org.thymeleaf.templateresolver.ITemplateResolver;
import com.baeldung.excel.ExcelPOIHelper;
@@ -35,9 +32,6 @@ import com.baeldung.excel.ExcelPOIHelper;
@Configuration
@ComponentScan(basePackages = { "com.baeldung.web.controller" })
public class WebConfig implements WebMvcConfigurer {
-
- @Autowired
- private ServletContext ctx;
@Override
public void addViewControllers(final ViewControllerRegistry registry) {
@@ -64,11 +58,11 @@ public class WebConfig implements WebMvcConfigurer {
@Bean
@Description("Thymeleaf template resolver serving HTML 5")
- public ServletContextTemplateResolver templateResolver() {
- final ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver(ctx);
+ public ITemplateResolver templateResolver() {
+ final SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
templateResolver.setPrefix("/WEB-INF/templates/");
templateResolver.setSuffix(".html");
- templateResolver.setTemplateMode("HTML5");
+ templateResolver.setTemplateMode("HTML");
return templateResolver;
}
@@ -92,15 +86,6 @@ public class WebConfig implements WebMvcConfigurer {
public void addResourceHandlers(final ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
}
-
- @Bean(name = "multipartResolver")
- public CommonsMultipartResolver multipartResolver() {
-
- final CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
- multipartResolver.setMaxUploadSize(100000);
-
- return multipartResolver;
- }
@Override
public void extendMessageConverters(final List> converters) {
diff --git a/spring-mvc-java/src/main/resources/application.properties b/spring-mvc-java/src/main/resources/application.properties
new file mode 100644
index 0000000000..00c491c271
--- /dev/null
+++ b/spring-mvc-java/src/main/resources/application.properties
@@ -0,0 +1,5 @@
+server.servlet.context-path=/spring-mvc-java
+spring.servlet.multipart.max-file-size=1MB
+spring.servlet.multipart.max-request-size=1MB
+spring.servlet.multipart.enabled=true
+spring.servlet.multipart.location=${java.io.tmpdir}
\ No newline at end of file
diff --git a/spring-mvc-java/src/test/java/com/baeldung/SpringContextIntegrationTest.java b/spring-mvc-java/src/test/java/com/baeldung/SpringContextIntegrationTest.java
index 4c06917325..ae91d4dc1e 100644
--- a/spring-mvc-java/src/test/java/com/baeldung/SpringContextIntegrationTest.java
+++ b/spring-mvc-java/src/test/java/com/baeldung/SpringContextIntegrationTest.java
@@ -3,15 +3,12 @@ package com.baeldung;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
-import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
-import org.springframework.test.context.support.AnnotationConfigContextLoader;
-import org.springframework.test.context.web.WebAppConfiguration;
+import org.springframework.test.context.junit4.SpringRunner;
-import com.baeldung.config.AppInitializer;
+import com.baeldung.config.TestConfig;
-@RunWith(SpringJUnit4ClassRunner.class)
-@ContextConfiguration(classes = { AppInitializer.class }, loader = AnnotationConfigContextLoader.class)
-@WebAppConfiguration
+@RunWith(SpringRunner.class)
+@ContextConfiguration(classes = {TestConfig.class})
public class SpringContextIntegrationTest {
@Test
diff --git a/spring-mvc-java/src/test/java/com/baeldung/SpringContextTest.java b/spring-mvc-java/src/test/java/com/baeldung/SpringContextTest.java
index 9777addb61..8943ecb548 100644
--- a/spring-mvc-java/src/test/java/com/baeldung/SpringContextTest.java
+++ b/spring-mvc-java/src/test/java/com/baeldung/SpringContextTest.java
@@ -3,15 +3,12 @@ package com.baeldung;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
-import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
-import org.springframework.test.context.support.AnnotationConfigContextLoader;
-import org.springframework.test.context.web.WebAppConfiguration;
+import org.springframework.test.context.junit4.SpringRunner;
-import com.baeldung.config.AppInitializer;
+import com.baeldung.config.TestConfig;
-@RunWith(SpringJUnit4ClassRunner.class)
-@ContextConfiguration(classes = { AppInitializer.class }, loader = AnnotationConfigContextLoader.class)
-@WebAppConfiguration
+@RunWith(SpringRunner.class)
+@ContextConfiguration(classes = {TestConfig.class})
public class SpringContextTest {
@Test
diff --git a/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/GreetingController.java b/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/GreetingController.java
new file mode 100644
index 0000000000..dfa50fcb26
--- /dev/null
+++ b/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/GreetingController.java
@@ -0,0 +1,16 @@
+package com.baeldung.spring.controller;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+
+@Controller
+public class GreetingController {
+
+ @RequestMapping(value = "/greeting", method = RequestMethod.GET)
+ public String get(ModelMap model) {
+ model.addAttribute("message", "Hello, World!");
+ return "greeting";
+ }
+}
\ No newline at end of file
diff --git a/spring-mvc-xml/src/main/webapp/WEB-INF/view/greeting.jsp b/spring-mvc-xml/src/main/webapp/WEB-INF/view/greeting.jsp
new file mode 100644
index 0000000000..ac17c75ab7
--- /dev/null
+++ b/spring-mvc-xml/src/main/webapp/WEB-INF/view/greeting.jsp
@@ -0,0 +1,9 @@
+<%@ page contentType="text/html;charset=UTF-8" language="java" %>
+
+
+ Greeting
+
+
+ ${message}
+
+
\ No newline at end of file
diff --git a/spring-remoting/remoting-jms/remoting-jms-server/src/test/java/com/baeldung/SpringContextLiveTest.java b/spring-remoting/remoting-jms/remoting-jms-server/src/test/java/com/baeldung/SpringContextLiveTest.java
new file mode 100644
index 0000000000..4904873be2
--- /dev/null
+++ b/spring-remoting/remoting-jms/remoting-jms-server/src/test/java/com/baeldung/SpringContextLiveTest.java
@@ -0,0 +1,23 @@
+package com.baeldung;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import com.baeldung.server.JmsServer;
+
+/**
+ * This Live Test requires:
+ * * the `com.baeldung:remoting-http-api:jar:1.0-SNAPSHOT` artifact accessible. For that we can run `mvn clean install` in the 'spring-remoting/remoting-http/remoting-http-api' module.
+ * * an ActiveMQ instance running (e.g. `docker run -p 61616:61616 -p 8161:8161 --name bael-activemq rmohr/activemq`)
+ *
+ */
+@SpringBootTest(classes = JmsServer.class)
+@RunWith(SpringRunner.class)
+public class SpringContextLiveTest {
+
+ @Test
+ public void whenSpringContextIsBootstrapped_thenNoExceptions() {
+ }
+}
diff --git a/spring-remoting/remoting-jms/remoting-jms-server/src/test/java/org/baeldung/SpringContextManualTest.java b/spring-remoting/remoting-jms/remoting-jms-server/src/test/java/org/baeldung/SpringContextManualTest.java
deleted file mode 100644
index b806f21c27..0000000000
--- a/spring-remoting/remoting-jms/remoting-jms-server/src/test/java/org/baeldung/SpringContextManualTest.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package org.baeldung;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.junit4.SpringRunner;
-
-import com.baeldung.server.JmsServer;
-
-@SpringBootTest(classes = JmsServer.class)
-@RunWith(SpringRunner.class)
-public class SpringContextManualTest {
-
- @Test
- public void whenSpringContextIsBootstrapped_thenNoExceptions() {
- }
-}
diff --git a/spring-remoting/remoting-rmi/remoting-rmi-client/src/test/java/org/baeldung/SpringContextLiveTest.java b/spring-remoting/remoting-rmi/remoting-rmi-client/src/test/java/com/baeldung/SpringContextLiveTest.java
similarity index 56%
rename from spring-remoting/remoting-rmi/remoting-rmi-client/src/test/java/org/baeldung/SpringContextLiveTest.java
rename to spring-remoting/remoting-rmi/remoting-rmi-client/src/test/java/com/baeldung/SpringContextLiveTest.java
index 3bace4cd1e..73f7592dcc 100644
--- a/spring-remoting/remoting-rmi/remoting-rmi-client/src/test/java/org/baeldung/SpringContextLiveTest.java
+++ b/spring-remoting/remoting-rmi/remoting-rmi-client/src/test/java/com/baeldung/SpringContextLiveTest.java
@@ -1,4 +1,4 @@
-package org.baeldung;
+package com.baeldung;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -7,6 +7,12 @@ import org.springframework.test.context.junit4.SpringRunner;
import com.baeldung.client.RmiClient;
+/**
+ * This Live Test requires:
+ * * the `com.baeldung:remoting-http-api:jar:1.0-SNAPSHOT` artifact accessible. For that we can run `mvn clean install` in the 'spring-remoting/remoting-http/remoting-http-api' module.
+ * * the 'spring-remoting\remoting-rmi\remoting-rmi-server' service running
+ *
+ */
@SpringBootTest(classes = RmiClient.class)
@RunWith(SpringRunner.class)
public class SpringContextLiveTest {
diff --git a/spring-rest-query-language/src/test/java/com/baeldung/SpringContextIntegrationTest.java b/spring-rest-query-language/src/test/java/com/baeldung/SpringContextIntegrationTest.java
deleted file mode 100644
index 18fabce5ca..0000000000
--- a/spring-rest-query-language/src/test/java/com/baeldung/SpringContextIntegrationTest.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.baeldung;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.junit4.SpringRunner;
-
-import com.baeldung.spring.Application;
-
-@RunWith(SpringRunner.class)
-@SpringBootTest(classes = Application.class)
-public class SpringContextIntegrationTest {
-
- @Test
- public void whenSpringContextIsBootstrapped_thenNoExceptions() {
- }
-}
diff --git a/spring-rest-query-language/src/test/java/com/baeldung/SpringContextTest.java b/spring-rest-query-language/src/test/java/com/baeldung/SpringContextTest.java
index 57886a232a..de83fb663a 100644
--- a/spring-rest-query-language/src/test/java/com/baeldung/SpringContextTest.java
+++ b/spring-rest-query-language/src/test/java/com/baeldung/SpringContextTest.java
@@ -7,6 +7,10 @@ import org.springframework.test.context.junit4.SpringRunner;
import com.baeldung.spring.Application;
+/**
+ * Note: In the IDE, remember to generate query type classes before running the Integration Test (e.g. in Eclipse right-click on the project > Run As > Maven generate sources)
+ *
+ */
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
public class SpringContextTest {
diff --git a/spring-rest-simple/src/main/java/com/baeldung/requestmapping/FooMappingExamplesController.java b/spring-rest-simple/src/main/java/com/baeldung/requestmapping/FooMappingExamplesController.java
index 2c11e36141..90012ed054 100644
--- a/spring-rest-simple/src/main/java/com/baeldung/requestmapping/FooMappingExamplesController.java
+++ b/spring-rest-simple/src/main/java/com/baeldung/requestmapping/FooMappingExamplesController.java
@@ -1,6 +1,8 @@
package com.baeldung.requestmapping;
+import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@@ -97,5 +99,29 @@ public class FooMappingExamplesController {
public String putAndPostFoos() {
return "Advanced - PUT and POST within single method";
}
+
+ // --- Ambiguous Mapping
+
+ @GetMapping(value = "foos/duplicate" )
+ public String duplicate() {
+ return "Duplicate";
+ }
+
+ // uncomment for exception of type java.lang.IllegalStateException: Ambiguous mapping
-}
+ // @GetMapping(value = "foos/duplicate" )
+ // public String duplicateEx() {
+ // return "Duplicate";
+ // }
+
+ @GetMapping(value = "foos/duplicate/xml", produces = MediaType.APPLICATION_XML_VALUE)
+ public String duplicateXml() {
+ return "Duplicate Xml";
+ }
+
+ @GetMapping(value = "foos/duplicate/json", produces = MediaType.APPLICATION_JSON_VALUE)
+ public String duplicateJson() {
+ return "Duplicate Json";
+ }
+
+}
\ No newline at end of file
diff --git a/spring-rest/src/main/java/com/baeldung/custom/CustomApplication.java b/spring-rest/src/main/java/com/baeldung/changeport/CustomApplication.java
similarity index 92%
rename from spring-rest/src/main/java/com/baeldung/custom/CustomApplication.java
rename to spring-rest/src/main/java/com/baeldung/changeport/CustomApplication.java
index 75f4d714e2..3fce0f1289 100644
--- a/spring-rest/src/main/java/com/baeldung/custom/CustomApplication.java
+++ b/spring-rest/src/main/java/com/baeldung/changeport/CustomApplication.java
@@ -1,4 +1,4 @@
-package com.baeldung.custom;
+package com.baeldung.changeport;
import java.util.Collections;
diff --git a/spring-rest/src/main/java/com/baeldung/custom/ServerPortCustomizer.java b/spring-rest/src/main/java/com/baeldung/changeport/ServerPortCustomizer.java
similarity index 92%
rename from spring-rest/src/main/java/com/baeldung/custom/ServerPortCustomizer.java
rename to spring-rest/src/main/java/com/baeldung/changeport/ServerPortCustomizer.java
index 978e7c8a82..f3610aeac6 100644
--- a/spring-rest/src/main/java/com/baeldung/custom/ServerPortCustomizer.java
+++ b/spring-rest/src/main/java/com/baeldung/changeport/ServerPortCustomizer.java
@@ -1,4 +1,4 @@
-package com.baeldung.custom;
+package com.baeldung.changeport;
import org.springframework.boot.web.server.ConfigurableWebServerFactory;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
diff --git a/spring-rest/src/test/java/com/baeldung/SpringContextIntegrationTest.java b/spring-rest/src/test/java/com/baeldung/SpringContextIntegrationTest.java
index f04106c1e1..3c2cde4268 100644
--- a/spring-rest/src/test/java/com/baeldung/SpringContextIntegrationTest.java
+++ b/spring-rest/src/test/java/com/baeldung/SpringContextIntegrationTest.java
@@ -5,7 +5,7 @@ import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
-import com.baeldung.custom.CustomApplication;
+import com.baeldung.changeport.CustomApplication;
import com.baeldung.produceimage.ImageApplication;
import com.baeldung.propertyeditor.PropertyEditorApplication;
import com.baeldung.responseheaders.ResponseHeadersApplication;
diff --git a/spring-rest/src/test/java/com/baeldung/SpringContextTest.java b/spring-rest/src/test/java/com/baeldung/SpringContextTest.java
index 4b2024e207..0f39fc3983 100644
--- a/spring-rest/src/test/java/com/baeldung/SpringContextTest.java
+++ b/spring-rest/src/test/java/com/baeldung/SpringContextTest.java
@@ -5,7 +5,7 @@ import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
-import com.baeldung.custom.CustomApplication;
+import com.baeldung.changeport.CustomApplication;
import com.baeldung.produceimage.ImageApplication;
import com.baeldung.propertyeditor.PropertyEditorApplication;
import com.baeldung.responseheaders.ResponseHeadersApplication;
diff --git a/spring-resttemplate/src/test/java/org/baeldung/resttemplate/PersonAPILiveTest.java b/spring-resttemplate/src/test/java/org/baeldung/resttemplate/postjson/PersonAPILiveTest.java
similarity index 96%
rename from spring-resttemplate/src/test/java/org/baeldung/resttemplate/PersonAPILiveTest.java
rename to spring-resttemplate/src/test/java/org/baeldung/resttemplate/postjson/PersonAPILiveTest.java
index de18f6db09..1347cb0c7a 100644
--- a/spring-resttemplate/src/test/java/org/baeldung/resttemplate/PersonAPILiveTest.java
+++ b/spring-resttemplate/src/test/java/org/baeldung/resttemplate/postjson/PersonAPILiveTest.java
@@ -1,10 +1,11 @@
-package org.baeldung.resttemplate;
+package org.baeldung.resttemplate.postjson;
import static org.junit.Assert.assertNotNull;
import java.io.IOException;
import java.net.URI;
+import org.baeldung.resttemplate.RestTemplateConfigurationApplication;
import org.baeldung.resttemplate.web.dto.Person;
import org.json.JSONException;
import org.json.JSONObject;
diff --git a/spring-security-mvc/src/main/java/com/baeldung/SpringSessionApplication.java b/spring-security-mvc/src/main/java/com/baeldung/session/SpringSessionApplication.java
similarity index 91%
rename from spring-security-mvc/src/main/java/com/baeldung/SpringSessionApplication.java
rename to spring-security-mvc/src/main/java/com/baeldung/session/SpringSessionApplication.java
index c2a4b35df0..ec1ba8dcd9 100644
--- a/spring-security-mvc/src/main/java/com/baeldung/SpringSessionApplication.java
+++ b/spring-security-mvc/src/main/java/com/baeldung/session/SpringSessionApplication.java
@@ -1,4 +1,4 @@
-package com.baeldung;
+package com.baeldung.session;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
diff --git a/spring-security-mvc/src/main/java/com/baeldung/security/SessionFilter.java b/spring-security-mvc/src/main/java/com/baeldung/session/filter/SessionFilter.java
similarity index 97%
rename from spring-security-mvc/src/main/java/com/baeldung/security/SessionFilter.java
rename to spring-security-mvc/src/main/java/com/baeldung/session/filter/SessionFilter.java
index f4f876af9c..c30bfa5506 100644
--- a/spring-security-mvc/src/main/java/com/baeldung/security/SessionFilter.java
+++ b/spring-security-mvc/src/main/java/com/baeldung/session/filter/SessionFilter.java
@@ -1,4 +1,4 @@
-package com.baeldung.security;
+package com.baeldung.session.filter;
import java.io.IOException;
import java.util.Arrays;
diff --git a/spring-security-mvc/src/main/java/com/baeldung/spring/SecSecurityConfig.java b/spring-security-mvc/src/main/java/com/baeldung/session/security/config/SecSecurityConfig.java
similarity index 98%
rename from spring-security-mvc/src/main/java/com/baeldung/spring/SecSecurityConfig.java
rename to spring-security-mvc/src/main/java/com/baeldung/session/security/config/SecSecurityConfig.java
index a922ba6f7f..35b53a0e7f 100644
--- a/spring-security-mvc/src/main/java/com/baeldung/spring/SecSecurityConfig.java
+++ b/spring-security-mvc/src/main/java/com/baeldung/session/security/config/SecSecurityConfig.java
@@ -1,4 +1,4 @@
-package com.baeldung.spring;
+package com.baeldung.session.security.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
diff --git a/spring-security-mvc/src/main/java/com/baeldung/web/SessionRestController.java b/spring-security-mvc/src/main/java/com/baeldung/session/web/SessionRestController.java
similarity index 93%
rename from spring-security-mvc/src/main/java/com/baeldung/web/SessionRestController.java
rename to spring-security-mvc/src/main/java/com/baeldung/session/web/SessionRestController.java
index 1353ee25d0..82199a9e4e 100644
--- a/spring-security-mvc/src/main/java/com/baeldung/web/SessionRestController.java
+++ b/spring-security-mvc/src/main/java/com/baeldung/session/web/SessionRestController.java
@@ -1,4 +1,4 @@
-package com.baeldung.web;
+package com.baeldung.session.web;
import javax.servlet.http.HttpSession;
diff --git a/spring-security-mvc/src/main/java/com/baeldung/spring/MvcConfig.java b/spring-security-mvc/src/main/java/com/baeldung/session/web/config/MvcConfig.java
similarity index 96%
rename from spring-security-mvc/src/main/java/com/baeldung/spring/MvcConfig.java
rename to spring-security-mvc/src/main/java/com/baeldung/session/web/config/MvcConfig.java
index 38a4f3f81b..4db6d07872 100644
--- a/spring-security-mvc/src/main/java/com/baeldung/spring/MvcConfig.java
+++ b/spring-security-mvc/src/main/java/com/baeldung/session/web/config/MvcConfig.java
@@ -1,4 +1,4 @@
-package com.baeldung.spring;
+package com.baeldung.session.web.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
diff --git a/spring-security-rest/src/main/java/org/baeldung/web/ApiError.java b/spring-security-rest/src/main/java/org/baeldung/errorhandling/ApiError.java
similarity index 97%
rename from spring-security-rest/src/main/java/org/baeldung/web/ApiError.java
rename to spring-security-rest/src/main/java/org/baeldung/errorhandling/ApiError.java
index e1c58da64a..8a1ddd8882 100644
--- a/spring-security-rest/src/main/java/org/baeldung/web/ApiError.java
+++ b/spring-security-rest/src/main/java/org/baeldung/errorhandling/ApiError.java
@@ -1,4 +1,4 @@
-package org.baeldung.web;
+package org.baeldung.errorhandling;
import java.util.Arrays;
import java.util.List;
diff --git a/spring-security-rest/src/main/java/org/baeldung/web/CustomRestExceptionHandler.java b/spring-security-rest/src/main/java/org/baeldung/errorhandling/CustomRestExceptionHandler.java
similarity index 99%
rename from spring-security-rest/src/main/java/org/baeldung/web/CustomRestExceptionHandler.java
rename to spring-security-rest/src/main/java/org/baeldung/errorhandling/CustomRestExceptionHandler.java
index 71b1a4775e..cd4d58e60c 100644
--- a/spring-security-rest/src/main/java/org/baeldung/web/CustomRestExceptionHandler.java
+++ b/spring-security-rest/src/main/java/org/baeldung/errorhandling/CustomRestExceptionHandler.java
@@ -1,4 +1,4 @@
-package org.baeldung.web;
+package org.baeldung.errorhandling;
import java.util.ArrayList;
import java.util.List;
diff --git a/spring-security-rest/src/test/java/org/baeldung/web/FooLiveTest.java b/spring-security-rest/src/test/java/org/baeldung/errorhandling/FooLiveTest.java
similarity index 96%
rename from spring-security-rest/src/test/java/org/baeldung/web/FooLiveTest.java
rename to spring-security-rest/src/test/java/org/baeldung/errorhandling/FooLiveTest.java
index 86beeb46a9..8d1db5736f 100644
--- a/spring-security-rest/src/test/java/org/baeldung/web/FooLiveTest.java
+++ b/spring-security-rest/src/test/java/org/baeldung/errorhandling/FooLiveTest.java
@@ -1,8 +1,10 @@
-package org.baeldung.web;
+package org.baeldung.errorhandling;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
+import org.baeldung.errorhandling.ApiError;
+import org.baeldung.web.TestConfig;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.http.HttpStatus;
diff --git a/testing-modules/mockito/src/test/java/org/baeldung/mockito/MockitoSpyIntegrationTest.java b/testing-modules/mockito/src/test/java/org/baeldung/mockito/spy/MockitoSpyIntegrationTest.java
similarity index 98%
rename from testing-modules/mockito/src/test/java/org/baeldung/mockito/MockitoSpyIntegrationTest.java
rename to testing-modules/mockito/src/test/java/org/baeldung/mockito/spy/MockitoSpyIntegrationTest.java
index 118d50ea40..d0b838a789 100644
--- a/testing-modules/mockito/src/test/java/org/baeldung/mockito/MockitoSpyIntegrationTest.java
+++ b/testing-modules/mockito/src/test/java/org/baeldung/mockito/spy/MockitoSpyIntegrationTest.java
@@ -1,4 +1,4 @@
-package org.baeldung.mockito;
+package org.baeldung.mockito.spy;
import static org.junit.Assert.assertEquals;