diff --git a/algorithms-miscellaneous-5/pom.xml b/algorithms-miscellaneous-5/pom.xml
index 9d0326241a..615cf03467 100644
--- a/algorithms-miscellaneous-5/pom.xml
+++ b/algorithms-miscellaneous-5/pom.xml
@@ -21,10 +21,10 @@
${commons-codec.version}
- org.apache.commons
- commons-math3
- ${commons-math3.version}
-
+ org.apache.commons
+ commons-math3
+ ${commons-math3.version}
+
pl.allegro.finance
tradukisto
diff --git a/apache-shiro/pom.xml b/apache-shiro/pom.xml
index d519ba42af..3df6283437 100644
--- a/apache-shiro/pom.xml
+++ b/apache-shiro/pom.xml
@@ -10,9 +10,9 @@
com.baeldung
- parent-boot-1
+ parent-boot-2
0.0.1-SNAPSHOT
- ../parent-boot-1
+ ../parent-boot-2
diff --git a/apache-shiro/src/main/java/com/baeldung/Main.java b/apache-shiro/src/main/java/com/baeldung/Main.java
index 5e341f251b..99515bb705 100644
--- a/apache-shiro/src/main/java/com/baeldung/Main.java
+++ b/apache-shiro/src/main/java/com/baeldung/Main.java
@@ -1,11 +1,14 @@
package com.baeldung;
import org.apache.shiro.SecurityUtils;
-import org.apache.shiro.authc.*;
+import org.apache.shiro.authc.AuthenticationException;
+import org.apache.shiro.authc.IncorrectCredentialsException;
+import org.apache.shiro.authc.LockedAccountException;
+import org.apache.shiro.authc.UnknownAccountException;
+import org.apache.shiro.authc.UsernamePasswordToken;
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;
diff --git a/apache-shiro/src/main/java/com/baeldung/MyCustomRealm.java b/apache-shiro/src/main/java/com/baeldung/MyCustomRealm.java
index 8d792c76a5..6d7c01d96e 100644
--- a/apache-shiro/src/main/java/com/baeldung/MyCustomRealm.java
+++ b/apache-shiro/src/main/java/com/baeldung/MyCustomRealm.java
@@ -1,16 +1,24 @@
package com.baeldung;
-import org.apache.shiro.authc.*;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.shiro.authc.AuthenticationException;
+import org.apache.shiro.authc.AuthenticationInfo;
+import org.apache.shiro.authc.AuthenticationToken;
+import org.apache.shiro.authc.SimpleAuthenticationInfo;
+import org.apache.shiro.authc.UnknownAccountException;
+import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.realm.jdbc.JdbcRealm;
import org.apache.shiro.subject.PrincipalCollection;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.sql.Connection;
-import java.sql.SQLException;
-import java.util.*;
public class MyCustomRealm extends JdbcRealm {
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
index a373122d6c..a902a24388 100644
--- 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
@@ -1,14 +1,15 @@
package com.baeldung.shiro.permissions.custom;
-import com.baeldung.MyCustomRealm;
import org.apache.shiro.SecurityUtils;
-import org.apache.shiro.authc.*;
+import org.apache.shiro.authc.AuthenticationException;
+import org.apache.shiro.authc.IncorrectCredentialsException;
+import org.apache.shiro.authc.LockedAccountException;
+import org.apache.shiro.authc.UnknownAccountException;
+import org.apache.shiro.authc.UsernamePasswordToken;
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;
diff --git a/core-java-modules/core-java-lang-oop-2/.gitignore b/core-java-modules/core-java-lang-oop-2/.gitignore
deleted file mode 100644
index 36aba1c242..0000000000
--- a/core-java-modules/core-java-lang-oop-2/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-target/
-.idea/
-bin/
-*.iml
\ 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
deleted file mode 100644
index c48a3f5cd9..0000000000
--- a/core-java-modules/core-java-lang-oop-2/README.md
+++ /dev/null
@@ -1,18 +0,0 @@
-## Core Java Lang OOP (Part 2)
-
-This module contains articles about Object-oriented programming (OOP) in Java
-
-### Relevant Articles:
-- [Generic Constructors in Java](https://www.baeldung.com/java-generic-constructors)
-- [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)
-- [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](https://www.baeldung.com/java-immutable-object)
-- [Inheritance and Composition (Is-a vs Has-a relationship) in Java](https://www.baeldung.com/java-inheritance-composition)
-- [A Guide to Constructors in Java](https://www.baeldung.com/java-constructors)
-- [Static and Default Methods in Interfaces in Java](https://www.baeldung.com/java-static-default-methods)
-- [Java Copy Constructor](https://www.baeldung.com/java-copy-constructor)
-- [Abstract Classes in Java](https://www.baeldung.com/java-abstract-class)
-- [[<-- Prev]](/core-java-modules/core-java-lang-oop)[[More -->]](/core-java-modules/core-java-lang-oop-3)
diff --git a/core-java-modules/core-java-lang-oop-2/pom.xml b/core-java-modules/core-java-lang-oop-2/pom.xml
deleted file mode 100644
index ccacaf7116..0000000000
--- a/core-java-modules/core-java-lang-oop-2/pom.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-
-
- 4.0.0
- core-java-lang-oop-2
- 0.1.0-SNAPSHOT
- core-java-lang-oop-2
- jar
-
-
- com.baeldung
- parent-java
- 0.0.1-SNAPSHOT
- ../../parent-java
-
-
-
-
-
- org.assertj
- assertj-core
- ${assertj-core.version}
- test
-
-
- nl.jqno.equalsverifier
- equalsverifier
- ${equalsverifier.version}
- test
-
-
-
-
- core-java-lang-oop-2
-
-
- src/main/resources
- true
-
-
-
-
-
-
- 3.10.0
- 3.0.3
-
-
-
diff --git a/core-java-modules/core-java-lang-oop-3/README.md b/core-java-modules/core-java-lang-oop-3/README.md
deleted file mode 100644
index 3a0e588ad4..0000000000
--- a/core-java-modules/core-java-lang-oop-3/README.md
+++ /dev/null
@@ -1,16 +0,0 @@
-## Core Java Lang OOP (Part 3)
-
-This module contains articles about Object-oriented programming (OOP) in Java
-
-### Relevant Articles:
-- [Pass-By-Value as a Parameter Passing Mechanism in Java](https://www.baeldung.com/java-pass-by-value-or-pass-by-reference)
-- [Access Modifiers in Java](https://www.baeldung.com/java-access-modifiers)
-- [Guide to the super Java Keyword](https://www.baeldung.com/java-super)
-- [Guide to the this Java Keyword](https://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)
-- [Nested Classes in Java](https://www.baeldung.com/java-nested-classes)
-- [A Guide to Inner Interfaces in Java](https://www.baeldung.com/java-inner-interfaces)
-- [Java Classes and Objects](https://www.baeldung.com/java-classes-objects)
-- [Java Interfaces](https://www.baeldung.com/java-interfaces)
-- [[<-- Prev]](/core-java-modules/core-java-lang-oop-2)[[More -->]](/core-java-modules/core-java-lang-oop-4)
diff --git a/core-java-modules/core-java-lang-oop-3/pom.xml b/core-java-modules/core-java-lang-oop-3/pom.xml
deleted file mode 100644
index cc9b473d03..0000000000
--- a/core-java-modules/core-java-lang-oop-3/pom.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-
-
- 4.0.0
- 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
-
-
-
-
-
- log4j
- log4j
- ${log4j.version}
-
-
- org.slf4j
- log4j-over-slf4j
- ${org.slf4j.version}
-
-
-
- org.assertj
- assertj-core
- ${assertj-core.version}
- test
-
-
- com.h2database
- h2
- ${h2.version}
- test
-
-
-
-
- core-java-lang-oop-3
-
-
- src/main/resources
- true
-
-
-
-
-
- 3.10.0
-
-
-
diff --git a/core-java-modules/core-java-lang-oop-4/README.md b/core-java-modules/core-java-lang-oop-4/README.md
deleted file mode 100644
index 51650dc1f6..0000000000
--- a/core-java-modules/core-java-lang-oop-4/README.md
+++ /dev/null
@@ -1,9 +0,0 @@
-## Core Java Lang OOP (Part 4)
-
-This module contains articles about Object-oriented programming (OOP) in Java
-
-### Relevant Articles:
-- [Static and Dynamic Binding in Java](https://www.baeldung.com/java-static-dynamic-binding)
-- [Methods in Java](https://www.baeldung.com/java-methods)
-- [Java ‘private’ Access Modifier](https://www.baeldung.com/java-private-keyword)
-- [[<-- Prev]](/core-java-modules/core-java-lang-oop-3)
\ No newline at end of file
diff --git a/core-java-modules/core-java-lang-oop-4/pom.xml b/core-java-modules/core-java-lang-oop-4/pom.xml
deleted file mode 100644
index 3c7e4f446d..0000000000
--- a/core-java-modules/core-java-lang-oop-4/pom.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-
-
- 4.0.0
- core-java-lang-oop-4
- 0.1.0-SNAPSHOT
- core-java-lang-oop-4
- jar
-
-
- com.baeldung
- parent-java
- 0.0.1-SNAPSHOT
- ../../parent-java
-
-
-
-
-
- log4j
- log4j
- ${log4j.version}
-
-
- org.slf4j
- log4j-over-slf4j
- ${org.slf4j.version}
-
-
-
- org.assertj
- assertj-core
- ${assertj-core.version}
- test
-
-
- com.h2database
- h2
- ${h2.version}
- test
-
-
-
-
- core-java-lang-oop-4
-
-
- src/main/resources
- true
-
-
-
-
-
- 3.10.0
-
-
-
diff --git a/core-java-modules/core-java-lang-oop-constructors/README.md b/core-java-modules/core-java-lang-oop-constructors/README.md
new file mode 100644
index 0000000000..0082969807
--- /dev/null
+++ b/core-java-modules/core-java-lang-oop-constructors/README.md
@@ -0,0 +1,8 @@
+## Core Java Lang OOP - Constructors
+
+This module contains article about constructors in Java
+
+### Relevant Articles:
+- [A Guide to Constructors in Java](https://www.baeldung.com/java-constructors)
+- [Java Copy Constructor](https://www.baeldung.com/java-copy-constructor)
+- [Cannot Reference “X” Before Supertype Constructor Has Been Called](https://www.baeldung.com/java-cannot-reference-x-before-supertype-constructor-error)
\ No newline at end of file
diff --git a/core-java-modules/core-java-lang-oop-constructors/pom.xml b/core-java-modules/core-java-lang-oop-constructors/pom.xml
new file mode 100644
index 0000000000..76507103ea
--- /dev/null
+++ b/core-java-modules/core-java-lang-oop-constructors/pom.xml
@@ -0,0 +1,28 @@
+
+
+
+ core-java-modules
+ com.baeldung.core-java-modules
+ 1.0.0-SNAPSHOT
+
+ 4.0.0
+
+ core-java-lang-oop-constructors
+ core-java-lang-oop-constructors
+ jar
+
+
+
+ org.assertj
+ assertj-core
+ ${assertj-core.version}
+ test
+
+
+
+
+ 3.10.0
+
+
\ No newline at end of file
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/constructors/BankAccount.java b/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/constructors/BankAccount.java
similarity index 99%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/constructors/BankAccount.java
rename to core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/constructors/BankAccount.java
index b78b5937e1..b198492129 100644
--- a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/constructors/BankAccount.java
+++ b/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/constructors/BankAccount.java
@@ -6,7 +6,7 @@ class BankAccount {
String name;
LocalDateTime opened;
double balance;
-
+
@Override
public String toString() {
return String.format("%s, %s, %f", this.name, this.opened.toString(), this.balance);
@@ -47,14 +47,13 @@ class BankAccountCopyConstructor extends BankAccount {
this.opened = opened;
this.balance = balance;
}
-
+
public BankAccountCopyConstructor(BankAccount other) {
this.name = other.name;
this.opened = LocalDateTime.now();
this.balance = 0.0f;
}
}
-
class BankAccountChainedConstructors extends BankAccount {
public BankAccountChainedConstructors(String name, LocalDateTime opened, double balance) {
this.name = name;
@@ -65,4 +64,4 @@ class BankAccountChainedConstructors extends BankAccount {
public BankAccountChainedConstructors(String name) {
this(name, LocalDateTime.now(), 0.0f);
}
-}
+}
\ No newline at end of file
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/constructors/Transaction.java b/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/constructors/Transaction.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/constructors/Transaction.java
rename to core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/constructors/Transaction.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/copyconstructor/Employee.java b/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/copyconstructor/Employee.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/copyconstructor/Employee.java
rename to core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/copyconstructor/Employee.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/copyconstructor/Manager.java b/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/copyconstructor/Manager.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/copyconstructor/Manager.java
rename to core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/copyconstructor/Manager.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/supertypecompilerexception/MyClass.java b/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/supertypecompilerexception/MyClass.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/supertypecompilerexception/MyClass.java
rename to core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/supertypecompilerexception/MyClass.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/supertypecompilerexception/MyClassSolution1.java b/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/supertypecompilerexception/MyClassSolution1.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/supertypecompilerexception/MyClassSolution1.java
rename to core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/supertypecompilerexception/MyClassSolution1.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/supertypecompilerexception/MyClassSolution2.java b/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/supertypecompilerexception/MyClassSolution2.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/supertypecompilerexception/MyClassSolution2.java
rename to core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/supertypecompilerexception/MyClassSolution2.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/supertypecompilerexception/MyClassSolution3.java b/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/supertypecompilerexception/MyClassSolution3.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/supertypecompilerexception/MyClassSolution3.java
rename to core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/supertypecompilerexception/MyClassSolution3.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/supertypecompilerexception/MyException.java b/core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/supertypecompilerexception/MyException.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/supertypecompilerexception/MyException.java
rename to core-java-modules/core-java-lang-oop-constructors/src/main/java/com/baeldung/supertypecompilerexception/MyException.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/constructors/ConstructorUnitTest.java b/core-java-modules/core-java-lang-oop-constructors/src/test/java/com/baeldung/constructors/ConstructorUnitTest.java
similarity index 88%
rename from core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/constructors/ConstructorUnitTest.java
rename to core-java-modules/core-java-lang-oop-constructors/src/test/java/com/baeldung/constructors/ConstructorUnitTest.java
index 274fe77764..e207afec57 100644
--- a/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/constructors/ConstructorUnitTest.java
+++ b/core-java-modules/core-java-lang-oop-constructors/src/test/java/com/baeldung/constructors/ConstructorUnitTest.java
@@ -1,20 +1,19 @@
package com.baeldung.constructors;
+import org.assertj.core.api.Assertions;
import org.junit.Test;
import java.time.LocalDateTime;
import java.time.Month;
-import java.util.logging.Logger;
-import static org.assertj.core.api.Assertions.*;
+import static org.assertj.core.api.Assertions.assertThat;
public class ConstructorUnitTest {
- final static Logger LOGGER = Logger.getLogger(ConstructorUnitTest.class.getName());
-
+
@Test
public void givenNoExplicitContructor_whenUsed_thenFails() {
BankAccount account = new BankAccount();
- assertThatThrownBy(() -> {
+ Assertions.assertThatThrownBy(() -> {
account.toString();
}).isInstanceOf(Exception.class);
}
@@ -22,7 +21,7 @@ public class ConstructorUnitTest {
@Test
public void givenNoArgumentConstructor_whenUsed_thenSucceeds() {
BankAccountEmptyConstructor account = new BankAccountEmptyConstructor();
- assertThatCode(() -> {
+ Assertions.assertThatCode(() -> {
account.toString();
}).doesNotThrowAnyException();
}
@@ -33,7 +32,7 @@ public class ConstructorUnitTest {
BankAccountParameterizedConstructor account =
new BankAccountParameterizedConstructor("Tom", opened, 1000.0f);
- assertThatCode(() -> {
+ Assertions.assertThatCode(() -> {
account.toString();
}).doesNotThrowAnyException();
}
diff --git a/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/copyconstructor/EmployeeUnitTest.java b/core-java-modules/core-java-lang-oop-constructors/src/test/java/com/baeldung/copyconstructor/EmployeeUnitTest.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/copyconstructor/EmployeeUnitTest.java
rename to core-java-modules/core-java-lang-oop-constructors/src/test/java/com/baeldung/copyconstructor/EmployeeUnitTest.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/copyconstructor/ManagerUnitTest.java b/core-java-modules/core-java-lang-oop-constructors/src/test/java/com/baeldung/copyconstructor/ManagerUnitTest.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/copyconstructor/ManagerUnitTest.java
rename to core-java-modules/core-java-lang-oop-constructors/src/test/java/com/baeldung/copyconstructor/ManagerUnitTest.java
diff --git a/core-java-modules/core-java-lang-oop-generics/README.md b/core-java-modules/core-java-lang-oop-generics/README.md
new file mode 100644
index 0000000000..f0213c5659
--- /dev/null
+++ b/core-java-modules/core-java-lang-oop-generics/README.md
@@ -0,0 +1,8 @@
+## Core Java Lang OOP - Generics
+
+This module contains articles about generics in Java
+
+### Relevant Articles:
+- [Generic Constructors in Java](https://www.baeldung.com/java-generic-constructors)
+- [Type Erasure in Java Explained](https://www.baeldung.com/java-type-erasure)
+- [Raw Types in Java](https://www.baeldung.com/raw-types-java)
diff --git a/core-java-modules/core-java-lang-oop-generics/pom.xml b/core-java-modules/core-java-lang-oop-generics/pom.xml
new file mode 100644
index 0000000000..ae141ecda2
--- /dev/null
+++ b/core-java-modules/core-java-lang-oop-generics/pom.xml
@@ -0,0 +1,16 @@
+
+
+
+ core-java-modules
+ com.baeldung.core-java-modules
+ 1.0.0-SNAPSHOT
+
+ 4.0.0
+
+ core-java-lang-oop-generics
+ core-java-lang-oop-generics
+ jar
+
+
\ No newline at end of file
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/generics/Entry.java b/core-java-modules/core-java-lang-oop-generics/src/main/java/com/baeldung/generics/Entry.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/generics/Entry.java
rename to core-java-modules/core-java-lang-oop-generics/src/main/java/com/baeldung/generics/Entry.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/generics/GenericEntry.java b/core-java-modules/core-java-lang-oop-generics/src/main/java/com/baeldung/generics/GenericEntry.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/generics/GenericEntry.java
rename to core-java-modules/core-java-lang-oop-generics/src/main/java/com/baeldung/generics/GenericEntry.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/generics/MapEntry.java b/core-java-modules/core-java-lang-oop-generics/src/main/java/com/baeldung/generics/MapEntry.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/generics/MapEntry.java
rename to core-java-modules/core-java-lang-oop-generics/src/main/java/com/baeldung/generics/MapEntry.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/generics/Product.java b/core-java-modules/core-java-lang-oop-generics/src/main/java/com/baeldung/generics/Product.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/generics/Product.java
rename to core-java-modules/core-java-lang-oop-generics/src/main/java/com/baeldung/generics/Product.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/generics/Rankable.java b/core-java-modules/core-java-lang-oop-generics/src/main/java/com/baeldung/generics/Rankable.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/generics/Rankable.java
rename to core-java-modules/core-java-lang-oop-generics/src/main/java/com/baeldung/generics/Rankable.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/rawtype/RawTypeDemo.java b/core-java-modules/core-java-lang-oop-generics/src/main/java/com/baeldung/rawtype/RawTypeDemo.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/rawtype/RawTypeDemo.java
rename to core-java-modules/core-java-lang-oop-generics/src/main/java/com/baeldung/rawtype/RawTypeDemo.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/typeerasure/ArrayContentPrintUtil.java b/core-java-modules/core-java-lang-oop-generics/src/main/java/com/baeldung/typeerasure/ArrayContentPrintUtil.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/typeerasure/ArrayContentPrintUtil.java
rename to core-java-modules/core-java-lang-oop-generics/src/main/java/com/baeldung/typeerasure/ArrayContentPrintUtil.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/typeerasure/BoundStack.java b/core-java-modules/core-java-lang-oop-generics/src/main/java/com/baeldung/typeerasure/BoundStack.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/typeerasure/BoundStack.java
rename to core-java-modules/core-java-lang-oop-generics/src/main/java/com/baeldung/typeerasure/BoundStack.java
diff --git a/core-java-modules/core-java-lang-oop-generics/src/main/java/com/baeldung/typeerasure/Example.java b/core-java-modules/core-java-lang-oop-generics/src/main/java/com/baeldung/typeerasure/Example.java
new file mode 100644
index 0000000000..f816fd6d16
--- /dev/null
+++ b/core-java-modules/core-java-lang-oop-generics/src/main/java/com/baeldung/typeerasure/Example.java
@@ -0,0 +1,13 @@
+package com.baeldung.typeerasure;
+
+public class Example {
+
+ public static boolean containsElement(E [] elements, E element){
+ for (E e : elements){
+ if(e.equals(element)){
+ return true;
+ }
+ }
+ return false;
+ }
+}
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/typeerasure/IntegerStack.java b/core-java-modules/core-java-lang-oop-generics/src/main/java/com/baeldung/typeerasure/IntegerStack.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/typeerasure/IntegerStack.java
rename to core-java-modules/core-java-lang-oop-generics/src/main/java/com/baeldung/typeerasure/IntegerStack.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/typeerasure/Stack.java b/core-java-modules/core-java-lang-oop-generics/src/main/java/com/baeldung/typeerasure/Stack.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/typeerasure/Stack.java
rename to core-java-modules/core-java-lang-oop-generics/src/main/java/com/baeldung/typeerasure/Stack.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/generics/GenericConstructorUnitTest.java b/core-java-modules/core-java-lang-oop-generics/src/test/java/com/baeldung/generics/GenericConstructorUnitTest.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/generics/GenericConstructorUnitTest.java
rename to core-java-modules/core-java-lang-oop-generics/src/test/java/com/baeldung/generics/GenericConstructorUnitTest.java
diff --git a/core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/typeerasure/TypeErasureUnitTest.java b/core-java-modules/core-java-lang-oop-generics/src/test/java/com/baeldung/typeerasure/TypeErasureUnitTest.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/typeerasure/TypeErasureUnitTest.java
rename to core-java-modules/core-java-lang-oop-generics/src/test/java/com/baeldung/typeerasure/TypeErasureUnitTest.java
diff --git a/core-java-modules/core-java-lang-oop-inheritance/README.md b/core-java-modules/core-java-lang-oop-inheritance/README.md
new file mode 100644
index 0000000000..c87bdf13d7
--- /dev/null
+++ b/core-java-modules/core-java-lang-oop-inheritance/README.md
@@ -0,0 +1,14 @@
+## Core Java Lang OOP - Inheritance
+
+This module contains articles about inheritance in Java
+
+### Relevant Articles:
+- [Java Interfaces](https://www.baeldung.com/java-interfaces)
+- [Abstract Classes in Java](https://www.baeldung.com/java-abstract-class)
+- [A Guide to Inner Interfaces in Java](https://www.baeldung.com/java-inner-interfaces)
+- [Guide to the super Java Keyword](https://www.baeldung.com/java-super)
+- [Anonymous Classes in Java](https://www.baeldung.com/java-anonymous-classes)
+- [Polymorphism in Java](https://www.baeldung.com/java-polymorphism)
+- [Guide to Inheritance in Java](https://www.baeldung.com/java-inheritance)
+- [Object Type Casting in Java](https://www.baeldung.com/java-type-casting)
+- [Variable and Method Hiding in Java](https://www.baeldung.com/java-variable-method-hiding)
diff --git a/core-java-modules/core-java-lang-oop-inheritance/pom.xml b/core-java-modules/core-java-lang-oop-inheritance/pom.xml
new file mode 100644
index 0000000000..a48b28a289
--- /dev/null
+++ b/core-java-modules/core-java-lang-oop-inheritance/pom.xml
@@ -0,0 +1,28 @@
+
+
+
+ core-java-modules
+ com.baeldung.core-java-modules
+ 1.0.0-SNAPSHOT
+
+ 4.0.0
+
+ core-java-lang-oop-inheritance
+ core-java-lang-oop-inheritance
+ jar
+
+
+
+ org.assertj
+ assertj-core
+ ${assertj-core.version}
+ test
+
+
+
+
+ 3.10.0
+
+
\ No newline at end of file
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/abstractclasses/application/Application.java b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/abstractclasses/application/Application.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/abstractclasses/application/Application.java
rename to core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/abstractclasses/application/Application.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/abstractclasses/filereaders/BaseFileReader.java b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/abstractclasses/filereaders/BaseFileReader.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/abstractclasses/filereaders/BaseFileReader.java
rename to core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/abstractclasses/filereaders/BaseFileReader.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/abstractclasses/filereaders/LowercaseFileReader.java b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/abstractclasses/filereaders/LowercaseFileReader.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/abstractclasses/filereaders/LowercaseFileReader.java
rename to core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/abstractclasses/filereaders/LowercaseFileReader.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/abstractclasses/filereaders/UppercaseFileReader.java b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/abstractclasses/filereaders/UppercaseFileReader.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/abstractclasses/filereaders/UppercaseFileReader.java
rename to core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/abstractclasses/filereaders/UppercaseFileReader.java
diff --git a/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/abstractclasses/overview/BoardGame.java b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/abstractclasses/overview/BoardGame.java
new file mode 100644
index 0000000000..e0395cec7e
--- /dev/null
+++ b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/abstractclasses/overview/BoardGame.java
@@ -0,0 +1,9 @@
+package com.baeldung.abstractclasses.overview;
+
+public abstract class BoardGame {
+ //... field declarations, constructors
+
+ public abstract void play();
+
+ //... concrete methods
+}
diff --git a/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/abstractclasses/overview/Checkers.java b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/abstractclasses/overview/Checkers.java
new file mode 100644
index 0000000000..5c911649c8
--- /dev/null
+++ b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/abstractclasses/overview/Checkers.java
@@ -0,0 +1,8 @@
+package com.baeldung.abstractclasses.overview;
+
+public class Checkers extends BoardGame {
+ @Override
+ public void play() {
+ //... implementation
+ }
+}
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/anonymous/Book.java b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/anonymous/Book.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/anonymous/Book.java
rename to core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/anonymous/Book.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/anonymous/Main.java b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/anonymous/Main.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/anonymous/Main.java
rename to core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/anonymous/Main.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/casting/Animal.java b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/casting/Animal.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/casting/Animal.java
rename to core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/casting/Animal.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/casting/AnimalFeeder.java b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/casting/AnimalFeeder.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/casting/AnimalFeeder.java
rename to core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/casting/AnimalFeeder.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/casting/AnimalFeederGeneric.java b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/casting/AnimalFeederGeneric.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/casting/AnimalFeederGeneric.java
rename to core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/casting/AnimalFeederGeneric.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/casting/Cat.java b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/casting/Cat.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/casting/Cat.java
rename to core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/casting/Cat.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/casting/Dog.java b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/casting/Dog.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/casting/Dog.java
rename to core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/casting/Dog.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/casting/Mew.java b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/casting/Mew.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/casting/Mew.java
rename to core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/casting/Mew.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/inheritance/ArmoredCar.java b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/inheritance/ArmoredCar.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/inheritance/ArmoredCar.java
rename to core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/inheritance/ArmoredCar.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/inheritance/BMW.java b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/inheritance/BMW.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/inheritance/BMW.java
rename to core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/inheritance/BMW.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/inheritance/Car.java b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/inheritance/Car.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/inheritance/Car.java
rename to core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/inheritance/Car.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/inheritance/Employee.java b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/inheritance/Employee.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/inheritance/Employee.java
rename to core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/inheritance/Employee.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/inheritance/Floatable.java b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/inheritance/Floatable.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/inheritance/Floatable.java
rename to core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/inheritance/Floatable.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/inheritance/Flyable.java b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/inheritance/Flyable.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/inheritance/Flyable.java
rename to core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/inheritance/Flyable.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/inheritance/SpaceCar.java b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/inheritance/SpaceCar.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/inheritance/SpaceCar.java
rename to core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/inheritance/SpaceCar.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/inheritance/SpaceTraveller.java b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/inheritance/SpaceTraveller.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/inheritance/SpaceTraveller.java
rename to core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/inheritance/SpaceTraveller.java
diff --git a/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/innerinterfaces/CommaSeparatedCustomers.java b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/innerinterfaces/CommaSeparatedCustomers.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/innerinterfaces/CommaSeparatedCustomers.java
rename to core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/innerinterfaces/CommaSeparatedCustomers.java
diff --git a/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/innerinterfaces/Customer.java b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/innerinterfaces/Customer.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/innerinterfaces/Customer.java
rename to core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/innerinterfaces/Customer.java
diff --git a/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/interfaces/Box.java b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/interfaces/Box.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/interfaces/Box.java
rename to core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/interfaces/Box.java
diff --git a/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/interfaces/Computer.java b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/interfaces/Computer.java
new file mode 100644
index 0000000000..94d39e2448
--- /dev/null
+++ b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/interfaces/Computer.java
@@ -0,0 +1,9 @@
+package com.baeldung.interfaces;
+
+public class Computer implements Electronic {
+
+ @Override
+ public int getElectricityUse() {
+ return 1000;
+ }
+}
diff --git a/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/interfaces/Electronic.java b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/interfaces/Electronic.java
new file mode 100644
index 0000000000..fcaf67dc3a
--- /dev/null
+++ b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/interfaces/Electronic.java
@@ -0,0 +1,22 @@
+package com.baeldung.interfaces;
+
+public interface Electronic {
+ // Constant variable
+ String LED = "LED";
+
+ // Abstract method
+ int getElectricityUse();
+
+ // Static method
+ static boolean isEnergyEfficient(String electtronicType) {
+ if (electtronicType.equals(LED)) {
+ return true;
+ }
+ return false;
+ }
+
+ //Default method
+ default void printDescription() {
+ System.out.println("Electronic Description");
+ }
+}
diff --git a/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/interfaces/Employee.java b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/interfaces/Employee.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/interfaces/Employee.java
rename to core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/interfaces/Employee.java
diff --git a/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/interfaces/EmployeeSalaryComparator.java b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/interfaces/EmployeeSalaryComparator.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/interfaces/EmployeeSalaryComparator.java
rename to core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/interfaces/EmployeeSalaryComparator.java
diff --git a/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/interfaces/HasColor.java b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/interfaces/HasColor.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/interfaces/HasColor.java
rename to core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/interfaces/HasColor.java
diff --git a/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/interfaces/multiinheritance/Car.java b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/interfaces/multiinheritance/Car.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/interfaces/multiinheritance/Car.java
rename to core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/interfaces/multiinheritance/Car.java
diff --git a/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/interfaces/multiinheritance/Fly.java b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/interfaces/multiinheritance/Fly.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/interfaces/multiinheritance/Fly.java
rename to core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/interfaces/multiinheritance/Fly.java
diff --git a/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/interfaces/multiinheritance/Transform.java b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/interfaces/multiinheritance/Transform.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/interfaces/multiinheritance/Transform.java
rename to core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/interfaces/multiinheritance/Transform.java
diff --git a/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/interfaces/multiinheritance/Vehicle.java b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/interfaces/multiinheritance/Vehicle.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/interfaces/multiinheritance/Vehicle.java
rename to core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/interfaces/multiinheritance/Vehicle.java
diff --git a/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/interfaces/polymorphysim/Circle.java b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/interfaces/polymorphysim/Circle.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/interfaces/polymorphysim/Circle.java
rename to core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/interfaces/polymorphysim/Circle.java
diff --git a/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/interfaces/polymorphysim/MainTestClass.java b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/interfaces/polymorphysim/MainTestClass.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/interfaces/polymorphysim/MainTestClass.java
rename to core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/interfaces/polymorphysim/MainTestClass.java
diff --git a/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/interfaces/polymorphysim/Shape.java b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/interfaces/polymorphysim/Shape.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/interfaces/polymorphysim/Shape.java
rename to core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/interfaces/polymorphysim/Shape.java
diff --git a/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/interfaces/polymorphysim/Square.java b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/interfaces/polymorphysim/Square.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/interfaces/polymorphysim/Square.java
rename to core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/interfaces/polymorphysim/Square.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/polymorphism/FileManager.java b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/polymorphism/FileManager.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/polymorphism/FileManager.java
rename to core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/polymorphism/FileManager.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/polymorphism/GenericFile.java b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/polymorphism/GenericFile.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/polymorphism/GenericFile.java
rename to core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/polymorphism/GenericFile.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/polymorphism/ImageFile.java b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/polymorphism/ImageFile.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/polymorphism/ImageFile.java
rename to core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/polymorphism/ImageFile.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/polymorphism/TextFile.java b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/polymorphism/TextFile.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/polymorphism/TextFile.java
rename to core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/polymorphism/TextFile.java
diff --git a/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/keyword/KeywordDemo.java b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/superkeyword/KeywordDemo.java
similarity index 50%
rename from core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/keyword/KeywordDemo.java
rename to core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/superkeyword/KeywordDemo.java
index fd608b424c..0e5bd489bb 100644
--- a/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/keyword/KeywordDemo.java
+++ b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/superkeyword/KeywordDemo.java
@@ -1,7 +1,4 @@
-package com.baeldung.keyword;
-
-import com.baeldung.keyword.superkeyword.SuperSub;
-import com.baeldung.keyword.thiskeyword.KeywordUnitTest;
+package com.baeldung.superkeyword;
/**
* Created by Gebruiker on 5/14/2018.
@@ -9,8 +6,6 @@ import com.baeldung.keyword.thiskeyword.KeywordUnitTest;
public class KeywordDemo {
public static void main(String[] args) {
- KeywordUnitTest keyword = new KeywordUnitTest();
-
SuperSub child = new SuperSub("message from the child class");
}
}
diff --git a/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/keyword/superkeyword/SuperBase.java b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/superkeyword/SuperBase.java
similarity index 87%
rename from core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/keyword/superkeyword/SuperBase.java
rename to core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/superkeyword/SuperBase.java
index a5304fcef9..ec6a90cb06 100644
--- a/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/keyword/superkeyword/SuperBase.java
+++ b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/superkeyword/SuperBase.java
@@ -1,4 +1,4 @@
-package com.baeldung.keyword.superkeyword;
+package com.baeldung.superkeyword;
/**
* Created by Gebruiker on 5/14/2018.
diff --git a/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/keyword/superkeyword/SuperSub.java b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/superkeyword/SuperSub.java
similarity index 91%
rename from core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/keyword/superkeyword/SuperSub.java
rename to core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/superkeyword/SuperSub.java
index 83bc04ad0f..ada52e4ff2 100644
--- a/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/keyword/superkeyword/SuperSub.java
+++ b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/superkeyword/SuperSub.java
@@ -1,4 +1,4 @@
-package com.baeldung.keyword.superkeyword;
+package com.baeldung.superkeyword;
/**
* Created by Gebruiker on 5/15/2018.
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/scope/method/BaseMethodClass.java b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/variableandmethodhiding/method/BaseMethodClass.java
similarity index 71%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/scope/method/BaseMethodClass.java
rename to core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/variableandmethodhiding/method/BaseMethodClass.java
index 46ed5fd99f..7e6b08c000 100644
--- a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/scope/method/BaseMethodClass.java
+++ b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/variableandmethodhiding/method/BaseMethodClass.java
@@ -1,4 +1,4 @@
-package com.baeldung.scope.method;
+package com.baeldung.variableandmethodhiding.method;
public class BaseMethodClass {
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/scope/method/ChildMethodClass.java b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/variableandmethodhiding/method/ChildMethodClass.java
similarity index 74%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/scope/method/ChildMethodClass.java
rename to core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/variableandmethodhiding/method/ChildMethodClass.java
index 1d0cff2d6b..30db54cd84 100644
--- a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/scope/method/ChildMethodClass.java
+++ b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/variableandmethodhiding/method/ChildMethodClass.java
@@ -1,4 +1,4 @@
-package com.baeldung.scope.method;
+package com.baeldung.variableandmethodhiding.method;
public class ChildMethodClass extends BaseMethodClass {
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/scope/method/MethodHidingDemo.java b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/variableandmethodhiding/method/MethodHidingDemo.java
similarity index 70%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/scope/method/MethodHidingDemo.java
rename to core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/variableandmethodhiding/method/MethodHidingDemo.java
index 7e0b3ed146..ce1feac665 100644
--- a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/scope/method/MethodHidingDemo.java
+++ b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/variableandmethodhiding/method/MethodHidingDemo.java
@@ -1,4 +1,4 @@
-package com.baeldung.scope.method;
+package com.baeldung.variableandmethodhiding.method;
public class MethodHidingDemo {
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/scope/variable/ChildVariable.java b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/variableandmethodhiding/variable/ChildVariable.java
similarity index 81%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/scope/variable/ChildVariable.java
rename to core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/variableandmethodhiding/variable/ChildVariable.java
index 5730e5e282..83434f7dd3 100644
--- a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/scope/variable/ChildVariable.java
+++ b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/variableandmethodhiding/variable/ChildVariable.java
@@ -1,4 +1,4 @@
-package com.baeldung.scope.variable;
+package com.baeldung.variableandmethodhiding.variable;
/**
* Created by Gebruiker on 5/7/2018.
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/scope/variable/HideVariable.java b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/variableandmethodhiding/variable/HideVariable.java
similarity index 89%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/scope/variable/HideVariable.java
rename to core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/variableandmethodhiding/variable/HideVariable.java
index 8243fdb249..98a29573b8 100644
--- a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/scope/variable/HideVariable.java
+++ b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/variableandmethodhiding/variable/HideVariable.java
@@ -1,4 +1,4 @@
-package com.baeldung.scope.variable;
+package com.baeldung.variableandmethodhiding.variable;
/**
* Created by Gebruiker on 5/6/2018.
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/scope/variable/ParentVariable.java b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/variableandmethodhiding/variable/ParentVariable.java
similarity index 80%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/scope/variable/ParentVariable.java
rename to core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/variableandmethodhiding/variable/ParentVariable.java
index 7f116b955e..ef17305746 100644
--- a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/scope/variable/ParentVariable.java
+++ b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/variableandmethodhiding/variable/ParentVariable.java
@@ -1,4 +1,4 @@
-package com.baeldung.scope.variable;
+package com.baeldung.variableandmethodhiding.variable;
/**
* Created by Gebruiker on 5/7/2018.
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/scope/variable/VariableHidingDemo.java b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/variableandmethodhiding/variable/VariableHidingDemo.java
similarity index 89%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/scope/variable/VariableHidingDemo.java
rename to core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/variableandmethodhiding/variable/VariableHidingDemo.java
index 1ad71bd966..0fd83ad55e 100644
--- a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/scope/variable/VariableHidingDemo.java
+++ b/core-java-modules/core-java-lang-oop-inheritance/src/main/java/com/baeldung/variableandmethodhiding/variable/VariableHidingDemo.java
@@ -1,4 +1,4 @@
-package com.baeldung.scope.variable;
+package com.baeldung.variableandmethodhiding.variable;
/**
* Created by Gebruiker on 5/6/2018.
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/resources/files/test.txt b/core-java-modules/core-java-lang-oop-inheritance/src/main/resources/files/test.txt
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/resources/files/test.txt
rename to core-java-modules/core-java-lang-oop-inheritance/src/main/resources/files/test.txt
diff --git a/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/abstractclasses/test/LowercaseFileReaderUnitTest.java b/core-java-modules/core-java-lang-oop-inheritance/src/test/java/com/baeldung/abstractclasses/LowercaseFileReaderUnitTest.java
similarity index 94%
rename from core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/abstractclasses/test/LowercaseFileReaderUnitTest.java
rename to core-java-modules/core-java-lang-oop-inheritance/src/test/java/com/baeldung/abstractclasses/LowercaseFileReaderUnitTest.java
index 45e16f0d25..8e970fc0c7 100644
--- a/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/abstractclasses/test/LowercaseFileReaderUnitTest.java
+++ b/core-java-modules/core-java-lang-oop-inheritance/src/test/java/com/baeldung/abstractclasses/LowercaseFileReaderUnitTest.java
@@ -1,4 +1,4 @@
-package com.baeldung.abstractclasses.test;
+package com.baeldung.abstractclasses;
import com.baeldung.abstractclasses.filereaders.BaseFileReader;
import com.baeldung.abstractclasses.filereaders.LowercaseFileReader;
diff --git a/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/abstractclasses/test/UppercaseFileReaderUnitTest.java b/core-java-modules/core-java-lang-oop-inheritance/src/test/java/com/baeldung/abstractclasses/UppercaseFileReaderUnitTest.java
similarity index 94%
rename from core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/abstractclasses/test/UppercaseFileReaderUnitTest.java
rename to core-java-modules/core-java-lang-oop-inheritance/src/test/java/com/baeldung/abstractclasses/UppercaseFileReaderUnitTest.java
index dc4df900e4..e7b83a97e6 100644
--- a/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/abstractclasses/test/UppercaseFileReaderUnitTest.java
+++ b/core-java-modules/core-java-lang-oop-inheritance/src/test/java/com/baeldung/abstractclasses/UppercaseFileReaderUnitTest.java
@@ -1,4 +1,4 @@
-package com.baeldung.abstractclasses.test;
+package com.baeldung.abstractclasses;
import com.baeldung.abstractclasses.filereaders.BaseFileReader;
import com.baeldung.abstractclasses.filereaders.UppercaseFileReader;
diff --git a/core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/casting/CastingUnitTest.java b/core-java-modules/core-java-lang-oop-inheritance/src/test/java/com/baeldung/casting/CastingUnitTest.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/casting/CastingUnitTest.java
rename to core-java-modules/core-java-lang-oop-inheritance/src/test/java/com/baeldung/casting/CastingUnitTest.java
diff --git a/core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/inheritance/AppUnitTest.java b/core-java-modules/core-java-lang-oop-inheritance/src/test/java/com/baeldung/inheritance/AppUnitTest.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/inheritance/AppUnitTest.java
rename to core-java-modules/core-java-lang-oop-inheritance/src/test/java/com/baeldung/inheritance/AppUnitTest.java
diff --git a/core-java-modules/core-java-lang-oop-3/src/test/java/com/baeldung/innerinterfaces/InnerInterfaceUnitTest.java b/core-java-modules/core-java-lang-oop-inheritance/src/test/java/com/baeldung/innerinterfaces/InnerInterfaceUnitTest.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-3/src/test/java/com/baeldung/innerinterfaces/InnerInterfaceUnitTest.java
rename to core-java-modules/core-java-lang-oop-inheritance/src/test/java/com/baeldung/innerinterfaces/InnerInterfaceUnitTest.java
diff --git a/core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/polymorphism/PolymorphismUnitTest.java b/core-java-modules/core-java-lang-oop-inheritance/src/test/java/com/baeldung/polymorphism/PolymorphismUnitTest.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/polymorphism/PolymorphismUnitTest.java
rename to core-java-modules/core-java-lang-oop-inheritance/src/test/java/com/baeldung/polymorphism/PolymorphismUnitTest.java
diff --git a/core-java-modules/core-java-lang-oop-methods/README.md b/core-java-modules/core-java-lang-oop-methods/README.md
new file mode 100644
index 0000000000..fa474c9795
--- /dev/null
+++ b/core-java-modules/core-java-lang-oop-methods/README.md
@@ -0,0 +1,9 @@
+## Core Java Lang OOP - Methods
+
+This module contains articles about methods in Java
+
+### Relevant Articles:
+- [Methods in Java](https://www.baeldung.com/java-methods)
+- [Method Overloading and Overriding in Java](https://www.baeldung.com/java-method-overload-override)
+- [Java equals() and hashCode() Contracts](https://www.baeldung.com/java-equals-hashcode-contracts)
+- [Guide to hashCode() in Java](https://www.baeldung.com/java-hashcode)
diff --git a/core-java-modules/core-java-lang-oop-methods/pom.xml b/core-java-modules/core-java-lang-oop-methods/pom.xml
new file mode 100644
index 0000000000..3590b85454
--- /dev/null
+++ b/core-java-modules/core-java-lang-oop-methods/pom.xml
@@ -0,0 +1,49 @@
+
+
+
+ core-java-modules
+ com.baeldung.core-java-modules
+ 1.0.0-SNAPSHOT
+
+ 4.0.0
+
+ core-java-lang-oop-methods
+ core-java-lang-oop-methods
+ jar
+
+
+
+ org.projectlombok
+ lombok
+ ${lombok.version}
+
+
+ commons-lang
+ commons-lang
+ ${commons-lang.version}
+
+
+
+ org.assertj
+ assertj-core
+ ${assertj-core.version}
+ test
+
+
+ nl.jqno.equalsverifier
+ equalsverifier
+ ${equalsverifier.version}
+ test
+
+
+
+
+ 1.18.12
+ 2.6
+
+ 3.10.0
+ 3.0.3
+
+
\ No newline at end of file
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/equalshashcode/Money.java b/core-java-modules/core-java-lang-oop-methods/src/main/java/com/baeldung/equalshashcode/Money.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/equalshashcode/Money.java
rename to core-java-modules/core-java-lang-oop-methods/src/main/java/com/baeldung/equalshashcode/Money.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/equalshashcode/Team.java b/core-java-modules/core-java-lang-oop-methods/src/main/java/com/baeldung/equalshashcode/Team.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/equalshashcode/Team.java
rename to core-java-modules/core-java-lang-oop-methods/src/main/java/com/baeldung/equalshashcode/Team.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/equalshashcode/Voucher.java b/core-java-modules/core-java-lang-oop-methods/src/main/java/com/baeldung/equalshashcode/Voucher.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/equalshashcode/Voucher.java
rename to core-java-modules/core-java-lang-oop-methods/src/main/java/com/baeldung/equalshashcode/Voucher.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/equalshashcode/WrongTeam.java b/core-java-modules/core-java-lang-oop-methods/src/main/java/com/baeldung/equalshashcode/WrongTeam.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/equalshashcode/WrongTeam.java
rename to core-java-modules/core-java-lang-oop-methods/src/main/java/com/baeldung/equalshashcode/WrongTeam.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/equalshashcode/WrongVoucher.java b/core-java-modules/core-java-lang-oop-methods/src/main/java/com/baeldung/equalshashcode/WrongVoucher.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/equalshashcode/WrongVoucher.java
rename to core-java-modules/core-java-lang-oop-methods/src/main/java/com/baeldung/equalshashcode/WrongVoucher.java
diff --git a/core-java-modules/core-java-lang-oop-methods/src/main/java/com/baeldung/hashcode/apachecommons/User.java b/core-java-modules/core-java-lang-oop-methods/src/main/java/com/baeldung/hashcode/apachecommons/User.java
new file mode 100644
index 0000000000..4be082019a
--- /dev/null
+++ b/core-java-modules/core-java-lang-oop-methods/src/main/java/com/baeldung/hashcode/apachecommons/User.java
@@ -0,0 +1,42 @@
+package com.baeldung.hashcode.apachecommons;
+
+import org.apache.commons.lang.builder.HashCodeBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class User {
+
+ private final Logger logger = LoggerFactory.getLogger(User.class);
+ private long id;
+ private String name;
+ private String email;
+
+ public User(long id, String name, String email) {
+ this.id = id;
+ this.name = name;
+ this.email = email;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o)
+ return true;
+ if (o == null)
+ return false;
+ if (this.getClass() != o.getClass())
+ return false;
+ User user = (User) o;
+ return id == user.id && (name.equals(user.name) && email.equals(user.email));
+ }
+
+ @Override
+ public int hashCode() {
+ return new HashCodeBuilder(17, 37).
+ append(id).
+ append(name).
+ append(email).
+ toHashCode();
+ }
+ // getters and setters here
+
+}
diff --git a/core-java-modules/core-java-lang-oop-methods/src/main/java/com/baeldung/hashcode/eclipse/User.java b/core-java-modules/core-java-lang-oop-methods/src/main/java/com/baeldung/hashcode/eclipse/User.java
new file mode 100644
index 0000000000..e852eef96e
--- /dev/null
+++ b/core-java-modules/core-java-lang-oop-methods/src/main/java/com/baeldung/hashcode/eclipse/User.java
@@ -0,0 +1,42 @@
+package com.baeldung.hashcode.eclipse;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class User {
+
+ private final Logger logger = LoggerFactory.getLogger(User.class);
+ private long id;
+ private String name;
+ private String email;
+
+ public User(long id, String name, String email) {
+ this.id = id;
+ this.name = name;
+ this.email = email;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o)
+ return true;
+ if (o == null)
+ return false;
+ if (this.getClass() != o.getClass())
+ return false;
+ User user = (User) o;
+ return id == user.id && (name.equals(user.name) && email.equals(user.email));
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((email == null) ? 0 : email.hashCode());
+ result = prime * result + (int) (id ^ (id >>> 32));
+ result = prime * result + ((name == null) ? 0 : name.hashCode());
+ return result;
+ }
+ // getters and setters here
+
+}
diff --git a/core-java-modules/core-java-lang-oop-methods/src/main/java/com/baeldung/hashcode/improved/User.java b/core-java-modules/core-java-lang-oop-methods/src/main/java/com/baeldung/hashcode/improved/User.java
new file mode 100644
index 0000000000..773a2c7e45
--- /dev/null
+++ b/core-java-modules/core-java-lang-oop-methods/src/main/java/com/baeldung/hashcode/improved/User.java
@@ -0,0 +1,37 @@
+package com.baeldung.hashcode.improved;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class User {
+
+ private final Logger logger = LoggerFactory.getLogger(User.class);
+ private long id;
+ private String name;
+ private String email;
+
+ public User(long id, String name, String email) {
+ this.id = id;
+ this.name = name;
+ this.email = email;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o)
+ return true;
+ if (o == null)
+ return false;
+ if (this.getClass() != o.getClass())
+ return false;
+ User user = (User) o;
+ return id == user.id && (name.equals(user.name) && email.equals(user.email));
+ }
+
+ @Override
+ public int hashCode() {
+ return (int) id * name.hashCode() * email.hashCode();
+ }
+ // getters and setters here
+
+}
diff --git a/core-java-modules/core-java-lang-oop-methods/src/main/java/com/baeldung/hashcode/intellij/User.java b/core-java-modules/core-java-lang-oop-methods/src/main/java/com/baeldung/hashcode/intellij/User.java
new file mode 100644
index 0000000000..f7bf1ab735
--- /dev/null
+++ b/core-java-modules/core-java-lang-oop-methods/src/main/java/com/baeldung/hashcode/intellij/User.java
@@ -0,0 +1,40 @@
+package com.baeldung.hashcode.intellij;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class User {
+
+ private final Logger logger = LoggerFactory.getLogger(User.class);
+ private long id;
+ private String name;
+ private String email;
+
+ public User(long id, String name, String email) {
+ this.id = id;
+ this.name = name;
+ this.email = email;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o)
+ return true;
+ if (o == null)
+ return false;
+ if (this.getClass() != o.getClass())
+ return false;
+ User user = (User) o;
+ return id == user.id && (name.equals(user.name) && email.equals(user.email));
+ }
+
+ @Override
+ public int hashCode() {
+ int result = (int) (id ^ (id >>> 32));
+ result = 31 * result + name.hashCode();
+ result = 31 * result + email.hashCode();
+ return result;
+ }
+ // getters and setters here
+
+}
diff --git a/core-java-modules/core-java-lang-oop-methods/src/main/java/com/baeldung/hashcode/lombok/User.java b/core-java-modules/core-java-lang-oop-methods/src/main/java/com/baeldung/hashcode/lombok/User.java
new file mode 100644
index 0000000000..e34246ce24
--- /dev/null
+++ b/core-java-modules/core-java-lang-oop-methods/src/main/java/com/baeldung/hashcode/lombok/User.java
@@ -0,0 +1,22 @@
+package com.baeldung.hashcode.lombok;
+
+import lombok.EqualsAndHashCode;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@EqualsAndHashCode
+public class User {
+
+ private final Logger logger = LoggerFactory.getLogger(User.class);
+ private long id;
+ private String name;
+ private String email;
+
+ public User(long id, String name, String email) {
+ this.id = id;
+ this.name = name;
+ this.email = email;
+ }
+ // getters and setters here
+
+}
diff --git a/core-java-modules/core-java-lang-oop-methods/src/main/java/com/baeldung/hashcode/naive/User.java b/core-java-modules/core-java-lang-oop-methods/src/main/java/com/baeldung/hashcode/naive/User.java
new file mode 100644
index 0000000000..b0a33ad3e9
--- /dev/null
+++ b/core-java-modules/core-java-lang-oop-methods/src/main/java/com/baeldung/hashcode/naive/User.java
@@ -0,0 +1,37 @@
+package com.baeldung.hashcode.naive;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class User {
+
+ private final Logger logger = LoggerFactory.getLogger(User.class);
+ private long id;
+ private String name;
+ private String email;
+
+ public User(long id, String name, String email) {
+ this.id = id;
+ this.name = name;
+ this.email = email;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o)
+ return true;
+ if (o == null)
+ return false;
+ if (this.getClass() != o.getClass())
+ return false;
+ User user = (User) o;
+ return id == user.id && (name.equals(user.name) && email.equals(user.email));
+ }
+
+ @Override
+ public int hashCode() {
+ return 1;
+ }
+ // getters and setters here
+
+}
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/hashcode/entities/User.java b/core-java-modules/core-java-lang-oop-methods/src/main/java/com/baeldung/hashcode/standard/User.java
similarity index 89%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/hashcode/entities/User.java
rename to core-java-modules/core-java-lang-oop-methods/src/main/java/com/baeldung/hashcode/standard/User.java
index 524f176e6b..f8fd5cedbd 100644
--- a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/hashcode/entities/User.java
+++ b/core-java-modules/core-java-lang-oop-methods/src/main/java/com/baeldung/hashcode/standard/User.java
@@ -1,4 +1,4 @@
-package com.baeldung.hashcode.entities;
+package com.baeldung.hashcode.standard;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -34,7 +34,6 @@ public class User {
hash = 31 * hash + (int) id;
hash = 31 * hash + (name == null ? 0 : name.hashCode());
hash = 31 * hash + (email == null ? 0 : email.hashCode());
- logger.info("hashCode() method called - Computed hash: " + hash);
return hash;
}
// getters and setters here
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/methodoverloadingoverriding/application/Application.java b/core-java-modules/core-java-lang-oop-methods/src/main/java/com/baeldung/methodoverloadingoverriding/application/Application.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/methodoverloadingoverriding/application/Application.java
rename to core-java-modules/core-java-lang-oop-methods/src/main/java/com/baeldung/methodoverloadingoverriding/application/Application.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/methodoverloadingoverriding/model/Car.java b/core-java-modules/core-java-lang-oop-methods/src/main/java/com/baeldung/methodoverloadingoverriding/model/Car.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/methodoverloadingoverriding/model/Car.java
rename to core-java-modules/core-java-lang-oop-methods/src/main/java/com/baeldung/methodoverloadingoverriding/model/Car.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/methodoverloadingoverriding/model/Vehicle.java b/core-java-modules/core-java-lang-oop-methods/src/main/java/com/baeldung/methodoverloadingoverriding/model/Vehicle.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/methodoverloadingoverriding/model/Vehicle.java
rename to core-java-modules/core-java-lang-oop-methods/src/main/java/com/baeldung/methodoverloadingoverriding/model/Vehicle.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/methodoverloadingoverriding/util/Multiplier.java b/core-java-modules/core-java-lang-oop-methods/src/main/java/com/baeldung/methodoverloadingoverriding/util/Multiplier.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/methodoverloadingoverriding/util/Multiplier.java
rename to core-java-modules/core-java-lang-oop-methods/src/main/java/com/baeldung/methodoverloadingoverriding/util/Multiplier.java
diff --git a/core-java-modules/core-java-lang-oop-4/src/main/java/com/baeldung/basicmethods/PersonName.java b/core-java-modules/core-java-lang-oop-methods/src/main/java/com/baeldung/methods/PersonName.java
similarity index 96%
rename from core-java-modules/core-java-lang-oop-4/src/main/java/com/baeldung/basicmethods/PersonName.java
rename to core-java-modules/core-java-lang-oop-methods/src/main/java/com/baeldung/methods/PersonName.java
index 43bbf0dd62..d1f3f58b8c 100644
--- a/core-java-modules/core-java-lang-oop-4/src/main/java/com/baeldung/basicmethods/PersonName.java
+++ b/core-java-modules/core-java-lang-oop-methods/src/main/java/com/baeldung/methods/PersonName.java
@@ -1,4 +1,4 @@
-package com.baeldung.basicmethods;
+package com.baeldung.methods;
import java.io.FileWriter;
import java.io.IOException;
diff --git a/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/equalshashcode/MoneyUnitTest.java b/core-java-modules/core-java-lang-oop-methods/src/test/java/com/baeldung/equalshashcode/MoneyUnitTest.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/equalshashcode/MoneyUnitTest.java
rename to core-java-modules/core-java-lang-oop-methods/src/test/java/com/baeldung/equalshashcode/MoneyUnitTest.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/equalshashcode/TeamUnitTest.java b/core-java-modules/core-java-lang-oop-methods/src/test/java/com/baeldung/equalshashcode/TeamUnitTest.java
similarity index 96%
rename from core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/equalshashcode/TeamUnitTest.java
rename to core-java-modules/core-java-lang-oop-methods/src/test/java/com/baeldung/equalshashcode/TeamUnitTest.java
index 7dfc6d47a3..308004452b 100644
--- a/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/equalshashcode/TeamUnitTest.java
+++ b/core-java-modules/core-java-lang-oop-methods/src/test/java/com/baeldung/equalshashcode/TeamUnitTest.java
@@ -38,7 +38,7 @@ public class TeamUnitTest {
}
@Test
- public void equalsContract() {
+ public void equalsHashCodeContracts() {
EqualsVerifier.forClass(Team.class).verify();
}
diff --git a/core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/hashcode/entities/UserUnitTest.java b/core-java-modules/core-java-lang-oop-methods/src/test/java/com/baeldung/hashcode/UserUnitTest.java
similarity index 90%
rename from core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/hashcode/entities/UserUnitTest.java
rename to core-java-modules/core-java-lang-oop-methods/src/test/java/com/baeldung/hashcode/UserUnitTest.java
index 44ea7efed1..51475acabf 100644
--- a/core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/hashcode/entities/UserUnitTest.java
+++ b/core-java-modules/core-java-lang-oop-methods/src/test/java/com/baeldung/hashcode/UserUnitTest.java
@@ -1,5 +1,6 @@
-package com.baeldung.hashcode.entities;
+package com.baeldung.hashcode;
+import com.baeldung.hashcode.standard.User;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
diff --git a/core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/hashcode/application/ApplicationUnitTest.java b/core-java-modules/core-java-lang-oop-methods/src/test/java/com/baeldung/hashcode/application/ApplicationUnitTest.java
similarity index 93%
rename from core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/hashcode/application/ApplicationUnitTest.java
rename to core-java-modules/core-java-lang-oop-methods/src/test/java/com/baeldung/hashcode/application/ApplicationUnitTest.java
index 49857f355a..18b2d4d570 100644
--- a/core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/hashcode/application/ApplicationUnitTest.java
+++ b/core-java-modules/core-java-lang-oop-methods/src/test/java/com/baeldung/hashcode/application/ApplicationUnitTest.java
@@ -1,6 +1,6 @@
package com.baeldung.hashcode.application;
-import com.baeldung.hashcode.entities.User;
+import com.baeldung.hashcode.standard.User;
import org.junit.Test;
import java.util.HashMap;
diff --git a/core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/methodoverloadingoverriding/test/MethodOverloadingUnitTest.java b/core-java-modules/core-java-lang-oop-methods/src/test/java/com/baeldung/methodoverloadingoverriding/MethodOverloadingUnitTest.java
similarity index 95%
rename from core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/methodoverloadingoverriding/test/MethodOverloadingUnitTest.java
rename to core-java-modules/core-java-lang-oop-methods/src/test/java/com/baeldung/methodoverloadingoverriding/MethodOverloadingUnitTest.java
index 081a30c34a..476e70618f 100644
--- a/core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/methodoverloadingoverriding/test/MethodOverloadingUnitTest.java
+++ b/core-java-modules/core-java-lang-oop-methods/src/test/java/com/baeldung/methodoverloadingoverriding/MethodOverloadingUnitTest.java
@@ -1,4 +1,4 @@
-package com.baeldung.methodoverloadingoverriding.test;
+package com.baeldung.methodoverloadingoverriding;
import com.baeldung.methodoverloadingoverriding.util.Multiplier;
import org.junit.BeforeClass;
diff --git a/core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/methodoverloadingoverriding/test/MethodOverridingUnitTest.java b/core-java-modules/core-java-lang-oop-methods/src/test/java/com/baeldung/methodoverloadingoverriding/MethodOverridingUnitTest.java
similarity index 97%
rename from core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/methodoverloadingoverriding/test/MethodOverridingUnitTest.java
rename to core-java-modules/core-java-lang-oop-methods/src/test/java/com/baeldung/methodoverloadingoverriding/MethodOverridingUnitTest.java
index 554ac121bc..f4142d7382 100644
--- a/core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/methodoverloadingoverriding/test/MethodOverridingUnitTest.java
+++ b/core-java-modules/core-java-lang-oop-methods/src/test/java/com/baeldung/methodoverloadingoverriding/MethodOverridingUnitTest.java
@@ -1,4 +1,4 @@
-package com.baeldung.methodoverloadingoverriding.test;
+package com.baeldung.methodoverloadingoverriding;
import com.baeldung.methodoverloadingoverriding.model.Car;
import com.baeldung.methodoverloadingoverriding.model.Vehicle;
diff --git a/core-java-modules/core-java-lang-oop-modifiers/README.md b/core-java-modules/core-java-lang-oop-modifiers/README.md
new file mode 100644
index 0000000000..eef905fa0e
--- /dev/null
+++ b/core-java-modules/core-java-lang-oop-modifiers/README.md
@@ -0,0 +1,12 @@
+## Core Java Lang OOP - Modifiers
+
+This module contains articles about modifiers in Java
+
+### Relevant Articles:
+- [Access Modifiers in Java](https://www.baeldung.com/java-access-modifiers)
+- [Java ‘public’ Access Modifier](https://www.baeldung.com/java-public-keyword)
+- [Java ‘private’ Access Modifier](https://www.baeldung.com/java-private-keyword)
+- [The “final” Keyword in Java](https://www.baeldung.com/java-final)
+- [A Guide to the Static Keyword in Java](https://www.baeldung.com/java-static)
+- [Static and Default Methods in Interfaces in Java](https://www.baeldung.com/java-static-default-methods)
+- [The strictfp Keyword in Java](https://www.baeldung.com/java-strictfp)
\ No newline at end of file
diff --git a/core-java-modules/core-java-lang-oop-modifiers/pom.xml b/core-java-modules/core-java-lang-oop-modifiers/pom.xml
new file mode 100644
index 0000000000..615e20690f
--- /dev/null
+++ b/core-java-modules/core-java-lang-oop-modifiers/pom.xml
@@ -0,0 +1,34 @@
+
+
+
+ core-java-modules
+ com.baeldung.core-java-modules
+ 1.0.0-SNAPSHOT
+
+ 4.0.0
+
+ core-java-lang-oop-modifiers
+ core-java-lang-oop-modifiers
+ jar
+
+
+
+ org.assertj
+ assertj-core
+ ${assertj-core.version}
+ test
+
+
+ com.h2database
+ h2
+ ${h2.version}
+ test
+
+
+
+
+ 3.10.0
+
+
\ No newline at end of file
diff --git a/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/accessmodifiers/Public.java b/core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/accessmodifiers/Public.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/accessmodifiers/Public.java
rename to core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/accessmodifiers/Public.java
diff --git a/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/accessmodifiers/SubClass.java b/core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/accessmodifiers/SubClass.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/accessmodifiers/SubClass.java
rename to core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/accessmodifiers/SubClass.java
diff --git a/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/accessmodifiers/SuperPublic.java b/core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/accessmodifiers/SuperPublic.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/accessmodifiers/SuperPublic.java
rename to core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/accessmodifiers/SuperPublic.java
diff --git a/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/accessmodifiers/another/AnotherPublic.java b/core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/accessmodifiers/another/AnotherPublic.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/accessmodifiers/another/AnotherPublic.java
rename to core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/accessmodifiers/another/AnotherPublic.java
diff --git a/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/accessmodifiers/another/AnotherSubClass.java b/core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/accessmodifiers/another/AnotherSubClass.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/accessmodifiers/another/AnotherSubClass.java
rename to core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/accessmodifiers/another/AnotherSubClass.java
diff --git a/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/accessmodifiers/another/AnotherSuperPublic.java b/core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/accessmodifiers/another/AnotherSuperPublic.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/accessmodifiers/another/AnotherSuperPublic.java
rename to core-java-modules/core-java-lang-oop-modifiers/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/defaultstaticinterfacemethods/application/Application.java b/core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/defaultstaticinterfacemethods/application/Application.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/defaultstaticinterfacemethods/application/Application.java
rename to core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/defaultstaticinterfacemethods/application/Application.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/defaultstaticinterfacemethods/model/Alarm.java b/core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/defaultstaticinterfacemethods/model/Alarm.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/defaultstaticinterfacemethods/model/Alarm.java
rename to core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/defaultstaticinterfacemethods/model/Alarm.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/defaultstaticinterfacemethods/model/Car.java b/core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/defaultstaticinterfacemethods/model/Car.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/defaultstaticinterfacemethods/model/Car.java
rename to core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/defaultstaticinterfacemethods/model/Car.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/defaultstaticinterfacemethods/model/Motorbike.java b/core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/defaultstaticinterfacemethods/model/Motorbike.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/defaultstaticinterfacemethods/model/Motorbike.java
rename to core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/defaultstaticinterfacemethods/model/Motorbike.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/defaultstaticinterfacemethods/model/MultiAlarmCar.java b/core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/defaultstaticinterfacemethods/model/MultiAlarmCar.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/defaultstaticinterfacemethods/model/MultiAlarmCar.java
rename to core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/defaultstaticinterfacemethods/model/MultiAlarmCar.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/defaultstaticinterfacemethods/model/Vehicle.java b/core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/defaultstaticinterfacemethods/model/Vehicle.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/defaultstaticinterfacemethods/model/Vehicle.java
rename to core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/defaultstaticinterfacemethods/model/Vehicle.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/finalkeyword/BlackCat.java b/core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/finalkeyword/BlackCat.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/finalkeyword/BlackCat.java
rename to core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/finalkeyword/BlackCat.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/finalkeyword/BlackDog.java b/core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/finalkeyword/BlackDog.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/finalkeyword/BlackDog.java
rename to core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/finalkeyword/BlackDog.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/finalkeyword/Cat.java b/core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/finalkeyword/Cat.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/finalkeyword/Cat.java
rename to core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/finalkeyword/Cat.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/finalkeyword/Dog.java b/core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/finalkeyword/Dog.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/finalkeyword/Dog.java
rename to core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/finalkeyword/Dog.java
diff --git a/core-java-modules/core-java-lang-oop-4/src/main/java/com/baeldung/core/privatemodifier/Employee.java b/core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/privatemodifier/Employee.java
similarity index 96%
rename from core-java-modules/core-java-lang-oop-4/src/main/java/com/baeldung/core/privatemodifier/Employee.java
rename to core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/privatemodifier/Employee.java
index 4598400e93..a0f7829d51 100644
--- a/core-java-modules/core-java-lang-oop-4/src/main/java/com/baeldung/core/privatemodifier/Employee.java
+++ b/core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/privatemodifier/Employee.java
@@ -1,4 +1,4 @@
-package com.baeldung.core.privatemodifier;
+package com.baeldung.privatemodifier;
public class Employee {
diff --git a/core-java-modules/core-java-lang-oop-4/src/main/java/com/baeldung/core/privatemodifier/ExampleClass.java b/core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/privatemodifier/ExampleClass.java
similarity index 84%
rename from core-java-modules/core-java-lang-oop-4/src/main/java/com/baeldung/core/privatemodifier/ExampleClass.java
rename to core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/privatemodifier/ExampleClass.java
index 8659b4ad9c..c87980fbe8 100644
--- a/core-java-modules/core-java-lang-oop-4/src/main/java/com/baeldung/core/privatemodifier/ExampleClass.java
+++ b/core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/privatemodifier/ExampleClass.java
@@ -1,4 +1,4 @@
-package com.baeldung.core.privatemodifier;
+package com.baeldung.privatemodifier;
public class ExampleClass {
diff --git a/core-java-modules/core-java-lang-oop-4/src/main/java/com/baeldung/core/privatemodifier/PublicOuterClass.java b/core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/privatemodifier/PublicOuterClass.java
similarity index 90%
rename from core-java-modules/core-java-lang-oop-4/src/main/java/com/baeldung/core/privatemodifier/PublicOuterClass.java
rename to core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/privatemodifier/PublicOuterClass.java
index 8a9e8a8eb3..082d08b034 100644
--- a/core-java-modules/core-java-lang-oop-4/src/main/java/com/baeldung/core/privatemodifier/PublicOuterClass.java
+++ b/core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/privatemodifier/PublicOuterClass.java
@@ -1,4 +1,4 @@
-package com.baeldung.core.privatemodifier;
+package com.baeldung.privatemodifier;
public class PublicOuterClass {
diff --git a/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/accessmodifiers/publicmodifier/ListOfThree.java b/core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/publicmodifier/ListOfThree.java
similarity index 92%
rename from core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/accessmodifiers/publicmodifier/ListOfThree.java
rename to core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/publicmodifier/ListOfThree.java
index 2ded0ba5d3..0e3449f451 100644
--- a/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/accessmodifiers/publicmodifier/ListOfThree.java
+++ b/core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/publicmodifier/ListOfThree.java
@@ -1,4 +1,4 @@
-package com.baeldung.accessmodifiers.publicmodifier;
+package com.baeldung.publicmodifier;
import java.util.AbstractList;
import java.util.Arrays;
diff --git a/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/accessmodifiers/publicmodifier/SpecialCharacters.java b/core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/publicmodifier/SpecialCharacters.java
similarity index 61%
rename from core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/accessmodifiers/publicmodifier/SpecialCharacters.java
rename to core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/publicmodifier/SpecialCharacters.java
index 5556e9aa57..633308e707 100644
--- a/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/accessmodifiers/publicmodifier/SpecialCharacters.java
+++ b/core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/publicmodifier/SpecialCharacters.java
@@ -1,4 +1,4 @@
-package com.baeldung.accessmodifiers.publicmodifier;
+package com.baeldung.publicmodifier;
public class SpecialCharacters {
diff --git a/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/accessmodifiers/publicmodifier/Student.java b/core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/publicmodifier/Student.java
similarity index 96%
rename from core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/accessmodifiers/publicmodifier/Student.java
rename to core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/publicmodifier/Student.java
index 83a0dcb30f..5aa80286bf 100644
--- a/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/accessmodifiers/publicmodifier/Student.java
+++ b/core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/publicmodifier/Student.java
@@ -1,4 +1,4 @@
-package com.baeldung.accessmodifiers.publicmodifier;
+package com.baeldung.publicmodifier;
import java.math.BigDecimal;
import java.sql.Connection;
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/staticdemo/Car.java b/core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/staticmodifier/Car.java
similarity index 96%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/staticdemo/Car.java
rename to core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/staticmodifier/Car.java
index cdb3806c35..950f008dcd 100644
--- a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/staticdemo/Car.java
+++ b/core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/staticmodifier/Car.java
@@ -1,4 +1,4 @@
-package com.baeldung.staticdemo;
+package com.baeldung.staticmodifier;
/**
* This class demonstrates the use of static fields and static methods
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/staticdemo/Singleton.java b/core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/staticmodifier/Singleton.java
similarity index 88%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/staticdemo/Singleton.java
rename to core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/staticmodifier/Singleton.java
index de75af9d9d..6e7dcf7c60 100644
--- a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/staticdemo/Singleton.java
+++ b/core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/staticmodifier/Singleton.java
@@ -1,4 +1,4 @@
-package com.baeldung.staticdemo;
+package com.baeldung.staticmodifier;
public class Singleton {
private Singleton() {}
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/staticdemo/StaticBlock.java b/core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/staticmodifier/StaticBlockDemo.java
similarity index 81%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/staticdemo/StaticBlock.java
rename to core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/staticmodifier/StaticBlockDemo.java
index fde7afb090..637bb5e82a 100644
--- a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/staticdemo/StaticBlock.java
+++ b/core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/staticmodifier/StaticBlockDemo.java
@@ -1,9 +1,9 @@
-package com.baeldung.staticdemo;
+package com.baeldung.staticmodifier;
import java.util.LinkedList;
import java.util.List;
-public class StaticBlock {
+public class StaticBlockDemo {
private static List ranks = new LinkedList<>();
static {
@@ -23,6 +23,6 @@ public class StaticBlock {
}
public static void setRanks(List ranks) {
- StaticBlock.ranks = ranks;
+ StaticBlockDemo.ranks = ranks;
}
}
diff --git a/core-java-modules/core-java-lang-oop-4/src/main/java/com/baeldung/strictfpUsage/Circle.java b/core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/strictfpUsage/Circle.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-4/src/main/java/com/baeldung/strictfpUsage/Circle.java
rename to core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/strictfpUsage/Circle.java
diff --git a/core-java-modules/core-java-lang-oop-4/src/main/java/com/baeldung/strictfpUsage/ScientificCalculator.java b/core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/strictfpUsage/ScientificCalculator.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-4/src/main/java/com/baeldung/strictfpUsage/ScientificCalculator.java
rename to core-java-modules/core-java-lang-oop-modifiers/src/main/java/com/baeldung/strictfpUsage/ScientificCalculator.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/defaultistaticinterfacemethods/test/StaticDefaulInterfaceMethodUnitTest.java b/core-java-modules/core-java-lang-oop-modifiers/src/test/java/com/baeldung/defaultstaticinterfacemethods/StaticDefaulInterfaceMethodUnitTest.java
similarity index 97%
rename from core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/defaultistaticinterfacemethods/test/StaticDefaulInterfaceMethodUnitTest.java
rename to core-java-modules/core-java-lang-oop-modifiers/src/test/java/com/baeldung/defaultstaticinterfacemethods/StaticDefaulInterfaceMethodUnitTest.java
index 7d4b06908a..0dffe8f80e 100644
--- a/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/defaultistaticinterfacemethods/test/StaticDefaulInterfaceMethodUnitTest.java
+++ b/core-java-modules/core-java-lang-oop-modifiers/src/test/java/com/baeldung/defaultstaticinterfacemethods/StaticDefaulInterfaceMethodUnitTest.java
@@ -1,4 +1,4 @@
-package com.baeldung.defaultistaticinterfacemethods.test;
+package com.baeldung.defaultstaticinterfacemethods;
import com.baeldung.defaultstaticinterfacemethods.model.Car;
import com.baeldung.defaultstaticinterfacemethods.model.Motorbike;
diff --git a/core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/finalkeyword/FinalUnitTest.java b/core-java-modules/core-java-lang-oop-modifiers/src/test/java/com/baeldung/finalkeyword/FinalUnitTest.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/finalkeyword/FinalUnitTest.java
rename to core-java-modules/core-java-lang-oop-modifiers/src/test/java/com/baeldung/finalkeyword/FinalUnitTest.java
diff --git a/core-java-modules/core-java-lang-oop-3/src/test/java/com/baeldung/accessmodifiers/PublicAccessModifierUnitTest.java b/core-java-modules/core-java-lang-oop-modifiers/src/test/java/com/baeldung/publicmodifier/PublicAccessModifierUnitTest.java
similarity index 94%
rename from core-java-modules/core-java-lang-oop-3/src/test/java/com/baeldung/accessmodifiers/PublicAccessModifierUnitTest.java
rename to core-java-modules/core-java-lang-oop-modifiers/src/test/java/com/baeldung/publicmodifier/PublicAccessModifierUnitTest.java
index ed8fb4f45a..8c014e703b 100644
--- a/core-java-modules/core-java-lang-oop-3/src/test/java/com/baeldung/accessmodifiers/PublicAccessModifierUnitTest.java
+++ b/core-java-modules/core-java-lang-oop-modifiers/src/test/java/com/baeldung/publicmodifier/PublicAccessModifierUnitTest.java
@@ -1,7 +1,5 @@
-package com.baeldung.accessmodifiers;
+package com.baeldung.publicmodifier;
-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;
diff --git a/core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/staticdemo/CarIntegrationTest.java b/core-java-modules/core-java-lang-oop-modifiers/src/test/java/com/baeldung/staticmodifier/CarUnitTest.java
similarity index 80%
rename from core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/staticdemo/CarIntegrationTest.java
rename to core-java-modules/core-java-lang-oop-modifiers/src/test/java/com/baeldung/staticmodifier/CarUnitTest.java
index 3150627269..f55955caa8 100644
--- a/core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/staticdemo/CarIntegrationTest.java
+++ b/core-java-modules/core-java-lang-oop-modifiers/src/test/java/com/baeldung/staticmodifier/CarUnitTest.java
@@ -1,10 +1,10 @@
-package com.baeldung.staticdemo;
+package com.baeldung.staticmodifier;
import static org.junit.Assert.*;
import org.junit.Test;
-public class CarIntegrationTest {
+public class CarUnitTest {
@Test
public void whenNumberOfCarObjectsInitialized_thenStaticCounterIncreases() {
new Car("Jaguar", "V8");
diff --git a/core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/staticdemo/SingletonIntegrationTest.java b/core-java-modules/core-java-lang-oop-modifiers/src/test/java/com/baeldung/staticmodifier/SingletonUnitTest.java
similarity index 81%
rename from core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/staticdemo/SingletonIntegrationTest.java
rename to core-java-modules/core-java-lang-oop-modifiers/src/test/java/com/baeldung/staticmodifier/SingletonUnitTest.java
index 28d864073a..6371fd4961 100644
--- a/core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/staticdemo/SingletonIntegrationTest.java
+++ b/core-java-modules/core-java-lang-oop-modifiers/src/test/java/com/baeldung/staticmodifier/SingletonUnitTest.java
@@ -1,9 +1,9 @@
-package com.baeldung.staticdemo;
+package com.baeldung.staticmodifier;
import org.junit.Assert;
import org.junit.Test;
-public class SingletonIntegrationTest {
+public class SingletonUnitTest {
@Test
public void givenStaticInnerClass_whenMultipleTimesInstanceCalled_thenOnlyOneTimeInitialized() {
diff --git a/core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/staticdemo/StaticBlockIntegrationTest.java b/core-java-modules/core-java-lang-oop-modifiers/src/test/java/com/baeldung/staticmodifier/StaticBlockDemoUnitTest.java
similarity index 72%
rename from core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/staticdemo/StaticBlockIntegrationTest.java
rename to core-java-modules/core-java-lang-oop-modifiers/src/test/java/com/baeldung/staticmodifier/StaticBlockDemoUnitTest.java
index f98e3e14db..f31a8e8895 100644
--- a/core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/staticdemo/StaticBlockIntegrationTest.java
+++ b/core-java-modules/core-java-lang-oop-modifiers/src/test/java/com/baeldung/staticmodifier/StaticBlockDemoUnitTest.java
@@ -1,4 +1,4 @@
-package com.baeldung.staticdemo;
+package com.baeldung.staticmodifier;
import static org.hamcrest.collection.IsIterableContainingInOrder.contains;
import static org.junit.Assert.assertThat;
@@ -7,11 +7,11 @@ import java.util.List;
import org.junit.Test;
-public class StaticBlockIntegrationTest {
+public class StaticBlockDemoUnitTest {
@Test
public void whenAddedListElementsThroughStaticBlock_thenEnsureCorrectOrder() {
- List actualList = StaticBlock.getRanks();
+ List actualList = StaticBlockDemo.getRanks();
assertThat(actualList, contains("Lieutenant", "Captain", "Major", "Colonel", "General"));
}
}
diff --git a/core-java-modules/core-java-lang-oop-4/src/test/java/com/baeldung/strictfpUsage/ScientificCalculatorUnitTest.java b/core-java-modules/core-java-lang-oop-modifiers/src/test/java/com/baeldung/strictfpUsage/ScientificCalculatorUnitTest.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-4/src/test/java/com/baeldung/strictfpUsage/ScientificCalculatorUnitTest.java
rename to core-java-modules/core-java-lang-oop-modifiers/src/test/java/com/baeldung/strictfpUsage/ScientificCalculatorUnitTest.java
diff --git a/core-java-modules/core-java-lang-oop-others/README.md b/core-java-modules/core-java-lang-oop-others/README.md
new file mode 100644
index 0000000000..d3909c0014
--- /dev/null
+++ b/core-java-modules/core-java-lang-oop-others/README.md
@@ -0,0 +1,8 @@
+## Core Java Lang OOP - Others
+
+This module contains articles about Object Oriented Programming (OOP) in Java
+
+### Relevant Articles:
+- [Object-Oriented-Programming Concepts in Java](https://www.baeldung.com/java-oop)
+- [Static and Dynamic Binding in Java](https://www.baeldung.com/java-static-dynamic-binding)
+- [Pass-By-Value as a Parameter Passing Mechanism in Java](https://www.baeldung.com/java-pass-by-value-or-pass-by-reference)
diff --git a/core-java-modules/core-java-lang-oop-others/pom.xml b/core-java-modules/core-java-lang-oop-others/pom.xml
new file mode 100644
index 0000000000..8eab301748
--- /dev/null
+++ b/core-java-modules/core-java-lang-oop-others/pom.xml
@@ -0,0 +1,16 @@
+
+
+
+ core-java-modules
+ com.baeldung.core-java-modules
+ 1.0.0-SNAPSHOT
+
+ 4.0.0
+
+ core-java-lang-oop-others
+ core-java-lang-oop-others
+ jar
+
+
\ No newline at end of file
diff --git a/core-java-modules/core-java-lang-oop-4/src/main/java/com/baeldung/binding/Animal.java b/core-java-modules/core-java-lang-oop-others/src/main/java/com/baeldung/binding/Animal.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-4/src/main/java/com/baeldung/binding/Animal.java
rename to core-java-modules/core-java-lang-oop-others/src/main/java/com/baeldung/binding/Animal.java
diff --git a/core-java-modules/core-java-lang-oop-4/src/main/java/com/baeldung/binding/AnimalActivity.java b/core-java-modules/core-java-lang-oop-others/src/main/java/com/baeldung/binding/AnimalActivity.java
similarity index 90%
rename from core-java-modules/core-java-lang-oop-4/src/main/java/com/baeldung/binding/AnimalActivity.java
rename to core-java-modules/core-java-lang-oop-others/src/main/java/com/baeldung/binding/AnimalActivity.java
index 1bd36123e3..a30c3acd00 100644
--- a/core-java-modules/core-java-lang-oop-4/src/main/java/com/baeldung/binding/AnimalActivity.java
+++ b/core-java-modules/core-java-lang-oop-others/src/main/java/com/baeldung/binding/AnimalActivity.java
@@ -15,7 +15,7 @@ public class AnimalActivity {
logger.info("Animal is sleeping");
}
- public static void sleep(Cat cat) {
+ public static void sleep(Dog dog) {
logger.info("Cat is sleeping");
}
@@ -30,7 +30,7 @@ public class AnimalActivity {
//assigning a dog object to reference of type Animal
- Animal catAnimal = new Cat();
+ Animal catAnimal = new Dog();
catAnimal.makeNoise();
diff --git a/core-java-modules/core-java-lang-oop-4/src/main/java/com/baeldung/binding/Cat.java b/core-java-modules/core-java-lang-oop-others/src/main/java/com/baeldung/binding/Dog.java
similarity index 68%
rename from core-java-modules/core-java-lang-oop-4/src/main/java/com/baeldung/binding/Cat.java
rename to core-java-modules/core-java-lang-oop-others/src/main/java/com/baeldung/binding/Dog.java
index bbe740e412..b6924569d0 100644
--- a/core-java-modules/core-java-lang-oop-4/src/main/java/com/baeldung/binding/Cat.java
+++ b/core-java-modules/core-java-lang-oop-others/src/main/java/com/baeldung/binding/Dog.java
@@ -6,9 +6,9 @@ import org.slf4j.LoggerFactory;
/**
* Created by madhumita.g on 25-07-2018.
*/
-public class Cat extends Animal {
+public class Dog extends Animal {
- final static Logger logger = LoggerFactory.getLogger(Cat.class);
+ final static Logger logger = LoggerFactory.getLogger(Dog.class);
public void makeNoise() {
diff --git a/core-java-modules/core-java-lang-oop-others/src/main/java/com/baeldung/oop/ArmoredCar.java b/core-java-modules/core-java-lang-oop-others/src/main/java/com/baeldung/oop/ArmoredCar.java
new file mode 100644
index 0000000000..29cba3702a
--- /dev/null
+++ b/core-java-modules/core-java-lang-oop-others/src/main/java/com/baeldung/oop/ArmoredCar.java
@@ -0,0 +1,13 @@
+package com.baeldung.oop;
+
+public class ArmoredCar extends Car {
+ private int bulletProofWindows;
+
+ public ArmoredCar(String type, String model, String color) {
+ super(type, model, color);
+ }
+
+ public void remoteStartCar() {
+ // this vehicle can be started by using a remote control
+ }
+}
diff --git a/core-java-modules/core-java-lang-oop-others/src/main/java/com/baeldung/oop/Car.java b/core-java-modules/core-java-lang-oop-others/src/main/java/com/baeldung/oop/Car.java
new file mode 100644
index 0000000000..8ea4d779b6
--- /dev/null
+++ b/core-java-modules/core-java-lang-oop-others/src/main/java/com/baeldung/oop/Car.java
@@ -0,0 +1,58 @@
+package com.baeldung.oop;
+
+public class Car extends Vehicle {
+
+ private String type;
+ private String color;
+ private int speed;
+ private int numberOfGears;
+
+ public Car(String type, String model, String color) {
+ super(4, model);
+ this.type = type;
+ this.color = color;
+ }
+
+ public String getColor() {
+ return color;
+ }
+
+ public void setColor(String color) {
+ this.color = color;
+ }
+
+ public int getSpeed() {
+ return speed;
+ }
+
+ public void setSpeed(int speed) {
+ this.speed = speed;
+ }
+
+ public int increaseSpeed(int increment) {
+ if (increment > 0) {
+ this.speed += increment;
+ } else {
+ System.out.println("Increment can't be negative.");
+ }
+ return this.speed;
+ }
+
+ public int decreaseSpeed(int decrement) {
+ if (decrement > 0 && decrement <= this.speed) {
+ this.speed -= decrement;
+ } else {
+ System.out.println("Decrement can't be negative or greater than current speed.");
+ }
+ return this.speed;
+ }
+
+ public void openDoors() {
+ // process to open the doors
+ }
+
+ @Override
+ public void honk() {
+ // produces car-specific honk
+ }
+}
diff --git a/core-java-modules/core-java-lang-oop-others/src/main/java/com/baeldung/oop/GenericFile.java b/core-java-modules/core-java-lang-oop-others/src/main/java/com/baeldung/oop/GenericFile.java
new file mode 100644
index 0000000000..812a3f1d63
--- /dev/null
+++ b/core-java-modules/core-java-lang-oop-others/src/main/java/com/baeldung/oop/GenericFile.java
@@ -0,0 +1,63 @@
+package com.baeldung.oop;
+
+import java.util.Date;
+
+public class GenericFile {
+ private String name;
+ private String extension;
+ private Date dateCreated;
+ private String version;
+ private byte[] content;
+
+ public GenericFile() {
+ this.setDateCreated(new Date());
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getExtension() {
+ return extension;
+ }
+
+ public void setExtension(String extension) {
+ this.extension = extension;
+ }
+
+ public Date getDateCreated() {
+ return dateCreated;
+ }
+
+ public void setDateCreated(Date dateCreated) {
+ this.dateCreated = dateCreated;
+ }
+
+ public String getVersion() {
+ return version;
+ }
+
+ public void setVersion(String version) {
+ this.version = version;
+ }
+
+ public byte[] getContent() {
+ return content;
+ }
+
+ public void setContent(byte[] content) {
+ this.content = content;
+ }
+
+ public String getFileInfo() {
+ return "Generic File Impl";
+ }
+
+ public Object read() {
+ return content;
+ }
+}
diff --git a/core-java-modules/core-java-lang-oop-others/src/main/java/com/baeldung/oop/ImageFile.java b/core-java-modules/core-java-lang-oop-others/src/main/java/com/baeldung/oop/ImageFile.java
new file mode 100644
index 0000000000..2e2b9b4129
--- /dev/null
+++ b/core-java-modules/core-java-lang-oop-others/src/main/java/com/baeldung/oop/ImageFile.java
@@ -0,0 +1,41 @@
+package com.baeldung.oop;
+
+public class ImageFile extends GenericFile {
+ private int height;
+ private int width;
+
+ public ImageFile(String name, int height, int width, byte[] content, String version) {
+ this.setHeight(height);
+ this.setWidth(width);
+ this.setContent(content);
+ this.setName(name);
+ this.setVersion(version);
+ this.setExtension(".jpg");
+ }
+
+ public int getHeight() {
+ return height;
+ }
+
+ public void setHeight(int height) {
+ this.height = height;
+ }
+
+ public int getWidth() {
+ return width;
+ }
+
+ public void setWidth(int width) {
+ this.width = width;
+ }
+
+ public String getFileInfo() {
+ return "Image File Impl";
+ }
+
+ public String read() {
+ return this.getContent()
+ .toString();
+ }
+
+}
diff --git a/core-java-modules/core-java-lang-oop-others/src/main/java/com/baeldung/oop/TextFile.java b/core-java-modules/core-java-lang-oop-others/src/main/java/com/baeldung/oop/TextFile.java
new file mode 100644
index 0000000000..0d7b8e4192
--- /dev/null
+++ b/core-java-modules/core-java-lang-oop-others/src/main/java/com/baeldung/oop/TextFile.java
@@ -0,0 +1,44 @@
+package com.baeldung.oop;
+
+public class TextFile extends GenericFile {
+ private int wordCount;
+
+ public TextFile(String name, String content, String version) {
+ String[] words = content.split(" ");
+ this.setWordCount(words.length > 0 ? words.length : 1);
+ this.setContent(content.getBytes());
+ this.setName(name);
+ this.setVersion(version);
+ this.setExtension(".txt");
+ }
+
+ public int getWordCount() {
+ return wordCount;
+ }
+
+ public void setWordCount(int wordCount) {
+ this.wordCount = wordCount;
+ }
+
+ public String getFileInfo() {
+ return "Text File Impl";
+ }
+
+ public String read() {
+ return this.getContent()
+ .toString();
+ }
+
+ public String read(int limit) {
+ return this.getContent()
+ .toString()
+ .substring(0, limit);
+ }
+
+ public String read(int start, int stop) {
+ return this.getContent()
+ .toString()
+ .substring(start, stop);
+ }
+
+}
diff --git a/core-java-modules/core-java-lang-oop-others/src/main/java/com/baeldung/oop/Vehicle.java b/core-java-modules/core-java-lang-oop-others/src/main/java/com/baeldung/oop/Vehicle.java
new file mode 100644
index 0000000000..d5ef05bc31
--- /dev/null
+++ b/core-java-modules/core-java-lang-oop-others/src/main/java/com/baeldung/oop/Vehicle.java
@@ -0,0 +1,23 @@
+package com.baeldung.oop;
+
+public class Vehicle {
+ private int wheels;
+ private String model;
+
+ public Vehicle(int wheels, String model) {
+ this.wheels = wheels;
+ this.model = model;
+ }
+
+ public void start() {
+ // the process of starting the vehicle
+ }
+
+ public void stop() {
+ // process to stop the vehicle
+ }
+
+ public void honk() {
+ // produces a default honk
+ }
+}
diff --git a/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/parameterpassing/NonPrimitives.java b/core-java-modules/core-java-lang-oop-others/src/main/java/com/baeldung/parameterpassing/NonPrimitives.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/parameterpassing/NonPrimitives.java
rename to core-java-modules/core-java-lang-oop-others/src/main/java/com/baeldung/parameterpassing/NonPrimitives.java
diff --git a/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/parameterpassing/Primitives.java b/core-java-modules/core-java-lang-oop-others/src/main/java/com/baeldung/parameterpassing/Primitives.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/parameterpassing/Primitives.java
rename to core-java-modules/core-java-lang-oop-others/src/main/java/com/baeldung/parameterpassing/Primitives.java
diff --git a/core-java-modules/core-java-lang-oop-4/src/test/java/com/baeldung/binding/AnimalActivityUnitTest.java b/core-java-modules/core-java-lang-oop-others/src/test/java/com/baeldung/binding/AnimalActivityUnitTest.java
similarity index 96%
rename from core-java-modules/core-java-lang-oop-4/src/test/java/com/baeldung/binding/AnimalActivityUnitTest.java
rename to core-java-modules/core-java-lang-oop-others/src/test/java/com/baeldung/binding/AnimalActivityUnitTest.java
index 41c67ff389..6ef9b51818 100644
--- a/core-java-modules/core-java-lang-oop-4/src/test/java/com/baeldung/binding/AnimalActivityUnitTest.java
+++ b/core-java-modules/core-java-lang-oop-others/src/test/java/com/baeldung/binding/AnimalActivityUnitTest.java
@@ -62,9 +62,9 @@ public class AnimalActivityUnitTest {
@Test
public void givenDogReference__whenRefersCatObject_shouldCallFunctionWithAnimalParam() {
- Cat cat = new Cat();
+ Dog dog = new Dog();
- AnimalActivity.sleep(cat);
+ AnimalActivity.sleep(dog);
verify(mockAppender).doAppend(captorLoggingEvent.capture());
@@ -79,7 +79,7 @@ public class AnimalActivityUnitTest {
@Test
public void givenAnimaReference__whenRefersDogObject_shouldCallFunctionWithAnimalParam() {
- Animal cat = new Cat();
+ Animal cat = new Dog();
AnimalActivity.sleep(cat);
diff --git a/core-java-modules/core-java-lang-oop-4/src/test/java/com/baeldung/binding/AnimalUnitTest.java b/core-java-modules/core-java-lang-oop-others/src/test/java/com/baeldung/binding/AnimalUnitTest.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-4/src/test/java/com/baeldung/binding/AnimalUnitTest.java
rename to core-java-modules/core-java-lang-oop-others/src/test/java/com/baeldung/binding/AnimalUnitTest.java
diff --git a/core-java-modules/core-java-lang-oop-4/src/test/java/com/baeldung/binding/CatUnitTest.java b/core-java-modules/core-java-lang-oop-others/src/test/java/com/baeldung/binding/DogUnitTest.java
similarity index 94%
rename from core-java-modules/core-java-lang-oop-4/src/test/java/com/baeldung/binding/CatUnitTest.java
rename to core-java-modules/core-java-lang-oop-others/src/test/java/com/baeldung/binding/DogUnitTest.java
index 76ccfb7719..977c5d65e6 100644
--- a/core-java-modules/core-java-lang-oop-4/src/test/java/com/baeldung/binding/CatUnitTest.java
+++ b/core-java-modules/core-java-lang-oop-others/src/test/java/com/baeldung/binding/DogUnitTest.java
@@ -22,7 +22,7 @@ import static org.mockito.Mockito.verify;
* Created by madhumita.g on 01-08-2018.
*/
@RunWith(MockitoJUnitRunner.class)
-public class CatUnitTest {
+public class DogUnitTest {
@Mock
private Appender mockAppender;
@@ -45,9 +45,9 @@ public class CatUnitTest {
@Test
public void makeNoiseTest() {
- Cat cat = new Cat();
+ Dog dog = new Dog();
- cat.makeNoise();
+ dog.makeNoise();
verify(mockAppender).doAppend(captorLoggingEvent.capture());
diff --git a/core-java-modules/core-java-lang-oop-3/src/test/java/com/baeldung/parameterpassing/NonPrimitivesUnitTest.java b/core-java-modules/core-java-lang-oop-others/src/test/java/com/baeldung/parameterpassing/NonPrimitivesUnitTest.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-3/src/test/java/com/baeldung/parameterpassing/NonPrimitivesUnitTest.java
rename to core-java-modules/core-java-lang-oop-others/src/test/java/com/baeldung/parameterpassing/NonPrimitivesUnitTest.java
diff --git a/core-java-modules/core-java-lang-oop-3/src/test/java/com/baeldung/parameterpassing/PrimitivesUnitTest.java b/core-java-modules/core-java-lang-oop-others/src/test/java/com/baeldung/parameterpassing/PrimitivesUnitTest.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-3/src/test/java/com/baeldung/parameterpassing/PrimitivesUnitTest.java
rename to core-java-modules/core-java-lang-oop-others/src/test/java/com/baeldung/parameterpassing/PrimitivesUnitTest.java
diff --git a/core-java-modules/core-java-lang-oop-patterns/README.md b/core-java-modules/core-java-lang-oop-patterns/README.md
new file mode 100644
index 0000000000..178a556a96
--- /dev/null
+++ b/core-java-modules/core-java-lang-oop-patterns/README.md
@@ -0,0 +1,9 @@
+## Core Java Lang OOP - Patterns
+
+This module contains articles about Object-oriented programming (OOP) patterns in Java
+
+### Relevant Articles:
+- [Composition, Aggregation, and Association in Java](https://www.baeldung.com/java-composition-aggregation-association)
+- [Inheritance and Composition (Is-a vs Has-a relationship) in Java](https://www.baeldung.com/java-inheritance-composition)
+- [Immutable Objects in Java](https://www.baeldung.com/java-immutable-object)
+- [How to Make a Deep Copy of an Object in Java](https://www.baeldung.com/java-deep-copy)
diff --git a/core-java-modules/core-java-lang-oop/pom.xml b/core-java-modules/core-java-lang-oop-patterns/pom.xml
similarity index 55%
rename from core-java-modules/core-java-lang-oop/pom.xml
rename to core-java-modules/core-java-lang-oop-patterns/pom.xml
index 4415784f85..0102ef2653 100644
--- a/core-java-modules/core-java-lang-oop/pom.xml
+++ b/core-java-modules/core-java-lang-oop-patterns/pom.xml
@@ -1,20 +1,17 @@
-
- 4.0.0
- core-java-lang-oop
- 0.1.0-SNAPSHOT
- core-java-lang-oop
- jar
-
+
- com.baeldung
- parent-java
- 0.0.1-SNAPSHOT
- ../../parent-java
+ core-java-modules
+ com.baeldung.core-java-modules
+ 1.0.0-SNAPSHOT
+ 4.0.0
+
+ core-java-lang-oop-patterns
+ core-java-lang-oop-patterns
+ jar
@@ -22,8 +19,6 @@
commons-lang3
${commons-lang3.version}
-
-
com.fasterxml.jackson.core
jackson-databind
@@ -34,7 +29,7 @@
gson
${gson.version}
-
+
org.assertj
assertj-core
@@ -43,20 +38,8 @@
-
- core-java-lang-oop
-
-
- src/main/resources
- true
-
-
-
-
2.8.2
-
3.10.0
-
-
+
\ No newline at end of file
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/deepcopy/Address.java b/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/deepcopy/Address.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/deepcopy/Address.java
rename to core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/deepcopy/Address.java
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/deepcopy/User.java b/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/deepcopy/User.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/deepcopy/User.java
rename to core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/deepcopy/User.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/immutableobjects/Currency.java b/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/immutableobjects/Currency.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/immutableobjects/Currency.java
rename to core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/immutableobjects/Currency.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/immutableobjects/Money.java b/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/immutableobjects/Money.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/immutableobjects/Money.java
rename to core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/immutableobjects/Money.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/inheritancecomposition/application/Application.java b/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/inheritancecomposition/application/Application.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/inheritancecomposition/application/Application.java
rename to core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/inheritancecomposition/application/Application.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/inheritancecomposition/model/Actress.java b/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/inheritancecomposition/model/Actress.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/inheritancecomposition/model/Actress.java
rename to core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/inheritancecomposition/model/Actress.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/inheritancecomposition/model/Computer.java b/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/inheritancecomposition/model/Computer.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/inheritancecomposition/model/Computer.java
rename to core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/inheritancecomposition/model/Computer.java
diff --git a/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/inheritancecomposition/model/ComputerBuilder.java b/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/inheritancecomposition/model/ComputerBuilder.java
new file mode 100644
index 0000000000..4d8574e93f
--- /dev/null
+++ b/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/inheritancecomposition/model/ComputerBuilder.java
@@ -0,0 +1,13 @@
+package com.baeldung.inheritancecomposition.model;
+
+public abstract class ComputerBuilder {
+
+ public final void buildComputer() {
+ addProcessor();
+ addMemory();
+ }
+
+ public abstract void addProcessor();
+
+ public abstract void addMemory();
+}
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/inheritancecomposition/model/Memory.java b/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/inheritancecomposition/model/Memory.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/inheritancecomposition/model/Memory.java
rename to core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/inheritancecomposition/model/Memory.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/inheritancecomposition/model/Person.java b/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/inheritancecomposition/model/Person.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/inheritancecomposition/model/Person.java
rename to core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/inheritancecomposition/model/Person.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/inheritancecomposition/model/Processor.java b/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/inheritancecomposition/model/Processor.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/inheritancecomposition/model/Processor.java
rename to core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/inheritancecomposition/model/Processor.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/inheritancecomposition/model/SoundCard.java b/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/inheritancecomposition/model/SoundCard.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/inheritancecomposition/model/SoundCard.java
rename to core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/inheritancecomposition/model/SoundCard.java
diff --git a/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/inheritancecomposition/model/StandardComputerBuilder.java b/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/inheritancecomposition/model/StandardComputerBuilder.java
new file mode 100644
index 0000000000..76c4732ace
--- /dev/null
+++ b/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/inheritancecomposition/model/StandardComputerBuilder.java
@@ -0,0 +1,13 @@
+package com.baeldung.inheritancecomposition.model;
+
+public class StandardComputerBuilder extends ComputerBuilder {
+ @Override
+ public void addProcessor() {
+ // method implementation
+ }
+
+ @Override
+ public void addMemory() {
+ // method implementation
+ }
+}
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/inheritancecomposition/model/StandardMemory.java b/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/inheritancecomposition/model/StandardMemory.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/inheritancecomposition/model/StandardMemory.java
rename to core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/inheritancecomposition/model/StandardMemory.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/inheritancecomposition/model/StandardProcessor.java b/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/inheritancecomposition/model/StandardProcessor.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/inheritancecomposition/model/StandardProcessor.java
rename to core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/inheritancecomposition/model/StandardProcessor.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/inheritancecomposition/model/StandardSoundCard.java b/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/inheritancecomposition/model/StandardSoundCard.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/inheritancecomposition/model/StandardSoundCard.java
rename to core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/inheritancecomposition/model/StandardSoundCard.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/inheritancecomposition/model/Waitress.java b/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/inheritancecomposition/model/Waitress.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/inheritancecomposition/model/Waitress.java
rename to core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/inheritancecomposition/model/Waitress.java
diff --git a/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/relationships/aggregation/Car.java b/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/relationships/aggregation/Car.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/relationships/aggregation/Car.java
rename to core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/relationships/aggregation/Car.java
diff --git a/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/relationships/aggregation/CarWithStaticInnerWheel.java b/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/relationships/aggregation/CarWithStaticInnerWheel.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/relationships/aggregation/CarWithStaticInnerWheel.java
rename to core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/relationships/aggregation/CarWithStaticInnerWheel.java
diff --git a/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/relationships/aggregation/Wheel.java b/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/relationships/aggregation/Wheel.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/relationships/aggregation/Wheel.java
rename to core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/relationships/aggregation/Wheel.java
diff --git a/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/relationships/association/Child.java b/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/relationships/association/Child.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/relationships/association/Child.java
rename to core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/relationships/association/Child.java
diff --git a/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/relationships/association/Mother.java b/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/relationships/association/Mother.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/relationships/association/Mother.java
rename to core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/relationships/association/Mother.java
diff --git a/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/relationships/composition/Building.java b/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/relationships/composition/Building.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/relationships/composition/Building.java
rename to core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/relationships/composition/Building.java
diff --git a/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/relationships/composition/BuildingWithDefinitionRoomInMethod.java b/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/relationships/composition/BuildingWithDefinitionRoomInMethod.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/relationships/composition/BuildingWithDefinitionRoomInMethod.java
rename to core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/relationships/composition/BuildingWithDefinitionRoomInMethod.java
diff --git a/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/relationships/university/Department.java b/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/relationships/university/Department.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/relationships/university/Department.java
rename to core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/relationships/university/Department.java
diff --git a/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/relationships/university/Professor.java b/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/relationships/university/Professor.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/relationships/university/Professor.java
rename to core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/relationships/university/Professor.java
diff --git a/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/relationships/university/University.java b/core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/relationships/university/University.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/relationships/university/University.java
rename to core-java-modules/core-java-lang-oop-patterns/src/main/java/com/baeldung/relationships/university/University.java
diff --git a/core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/deepcopy/DeepCopyUnitTest.java b/core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/deepcopy/DeepCopyUnitTest.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/deepcopy/DeepCopyUnitTest.java
rename to core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/deepcopy/DeepCopyUnitTest.java
diff --git a/core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/deepcopy/ShallowCopyUnitTest.java b/core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/deepcopy/ShallowCopyUnitTest.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/deepcopy/ShallowCopyUnitTest.java
rename to core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/deepcopy/ShallowCopyUnitTest.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/immutableobjects/ImmutableObjectsUnitTest.java b/core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/immutableobjects/ImmutableObjectsUnitTest.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/immutableobjects/ImmutableObjectsUnitTest.java
rename to core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/immutableobjects/ImmutableObjectsUnitTest.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/inheritancecomposition/ActressUnitTest.java b/core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/inheritancecomposition/ActressUnitTest.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/inheritancecomposition/ActressUnitTest.java
rename to core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/inheritancecomposition/ActressUnitTest.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/inheritancecomposition/CompositionUnitTest.java b/core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/inheritancecomposition/CompositionUnitTest.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/inheritancecomposition/CompositionUnitTest.java
rename to core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/inheritancecomposition/CompositionUnitTest.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/inheritancecomposition/InheritanceUnitTest.java b/core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/inheritancecomposition/InheritanceUnitTest.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/inheritancecomposition/InheritanceUnitTest.java
rename to core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/inheritancecomposition/InheritanceUnitTest.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/inheritancecomposition/PersonUnitTest.java b/core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/inheritancecomposition/PersonUnitTest.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/inheritancecomposition/PersonUnitTest.java
rename to core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/inheritancecomposition/PersonUnitTest.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/inheritancecomposition/WaitressUnitTest.java b/core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/inheritancecomposition/WaitressUnitTest.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/inheritancecomposition/WaitressUnitTest.java
rename to core-java-modules/core-java-lang-oop-patterns/src/test/java/com/baeldung/inheritancecomposition/WaitressUnitTest.java
diff --git a/core-java-modules/core-java-lang-oop-types/README.md b/core-java-modules/core-java-lang-oop-types/README.md
new file mode 100644
index 0000000000..80344c70fa
--- /dev/null
+++ b/core-java-modules/core-java-lang-oop-types/README.md
@@ -0,0 +1,9 @@
+## Core Java Lang OOP - Types
+
+This module contains articles about types in Java
+
+### Relevant Articles:
+- [Java Classes and Objects](https://www.baeldung.com/java-classes-objects)
+- [Guide to the this Java Keyword](https://www.baeldung.com/java-this)
+- [Nested Classes in Java](https://www.baeldung.com/java-nested-classes)
+- [Marker Interfaces in Java](https://www.baeldung.com/java-marker-interfaces)
diff --git a/core-java-modules/core-java-lang-oop-types/pom.xml b/core-java-modules/core-java-lang-oop-types/pom.xml
new file mode 100644
index 0000000000..f73434a9ff
--- /dev/null
+++ b/core-java-modules/core-java-lang-oop-types/pom.xml
@@ -0,0 +1,15 @@
+
+
+
+ core-java-modules
+ com.baeldung.core-java-modules
+ 1.0.0-SNAPSHOT
+
+ 4.0.0
+
+ core-java-lang-oop-types
+ core-java-lang-oop-types
+ jar
+
\ No newline at end of file
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/markerinterface/DeletableShape.java b/core-java-modules/core-java-lang-oop-types/src/main/java/com/baeldung/markerinterface/DeletableShape.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/markerinterface/DeletableShape.java
rename to core-java-modules/core-java-lang-oop-types/src/main/java/com/baeldung/markerinterface/DeletableShape.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/markerinterface/Rectangle.java b/core-java-modules/core-java-lang-oop-types/src/main/java/com/baeldung/markerinterface/Rectangle.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/markerinterface/Rectangle.java
rename to core-java-modules/core-java-lang-oop-types/src/main/java/com/baeldung/markerinterface/Rectangle.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/markerinterface/Shape.java b/core-java-modules/core-java-lang-oop-types/src/main/java/com/baeldung/markerinterface/Shape.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/markerinterface/Shape.java
rename to core-java-modules/core-java-lang-oop-types/src/main/java/com/baeldung/markerinterface/Shape.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/markerinterface/ShapeDao.java b/core-java-modules/core-java-lang-oop-types/src/main/java/com/baeldung/markerinterface/ShapeDao.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/markerinterface/ShapeDao.java
rename to core-java-modules/core-java-lang-oop-types/src/main/java/com/baeldung/markerinterface/ShapeDao.java
diff --git a/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/objects/Car.java b/core-java-modules/core-java-lang-oop-types/src/main/java/com/baeldung/objects/Car.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/objects/Car.java
rename to core-java-modules/core-java-lang-oop-types/src/main/java/com/baeldung/objects/Car.java
diff --git a/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/keyword/thiskeyword/KeywordUnitTest.java b/core-java-modules/core-java-lang-oop-types/src/main/java/com/baeldung/thiskeyword/Keyword.java
similarity index 64%
rename from core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/keyword/thiskeyword/KeywordUnitTest.java
rename to core-java-modules/core-java-lang-oop-types/src/main/java/com/baeldung/thiskeyword/Keyword.java
index 35fd7358af..a09a1ac8e1 100644
--- a/core-java-modules/core-java-lang-oop-3/src/main/java/com/baeldung/keyword/thiskeyword/KeywordUnitTest.java
+++ b/core-java-modules/core-java-lang-oop-types/src/main/java/com/baeldung/thiskeyword/Keyword.java
@@ -1,17 +1,17 @@
-package com.baeldung.keyword.thiskeyword;
+package com.baeldung.thiskeyword;
-public class KeywordUnitTest {
+public class Keyword {
private String name;
private int age;
- public KeywordUnitTest() {
+ public Keyword() {
this("John", 27);
this.printMessage();
printInstance(this);
}
- public KeywordUnitTest(String name, int age) {
+ public Keyword(String name, int age) {
this.name = name;
this.age = age;
}
@@ -20,11 +20,11 @@ public class KeywordUnitTest {
System.out.println("invoked by this");
}
- public void printInstance(KeywordUnitTest thisKeyword) {
+ public void printInstance(Keyword thisKeyword) {
System.out.println(thisKeyword);
}
- public KeywordUnitTest getCurrentInstance() {
+ public Keyword getCurrentInstance() {
return this;
}
@@ -33,8 +33,8 @@ public class KeywordUnitTest {
boolean isInnerClass = true;
public ThisInnerClass() {
- KeywordUnitTest thisKeyword = KeywordUnitTest.this;
- String outerString = KeywordUnitTest.this.name;
+ Keyword thisKeyword = Keyword.this;
+ String outerString = Keyword.this.name;
System.out.println(this.isInnerClass);
}
}
diff --git a/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/markerinterface/MarkerInterfaceUnitTest.java b/core-java-modules/core-java-lang-oop-types/src/test/java/com/baeldung/markerinterface/MarkerInterfaceUnitTest.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/markerinterface/MarkerInterfaceUnitTest.java
rename to core-java-modules/core-java-lang-oop-types/src/test/java/com/baeldung/markerinterface/MarkerInterfaceUnitTest.java
diff --git a/core-java-modules/core-java-lang-oop-3/src/test/java/com/baeldung/nestedclass/AnonymousInner.java b/core-java-modules/core-java-lang-oop-types/src/test/java/com/baeldung/nestedclass/AnonymousInnerUnitTest.java
similarity index 90%
rename from core-java-modules/core-java-lang-oop-3/src/test/java/com/baeldung/nestedclass/AnonymousInner.java
rename to core-java-modules/core-java-lang-oop-types/src/test/java/com/baeldung/nestedclass/AnonymousInnerUnitTest.java
index 9fa8ee9cd5..98917b9e05 100644
--- a/core-java-modules/core-java-lang-oop-3/src/test/java/com/baeldung/nestedclass/AnonymousInner.java
+++ b/core-java-modules/core-java-lang-oop-types/src/test/java/com/baeldung/nestedclass/AnonymousInnerUnitTest.java
@@ -6,7 +6,7 @@ abstract class SimpleAbstractClass {
abstract void run();
}
-public class AnonymousInner {
+public class AnonymousInnerUnitTest {
@Test
public void run() {
diff --git a/core-java-modules/core-java-lang-oop-3/src/test/java/com/baeldung/nestedclass/Enclosing.java b/core-java-modules/core-java-lang-oop-types/src/test/java/com/baeldung/nestedclass/Enclosing.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-3/src/test/java/com/baeldung/nestedclass/Enclosing.java
rename to core-java-modules/core-java-lang-oop-types/src/test/java/com/baeldung/nestedclass/Enclosing.java
diff --git a/core-java-modules/core-java-lang-oop-3/src/test/java/com/baeldung/nestedclass/NewEnclosing.java b/core-java-modules/core-java-lang-oop-types/src/test/java/com/baeldung/nestedclass/NewEnclosing.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-3/src/test/java/com/baeldung/nestedclass/NewEnclosing.java
rename to core-java-modules/core-java-lang-oop-types/src/test/java/com/baeldung/nestedclass/NewEnclosing.java
diff --git a/core-java-modules/core-java-lang-oop-3/src/test/java/com/baeldung/nestedclass/NewOuter.java b/core-java-modules/core-java-lang-oop-types/src/test/java/com/baeldung/nestedclass/NewOuter.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-3/src/test/java/com/baeldung/nestedclass/NewOuter.java
rename to core-java-modules/core-java-lang-oop-types/src/test/java/com/baeldung/nestedclass/NewOuter.java
diff --git a/core-java-modules/core-java-lang-oop-3/src/test/java/com/baeldung/nestedclass/Outer.java b/core-java-modules/core-java-lang-oop-types/src/test/java/com/baeldung/nestedclass/Outer.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-3/src/test/java/com/baeldung/nestedclass/Outer.java
rename to core-java-modules/core-java-lang-oop-types/src/test/java/com/baeldung/nestedclass/Outer.java
diff --git a/core-java-modules/core-java-lang-oop-3/src/test/java/com/baeldung/objects/ObjectsUnitTest.java b/core-java-modules/core-java-lang-oop-types/src/test/java/com/baeldung/objects/ObjectsUnitTest.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-3/src/test/java/com/baeldung/objects/ObjectsUnitTest.java
rename to core-java-modules/core-java-lang-oop-types/src/test/java/com/baeldung/objects/ObjectsUnitTest.java
diff --git a/core-java-modules/core-java-lang-oop/.gitignore b/core-java-modules/core-java-lang-oop/.gitignore
deleted file mode 100644
index 3de4cc647e..0000000000
--- a/core-java-modules/core-java-lang-oop/.gitignore
+++ /dev/null
@@ -1,26 +0,0 @@
-*.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/README.md b/core-java-modules/core-java-lang-oop/README.md
deleted file mode 100644
index 2be3d0cab1..0000000000
--- a/core-java-modules/core-java-lang-oop/README.md
+++ /dev/null
@@ -1,17 +0,0 @@
-## Core Java Lang OOP
-
-This module contains articles about Object-oriented programming (OOP) in Java
-
-### Relevant Articles:
-- [Guide to hashCode() in Java](https://www.baeldung.com/java-hashcode)
-- [A Guide to the Static Keyword in Java](https://www.baeldung.com/java-static)
-- [Polymorphism in Java](https://www.baeldung.com/java-polymorphism)
-- [Method Overloading and Overriding in Java](https://www.baeldung.com/java-method-overload-override)
-- [How to Make a Deep Copy of an Object in Java](https://www.baeldung.com/java-deep-copy)
-- [Guide to Inheritance in Java](https://www.baeldung.com/java-inheritance)
-- [Object Type Casting in Java](https://www.baeldung.com/java-type-casting)
-- [The “final” Keyword in Java](https://www.baeldung.com/java-final)
-- [Type Erasure in Java Explained](https://www.baeldung.com/java-type-erasure)
-- [Variable and Method Hiding in Java](https://www.baeldung.com/java-variable-method-hiding)
-- [Object-Oriented-Programming Concepts in Java](https://www.baeldung.com/java-oop)
-- [[More -->]](/core-java-modules/core-java-lang-oop-2)
diff --git a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/initializationguide/User.java b/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/initializationguide/User.java
deleted file mode 100644
index 1d9a872d69..0000000000
--- a/core-java-modules/core-java-lang-oop/src/main/java/com/baeldung/initializationguide/User.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package com.baeldung.initializationguide;
-
-import java.io.Serializable;
-
-public class User implements Serializable, Cloneable {
- private static final long serialVersionUID = 1L;
- static String forum;
- private String name;
- private int id;
-
- {
- id = 0;
- System.out.println("Instance Initializer");
- }
-
- static {
- forum = "Java";
- System.out.println("Static Initializer");
- }
-
- public User(String name, int id) {
- super();
- this.name = name;
- this.id = id;
- }
-
- public User() {
- System.out.println("Constructor");
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public int getId() {
- return id;
- }
-
- public void setId(int id) {
- this.id = id;
- }
-
- @Override
- protected Object clone() throws CloneNotSupportedException {
- return this;
- }
-
-}
-
diff --git a/core-java-modules/core-java-lang-oop/src/main/resources/logback.xml b/core-java-modules/core-java-lang-oop/src/main/resources/logback.xml
deleted file mode 100644
index 56af2d397e..0000000000
--- a/core-java-modules/core-java-lang-oop/src/main/resources/logback.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
- %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-lang-oop/src/test/java/com/baeldung/initializationguide/UserUnitTest.java b/core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/initializationguide/UserUnitTest.java
deleted file mode 100644
index a26b602609..0000000000
--- a/core-java-modules/core-java-lang-oop/src/test/java/com/baeldung/initializationguide/UserUnitTest.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.baeldung.initializationguide;
-import org.junit.Before;
-import org.junit.Test;
-
-import static org.assertj.core.api.Assertions.*;
-
-import java.lang.reflect.InvocationTargetException;
-
-public class UserUnitTest {
-
- @Test
- public void givenUserInstance_whenIntializedWithNew_thenInstanceIsNotNull() {
- User user = new User("Alice", 1);
- assertThat(user).isNotNull();
- }
-
- @Test
- public void givenUserInstance_whenInitializedWithReflection_thenInstanceIsNotNull() throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException {
- User user = User.class.getConstructor(String.class, int.class)
- .newInstance("Alice", 2);
- assertThat(user).isNotNull();
- }
-
- @Test
- public void givenUserInstance_whenCopiedWithClone_thenExactMatchIsCreated() throws CloneNotSupportedException {
- User user = new User("Alice", 3);
- User clonedUser = (User) user.clone();
- assertThat(clonedUser).isEqualTo(user);
- }
-
- @Test
- public void givenUserInstance_whenValuesAreNotInitialized_thenUserNameAndIdReturnDefault() {
- User user = new User();
- assertThat(user.getName()).isNull();
- assertThat(user.getId() == 0);
- }
-}
diff --git a/core-java-modules/core-java-lang-oop/src/test/resources/.gitignore b/core-java-modules/core-java-lang-oop/src/test/resources/.gitignore
deleted file mode 100644
index 83c05e60c8..0000000000
--- a/core-java-modules/core-java-lang-oop/src/test/resources/.gitignore
+++ /dev/null
@@ -1,13 +0,0 @@
-*.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-lang-oop-2/src/main/java/com/baeldung/equalshashcode/entities/ComplexClass.java b/core-java-modules/core-java-lang/src/main/java/com/baeldung/equalshashcode/entities/ComplexClass.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/equalshashcode/entities/ComplexClass.java
rename to core-java-modules/core-java-lang/src/main/java/com/baeldung/equalshashcode/entities/ComplexClass.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/equalshashcode/entities/PrimitiveClass.java b/core-java-modules/core-java-lang/src/main/java/com/baeldung/equalshashcode/entities/PrimitiveClass.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/equalshashcode/entities/PrimitiveClass.java
rename to core-java-modules/core-java-lang/src/main/java/com/baeldung/equalshashcode/entities/PrimitiveClass.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/equalshashcode/entities/Rectangle.java b/core-java-modules/core-java-lang/src/main/java/com/baeldung/equalshashcode/entities/Rectangle.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/equalshashcode/entities/Rectangle.java
rename to core-java-modules/core-java-lang/src/main/java/com/baeldung/equalshashcode/entities/Rectangle.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/equalshashcode/entities/Shape.java b/core-java-modules/core-java-lang/src/main/java/com/baeldung/equalshashcode/entities/Shape.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/equalshashcode/entities/Shape.java
rename to core-java-modules/core-java-lang/src/main/java/com/baeldung/equalshashcode/entities/Shape.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/equalshashcode/entities/Square.java b/core-java-modules/core-java-lang/src/main/java/com/baeldung/equalshashcode/entities/Square.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/main/java/com/baeldung/equalshashcode/entities/Square.java
rename to core-java-modules/core-java-lang/src/main/java/com/baeldung/equalshashcode/entities/Square.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/equalshashcode/entities/ComplexClassUnitTest.java b/core-java-modules/core-java-lang/src/test/java/com/baeldung/equalshashcode/entities/ComplexClassUnitTest.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/equalshashcode/entities/ComplexClassUnitTest.java
rename to core-java-modules/core-java-lang/src/test/java/com/baeldung/equalshashcode/entities/ComplexClassUnitTest.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/equalshashcode/entities/PrimitiveClassUnitTest.java b/core-java-modules/core-java-lang/src/test/java/com/baeldung/equalshashcode/entities/PrimitiveClassUnitTest.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/equalshashcode/entities/PrimitiveClassUnitTest.java
rename to core-java-modules/core-java-lang/src/test/java/com/baeldung/equalshashcode/entities/PrimitiveClassUnitTest.java
diff --git a/core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/equalshashcode/entities/SquareClassUnitTest.java b/core-java-modules/core-java-lang/src/test/java/com/baeldung/equalshashcode/entities/SquareClassUnitTest.java
similarity index 100%
rename from core-java-modules/core-java-lang-oop-2/src/test/java/com/baeldung/equalshashcode/entities/SquareClassUnitTest.java
rename to core-java-modules/core-java-lang/src/test/java/com/baeldung/equalshashcode/entities/SquareClassUnitTest.java
diff --git a/core-java-modules/pom.xml b/core-java-modules/pom.xml
index b7454cc737..c6cc3726e1 100644
--- a/core-java-modules/pom.xml
+++ b/core-java-modules/pom.xml
@@ -85,10 +85,14 @@
core-java-lang-2
core-java-lang-math
core-java-lang-math-2
- core-java-lang-oop
- core-java-lang-oop-2
- core-java-lang-oop-3
- core-java-lang-oop-4
+ core-java-lang-oop-constructors
+ core-java-lang-oop-patterns
+ core-java-lang-oop-generics
+ core-java-lang-oop-modifiers
+ core-java-lang-oop-types
+ core-java-lang-oop-inheritance
+ core-java-lang-oop-methods
+ core-java-lang-oop-others
core-java-lang-operators
core-java-lang-syntax
core-java-lang-syntax-2
diff --git a/jsoup/src/test/java/com/baeldung/jsonproxy/JsoupProxyIntegrationTest.java b/jsoup/src/test/java/com/baeldung/jsonproxy/JsoupProxyIntegrationTest.java
new file mode 100644
index 0000000000..8e854ead6a
--- /dev/null
+++ b/jsoup/src/test/java/com/baeldung/jsonproxy/JsoupProxyIntegrationTest.java
@@ -0,0 +1,27 @@
+package com.baeldung.jsonproxy;
+
+import java.io.IOException;
+import java.net.InetSocketAddress;
+import java.net.Proxy;
+
+import org.jsoup.Jsoup;
+import org.junit.Test;
+
+public class JsoupProxyIntegrationTest {
+
+ @Test
+ public void whenUsingHostAndPort_thenConnect() throws IOException {
+ Jsoup.connect("https://spring.io/blog")
+ .proxy("200.216.227.141", 53281)
+ .get();
+ }
+
+ @Test
+ public void whenUsingProxyClass_thenConnect() throws IOException {
+ Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("200.216.227.141", 53281));
+
+ Jsoup.connect("https://spring.io/blog")
+ .proxy(proxy)
+ .get();
+ }
+}
diff --git a/libraries-2/README.md b/libraries-2/README.md
index edf513c6ee..8dae12a1cf 100644
--- a/libraries-2/README.md
+++ b/libraries-2/README.md
@@ -18,5 +18,5 @@ Remember, for advanced libraries like [Jackson](/jackson) and [JUnit](/testing-m
- [Guide to MapDB](https://www.baeldung.com/mapdb)
- [A Guide to Apache Mesos](https://www.baeldung.com/apache-mesos)
- [JasperReports with Spring](https://www.baeldung.com/spring-jasper)
-- More articles [[<-- prev]](/libraries)
+- More articles [[<-- prev]](/libraries) [[next -->]](/libraries-3)
diff --git a/libraries-3/README.md b/libraries-3/README.md
index ec433960ef..7c30cabaf1 100644
--- a/libraries-3/README.md
+++ b/libraries-3/README.md
@@ -17,3 +17,4 @@ Remember, for advanced libraries like [Jackson](/jackson) and [JUnit](/testing-m
- [Using NullAway to Avoid NullPointerExceptions](https://www.baeldung.com/java-nullaway)
- [Introduction to Alibaba Arthas](https://www.baeldung.com/java-alibaba-arthas-intro)
- [Quick Guide to Spring Cloud Circuit Breaker](https://www.baeldung.com/spring-cloud-circuit-breaker)
+- More articles [[<-- prev]](/libraries-2) [[next -->]](/libraries-4)
\ No newline at end of file
diff --git a/libraries-4/README.md b/libraries-4/README.md
new file mode 100644
index 0000000000..0dee9f1c1e
--- /dev/null
+++ b/libraries-4/README.md
@@ -0,0 +1,21 @@
+## Libraries-4
+
+This module contains articles about various Java libraries.
+These are small libraries that are relatively easy to use and do not require any separate module of their own.
+
+The code examples related to different libraries are each in their own module.
+
+Remember, for advanced libraries like [Jackson](/jackson) and [JUnit](/testing-modules) we already have separate modules. Please make sure to have a look at the existing modules in such cases.
+
+### Relevant articles
+- [Quick Guide to RSS with Rome](https://www.baeldung.com/rome-rss)
+- [Introduction to PCollections](https://www.baeldung.com/java-pcollections)
+- [Introduction to Eclipse Collections](https://www.baeldung.com/eclipse-collections)
+- [DistinctBy in the Java Stream API](https://www.baeldung.com/java-streams-distinct-by)
+- [Introduction to NoException](https://www.baeldung.com/no-exception)
+- [Spring Yarg Integration](https://www.baeldung.com/spring-yarg)
+- [Delete a Directory Recursively in Java](https://www.baeldung.com/java-delete-directory)
+- [Guide to JDeferred](https://www.baeldung.com/jdeferred)
+- [Introduction to MBassador](https://www.baeldung.com/mbassador)
+- [Using Pairs in Java](https://www.baeldung.com/java-pairs)
+- More articles [[<-- prev]](/libraries-3) [[next -->]](/libraries-5)
diff --git a/libraries-4/pom.xml b/libraries-4/pom.xml
new file mode 100644
index 0000000000..f26e7fc055
--- /dev/null
+++ b/libraries-4/pom.xml
@@ -0,0 +1,116 @@
+
+
+
+ parent-modules
+ com.baeldung
+ 1.0.0-SNAPSHOT
+
+ 4.0.0
+
+ libraries-4
+
+
+
+ org.jdeferred
+ jdeferred-core
+ ${jdeferred.version}
+
+
+ org.eclipse.collections
+ eclipse-collections
+ ${eclipse-collections.version}
+
+
+ com.haulmont.yarg
+ yarg
+ ${yarg.version}
+
+
+ net.engio
+ mbassador
+ ${mbassador.version}
+
+
+ com.machinezoo.noexception
+ noexception
+ ${noexception.version}
+
+
+ rome
+ rome
+ ${rome.version}
+
+
+ org.springframework
+ spring-web
+ ${spring.version}
+
+
+ org.datanucleus
+ javax.jdo
+ ${javax.jdo.version}
+
+
+ javax.servlet
+ servlet-api
+ ${javax.servlet.version}
+
+
+ io.vavr
+ vavr
+ ${vavr.version}
+
+
+ org.assertj
+ assertj-core
+ ${assertj.version}
+
+
+ org.pcollections
+ pcollections
+ ${pcollections.version}
+
+
+ org.awaitility
+ awaitility
+ ${awaitility.version}
+ test
+
+
+ one.util
+ streamex
+ ${streamex.version}
+
+
+ javax.el
+ javax.el-api
+ ${javax.el.version}
+
+
+ org.glassfish.web
+ javax.el
+ 2.2.4
+
+
+
+
+ 1.2.6
+ 8.2.0
+ 1.1.0
+ 2.0.12
+ 1.3.1
+ 1.0
+ 4.3.8.RELEASE
+ 2.5
+ 3.2.0-m7
+ 0.9.0
+ 3.6.2
+ 2.1.2
+ 3.0.0
+ 0.6.5
+ 3.0.0
+
+
+
\ No newline at end of file
diff --git a/libraries/src/main/java/com/baeldung/distinct/DistinctWithJavaFunction.java b/libraries-4/src/main/java/com/baeldung/distinct/DistinctWithJavaFunction.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/distinct/DistinctWithJavaFunction.java
rename to libraries-4/src/main/java/com/baeldung/distinct/DistinctWithJavaFunction.java
diff --git a/libraries/src/main/java/com/baeldung/distinct/Person.java b/libraries-4/src/main/java/com/baeldung/distinct/Person.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/distinct/Person.java
rename to libraries-4/src/main/java/com/baeldung/distinct/Person.java
diff --git a/libraries/src/main/java/com/baeldung/eclipsecollections/ConvertContainerToAnother.java b/libraries-4/src/main/java/com/baeldung/eclipsecollections/ConvertContainerToAnother.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/eclipsecollections/ConvertContainerToAnother.java
rename to libraries-4/src/main/java/com/baeldung/eclipsecollections/ConvertContainerToAnother.java
diff --git a/libraries/src/main/java/com/baeldung/eclipsecollections/Student.java b/libraries-4/src/main/java/com/baeldung/eclipsecollections/Student.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/eclipsecollections/Student.java
rename to libraries-4/src/main/java/com/baeldung/eclipsecollections/Student.java
diff --git a/libraries/src/main/java/com/baeldung/jdeffered/FilterDemo.java b/libraries-4/src/main/java/com/baeldung/jdeffered/FilterDemo.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/jdeffered/FilterDemo.java
rename to libraries-4/src/main/java/com/baeldung/jdeffered/FilterDemo.java
diff --git a/libraries/src/main/java/com/baeldung/jdeffered/PipeDemo.java b/libraries-4/src/main/java/com/baeldung/jdeffered/PipeDemo.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/jdeffered/PipeDemo.java
rename to libraries-4/src/main/java/com/baeldung/jdeffered/PipeDemo.java
diff --git a/libraries/src/main/java/com/baeldung/jdeffered/PromiseDemo.java b/libraries-4/src/main/java/com/baeldung/jdeffered/PromiseDemo.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/jdeffered/PromiseDemo.java
rename to libraries-4/src/main/java/com/baeldung/jdeffered/PromiseDemo.java
diff --git a/libraries/src/main/java/com/baeldung/jdeffered/ThreadSafeDemo.java b/libraries-4/src/main/java/com/baeldung/jdeffered/ThreadSafeDemo.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/jdeffered/ThreadSafeDemo.java
rename to libraries-4/src/main/java/com/baeldung/jdeffered/ThreadSafeDemo.java
diff --git a/libraries/src/main/java/com/baeldung/jdeffered/manager/DeferredManagerDemo.java b/libraries-4/src/main/java/com/baeldung/jdeffered/manager/DeferredManagerDemo.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/jdeffered/manager/DeferredManagerDemo.java
rename to libraries-4/src/main/java/com/baeldung/jdeffered/manager/DeferredManagerDemo.java
diff --git a/libraries/src/main/java/com/baeldung/jdeffered/manager/DeferredManagerWithExecutorDemo.java b/libraries-4/src/main/java/com/baeldung/jdeffered/manager/DeferredManagerWithExecutorDemo.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/jdeffered/manager/DeferredManagerWithExecutorDemo.java
rename to libraries-4/src/main/java/com/baeldung/jdeffered/manager/DeferredManagerWithExecutorDemo.java
diff --git a/libraries/src/main/java/com/baeldung/jdeffered/manager/SimpleDeferredManagerDemo.java b/libraries-4/src/main/java/com/baeldung/jdeffered/manager/SimpleDeferredManagerDemo.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/jdeffered/manager/SimpleDeferredManagerDemo.java
rename to libraries-4/src/main/java/com/baeldung/jdeffered/manager/SimpleDeferredManagerDemo.java
diff --git a/libraries/src/main/java/com/baeldung/mbassador/AckMessage.java b/libraries-4/src/main/java/com/baeldung/mbassador/AckMessage.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/mbassador/AckMessage.java
rename to libraries-4/src/main/java/com/baeldung/mbassador/AckMessage.java
diff --git a/libraries/src/main/java/com/baeldung/mbassador/Message.java b/libraries-4/src/main/java/com/baeldung/mbassador/Message.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/mbassador/Message.java
rename to libraries-4/src/main/java/com/baeldung/mbassador/Message.java
diff --git a/libraries/src/main/java/com/baeldung/mbassador/RejectMessage.java b/libraries-4/src/main/java/com/baeldung/mbassador/RejectMessage.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/mbassador/RejectMessage.java
rename to libraries-4/src/main/java/com/baeldung/mbassador/RejectMessage.java
diff --git a/libraries/src/main/java/com/baeldung/noexception/CustomExceptionHandler.java b/libraries-4/src/main/java/com/baeldung/noexception/CustomExceptionHandler.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/noexception/CustomExceptionHandler.java
rename to libraries-4/src/main/java/com/baeldung/noexception/CustomExceptionHandler.java
diff --git a/libraries/src/main/java/com/baeldung/pairs/CustomPair.java b/libraries-4/src/main/java/com/baeldung/pairs/CustomPair.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/pairs/CustomPair.java
rename to libraries-4/src/main/java/com/baeldung/pairs/CustomPair.java
diff --git a/libraries/src/main/java/com/baeldung/rome/RSSRomeExample.java b/libraries-4/src/main/java/com/baeldung/rome/RSSRomeExample.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/rome/RSSRomeExample.java
rename to libraries-4/src/main/java/com/baeldung/rome/RSSRomeExample.java
diff --git a/libraries/src/main/java/com/baeldung/yarg/DocumentController.java b/libraries-4/src/main/java/com/baeldung/yarg/DocumentController.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/yarg/DocumentController.java
rename to libraries-4/src/main/java/com/baeldung/yarg/DocumentController.java
diff --git a/libraries/src/test/java/com/baeldung/distinct/DistinctWithEclipseCollectionsUnitTest.java b/libraries-4/src/test/java/com/baeldung/distinct/DistinctWithEclipseCollectionsUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/distinct/DistinctWithEclipseCollectionsUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/distinct/DistinctWithEclipseCollectionsUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/distinct/DistinctWithJavaFunctionUnitTest.java b/libraries-4/src/test/java/com/baeldung/distinct/DistinctWithJavaFunctionUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/distinct/DistinctWithJavaFunctionUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/distinct/DistinctWithJavaFunctionUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/distinct/DistinctWithStreamexUnitTest.java b/libraries-4/src/test/java/com/baeldung/distinct/DistinctWithStreamexUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/distinct/DistinctWithStreamexUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/distinct/DistinctWithStreamexUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/distinct/DistinctWithVavrUnitTest.java b/libraries-4/src/test/java/com/baeldung/distinct/DistinctWithVavrUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/distinct/DistinctWithVavrUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/distinct/DistinctWithVavrUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/distinct/PersonDataGenerator.java b/libraries-4/src/test/java/com/baeldung/distinct/PersonDataGenerator.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/distinct/PersonDataGenerator.java
rename to libraries-4/src/test/java/com/baeldung/distinct/PersonDataGenerator.java
diff --git a/libraries/src/test/java/com/baeldung/eclipsecollections/AllSatisfyPatternUnitTest.java b/libraries-4/src/test/java/com/baeldung/eclipsecollections/AllSatisfyPatternUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/eclipsecollections/AllSatisfyPatternUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/eclipsecollections/AllSatisfyPatternUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/eclipsecollections/AnySatisfyPatternUnitTest.java b/libraries-4/src/test/java/com/baeldung/eclipsecollections/AnySatisfyPatternUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/eclipsecollections/AnySatisfyPatternUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/eclipsecollections/AnySatisfyPatternUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/eclipsecollections/CollectPatternUnitTest.java b/libraries-4/src/test/java/com/baeldung/eclipsecollections/CollectPatternUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/eclipsecollections/CollectPatternUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/eclipsecollections/CollectPatternUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/eclipsecollections/ConvertContainerToAnotherUnitTest.java b/libraries-4/src/test/java/com/baeldung/eclipsecollections/ConvertContainerToAnotherUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/eclipsecollections/ConvertContainerToAnotherUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/eclipsecollections/ConvertContainerToAnotherUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/eclipsecollections/DetectPatternUnitTest.java b/libraries-4/src/test/java/com/baeldung/eclipsecollections/DetectPatternUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/eclipsecollections/DetectPatternUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/eclipsecollections/DetectPatternUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/eclipsecollections/FlatCollectUnitTest.java b/libraries-4/src/test/java/com/baeldung/eclipsecollections/FlatCollectUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/eclipsecollections/FlatCollectUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/eclipsecollections/FlatCollectUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/eclipsecollections/ForEachPatternUnitTest.java b/libraries-4/src/test/java/com/baeldung/eclipsecollections/ForEachPatternUnitTest.java
similarity index 90%
rename from libraries/src/test/java/com/baeldung/eclipsecollections/ForEachPatternUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/eclipsecollections/ForEachPatternUnitTest.java
index 38d95047ed..a1bd280658 100644
--- a/libraries/src/test/java/com/baeldung/eclipsecollections/ForEachPatternUnitTest.java
+++ b/libraries-4/src/test/java/com/baeldung/eclipsecollections/ForEachPatternUnitTest.java
@@ -5,6 +5,7 @@ import static org.junit.Assert.assertEquals;
import org.eclipse.collections.api.tuple.Pair;
import org.eclipse.collections.impl.map.mutable.UnifiedMap;
import org.eclipse.collections.impl.tuple.Tuples;
+import org.junit.Assert;
import org.junit.Test;
public class ForEachPatternUnitTest {
@@ -23,7 +24,7 @@ public class ForEachPatternUnitTest {
}
for (int i = 0; i < map.size(); i++) {
- assertEquals("New Value", map.get(i + 1));
+ Assert.assertEquals("New Value", map.get(i + 1));
}
}
}
diff --git a/libraries/src/test/java/com/baeldung/eclipsecollections/InjectIntoPatternUnitTest.java b/libraries-4/src/test/java/com/baeldung/eclipsecollections/InjectIntoPatternUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/eclipsecollections/InjectIntoPatternUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/eclipsecollections/InjectIntoPatternUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/eclipsecollections/LazyIterationUnitTest.java b/libraries-4/src/test/java/com/baeldung/eclipsecollections/LazyIterationUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/eclipsecollections/LazyIterationUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/eclipsecollections/LazyIterationUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/eclipsecollections/PartitionPatternUnitTest.java b/libraries-4/src/test/java/com/baeldung/eclipsecollections/PartitionPatternUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/eclipsecollections/PartitionPatternUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/eclipsecollections/PartitionPatternUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/eclipsecollections/RejectPatternUnitTest.java b/libraries-4/src/test/java/com/baeldung/eclipsecollections/RejectPatternUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/eclipsecollections/RejectPatternUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/eclipsecollections/RejectPatternUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/eclipsecollections/SelectPatternUnitTest.java b/libraries-4/src/test/java/com/baeldung/eclipsecollections/SelectPatternUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/eclipsecollections/SelectPatternUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/eclipsecollections/SelectPatternUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/eclipsecollections/ZipUnitTest.java b/libraries-4/src/test/java/com/baeldung/eclipsecollections/ZipUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/eclipsecollections/ZipUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/eclipsecollections/ZipUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/eclipsecollections/ZipWithIndexUnitTest.java b/libraries-4/src/test/java/com/baeldung/eclipsecollections/ZipWithIndexUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/eclipsecollections/ZipWithIndexUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/eclipsecollections/ZipWithIndexUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/java/io/JavaDirectoryDeleteUnitTest.java b/libraries-4/src/test/java/com/baeldung/io/JavaDirectoryDeleteUnitTest.java
similarity index 96%
rename from libraries/src/test/java/com/baeldung/java/io/JavaDirectoryDeleteUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/io/JavaDirectoryDeleteUnitTest.java
index 53d9d11bbb..c9c8242cd5 100644
--- a/libraries/src/test/java/com/baeldung/java/io/JavaDirectoryDeleteUnitTest.java
+++ b/libraries-4/src/test/java/com/baeldung/io/JavaDirectoryDeleteUnitTest.java
@@ -1,138 +1,138 @@
-package com.baeldung.java.io;
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import java.io.File;
-import java.io.IOException;
-import java.nio.file.FileVisitResult;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.SimpleFileVisitor;
-import java.nio.file.attribute.BasicFileAttributes;
-import java.util.Arrays;
-import java.util.Comparator;
-import java.util.List;
-
-import org.apache.commons.io.FileUtils;
-import org.junit.After;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.springframework.util.FileSystemUtils;
-
-public class JavaDirectoryDeleteUnitTest {
- private static Path TEMP_DIRECTORY;
- private static final String DIRECTORY_NAME = "toBeDeleted";
-
- private static final List ALL_LINES = Arrays.asList("This is line 1", "This is line 2", "This is line 3", "This is line 4", "This is line 5", "This is line 6");
-
- @BeforeClass
- public static void initializeTempDirectory() throws IOException {
- TEMP_DIRECTORY = Files.createTempDirectory("tmpForJUnit");
- }
-
- @AfterClass
- public static void cleanTempDirectory() throws IOException {
- FileUtils.deleteDirectory(TEMP_DIRECTORY.toFile());
- }
-
- @Before
- public void setupDirectory() throws IOException {
- Path tempPathForEachTest = Files.createDirectory(TEMP_DIRECTORY.resolve(DIRECTORY_NAME));
-
- // Create a directory structure
- Files.write(tempPathForEachTest.resolve("file1.txt"), ALL_LINES.subList(0, 2));
- Files.write(tempPathForEachTest.resolve("file2.txt"), ALL_LINES.subList(2, 4));
-
- Files.createDirectories(tempPathForEachTest.resolve("Empty"));
-
- Path aSubDir = Files.createDirectories(tempPathForEachTest.resolve("notEmpty"));
- Files.write(aSubDir.resolve("file3.txt"), ALL_LINES.subList(3, 5));
- Files.write(aSubDir.resolve("file4.txt"), ALL_LINES.subList(0, 3));
-
- aSubDir = Files.createDirectories(aSubDir.resolve("anotherSubDirectory"));
- Files.write(aSubDir.resolve("file5.txt"), ALL_LINES.subList(4, 5));
- Files.write(aSubDir.resolve("file6.txt"), ALL_LINES.subList(0, 2));
- }
-
- @After
- public void checkAndCleanupIfRequired() throws IOException {
- Path pathToBeDeleted = TEMP_DIRECTORY.resolve(DIRECTORY_NAME);
- if (Files.exists(pathToBeDeleted)) {
- FileUtils.deleteDirectory(pathToBeDeleted.toFile());
- }
- }
-
- private boolean deleteDirectory(File directoryToBeDeleted) {
- File[] allContents = directoryToBeDeleted.listFiles();
-
- if (allContents != null) {
- for (File file : allContents) {
- deleteDirectory(file);
- }
- }
-
- return directoryToBeDeleted.delete();
- }
-
- @Test
- public void givenDirectory_whenDeletedWithRecursion_thenIsGone() throws IOException {
- Path pathToBeDeleted = TEMP_DIRECTORY.resolve(DIRECTORY_NAME);
-
- boolean result = deleteDirectory(pathToBeDeleted.toFile());
-
- assertTrue("Could not delete directory", result);
- assertFalse("Directory still exists", Files.exists(pathToBeDeleted));
- }
-
- @Test
- public void givenDirectory_whenDeletedWithCommonsIOFileUtils_thenIsGone() throws IOException {
- Path pathToBeDeleted = TEMP_DIRECTORY.resolve(DIRECTORY_NAME);
-
- FileUtils.deleteDirectory(pathToBeDeleted.toFile());
-
- assertFalse("Directory still exists", Files.exists(pathToBeDeleted));
- }
-
- @Test
- public void givenDirectory_whenDeletedWithSpringFileSystemUtils_thenIsGone() throws IOException {
- Path pathToBeDeleted = TEMP_DIRECTORY.resolve(DIRECTORY_NAME);
-
- boolean result = FileSystemUtils.deleteRecursively(pathToBeDeleted.toFile());
-
- assertTrue("Could not delete directory", result);
- assertFalse("Directory still exists", Files.exists(pathToBeDeleted));
- }
-
- @Test
- public void givenDirectory_whenDeletedWithFilesWalk_thenIsGone() throws IOException {
- Path pathToBeDeleted = TEMP_DIRECTORY.resolve(DIRECTORY_NAME);
-
- Files.walk(pathToBeDeleted).sorted(Comparator.reverseOrder()).map(Path::toFile).forEach(File::delete);
-
- assertFalse("Directory still exists", Files.exists(pathToBeDeleted));
- }
-
- @Test
- public void givenDirectory_whenDeletedWithNIO2WalkFileTree_thenIsGone() throws IOException {
- Path pathToBeDeleted = TEMP_DIRECTORY.resolve(DIRECTORY_NAME);
-
- Files.walkFileTree(pathToBeDeleted, new SimpleFileVisitor() {
- @Override
- public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
- Files.delete(dir);
- return FileVisitResult.CONTINUE;
- }
-
- @Override
- public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
- Files.delete(file);
- return FileVisitResult.CONTINUE;
- }
- });
-
- assertFalse("Directory still exists", Files.exists(pathToBeDeleted));
- }
-}
+package com.baeldung.io;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.FileVisitResult;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.SimpleFileVisitor;
+import java.nio.file.attribute.BasicFileAttributes;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.List;
+
+import org.apache.commons.io.FileUtils;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.springframework.util.FileSystemUtils;
+
+public class JavaDirectoryDeleteUnitTest {
+ private static Path TEMP_DIRECTORY;
+ private static final String DIRECTORY_NAME = "toBeDeleted";
+
+ private static final List ALL_LINES = Arrays.asList("This is line 1", "This is line 2", "This is line 3", "This is line 4", "This is line 5", "This is line 6");
+
+ @BeforeClass
+ public static void initializeTempDirectory() throws IOException {
+ TEMP_DIRECTORY = Files.createTempDirectory("tmpForJUnit");
+ }
+
+ @AfterClass
+ public static void cleanTempDirectory() throws IOException {
+ FileUtils.deleteDirectory(TEMP_DIRECTORY.toFile());
+ }
+
+ @Before
+ public void setupDirectory() throws IOException {
+ Path tempPathForEachTest = Files.createDirectory(TEMP_DIRECTORY.resolve(DIRECTORY_NAME));
+
+ // Create a directory structure
+ Files.write(tempPathForEachTest.resolve("file1.txt"), ALL_LINES.subList(0, 2));
+ Files.write(tempPathForEachTest.resolve("file2.txt"), ALL_LINES.subList(2, 4));
+
+ Files.createDirectories(tempPathForEachTest.resolve("Empty"));
+
+ Path aSubDir = Files.createDirectories(tempPathForEachTest.resolve("notEmpty"));
+ Files.write(aSubDir.resolve("file3.txt"), ALL_LINES.subList(3, 5));
+ Files.write(aSubDir.resolve("file4.txt"), ALL_LINES.subList(0, 3));
+
+ aSubDir = Files.createDirectories(aSubDir.resolve("anotherSubDirectory"));
+ Files.write(aSubDir.resolve("file5.txt"), ALL_LINES.subList(4, 5));
+ Files.write(aSubDir.resolve("file6.txt"), ALL_LINES.subList(0, 2));
+ }
+
+ @After
+ public void checkAndCleanupIfRequired() throws IOException {
+ Path pathToBeDeleted = TEMP_DIRECTORY.resolve(DIRECTORY_NAME);
+ if (Files.exists(pathToBeDeleted)) {
+ FileUtils.deleteDirectory(pathToBeDeleted.toFile());
+ }
+ }
+
+ private boolean deleteDirectory(File directoryToBeDeleted) {
+ File[] allContents = directoryToBeDeleted.listFiles();
+
+ if (allContents != null) {
+ for (File file : allContents) {
+ deleteDirectory(file);
+ }
+ }
+
+ return directoryToBeDeleted.delete();
+ }
+
+ @Test
+ public void givenDirectory_whenDeletedWithRecursion_thenIsGone() throws IOException {
+ Path pathToBeDeleted = TEMP_DIRECTORY.resolve(DIRECTORY_NAME);
+
+ boolean result = deleteDirectory(pathToBeDeleted.toFile());
+
+ assertTrue("Could not delete directory", result);
+ assertFalse("Directory still exists", Files.exists(pathToBeDeleted));
+ }
+
+ @Test
+ public void givenDirectory_whenDeletedWithCommonsIOFileUtils_thenIsGone() throws IOException {
+ Path pathToBeDeleted = TEMP_DIRECTORY.resolve(DIRECTORY_NAME);
+
+ FileUtils.deleteDirectory(pathToBeDeleted.toFile());
+
+ assertFalse("Directory still exists", Files.exists(pathToBeDeleted));
+ }
+
+ @Test
+ public void givenDirectory_whenDeletedWithSpringFileSystemUtils_thenIsGone() throws IOException {
+ Path pathToBeDeleted = TEMP_DIRECTORY.resolve(DIRECTORY_NAME);
+
+ boolean result = FileSystemUtils.deleteRecursively(pathToBeDeleted.toFile());
+
+ assertTrue("Could not delete directory", result);
+ assertFalse("Directory still exists", Files.exists(pathToBeDeleted));
+ }
+
+ @Test
+ public void givenDirectory_whenDeletedWithFilesWalk_thenIsGone() throws IOException {
+ Path pathToBeDeleted = TEMP_DIRECTORY.resolve(DIRECTORY_NAME);
+
+ Files.walk(pathToBeDeleted).sorted(Comparator.reverseOrder()).map(Path::toFile).forEach(File::delete);
+
+ assertFalse("Directory still exists", Files.exists(pathToBeDeleted));
+ }
+
+ @Test
+ public void givenDirectory_whenDeletedWithNIO2WalkFileTree_thenIsGone() throws IOException {
+ Path pathToBeDeleted = TEMP_DIRECTORY.resolve(DIRECTORY_NAME);
+
+ Files.walkFileTree(pathToBeDeleted, new SimpleFileVisitor() {
+ @Override
+ public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
+ Files.delete(dir);
+ return FileVisitResult.CONTINUE;
+ }
+
+ @Override
+ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
+ Files.delete(file);
+ return FileVisitResult.CONTINUE;
+ }
+ });
+
+ assertFalse("Directory still exists", Files.exists(pathToBeDeleted));
+ }
+}
diff --git a/libraries/src/test/java/com/baeldung/jdeffered/JDeferredUnitTest.java b/libraries-4/src/test/java/com/baeldung/jdeffered/JDeferredUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/jdeffered/JDeferredUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/jdeffered/JDeferredUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/mbassador/MBassadorAsyncDispatchUnitTest.java b/libraries-4/src/test/java/com/baeldung/mbassador/MBassadorAsyncDispatchUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/mbassador/MBassadorAsyncDispatchUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/mbassador/MBassadorAsyncDispatchUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/mbassador/MBassadorAsyncInvocationUnitTest.java b/libraries-4/src/test/java/com/baeldung/mbassador/MBassadorAsyncInvocationUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/mbassador/MBassadorAsyncInvocationUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/mbassador/MBassadorAsyncInvocationUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/mbassador/MBassadorBasicUnitTest.java b/libraries-4/src/test/java/com/baeldung/mbassador/MBassadorBasicUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/mbassador/MBassadorBasicUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/mbassador/MBassadorBasicUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/mbassador/MBassadorConfigurationUnitTest.java b/libraries-4/src/test/java/com/baeldung/mbassador/MBassadorConfigurationUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/mbassador/MBassadorConfigurationUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/mbassador/MBassadorConfigurationUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/mbassador/MBassadorFilterUnitTest.java b/libraries-4/src/test/java/com/baeldung/mbassador/MBassadorFilterUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/mbassador/MBassadorFilterUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/mbassador/MBassadorFilterUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/mbassador/MBassadorHierarchyUnitTest.java b/libraries-4/src/test/java/com/baeldung/mbassador/MBassadorHierarchyUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/mbassador/MBassadorHierarchyUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/mbassador/MBassadorHierarchyUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/noexception/NoExceptionUnitTest.java b/libraries-4/src/test/java/com/baeldung/noexception/NoExceptionUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/noexception/NoExceptionUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/noexception/NoExceptionUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/pairs/ApacheCommonsPairUnitTest.java b/libraries-4/src/test/java/com/baeldung/pairs/ApacheCommonsPairUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/pairs/ApacheCommonsPairUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/pairs/ApacheCommonsPairUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/pairs/CoreJavaPairUnitTest.java b/libraries-4/src/test/java/com/baeldung/pairs/CoreJavaPairUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/pairs/CoreJavaPairUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/pairs/CoreJavaPairUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/pairs/CoreJavaSimpleEntryUnitTest.java b/libraries-4/src/test/java/com/baeldung/pairs/CoreJavaSimpleEntryUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/pairs/CoreJavaSimpleEntryUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/pairs/CoreJavaSimpleEntryUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/pairs/VavrPairsUnitTest.java b/libraries-4/src/test/java/com/baeldung/pairs/VavrPairsUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/pairs/VavrPairsUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/pairs/VavrPairsUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/pcollections/PCollectionsUnitTest.java b/libraries-4/src/test/java/com/baeldung/pcollections/PCollectionsUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/pcollections/PCollectionsUnitTest.java
rename to libraries-4/src/test/java/com/baeldung/pcollections/PCollectionsUnitTest.java
diff --git a/libraries-5/README.md b/libraries-5/README.md
new file mode 100644
index 0000000000..f1e749b293
--- /dev/null
+++ b/libraries-5/README.md
@@ -0,0 +1,21 @@
+## Libraries-5
+
+This module contains articles about various Java libraries.
+These are small libraries that are relatively easy to use and do not require any separate module of their own.
+
+The code examples related to different libraries are each in their own module.
+
+Remember, for advanced libraries like [Jackson](/jackson) and [JUnit](/testing-modules) we already have separate modules. Please make sure to have a look at the existing modules in such cases.
+
+### Relevant articles
+- [Introduction to Caffeine](https://www.baeldung.com/java-caching-caffeine)
+- [Introduction to StreamEx](https://www.baeldung.com/streamex)
+- [A Docker Guide for Java](https://www.baeldung.com/docker-java-api)
+- [Introduction to Akka Actors in Java](https://www.baeldung.com/akka-actors-java)
+- [A Guide to Byte Buddy](https://www.baeldung.com/byte-buddy)
+- [Introduction to jOOL](https://www.baeldung.com/jool)
+- [Consumer Driven Contracts with Pact](https://www.baeldung.com/pact-junit-consumer-driven-contracts)
+- [Introduction to Atlassian Fugue](https://www.baeldung.com/java-fugue)
+- [Publish and Receive Messages with Nats Java Client](https://www.baeldung.com/nats-java-client)
+- [Java Concurrency Utility with JCTools](https://www.baeldung.com/java-concurrency-jc-tools)
+- More articles [[<-- prev]](/libraries-4) [[next -->]](/libraries-6)
diff --git a/libraries-5/pom.xml b/libraries-5/pom.xml
new file mode 100644
index 0000000000..63296d4a89
--- /dev/null
+++ b/libraries-5/pom.xml
@@ -0,0 +1,146 @@
+
+
+
+ parent-modules
+ com.baeldung
+ 1.0.0-SNAPSHOT
+
+
+ libraries-5
+ 4.0.0
+
+
+
+ org.springframework
+ spring-web
+ ${spring.version}
+
+
+ org.assertj
+ assertj-core
+ ${assertj.version}
+
+
+ org.jooq
+ jool
+ ${jool.version}
+
+
+ au.com.dius
+ pact-jvm-consumer-junit_2.11
+ ${pact.version}
+ test
+
+
+ org.codehaus.groovy
+ groovy-all
+
+
+
+
+
+
+ com.typesafe.akka
+ akka-actor_${scala.version}
+ ${typesafe-akka.version}
+
+
+ com.typesafe.akka
+ akka-testkit_${scala.version}
+ ${typesafe-akka.version}
+ test
+
+
+
+ one.util
+ streamex
+ ${streamex.version}
+
+
+ net.bytebuddy
+ byte-buddy
+ ${bytebuddy.version}
+
+
+ net.bytebuddy
+ byte-buddy-agent
+ ${bytebuddy.version}
+
+
+
+
+ com.github.docker-java
+ docker-java
+ ${docker.version}
+
+
+ org.slf4j
+ slf4j-log4j12
+
+
+ org.slf4j
+ jcl-over-slf4j
+
+
+ ch.qos.logback
+ logback-classic
+
+
+
+
+
+
+ com.github.ben-manes.caffeine
+ caffeine
+ ${caffeine.version}
+
+
+ com.google.code.findbugs
+ jsr305
+ ${findbugs.version}
+ test
+
+
+
+ io.atlassian.fugue
+ fugue
+ ${fugue.version}
+
+
+ io.nats
+ jnats
+ ${jnats.version}
+
+
+ org.jctools
+ jctools-core
+ ${jctools.version}
+
+
+ org.openjdk.jmh
+ jmh-core
+ ${jmh.version}
+
+
+
+
+ 3.5.0
+ 0.9.12
+ 4.3.8.RELEASE
+ 3.6.2
+ 2.11
+ 2.5.11
+ 0.6.5
+ 1.7.1
+ 3.0.14
+ 2.5.5
+ 3.0.2
+ 4.5.1
+ 1.0
+ 2.1.2
+ 1.19
+
+
+
\ No newline at end of file
diff --git a/libraries/src/main/java/com/baeldung/akka/FirstActor.java b/libraries-5/src/main/java/com/baeldung/akka/FirstActor.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/akka/FirstActor.java
rename to libraries-5/src/main/java/com/baeldung/akka/FirstActor.java
diff --git a/libraries/src/main/java/com/baeldung/akka/MyActor.java b/libraries-5/src/main/java/com/baeldung/akka/MyActor.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/akka/MyActor.java
rename to libraries-5/src/main/java/com/baeldung/akka/MyActor.java
diff --git a/libraries/src/main/java/com/baeldung/akka/PrinterActor.java b/libraries-5/src/main/java/com/baeldung/akka/PrinterActor.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/akka/PrinterActor.java
rename to libraries-5/src/main/java/com/baeldung/akka/PrinterActor.java
diff --git a/libraries/src/main/java/com/baeldung/akka/ReadingActor.java b/libraries-5/src/main/java/com/baeldung/akka/ReadingActor.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/akka/ReadingActor.java
rename to libraries-5/src/main/java/com/baeldung/akka/ReadingActor.java
diff --git a/libraries/src/main/java/com/baeldung/akka/WordCounterActor.java b/libraries-5/src/main/java/com/baeldung/akka/WordCounterActor.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/akka/WordCounterActor.java
rename to libraries-5/src/main/java/com/baeldung/akka/WordCounterActor.java
diff --git a/libraries/src/main/java/com/baeldung/bytebuddy/Bar.java b/libraries-5/src/main/java/com/baeldung/bytebuddy/Bar.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/bytebuddy/Bar.java
rename to libraries-5/src/main/java/com/baeldung/bytebuddy/Bar.java
diff --git a/libraries/src/main/java/com/baeldung/bytebuddy/Foo.java b/libraries-5/src/main/java/com/baeldung/bytebuddy/Foo.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/bytebuddy/Foo.java
rename to libraries-5/src/main/java/com/baeldung/bytebuddy/Foo.java
diff --git a/libraries/src/main/java/com/baeldung/caffeine/DataObject.java b/libraries-5/src/main/java/com/baeldung/caffeine/DataObject.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/caffeine/DataObject.java
rename to libraries-5/src/main/java/com/baeldung/caffeine/DataObject.java
diff --git a/libraries/src/main/java/com/baeldung/jctools/MpmcBenchmark.java b/libraries-5/src/main/java/com/baeldung/jctools/MpmcBenchmark.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/jctools/MpmcBenchmark.java
rename to libraries-5/src/main/java/com/baeldung/jctools/MpmcBenchmark.java
diff --git a/libraries/src/main/java/com/baeldung/jctools/README.md b/libraries-5/src/main/java/com/baeldung/jctools/README.md
similarity index 100%
rename from libraries/src/main/java/com/baeldung/jctools/README.md
rename to libraries-5/src/main/java/com/baeldung/jctools/README.md
diff --git a/libraries/src/main/java/com/baeldung/jnats/NatsClient.java b/libraries-5/src/main/java/com/baeldung/jnats/NatsClient.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/jnats/NatsClient.java
rename to libraries-5/src/main/java/com/baeldung/jnats/NatsClient.java
diff --git a/libraries/src/main/java/com/baeldung/streamex/Role.java b/libraries-5/src/main/java/com/baeldung/streamex/Role.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/streamex/Role.java
rename to libraries-5/src/main/java/com/baeldung/streamex/Role.java
diff --git a/libraries/src/main/java/com/baeldung/streamex/StreamEX.java b/libraries-5/src/main/java/com/baeldung/streamex/StreamEX.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/streamex/StreamEX.java
rename to libraries-5/src/main/java/com/baeldung/streamex/StreamEX.java
diff --git a/libraries/src/main/java/com/baeldung/streamex/User.java b/libraries-5/src/main/java/com/baeldung/streamex/User.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/streamex/User.java
rename to libraries-5/src/main/java/com/baeldung/streamex/User.java
diff --git a/libraries/src/test/java/com/baeldung/akka/AkkaActorsUnitTest.java b/libraries-5/src/test/java/com/baeldung/akka/AkkaActorsUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/akka/AkkaActorsUnitTest.java
rename to libraries-5/src/test/java/com/baeldung/akka/AkkaActorsUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/bytebuddy/ByteBuddyUnitTest.java b/libraries-5/src/test/java/com/baeldung/bytebuddy/ByteBuddyUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/bytebuddy/ByteBuddyUnitTest.java
rename to libraries-5/src/test/java/com/baeldung/bytebuddy/ByteBuddyUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/caffeine/CaffeineUnitTest.java b/libraries-5/src/test/java/com/baeldung/caffeine/CaffeineUnitTest.java
similarity index 88%
rename from libraries/src/test/java/com/baeldung/caffeine/CaffeineUnitTest.java
rename to libraries-5/src/test/java/com/baeldung/caffeine/CaffeineUnitTest.java
index d523d0ff8b..65c441c50d 100644
--- a/libraries/src/test/java/com/baeldung/caffeine/CaffeineUnitTest.java
+++ b/libraries-5/src/test/java/com/baeldung/caffeine/CaffeineUnitTest.java
@@ -8,6 +8,7 @@ import java.util.concurrent.TimeUnit;
import javax.annotation.Nonnull;
+import org.junit.Assert;
import org.junit.Test;
import com.github.benmanes.caffeine.cache.*;
@@ -65,43 +66,43 @@ public class CaffeineUnitTest {
assertEquals("Data for " + key, dataObject.getData());
});
- cache.getAll(Arrays.asList("A", "B", "C")).thenAccept(dataObjectMap -> assertEquals(3, dataObjectMap.size()));
+ cache.getAll(Arrays.asList("A", "B", "C")).thenAccept(dataObjectMap -> Assert.assertEquals(3, dataObjectMap.size()));
}
@Test
public void givenLoadingCacheWithSmallSize_whenPut_thenSizeIsConstant() {
LoadingCache cache = Caffeine.newBuilder().maximumSize(1).refreshAfterWrite(10, TimeUnit.MINUTES).build(k -> DataObject.get("Data for " + k));
- assertEquals(0, cache.estimatedSize());
+ Assert.assertEquals(0, cache.estimatedSize());
cache.get("A");
- assertEquals(1, cache.estimatedSize());
+ Assert.assertEquals(1, cache.estimatedSize());
cache.get("B");
cache.cleanUp();
- assertEquals(1, cache.estimatedSize());
+ Assert.assertEquals(1, cache.estimatedSize());
}
@Test
public void givenLoadingCacheWithWeigher_whenPut_thenSizeIsConstant() {
LoadingCache cache = Caffeine.newBuilder().maximumWeight(10).weigher((k, v) -> 5).build(k -> DataObject.get("Data for " + k));
- assertEquals(0, cache.estimatedSize());
+ Assert.assertEquals(0, cache.estimatedSize());
cache.get("A");
- assertEquals(1, cache.estimatedSize());
+ Assert.assertEquals(1, cache.estimatedSize());
cache.get("B");
- assertEquals(2, cache.estimatedSize());
+ Assert.assertEquals(2, cache.estimatedSize());
cache.get("C");
cache.cleanUp();
- assertEquals(2, cache.estimatedSize());
+ Assert.assertEquals(2, cache.estimatedSize());
}
@Test
@@ -138,7 +139,7 @@ public class CaffeineUnitTest {
cache.get("A");
cache.get("A");
- assertEquals(1, cache.stats().hitCount());
- assertEquals(1, cache.stats().missCount());
+ Assert.assertEquals(1, cache.stats().hitCount());
+ Assert.assertEquals(1, cache.stats().missCount());
}
}
\ No newline at end of file
diff --git a/libraries/src/test/java/com/baeldung/dockerapi/ContainerLiveTest.java b/libraries-5/src/test/java/com/baeldung/dockerapi/ContainerLiveTest.java
similarity index 94%
rename from libraries/src/test/java/com/baeldung/dockerapi/ContainerLiveTest.java
rename to libraries-5/src/test/java/com/baeldung/dockerapi/ContainerLiveTest.java
index e6f0fd1c31..007c70355a 100644
--- a/libraries/src/test/java/com/baeldung/dockerapi/ContainerLiveTest.java
+++ b/libraries-5/src/test/java/com/baeldung/dockerapi/ContainerLiveTest.java
@@ -6,6 +6,8 @@ import com.github.dockerjava.api.command.InspectContainerResponse;
import com.github.dockerjava.api.model.Container;
import com.github.dockerjava.api.model.PortBinding;
import com.github.dockerjava.core.DockerClientBuilder;
+import org.hamcrest.MatcherAssert;
+import org.hamcrest.core.Is;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -51,7 +53,7 @@ public class ContainerLiveTest {
CreateContainerResponse container = dockerClient.createContainerCmd("mongo:3.6").withCmd("--bind_ip_all").withName("mongo").withHostName("baeldung").withEnv("MONGO_LATEST_VERSION=3.6").withPortBindings(PortBinding.parse("9999:27017")).exec();
// then
- assertThat(container.getId(), is(not(null)));
+ MatcherAssert.assertThat(container.getId(), is(not(null)));
}
@Test
@@ -104,7 +106,7 @@ public class ContainerLiveTest {
// then
InspectContainerResponse containerResponse = dockerClient.inspectContainerCmd(container.getId()).exec();
- assertThat(containerResponse.getId(), is(container.getId()));
+ MatcherAssert.assertThat(containerResponse.getId(), Is.is(container.getId()));
}
@Test
diff --git a/libraries/src/test/java/com/baeldung/dockerapi/DockerClientLiveTest.java b/libraries-5/src/test/java/com/baeldung/dockerapi/DockerClientLiveTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/dockerapi/DockerClientLiveTest.java
rename to libraries-5/src/test/java/com/baeldung/dockerapi/DockerClientLiveTest.java
diff --git a/libraries/src/test/java/com/baeldung/dockerapi/ImageLiveTest.java b/libraries-5/src/test/java/com/baeldung/dockerapi/ImageLiveTest.java
similarity index 96%
rename from libraries/src/test/java/com/baeldung/dockerapi/ImageLiveTest.java
rename to libraries-5/src/test/java/com/baeldung/dockerapi/ImageLiveTest.java
index 7e8cd6a354..96e7922f2a 100644
--- a/libraries/src/test/java/com/baeldung/dockerapi/ImageLiveTest.java
+++ b/libraries-5/src/test/java/com/baeldung/dockerapi/ImageLiveTest.java
@@ -8,6 +8,8 @@ import com.github.dockerjava.core.DockerClientBuilder;
import com.github.dockerjava.core.command.BuildImageResultCallback;
import com.github.dockerjava.core.command.PullImageResultCallback;
import com.github.dockerjava.core.command.PushImageResultCallback;
+import org.hamcrest.MatcherAssert;
+import org.hamcrest.core.Is;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -81,7 +83,7 @@ public class ImageLiveTest {
InspectImageResponse imageResponse = dockerClient.inspectImageCmd(image.getId()).exec();
// then
- assertThat(imageResponse.getId(), is(image.getId()));
+ MatcherAssert.assertThat(imageResponse.getId(), Is.is(image.getId()));
}
@Test
diff --git a/libraries/src/test/java/com/baeldung/dockerapi/NetworkLiveTest.java b/libraries-5/src/test/java/com/baeldung/dockerapi/NetworkLiveTest.java
similarity index 95%
rename from libraries/src/test/java/com/baeldung/dockerapi/NetworkLiveTest.java
rename to libraries-5/src/test/java/com/baeldung/dockerapi/NetworkLiveTest.java
index d3abbe2e7e..31ad32c7b5 100644
--- a/libraries/src/test/java/com/baeldung/dockerapi/NetworkLiveTest.java
+++ b/libraries-5/src/test/java/com/baeldung/dockerapi/NetworkLiveTest.java
@@ -5,6 +5,7 @@ import com.github.dockerjava.api.command.CreateNetworkResponse;
import com.github.dockerjava.api.model.Network;
import com.github.dockerjava.api.model.Network.Ipam;
import com.github.dockerjava.core.DockerClientBuilder;
+import org.hamcrest.MatcherAssert;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
@@ -64,7 +65,7 @@ public class NetworkLiveTest {
Network network = dockerClient.inspectNetworkCmd().withNetworkId(networkName).exec();
// then
- assertThat(network.getName(), is(networkName));
+ MatcherAssert.assertThat(network.getName(), is(networkName));
}
@Test
diff --git a/libraries/src/test/java/com/baeldung/dockerapi/VolumeLiveTest.java b/libraries-5/src/test/java/com/baeldung/dockerapi/VolumeLiveTest.java
similarity index 92%
rename from libraries/src/test/java/com/baeldung/dockerapi/VolumeLiveTest.java
rename to libraries-5/src/test/java/com/baeldung/dockerapi/VolumeLiveTest.java
index 9e60a76b33..f2a078b2c6 100644
--- a/libraries/src/test/java/com/baeldung/dockerapi/VolumeLiveTest.java
+++ b/libraries-5/src/test/java/com/baeldung/dockerapi/VolumeLiveTest.java
@@ -5,6 +5,7 @@ import com.github.dockerjava.api.command.CreateVolumeResponse;
import com.github.dockerjava.api.command.InspectVolumeResponse;
import com.github.dockerjava.api.command.ListVolumesResponse;
import com.github.dockerjava.core.DockerClientBuilder;
+import org.hamcrest.MatcherAssert;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -57,7 +58,7 @@ public class VolumeLiveTest {
CreateVolumeResponse unnamedVolume = dockerClient.createVolumeCmd().exec();
// then
- assertThat(unnamedVolume.getName(), is(not(null)));
+ MatcherAssert.assertThat(unnamedVolume.getName(), is(not(null)));
}
@Test
@@ -67,7 +68,7 @@ public class VolumeLiveTest {
CreateVolumeResponse namedVolume = dockerClient.createVolumeCmd().withName("myNamedVolume").exec();
// then
- assertThat(namedVolume.getName(), is(not(null)));
+ MatcherAssert.assertThat(namedVolume.getName(), is(not(null)));
}
@Test
diff --git a/libraries/src/test/java/com/baeldung/atlassian/fugue/FugueUnitTest.java b/libraries-5/src/test/java/com/baeldung/fugue/FugueUnitTest.java
similarity index 99%
rename from libraries/src/test/java/com/baeldung/atlassian/fugue/FugueUnitTest.java
rename to libraries-5/src/test/java/com/baeldung/fugue/FugueUnitTest.java
index 773e39b76a..c3a89a1355 100644
--- a/libraries/src/test/java/com/baeldung/atlassian/fugue/FugueUnitTest.java
+++ b/libraries-5/src/test/java/com/baeldung/fugue/FugueUnitTest.java
@@ -1,4 +1,4 @@
-package com.baeldung.atlassian.fugue;
+package com.baeldung.fugue;
import io.atlassian.fugue.*;
import org.junit.Assert;
diff --git a/libraries/src/test/java/com/baeldung/jctools/JCToolsUnitTest.java b/libraries-5/src/test/java/com/baeldung/jctools/JCToolsUnitTest.java
similarity index 88%
rename from libraries/src/test/java/com/baeldung/jctools/JCToolsUnitTest.java
rename to libraries-5/src/test/java/com/baeldung/jctools/JCToolsUnitTest.java
index 4a9d0fadb2..a5dacdbdac 100644
--- a/libraries/src/test/java/com/baeldung/jctools/JCToolsUnitTest.java
+++ b/libraries-5/src/test/java/com/baeldung/jctools/JCToolsUnitTest.java
@@ -1,5 +1,6 @@
package com.baeldung.jctools;
+import org.assertj.core.api.Assertions;
import org.jctools.queues.SpscArrayQueue;
import org.jctools.queues.SpscChunkedArrayQueue;
import org.junit.Test;
@@ -44,16 +45,16 @@ public class JCToolsUnitTest {
@Test
public void whenQueueIsFull_thenNoMoreElementsCanBeAdded() throws InterruptedException {
SpscChunkedArrayQueue queue = new SpscChunkedArrayQueue<>(8, 16);
- assertThat(queue.capacity()).isEqualTo(16);
+ Assertions.assertThat(queue.capacity()).isEqualTo(16);
CountDownLatch startConsuming = new CountDownLatch(1);
CountDownLatch awakeProducer = new CountDownLatch(1);
AtomicReference error = new AtomicReference<>();
Thread producer = new Thread(() -> {
IntStream.range(0, queue.capacity()).forEach(i -> {
- assertThat(queue.offer(i)).isTrue();
+ Assertions.assertThat(queue.offer(i)).isTrue();
});
- assertThat(queue.offer(queue.capacity())).isFalse();
+ Assertions.assertThat(queue.offer(queue.capacity())).isFalse();
startConsuming.countDown();
try {
awakeProducer.await();
@@ -61,7 +62,7 @@ public class JCToolsUnitTest {
throw new RuntimeException(e);
}
- assertThat(queue.offer(queue.capacity())).isTrue();
+ Assertions.assertThat(queue.offer(queue.capacity())).isTrue();
});
producer.setUncaughtExceptionHandler((t, e) -> {
error.set(e);
diff --git a/libraries/src/test/java/com/baeldung/jnats/NatsClientLiveTest.java b/libraries-5/src/test/java/com/baeldung/jnats/NatsClientLiveTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/jnats/NatsClientLiveTest.java
rename to libraries-5/src/test/java/com/baeldung/jnats/NatsClientLiveTest.java
diff --git a/libraries/src/test/java/com/baeldung/jool/JOOLUnitTest.java b/libraries-5/src/test/java/com/baeldung/jool/JOOLUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/jool/JOOLUnitTest.java
rename to libraries-5/src/test/java/com/baeldung/jool/JOOLUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/pact/PactConsumerDrivenContractUnitTest.java b/libraries-5/src/test/java/com/baeldung/pact/PactConsumerDrivenContractUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/pact/PactConsumerDrivenContractUnitTest.java
rename to libraries-5/src/test/java/com/baeldung/pact/PactConsumerDrivenContractUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/stream/StreamExMergeStreamsUnitTest.java b/libraries-5/src/test/java/com/baeldung/streamex/StreamExMergeStreamsUnitTest.java
similarity index 98%
rename from libraries/src/test/java/com/baeldung/stream/StreamExMergeStreamsUnitTest.java
rename to libraries-5/src/test/java/com/baeldung/streamex/StreamExMergeStreamsUnitTest.java
index 220348bf36..b267eaea9b 100644
--- a/libraries/src/test/java/com/baeldung/stream/StreamExMergeStreamsUnitTest.java
+++ b/libraries-5/src/test/java/com/baeldung/streamex/StreamExMergeStreamsUnitTest.java
@@ -1,4 +1,4 @@
-package com.baeldung.stream;
+package com.baeldung.streamex;
import one.util.streamex.StreamEx;
import org.junit.Test;
diff --git a/libraries/src/test/resources/dockerapi/Dockerfile b/libraries-5/src/test/resources/dockerapi/Dockerfile
similarity index 100%
rename from libraries/src/test/resources/dockerapi/Dockerfile
rename to libraries-5/src/test/resources/dockerapi/Dockerfile
diff --git a/libraries-6/README.md b/libraries-6/README.md
new file mode 100644
index 0000000000..79bb83113e
--- /dev/null
+++ b/libraries-6/README.md
@@ -0,0 +1,17 @@
+## Libraries-6
+
+This module contains articles about various Java libraries.
+These are small libraries that are relatively easy to use and do not require any separate module of their own.
+
+The code examples related to different libraries are each in their own module.
+
+Remember, for advanced libraries like [Jackson](/jackson) and [JUnit](/testing-modules) we already have separate modules. Please make sure to have a look at the existing modules in such cases.
+
+### Relevant articles
+- [Introduction to JavaPoet](https://www.baeldung.com/java-poet)
+- [Guide to Resilience4j](https://www.baeldung.com/resilience4j)
+- [Implementing a FTP-Client in Java](https://www.baeldung.com/java-ftp-client)
+- [Introduction to Functional Java](https://www.baeldung.com/java-functional-library)
+- [A Guide to the Reflections Library](https://www.baeldung.com/reflections-library)
+- [Exactly Once Processing in Kafka](https://www.baeldung.com/kafka-exactly-once)
+- More articles [[<-- prev]](/libraries-5)
diff --git a/libraries-6/pom.xml b/libraries-6/pom.xml
new file mode 100644
index 0000000000..030e5aa77b
--- /dev/null
+++ b/libraries-6/pom.xml
@@ -0,0 +1,111 @@
+
+
+
+ parent-modules
+ com.baeldung
+ 1.0.0-SNAPSHOT
+
+ 4.0.0
+
+ libraries-6
+
+
+
+ org.functionaljava
+ functionaljava-java8
+ ${functionaljava.version}
+
+
+ com.codepoetics
+ protonpack
+ ${protonpack.version}
+
+
+ org.apache.kafka
+ kafka-streams
+ ${kafka.version}
+
+
+ org.apache.kafka
+ kafka-clients
+ ${kafka.version}
+ test
+ test
+
+
+ io.github.resilience4j
+ resilience4j-circuitbreaker
+ ${resilience4j.version}
+
+
+ io.github.resilience4j
+ resilience4j-bulkhead
+ ${resilience4j.version}
+
+
+ io.github.resilience4j
+ resilience4j-retry
+ ${resilience4j.version}
+
+
+ io.github.resilience4j
+ resilience4j-timelimiter
+ ${resilience4j.version}
+
+
+ com.squareup
+ javapoet
+ ${javapoet.version}
+
+
+ org.mockftpserver
+ MockFtpServer
+ ${mockftpserver.version}
+ test
+
+
+
+ org.reflections
+ reflections
+ ${reflections.version}
+
+
+ org.apache.commons
+ commons-lang3
+ ${commons-lang3.version}
+
+
+ commons-net
+ commons-net
+ ${commons-net.version}
+
+
+ org.assertj
+ assertj-core
+ ${assertj.version}
+
+
+ commons-io
+ commons-io
+ ${commonsio.version}
+ test
+
+
+
+
+ 2.0.0
+ 1.10.0
+ 0.9.11
+ 2.7.1
+ 4.8.1
+ 0.12.1
+ 1.15
+ 3.6
+ 3.6.2
+ 2.6
+
+
+
+
\ No newline at end of file
diff --git a/libraries/src/main/java/com/baeldung/fj/FunctionalJavaIOMain.java b/libraries-6/src/main/java/com/baeldung/fj/FunctionalJavaIOMain.java
similarity index 96%
rename from libraries/src/main/java/com/baeldung/fj/FunctionalJavaIOMain.java
rename to libraries-6/src/main/java/com/baeldung/fj/FunctionalJavaIOMain.java
index eaa201d1ba..e97f128b30 100644
--- a/libraries/src/main/java/com/baeldung/fj/FunctionalJavaIOMain.java
+++ b/libraries-6/src/main/java/com/baeldung/fj/FunctionalJavaIOMain.java
@@ -1,43 +1,43 @@
-package com.baeldung.fj;
-
-import fj.F;
-import fj.F1Functions;
-import fj.Unit;
-import fj.data.IO;
-import fj.data.IOFunctions;
-
-public class FunctionalJavaIOMain {
-
- public static IO printLetters(final String s) {
- return () -> {
- for (int i = 0; i < s.length(); i++) {
- System.out.println(s.charAt(i));
- }
- return Unit.unit();
- };
- }
-
- public static void main(String[] args) {
-
- F> printLetters = i -> printLetters(i);
-
- IO lowerCase = IOFunctions.stdoutPrintln("What's your first Name ?");
-
- IO input = IOFunctions.stdoutPrint("First Name: ");
-
- IO userInput = IOFunctions.append(lowerCase, input);
-
- IO readInput = IOFunctions.stdinReadLine();
-
- F toUpperCase = i -> i.toUpperCase();
-
- F> transformInput = F1Functions., String> o(printLetters).f(toUpperCase);
-
- IO readAndPrintResult = IOFunctions.bind(readInput, transformInput);
-
- IO program = IOFunctions.bind(userInput, nothing -> readAndPrintResult);
-
- IOFunctions.toSafe(program).run();
-
- }
-}
+package com.baeldung.fj;
+
+import fj.F;
+import fj.F1Functions;
+import fj.Unit;
+import fj.data.IO;
+import fj.data.IOFunctions;
+
+public class FunctionalJavaIOMain {
+
+ public static IO printLetters(final String s) {
+ return () -> {
+ for (int i = 0; i < s.length(); i++) {
+ System.out.println(s.charAt(i));
+ }
+ return Unit.unit();
+ };
+ }
+
+ public static void main(String[] args) {
+
+ F> printLetters = i -> printLetters(i);
+
+ IO lowerCase = IOFunctions.stdoutPrintln("What's your first Name ?");
+
+ IO input = IOFunctions.stdoutPrint("First Name: ");
+
+ IO userInput = IOFunctions.append(lowerCase, input);
+
+ IO readInput = IOFunctions.stdinReadLine();
+
+ F toUpperCase = i -> i.toUpperCase();
+
+ F> transformInput = F1Functions., String> o(printLetters).f(toUpperCase);
+
+ IO readAndPrintResult = IOFunctions.bind(readInput, transformInput);
+
+ IO program = IOFunctions.bind(userInput, nothing -> readAndPrintResult);
+
+ IOFunctions.toSafe(program).run();
+
+ }
+}
diff --git a/libraries/src/main/java/com/baeldung/fj/FunctionalJavaMain.java b/libraries-6/src/main/java/com/baeldung/fj/FunctionalJavaMain.java
similarity index 96%
rename from libraries/src/main/java/com/baeldung/fj/FunctionalJavaMain.java
rename to libraries-6/src/main/java/com/baeldung/fj/FunctionalJavaMain.java
index c6412f2923..1a59e6c22a 100644
--- a/libraries/src/main/java/com/baeldung/fj/FunctionalJavaMain.java
+++ b/libraries-6/src/main/java/com/baeldung/fj/FunctionalJavaMain.java
@@ -1,48 +1,48 @@
-package com.baeldung.fj;
-
-import fj.F;
-import fj.Show;
-import fj.data.Array;
-import fj.data.List;
-import fj.data.Option;
-import fj.function.Characters;
-import fj.function.Integers;
-
-public class FunctionalJavaMain {
-
- public static final F isEven = i -> i % 2 == 0;
-
- public static void main(String[] args) {
-
- List fList = List.list(3, 4, 5, 6);
- List evenList = fList.map(isEven);
- Show.listShow(Show.booleanShow).println(evenList);
-
- fList = fList.map(i -> i + 1);
- Show.listShow(Show.intShow).println(fList);
-
- Array a = Array.array(17, 44, 67, 2, 22, 80, 1, 27);
- Array b = a.filter(Integers.even);
- Show.arrayShow(Show.intShow).println(b);
-
- Array array = Array.array("Welcome", "To", "baeldung");
- Boolean isExist = array.exists(s -> List.fromString(s).forall(Characters.isLowerCase));
- System.out.println(isExist);
-
- Array intArray = Array.array(17, 44, 67, 2, 22, 80, 1, 27);
- int sum = intArray.foldLeft(Integers.add, 0);
- System.out.println(sum);
-
- Option n1 = Option.some(1);
- Option n2 = Option.some(2);
-
- F> f1 = i -> i % 2 == 0 ? Option.some(i + 100) : Option.none();
-
- Option result1 = n1.bind(f1);
- Option result2 = n2.bind(f1);
-
- Show.optionShow(Show.intShow).println(result1);
- Show.optionShow(Show.intShow).println(result2);
- }
-
-}
+package com.baeldung.fj;
+
+import fj.F;
+import fj.Show;
+import fj.data.Array;
+import fj.data.List;
+import fj.data.Option;
+import fj.function.Characters;
+import fj.function.Integers;
+
+public class FunctionalJavaMain {
+
+ public static final F isEven = i -> i % 2 == 0;
+
+ public static void main(String[] args) {
+
+ List fList = List.list(3, 4, 5, 6);
+ List evenList = fList.map(isEven);
+ Show.listShow(Show.booleanShow).println(evenList);
+
+ fList = fList.map(i -> i + 1);
+ Show.listShow(Show.intShow).println(fList);
+
+ Array a = Array.array(17, 44, 67, 2, 22, 80, 1, 27);
+ Array b = a.filter(Integers.even);
+ Show.arrayShow(Show.intShow).println(b);
+
+ Array array = Array.array("Welcome", "To", "baeldung");
+ Boolean isExist = array.exists(s -> List.fromString(s).forall(Characters.isLowerCase));
+ System.out.println(isExist);
+
+ Array intArray = Array.array(17, 44, 67, 2, 22, 80, 1, 27);
+ int sum = intArray.foldLeft(Integers.add, 0);
+ System.out.println(sum);
+
+ Option n1 = Option.some(1);
+ Option n2 = Option.some(2);
+
+ F> f1 = i -> i % 2 == 0 ? Option.some(i + 100) : Option.none();
+
+ Option result1 = n1.bind(f1);
+ Option result2 = n2.bind(f1);
+
+ Show.optionShow(Show.intShow).println(result1);
+ Show.optionShow(Show.intShow).println(result2);
+ }
+
+}
diff --git a/libraries/src/main/java/com/baeldung/ftp/FtpClient.java b/libraries-6/src/main/java/com/baeldung/ftp/FtpClient.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/ftp/FtpClient.java
rename to libraries-6/src/main/java/com/baeldung/ftp/FtpClient.java
diff --git a/libraries/src/main/java/com/baeldung/javapoet/PersonGenerator.java b/libraries-6/src/main/java/com/baeldung/javapoet/PersonGenerator.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/javapoet/PersonGenerator.java
rename to libraries-6/src/main/java/com/baeldung/javapoet/PersonGenerator.java
diff --git a/libraries/src/main/java/com/baeldung/kafka/TransactionalMessageProducer.java b/libraries-6/src/main/java/com/baeldung/kafka/TransactionalMessageProducer.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/kafka/TransactionalMessageProducer.java
rename to libraries-6/src/main/java/com/baeldung/kafka/TransactionalMessageProducer.java
diff --git a/libraries/src/main/java/com/baeldung/kafka/TransactionalWordCount.java b/libraries-6/src/main/java/com/baeldung/kafka/TransactionalWordCount.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/kafka/TransactionalWordCount.java
rename to libraries-6/src/main/java/com/baeldung/kafka/TransactionalWordCount.java
diff --git a/libraries/src/main/java/com/baeldung/kafka/Tuple.java b/libraries-6/src/main/java/com/baeldung/kafka/Tuple.java
similarity index 100%
rename from libraries/src/main/java/com/baeldung/kafka/Tuple.java
rename to libraries-6/src/main/java/com/baeldung/kafka/Tuple.java
diff --git a/libraries/src/main/java/com/baeldung/reflections/ReflectionsApp.java b/libraries-6/src/main/java/com/baeldung/reflections/ReflectionsApp.java
similarity index 97%
rename from libraries/src/main/java/com/baeldung/reflections/ReflectionsApp.java
rename to libraries-6/src/main/java/com/baeldung/reflections/ReflectionsApp.java
index 30da8ea837..4f5b6dd183 100644
--- a/libraries/src/main/java/com/baeldung/reflections/ReflectionsApp.java
+++ b/libraries-6/src/main/java/com/baeldung/reflections/ReflectionsApp.java
@@ -1,71 +1,71 @@
-package com.baeldung.reflections;
-
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Method;
-import java.util.Date;
-import java.util.Set;
-import java.util.regex.Pattern;
-
-import org.reflections.Reflections;
-import org.reflections.scanners.MethodAnnotationsScanner;
-import org.reflections.scanners.MethodParameterScanner;
-import org.reflections.scanners.ResourcesScanner;
-import org.reflections.scanners.Scanner;
-import org.reflections.scanners.SubTypesScanner;
-import org.reflections.util.ClasspathHelper;
-import org.reflections.util.ConfigurationBuilder;
-
-public class ReflectionsApp {
-
- public Set> getReflectionsSubTypes() {
- Reflections reflections = new Reflections("org.reflections");
- Set> scannersSet = reflections.getSubTypesOf(Scanner.class);
- return scannersSet;
- }
-
- public Set> getJDKFunctinalInterfaces() {
- Reflections reflections = new Reflections("java.util.function");
- Set> typesSet = reflections.getTypesAnnotatedWith(FunctionalInterface.class);
- return typesSet;
- }
-
- public Set getDateDeprecatedMethods() {
- Reflections reflections = new Reflections(java.util.Date.class, new MethodAnnotationsScanner());
- Set deprecatedMethodsSet = reflections.getMethodsAnnotatedWith(Deprecated.class);
- return deprecatedMethodsSet;
- }
-
- @SuppressWarnings("rawtypes")
- public Set getDateDeprecatedConstructors() {
- Reflections reflections = new Reflections(java.util.Date.class, new MethodAnnotationsScanner());
- Set constructorsSet = reflections.getConstructorsAnnotatedWith(Deprecated.class);
- return constructorsSet;
- }
-
- public Set getMethodsWithDateParam() {
- Reflections reflections = new Reflections(java.text.SimpleDateFormat.class, new MethodParameterScanner());
- Set methodsSet = reflections.getMethodsMatchParams(Date.class);
- return methodsSet;
- }
-
- public Set getMethodsWithVoidReturn() {
- Reflections reflections = new Reflections(java.text.SimpleDateFormat.class, new MethodParameterScanner());
- Set methodsSet = reflections.getMethodsReturn(void.class);
- return methodsSet;
- }
-
- public Set getPomXmlPaths() {
- Reflections reflections = new Reflections(new ResourcesScanner());
- Set resourcesSet = reflections.getResources(Pattern.compile(".*pom\\.xml"));
- return resourcesSet;
- }
-
- public Set> getReflectionsSubTypesUsingBuilder() {
- Reflections reflections = new Reflections(new ConfigurationBuilder().setUrls(ClasspathHelper.forPackage("org.reflections"))
- .setScanners(new SubTypesScanner()));
-
- Set> scannersSet = reflections.getSubTypesOf(Scanner.class);
- return scannersSet;
- }
-
-}
+package com.baeldung.reflections;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
+import java.util.Date;
+import java.util.Set;
+import java.util.regex.Pattern;
+
+import org.reflections.Reflections;
+import org.reflections.scanners.MethodAnnotationsScanner;
+import org.reflections.scanners.MethodParameterScanner;
+import org.reflections.scanners.ResourcesScanner;
+import org.reflections.scanners.Scanner;
+import org.reflections.scanners.SubTypesScanner;
+import org.reflections.util.ClasspathHelper;
+import org.reflections.util.ConfigurationBuilder;
+
+public class ReflectionsApp {
+
+ public Set> getReflectionsSubTypes() {
+ Reflections reflections = new Reflections("org.reflections");
+ Set> scannersSet = reflections.getSubTypesOf(Scanner.class);
+ return scannersSet;
+ }
+
+ public Set> getJDKFunctinalInterfaces() {
+ Reflections reflections = new Reflections("java.util.function");
+ Set> typesSet = reflections.getTypesAnnotatedWith(FunctionalInterface.class);
+ return typesSet;
+ }
+
+ public Set getDateDeprecatedMethods() {
+ Reflections reflections = new Reflections(java.util.Date.class, new MethodAnnotationsScanner());
+ Set deprecatedMethodsSet = reflections.getMethodsAnnotatedWith(Deprecated.class);
+ return deprecatedMethodsSet;
+ }
+
+ @SuppressWarnings("rawtypes")
+ public Set getDateDeprecatedConstructors() {
+ Reflections reflections = new Reflections(java.util.Date.class, new MethodAnnotationsScanner());
+ Set constructorsSet = reflections.getConstructorsAnnotatedWith(Deprecated.class);
+ return constructorsSet;
+ }
+
+ public Set getMethodsWithDateParam() {
+ Reflections reflections = new Reflections(java.text.SimpleDateFormat.class, new MethodParameterScanner());
+ Set methodsSet = reflections.getMethodsMatchParams(Date.class);
+ return methodsSet;
+ }
+
+ public Set getMethodsWithVoidReturn() {
+ Reflections reflections = new Reflections(java.text.SimpleDateFormat.class, new MethodParameterScanner());
+ Set methodsSet = reflections.getMethodsReturn(void.class);
+ return methodsSet;
+ }
+
+ public Set getPomXmlPaths() {
+ Reflections reflections = new Reflections(new ResourcesScanner());
+ Set resourcesSet = reflections.getResources(Pattern.compile(".*pom\\.xml"));
+ return resourcesSet;
+ }
+
+ public Set> getReflectionsSubTypesUsingBuilder() {
+ Reflections reflections = new Reflections(new ConfigurationBuilder().setUrls(ClasspathHelper.forPackage("org.reflections"))
+ .setScanners(new SubTypesScanner()));
+
+ Set> scannersSet = reflections.getSubTypesOf(Scanner.class);
+ return scannersSet;
+ }
+
+}
diff --git a/libraries/src/test/java/com/baeldung/fj/FunctionalJavaUnitTest.java b/libraries-6/src/test/java/com/baeldung/fj/FunctionalJavaUnitTest.java
similarity index 95%
rename from libraries/src/test/java/com/baeldung/fj/FunctionalJavaUnitTest.java
rename to libraries-6/src/test/java/com/baeldung/fj/FunctionalJavaUnitTest.java
index 97ead07470..f79d334b23 100644
--- a/libraries/src/test/java/com/baeldung/fj/FunctionalJavaUnitTest.java
+++ b/libraries-6/src/test/java/com/baeldung/fj/FunctionalJavaUnitTest.java
@@ -4,6 +4,7 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
+import org.junit.Assert;
import org.junit.Test;
import fj.F;
@@ -96,9 +97,9 @@ public class FunctionalJavaUnitTest {
Option result2 = n2.bind(function);
Option result3 = n3.bind(function);
- assertEquals(Option.none(), result1);
- assertEquals(Option.some(102), result2);
- assertEquals(Option.none(), result3);
+ Assert.assertEquals(Option.none(), result1);
+ Assert.assertEquals(Option.some(102), result2);
+ Assert.assertEquals(Option.none(), result3);
}
@Test
diff --git a/libraries/src/test/java/com/baeldung/ftp/FtpClientIntegrationTest.java b/libraries-6/src/test/java/com/baeldung/ftp/FtpClientIntegrationTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/ftp/FtpClientIntegrationTest.java
rename to libraries-6/src/test/java/com/baeldung/ftp/FtpClientIntegrationTest.java
diff --git a/libraries/src/test/java/com/baeldung/ftp/JdkFtpClientIntegrationTest.java b/libraries-6/src/test/java/com/baeldung/ftp/JdkFtpClientIntegrationTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/ftp/JdkFtpClientIntegrationTest.java
rename to libraries-6/src/test/java/com/baeldung/ftp/JdkFtpClientIntegrationTest.java
diff --git a/libraries/src/test/java/com/baeldung/javapoet/test/PersonGeneratorUnitTest.java b/libraries-6/src/test/java/com/baeldung/javapoet/test/PersonGeneratorUnitTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/javapoet/test/PersonGeneratorUnitTest.java
rename to libraries-6/src/test/java/com/baeldung/javapoet/test/PersonGeneratorUnitTest.java
diff --git a/libraries/src/test/java/com/baeldung/javapoet/test/person/Gender.java b/libraries-6/src/test/java/com/baeldung/javapoet/test/person/Gender.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/javapoet/test/person/Gender.java
rename to libraries-6/src/test/java/com/baeldung/javapoet/test/person/Gender.java
diff --git a/libraries/src/test/java/com/baeldung/javapoet/test/person/Person.java b/libraries-6/src/test/java/com/baeldung/javapoet/test/person/Person.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/javapoet/test/person/Person.java
rename to libraries-6/src/test/java/com/baeldung/javapoet/test/person/Person.java
diff --git a/libraries/src/test/java/com/baeldung/javapoet/test/person/Student.java b/libraries-6/src/test/java/com/baeldung/javapoet/test/person/Student.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/javapoet/test/person/Student.java
rename to libraries-6/src/test/java/com/baeldung/javapoet/test/person/Student.java
diff --git a/libraries/src/test/java/com/baeldung/kafkastreams/KafkaStreamsLiveTest.java b/libraries-6/src/test/java/com/baeldung/kafkastreams/KafkaStreamsLiveTest.java
similarity index 100%
rename from libraries/src/test/java/com/baeldung/kafkastreams/KafkaStreamsLiveTest.java
rename to libraries-6/src/test/java/com/baeldung/kafkastreams/KafkaStreamsLiveTest.java
diff --git a/libraries/src/test/java/com/baeldung/reflections/ReflectionsUnitTest.java b/libraries-6/src/test/java/com/baeldung/reflections/ReflectionsUnitTest.java
similarity index 96%
rename from libraries/src/test/java/com/baeldung/reflections/ReflectionsUnitTest.java
rename to libraries-6/src/test/java/com/baeldung/reflections/ReflectionsUnitTest.java
index 9a3ef0747b..b86094b6f4 100644
--- a/libraries/src/test/java/com/baeldung/reflections/ReflectionsUnitTest.java
+++ b/libraries-6/src/test/java/com/baeldung/reflections/ReflectionsUnitTest.java
@@ -1,50 +1,50 @@
-package com.baeldung.reflections;
-
-import static org.junit.jupiter.api.Assertions.assertFalse;
-
-import org.junit.jupiter.api.Test;
-
-public class ReflectionsUnitTest {
-
- @Test
- public void givenTypeThenGetAllSubTypes() {
- ReflectionsApp reflectionsApp = new ReflectionsApp();
- assertFalse(reflectionsApp.getReflectionsSubTypes()
- .isEmpty());
- }
-
- @Test
- public void givenTypeAndUsingBuilderThenGetAllSubTypes() {
- ReflectionsApp reflectionsApp = new ReflectionsApp();
- assertFalse(reflectionsApp.getReflectionsSubTypesUsingBuilder()
- .isEmpty());
- }
-
- @Test
- public void givenAnnotationThenGetAllAnnotatedMethods() {
- ReflectionsApp reflectionsApp = new ReflectionsApp();
- assertFalse(reflectionsApp.getDateDeprecatedMethods()
- .isEmpty());
- }
-
- @Test
- public void givenAnnotationThenGetAllAnnotatedConstructors() {
- ReflectionsApp reflectionsApp = new ReflectionsApp();
- assertFalse(reflectionsApp.getDateDeprecatedConstructors()
- .isEmpty());
- }
-
- @Test
- public void givenParamTypeThenGetAllMethods() {
- ReflectionsApp reflectionsApp = new ReflectionsApp();
- assertFalse(reflectionsApp.getMethodsWithDateParam()
- .isEmpty());
- }
-
- @Test
- public void givenReturnTypeThenGetAllMethods() {
- ReflectionsApp reflectionsApp = new ReflectionsApp();
- assertFalse(reflectionsApp.getMethodsWithVoidReturn()
- .isEmpty());
- }
-}
+package com.baeldung.reflections;
+
+import static org.junit.jupiter.api.Assertions.assertFalse;
+
+import org.junit.jupiter.api.Test;
+
+public class ReflectionsUnitTest {
+
+ @Test
+ public void givenTypeThenGetAllSubTypes() {
+ ReflectionsApp reflectionsApp = new ReflectionsApp();
+ assertFalse(reflectionsApp.getReflectionsSubTypes()
+ .isEmpty());
+ }
+
+ @Test
+ public void givenTypeAndUsingBuilderThenGetAllSubTypes() {
+ ReflectionsApp reflectionsApp = new ReflectionsApp();
+ assertFalse(reflectionsApp.getReflectionsSubTypesUsingBuilder()
+ .isEmpty());
+ }
+
+ @Test
+ public void givenAnnotationThenGetAllAnnotatedMethods() {
+ ReflectionsApp reflectionsApp = new ReflectionsApp();
+ assertFalse(reflectionsApp.getDateDeprecatedMethods()
+ .isEmpty());
+ }
+
+ @Test
+ public void givenAnnotationThenGetAllAnnotatedConstructors() {
+ ReflectionsApp reflectionsApp = new ReflectionsApp();
+ assertFalse(reflectionsApp.getDateDeprecatedConstructors()
+ .isEmpty());
+ }
+
+ @Test
+ public void givenParamTypeThenGetAllMethods() {
+ ReflectionsApp reflectionsApp = new ReflectionsApp();
+ assertFalse(reflectionsApp.getMethodsWithDateParam()
+ .isEmpty());
+ }
+
+ @Test
+ public void givenReturnTypeThenGetAllMethods() {
+ ReflectionsApp reflectionsApp = new ReflectionsApp();
+ assertFalse(reflectionsApp.getMethodsWithVoidReturn()
+ .isEmpty());
+ }
+}
diff --git a/libraries/src/test/java/com/baeldung/resilience4j/Resilience4jUnitTest.java b/libraries-6/src/test/java/com/baeldung/resilence4j/Resilience4jUnitTest.java
similarity index 99%
rename from libraries/src/test/java/com/baeldung/resilience4j/Resilience4jUnitTest.java
rename to libraries-6/src/test/java/com/baeldung/resilence4j/Resilience4jUnitTest.java
index ced95c99cb..1d69d20bc2 100644
--- a/libraries/src/test/java/com/baeldung/resilience4j/Resilience4jUnitTest.java
+++ b/libraries-6/src/test/java/com/baeldung/resilence4j/Resilience4jUnitTest.java
@@ -1,4 +1,4 @@
-package com.baeldung.resilience4j;
+package com.baeldung.resilence4j;
import io.github.resilience4j.bulkhead.Bulkhead;
import io.github.resilience4j.bulkhead.BulkheadConfig;
diff --git a/libraries/src/test/resources/ftp/baz.txt b/libraries-6/src/test/resources/ftp/baz.txt
similarity index 100%
rename from libraries/src/test/resources/ftp/baz.txt
rename to libraries-6/src/test/resources/ftp/baz.txt
diff --git a/libraries/README.md b/libraries/README.md
index 79ba8fe55d..b61289504c 100644
--- a/libraries/README.md
+++ b/libraries/README.md
@@ -19,30 +19,4 @@ Remember, for advanced libraries like [Jackson](/jackson) and [JUnit](/testing-m
- [Software Transactional Memory in Java Using Multiverse](https://www.baeldung.com/java-multiverse-stm)
- [Locality-Sensitive Hashing in Java Using Java-LSH](https://www.baeldung.com/locality-sensitive-hashing)
- [Introduction to Neuroph](https://www.baeldung.com/neuroph)
-- [Quick Guide to RSS with Rome](https://www.baeldung.com/rome-rss)
-- [Introduction to PCollections](https://www.baeldung.com/java-pcollections)
-- [Introduction to Eclipse Collections](https://www.baeldung.com/eclipse-collections)
-- [DistinctBy in the Java Stream API](https://www.baeldung.com/java-streams-distinct-by)
-- [Introduction to NoException](https://www.baeldung.com/no-exception)
-- [Spring Yarg Integration](https://www.baeldung.com/spring-yarg)
-- [Delete a Directory Recursively in Java](https://www.baeldung.com/java-delete-directory)
-- [Guide to JDeferred](https://www.baeldung.com/jdeferred)
-- [Introduction to MBassador](https://www.baeldung.com/mbassador)
-- [Using Pairs in Java](https://www.baeldung.com/java-pairs)
-- [Introduction to Caffeine](https://www.baeldung.com/java-caching-caffeine)
-- [Introduction to StreamEx](https://www.baeldung.com/streamex)
-- [A Docker Guide for Java](https://www.baeldung.com/docker-java-api)
-- [Introduction to Akka Actors in Java](https://www.baeldung.com/akka-actors-java)
-- [A Guide to Byte Buddy](https://www.baeldung.com/byte-buddy)
-- [Introduction to jOOL](https://www.baeldung.com/jool)
-- [Consumer Driven Contracts with Pact](https://www.baeldung.com/pact-junit-consumer-driven-contracts)
-- [Introduction to Atlassian Fugue](https://www.baeldung.com/java-fugue)
-- [Publish and Receive Messages with Nats Java Client](https://www.baeldung.com/nats-java-client)
-- [Java Concurrency Utility with JCTools](https://www.baeldung.com/java-concurrency-jc-tools)
-- [Introduction to JavaPoet](https://www.baeldung.com/java-poet)
-- [Guide to Resilience4j](https://www.baeldung.com/resilience4j)
-- [Exactly Once Processing in Kafka](https://www.baeldung.com/kafka-exactly-once)
-- [Implementing a FTP-Client in Java](https://www.baeldung.com/java-ftp-client)
-- [Introduction to Functional Java](https://www.baeldung.com/java-functional-library)
-- [A Guide to the Reflections Library](https://www.baeldung.com/reflections-library)
- More articles [[next -->]](/libraries-2)
diff --git a/libraries/pom.xml b/libraries/pom.xml
index 41bc2b9311..fee66f928d 100644
--- a/libraries/pom.xml
+++ b/libraries/pom.xml
@@ -12,18 +12,6 @@
-
-
- com.typesafe.akka
- akka-actor_2.12
- ${typesafe-akka.version}
-
-
- com.typesafe.akka
- akka-testkit_2.12
- ${typesafe-akka.version}
- test
-
org.beykery
@@ -63,18 +51,6 @@
javers-core
${javers.version}
-
-
- io.nats
- jnats
- ${jnats.version}
-
-
-
- rome
- rome
- ${rome.version}
-
net.serenity-bdd
serenity-core
@@ -218,11 +194,6 @@
quartz
${quartz.version}
-
- one.util
- streamex
- ${streamex.version}
-
org.jooq
jool
@@ -245,28 +216,9 @@
${java-lsh.version}
- au.com.dius
- pact-jvm-consumer-junit_2.11
- ${pact.version}
- test
-
-
- org.codehaus.groovy
- groovy-all
-
-
-
-
- org.awaitility
- awaitility
- ${awaitility.version}
- test
-
-
- org.awaitility
- awaitility-proxy
- ${awaitility.version}
- test
+ commons-io
+ commons-io
+ ${commonsio.version}
org.hamcrest
@@ -274,89 +226,12 @@
${org.hamcrest.java-hamcrest.version}
test
-
- net.bytebuddy
- byte-buddy
- ${bytebuddy.version}
-
-
- net.bytebuddy
- byte-buddy-agent
- ${bytebuddy.version}
-
-
- org.pcollections
- pcollections
- ${pcollections.version}
-
-
- com.machinezoo.noexception
- noexception
- ${noexception.version}
-
-
- org.eclipse.collections
- eclipse-collections
- ${eclipse-collections.version}
-
-
- io.vavr
- vavr
- ${vavr.version}
-
-
- com.haulmont.yarg
- yarg
- ${yarg.version}
-
-
- net.engio
- mbassador
- ${mbassador.version}
-
-
- org.jdeferred
- jdeferred-core
- ${jdeferred.version}
-
com.codepoetics
protonpack
${protonpack.version}
-
- org.functionaljava
- functionaljava-java8
- ${functionaljava.version}
-
-
- com.github.ben-manes.caffeine
- caffeine
- ${caffeine.version}
-
-
-
-
- com.github.docker-java
- docker-java
- ${docker.version}
-
-
- org.slf4j
- slf4j-log4j12
-
-
- org.slf4j
- jcl-over-slf4j
-
-
- ch.qos.logback
- logback-classic
-
-
-
-
@@ -364,77 +239,12 @@
google-oauth-client-jetty
${google-api.version}
-
- org.apache.kafka
- kafka-streams
- ${kafka.version}
-
-
- org.apache.kafka
- kafka-clients
- ${kafka.version}
- test
- test
-
-
-
-
- io.atlassian.fugue
- fugue
- ${fugue.version}
-
-
-
- org.jctools
- jctools-core
- ${jctools.version}
-
-
-
-
- io.github.resilience4j
- resilience4j-circuitbreaker
- ${resilience4j.version}
-
-
- io.github.resilience4j
- resilience4j-bulkhead
- ${resilience4j.version}
-
-
- io.github.resilience4j
- resilience4j-retry
- ${resilience4j.version}
-
-
- io.github.resilience4j
- resilience4j-timelimiter
- ${resilience4j.version}
-
-
- com.squareup
- javapoet
- ${javapoet.version}
-
org.hamcrest
hamcrest-all
${hamcrest-all.version}
test
-
-
- org.mockftpserver
- MockFtpServer
- ${mockftpserver.version}
- test
-
-
-
- org.reflections
- reflections
- ${reflections.version}
-
@@ -562,8 +372,6 @@
1.2
3.6.2
3.1.0
- 1.0
-
2.92
1.9.26
1.41.0
@@ -572,26 +380,10 @@
1.1.0
0.10
3.5.0
- 3.0.0
2.0.0.0
- 1.7.1
- 2.1.2
- 1.0
- 8.2.0
- 0.6.5
- 0.9.0
-
1.15
- 2.5.5
1.23.0
- 2.0.0
- 3.0.14
-
0.9.4.0006L
- 2.1.2
- 2.5.11
- 0.12.1
- 1.10.0
1.3
3.2.0-m7
5.1.1
@@ -604,16 +396,9 @@
2.3.0
0.9.12
1.19
- 1.1.0
- 2.0.4
- 1.3.1
- 1.2.6
- 4.8.1
- 4.5.1
3.0.2
- 2.7.1
3.6
- 0.9.11
+ 2.6
diff --git a/maven-all/maven-unused-dependencies/pom.xml b/maven-all/maven-unused-dependencies/pom.xml
new file mode 100644
index 0000000000..825858e481
--- /dev/null
+++ b/maven-all/maven-unused-dependencies/pom.xml
@@ -0,0 +1,47 @@
+
+ 4.0.0
+ com.baeldung
+ maven-unused-dependencies
+ 0.0.1-SNAPSHOT
+
+
+ 3.2.2
+ 1.7.25
+ 3.1.2
+ 3.1
+
+
+
+
+ commons-collections
+ commons-collections
+ ${commons-collections.version}
+
+
+ org.slf4j
+ slf4j-api
+ ${slf4j-api.version}
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ ${maven-compiler-plugin.version}
+
+ 1.8
+ 1.8
+
+
+
+ maven-dependency-plugin
+ ${maven-dependency-plugin.version}
+
+
+
+
+
\ No newline at end of file
diff --git a/maven-all/maven-unused-dependencies/src/main/java/com/baeldung/mavendependencyplugin/UnusedDependenciesExample.java b/maven-all/maven-unused-dependencies/src/main/java/com/baeldung/mavendependencyplugin/UnusedDependenciesExample.java
new file mode 100644
index 0000000000..c9390880ed
--- /dev/null
+++ b/maven-all/maven-unused-dependencies/src/main/java/com/baeldung/mavendependencyplugin/UnusedDependenciesExample.java
@@ -0,0 +1,17 @@
+package com.baeldung.mavendependencyplugin;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class UnusedDependenciesExample {
+
+ /**
+ * When the Maven dependency analyzer analyzes the code, it will see that the slf4j dependency is being used in this method.
+ *
+ * @return the slf4j {@link Logger}.
+ */
+ public Logger getLogger() {
+ return LoggerFactory.getLogger(UnusedDependenciesExample.class);
+ }
+
+}
diff --git a/patterns/solid/src/main/java/com/baeldung/s/TextManipulator.java b/patterns/solid/src/main/java/com/baeldung/s/TextManipulator.java
index a6b32a0ff9..d084a78815 100644
--- a/patterns/solid/src/main/java/com/baeldung/s/TextManipulator.java
+++ b/patterns/solid/src/main/java/com/baeldung/s/TextManipulator.java
@@ -15,16 +15,18 @@ public class TextManipulator {
text = text.concat(newText);
}
- public void findWordAndReplace(String word, String replacementWord) {
+ public String findWordAndReplace(String word, String replacementWord) {
if (text.contains(word)) {
text = text.replace(word, replacementWord);
- } else System.out.println("Word you want to replace is not found in the text");
+ }
+ return text;
}
- public void findWordAndDelete(String word) {
+ public String findWordAndDelete(String word) {
if (text.contains(word)) {
text = text.replace(word, "");
- } else System.out.println("Word you want to delete is not found in the text");
+ }
+ return text;
}
/*
diff --git a/persistence-modules/core-java-persistence/src/main/java/com/baeldung/connectionpool/BasicConnectionPool.java b/persistence-modules/core-java-persistence/src/main/java/com/baeldung/connectionpool/BasicConnectionPool.java
index 289db18c53..22ef0e5411 100644
--- a/persistence-modules/core-java-persistence/src/main/java/com/baeldung/connectionpool/BasicConnectionPool.java
+++ b/persistence-modules/core-java-persistence/src/main/java/com/baeldung/connectionpool/BasicConnectionPool.java
@@ -14,7 +14,8 @@ public class BasicConnectionPool implements ConnectionPool {
private final List connectionPool;
private final List usedConnections = new ArrayList<>();
private static final int INITIAL_POOL_SIZE = 10;
- private final int MAX_POOL_SIZE = 20;
+ private static final int MAX_POOL_SIZE = 20;
+ private static final int MAX_TIMEOUT = 5;
public static BasicConnectionPool create(String url, String user, String password) throws SQLException {
List pool = new ArrayList<>(INITIAL_POOL_SIZE);
@@ -42,6 +43,11 @@ public class BasicConnectionPool implements ConnectionPool {
}
Connection connection = connectionPool.remove(connectionPool.size() - 1);
+
+ if(!connection.isValid(MAX_TIMEOUT)){
+ connection = createConnection(url, user, password);
+ }
+
usedConnections.add(connection);
return connection;
}
diff --git a/persistence-modules/java-mongodb/src/test/java/com/baeldung/bsontojson/BsonToJsonIntegrationTest.java b/persistence-modules/java-mongodb/src/test/java/com/baeldung/bsontojson/BsonToJsonLiveTest.java
similarity index 96%
rename from persistence-modules/java-mongodb/src/test/java/com/baeldung/bsontojson/BsonToJsonIntegrationTest.java
rename to persistence-modules/java-mongodb/src/test/java/com/baeldung/bsontojson/BsonToJsonLiveTest.java
index e382ea4ab2..4e70394069 100644
--- a/persistence-modules/java-mongodb/src/test/java/com/baeldung/bsontojson/BsonToJsonIntegrationTest.java
+++ b/persistence-modules/java-mongodb/src/test/java/com/baeldung/bsontojson/BsonToJsonLiveTest.java
@@ -1,142 +1,142 @@
-package com.baeldung.bsontojson;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-
-import java.sql.Timestamp;
-import java.time.Instant;
-import java.time.LocalDateTime;
-import java.time.format.DateTimeFormatter;
-import java.util.Date;
-import java.util.TimeZone;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import org.bson.Document;
-import org.bson.json.Converter;
-import org.bson.json.JsonMode;
-import org.bson.json.JsonWriterSettings;
-import org.bson.json.StrictJsonWriter;
-import org.bson.types.ObjectId;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.jupiter.api.AfterEach;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.baeldung.morphia.domain.Book;
-import com.baeldung.morphia.domain.Publisher;
-import com.mongodb.MongoClient;
-import com.mongodb.client.MongoDatabase;
-
-import dev.morphia.Datastore;
-import dev.morphia.Morphia;
-
-public class BsonToJsonIntegrationTest {
-
- private static final String DB_NAME = "library";
- private static Datastore datastore;
-
- @BeforeClass
- public static void setUp() {
- Morphia morphia = new Morphia();
- morphia.mapPackage("com.baeldung.morphia");
- datastore = morphia.createDatastore(new MongoClient(), DB_NAME);
- datastore.ensureIndexes();
-
- datastore.save(new Book()
- .setIsbn("isbn")
- .setTitle("title")
- .setAuthor("author")
- .setCost(3.95)
- .setPublisher(new Publisher(new ObjectId("fffffffffffffffffffffffa"),"publisher"))
- .setPublishDate(LocalDateTime.parse("2020-01-01T18:13:32Z", DateTimeFormatter.ISO_DATE_TIME))
- .addCompanionBooks(new Book().setIsbn("isbn2")));
- }
-
- @AfterClass
- public static void tearDown() {
- datastore.delete(datastore.createQuery(Book.class));
- }
-
- @Test
- public void givenBsonDocument_whenUsingStandardJsonTransformation_thenJsonDateIsObjectEpochTime() {
-
- String json = null;
- try (MongoClient mongoClient = new MongoClient()) {
- MongoDatabase mongoDatabase = mongoClient.getDatabase(DB_NAME);
- Document bson = mongoDatabase.getCollection("Books").find().first();
- json = bson.toJson();
- }
-
- String expectedJson = "{\"_id\": \"isbn\", " +
- "\"className\": \"com.baeldung.morphia.domain.Book\", " +
- "\"title\": \"title\", " +
- "\"author\": \"author\", " +
- "\"publisher\": {\"_id\": {\"$oid\": \"fffffffffffffffffffffffa\"}, " +
- "\"name\": \"publisher\"}, " +
- "\"price\": 3.95, " +
- "\"publishDate\": {\"$date\": 1577898812000}}";
-
- assertNotNull(json);
-
- assertEquals(expectedJson, json);
- }
-
-
- @Test
- public void givenBsonDocument_whenUsingRelaxedJsonTransformation_thenJsonDateIsObjectIsoDate() {
-
- String json = null;
- try (MongoClient mongoClient = new MongoClient()) {
- MongoDatabase mongoDatabase = mongoClient.getDatabase(DB_NAME);
- Document bson = mongoDatabase.getCollection("Books").find().first();
- json = bson.toJson(JsonWriterSettings
- .builder()
- .outputMode(JsonMode.RELAXED)
- .build());
- }
-
- String expectedJson = "{\"_id\": \"isbn\", " +
- "\"className\": \"com.baeldung.morphia.domain.Book\", " +
- "\"title\": \"title\", " +
- "\"author\": \"author\", " +
- "\"publisher\": {\"_id\": {\"$oid\": \"fffffffffffffffffffffffa\"}, " +
- "\"name\": \"publisher\"}, " +
- "\"price\": 3.95, " +
- "\"publishDate\": {\"$date\": \"2020-01-01T17:13:32Z\"}}";
-
- assertNotNull(json);
-
- assertEquals(expectedJson, json);
- }
-
- @Test
- public void givenBsonDocument_whenUsingCustomJsonTransformation_thenJsonDateIsStringField() {
-
- String json = null;
- try (MongoClient mongoClient = new MongoClient()) {
- MongoDatabase mongoDatabase = mongoClient.getDatabase(DB_NAME);
- Document bson = mongoDatabase.getCollection("Books").find().first();
- json = bson.toJson(JsonWriterSettings
- .builder()
- .dateTimeConverter(new JsonDateTimeConverter())
- .build());
- }
-
- String expectedJson = "{\"_id\": \"isbn\", " +
- "\"className\": \"com.baeldung.morphia.domain.Book\", " +
- "\"title\": \"title\", " +
- "\"author\": \"author\", " +
- "\"publisher\": {\"_id\": {\"$oid\": \"fffffffffffffffffffffffa\"}, " +
- "\"name\": \"publisher\"}, " +
- "\"price\": 3.95, " +
- "\"publishDate\": \"2020-01-01T17:13:32Z\"}";
-
- assertEquals(expectedJson, json);
-
- }
-
-}
+package com.baeldung.bsontojson;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.sql.Timestamp;
+import java.time.Instant;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.Date;
+import java.util.TimeZone;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.bson.Document;
+import org.bson.json.Converter;
+import org.bson.json.JsonMode;
+import org.bson.json.JsonWriterSettings;
+import org.bson.json.StrictJsonWriter;
+import org.bson.types.ObjectId;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.jupiter.api.AfterEach;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.baeldung.morphia.domain.Book;
+import com.baeldung.morphia.domain.Publisher;
+import com.mongodb.MongoClient;
+import com.mongodb.client.MongoDatabase;
+
+import dev.morphia.Datastore;
+import dev.morphia.Morphia;
+
+public class BsonToJsonLiveTest {
+
+ private static final String DB_NAME = "library";
+ private static Datastore datastore;
+
+ @BeforeClass
+ public static void setUp() {
+ Morphia morphia = new Morphia();
+ morphia.mapPackage("com.baeldung.morphia");
+ datastore = morphia.createDatastore(new MongoClient(), DB_NAME);
+ datastore.ensureIndexes();
+
+ datastore.save(new Book()
+ .setIsbn("isbn")
+ .setTitle("title")
+ .setAuthor("author")
+ .setCost(3.95)
+ .setPublisher(new Publisher(new ObjectId("fffffffffffffffffffffffa"),"publisher"))
+ .setPublishDate(LocalDateTime.parse("2020-01-01T18:13:32Z", DateTimeFormatter.ISO_DATE_TIME))
+ .addCompanionBooks(new Book().setIsbn("isbn2")));
+ }
+
+ @AfterClass
+ public static void tearDown() {
+ datastore.delete(datastore.createQuery(Book.class));
+ }
+
+ @Test
+ public void givenBsonDocument_whenUsingStandardJsonTransformation_thenJsonDateIsObjectEpochTime() {
+
+ String json = null;
+ try (MongoClient mongoClient = new MongoClient()) {
+ MongoDatabase mongoDatabase = mongoClient.getDatabase(DB_NAME);
+ Document bson = mongoDatabase.getCollection("Books").find().first();
+ json = bson.toJson();
+ }
+
+ String expectedJson = "{\"_id\": \"isbn\", " +
+ "\"className\": \"com.baeldung.morphia.domain.Book\", " +
+ "\"title\": \"title\", " +
+ "\"author\": \"author\", " +
+ "\"publisher\": {\"_id\": {\"$oid\": \"fffffffffffffffffffffffa\"}, " +
+ "\"name\": \"publisher\"}, " +
+ "\"price\": 3.95, " +
+ "\"publishDate\": {\"$date\": 1577898812000}}";
+
+ assertNotNull(json);
+
+ assertEquals(expectedJson, json);
+ }
+
+
+ @Test
+ public void givenBsonDocument_whenUsingRelaxedJsonTransformation_thenJsonDateIsObjectIsoDate() {
+
+ String json = null;
+ try (MongoClient mongoClient = new MongoClient()) {
+ MongoDatabase mongoDatabase = mongoClient.getDatabase(DB_NAME);
+ Document bson = mongoDatabase.getCollection("Books").find().first();
+ json = bson.toJson(JsonWriterSettings
+ .builder()
+ .outputMode(JsonMode.RELAXED)
+ .build());
+ }
+
+ String expectedJson = "{\"_id\": \"isbn\", " +
+ "\"className\": \"com.baeldung.morphia.domain.Book\", " +
+ "\"title\": \"title\", " +
+ "\"author\": \"author\", " +
+ "\"publisher\": {\"_id\": {\"$oid\": \"fffffffffffffffffffffffa\"}, " +
+ "\"name\": \"publisher\"}, " +
+ "\"price\": 3.95, " +
+ "\"publishDate\": {\"$date\": \"2020-01-01T17:13:32Z\"}}";
+
+ assertNotNull(json);
+
+ assertEquals(expectedJson, json);
+ }
+
+ @Test
+ public void givenBsonDocument_whenUsingCustomJsonTransformation_thenJsonDateIsStringField() {
+
+ String json = null;
+ try (MongoClient mongoClient = new MongoClient()) {
+ MongoDatabase mongoDatabase = mongoClient.getDatabase(DB_NAME);
+ Document bson = mongoDatabase.getCollection("Books").find().first();
+ json = bson.toJson(JsonWriterSettings
+ .builder()
+ .dateTimeConverter(new JsonDateTimeConverter())
+ .build());
+ }
+
+ String expectedJson = "{\"_id\": \"isbn\", " +
+ "\"className\": \"com.baeldung.morphia.domain.Book\", " +
+ "\"title\": \"title\", " +
+ "\"author\": \"author\", " +
+ "\"publisher\": {\"_id\": {\"$oid\": \"fffffffffffffffffffffffa\"}, " +
+ "\"name\": \"publisher\"}, " +
+ "\"price\": 3.95, " +
+ "\"publishDate\": \"2020-01-01T17:13:32Z\"}";
+
+ assertEquals(expectedJson, json);
+
+ }
+
+}
diff --git a/persistence-modules/pom.xml b/persistence-modules/pom.xml
index ec7f0bcec2..78da896861 100644
--- a/persistence-modules/pom.xml
+++ b/persistence-modules/pom.xml
@@ -61,6 +61,7 @@
spring-data-jpa-2
spring-data-jpa-3
spring-data-jpa-4
+ spring-data-jpa-5
spring-data-keyvalue
spring-data-mongodb
spring-data-neo4j
diff --git a/persistence-modules/redis/pom.xml b/persistence-modules/redis/pom.xml
index fffcfbb96b..c9206e5f92 100644
--- a/persistence-modules/redis/pom.xml
+++ b/persistence-modules/redis/pom.xml
@@ -9,16 +9,31 @@
com.baeldung
- persistence-modules
- 1.0.0-SNAPSHOT
+ parent-boot-2
+ 0.0.1-SNAPSHOT
+ ../../parent-boot-2
+
+ org.springframework.boot
+ spring-boot-starter
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-redis
+
+
redis.clients
jedis
- ${jedis.version}
-
+
com.github.kstyrc
embedded-redis
@@ -32,15 +47,12 @@
io.lettuce
lettuce-core
- ${lettuce-core.version}
-
+
-
- 3.2.0
+
0.6
- 3.3.0
- 5.0.1.RELEASE
+ 3.3.0
diff --git a/persistence-modules/redis/src/main/java/com/baeldung/spring/redis/configuration/RedisConfig.java b/persistence-modules/redis/src/main/java/com/baeldung/spring/redis/configuration/RedisConfig.java
new file mode 100644
index 0000000000..ad43ad8159
--- /dev/null
+++ b/persistence-modules/redis/src/main/java/com/baeldung/spring/redis/configuration/RedisConfig.java
@@ -0,0 +1,24 @@
+package com.baeldung.spring.redis.configuration;
+
+import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.core.RedisTemplate;
+
+import com.baeldung.spring.redis.configuration.entity.Book;
+
+@Configuration
+@EnableConfigurationProperties(RedisProperties.class)
+public class RedisConfig {
+
+ @Bean
+ public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory) {
+ RedisTemplate template = new RedisTemplate<>();
+ template.setConnectionFactory(connectionFactory);
+ // Add some specific configuration here. Key serializers, etc.
+ return template;
+ }
+
+}
diff --git a/persistence-modules/redis/src/main/java/com/baeldung/spring/redis/configuration/SpringRedisConfigurationApplication.java b/persistence-modules/redis/src/main/java/com/baeldung/spring/redis/configuration/SpringRedisConfigurationApplication.java
new file mode 100644
index 0000000000..932a6b7478
--- /dev/null
+++ b/persistence-modules/redis/src/main/java/com/baeldung/spring/redis/configuration/SpringRedisConfigurationApplication.java
@@ -0,0 +1,19 @@
+package com.baeldung.spring.redis.configuration;
+
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class SpringRedisConfigurationApplication implements CommandLineRunner {
+
+ public static void main(String[] args) {
+ SpringApplication.run(SpringRedisConfigurationApplication.class, args);
+ }
+
+ @Override
+ public void run(String... args) throws Exception {
+
+ }
+
+}
diff --git a/persistence-modules/redis/src/main/java/com/baeldung/spring/redis/configuration/controller/BooksController.java b/persistence-modules/redis/src/main/java/com/baeldung/spring/redis/configuration/controller/BooksController.java
new file mode 100644
index 0000000000..b3faf030c9
--- /dev/null
+++ b/persistence-modules/redis/src/main/java/com/baeldung/spring/redis/configuration/controller/BooksController.java
@@ -0,0 +1,32 @@
+package com.baeldung.spring.redis.configuration.controller;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.baeldung.spring.redis.configuration.entity.Book;
+import com.baeldung.spring.redis.configuration.repository.BooksRepository;
+
+@RestController
+@RequestMapping("/books")
+public class BooksController {
+
+ @Autowired
+ private BooksRepository repository;
+
+ @PostMapping("/create")
+ public String newBook(@RequestBody Book newBook) {
+ repository.save(newBook);
+ return "Added";
+ }
+
+ @GetMapping("/get/{id}")
+ public Book findOne(@PathVariable Long id) {
+ return repository.findById(id);
+ }
+
+}
diff --git a/persistence-modules/redis/src/main/java/com/baeldung/spring/redis/configuration/entity/Book.java b/persistence-modules/redis/src/main/java/com/baeldung/spring/redis/configuration/entity/Book.java
new file mode 100644
index 0000000000..52d579d4fb
--- /dev/null
+++ b/persistence-modules/redis/src/main/java/com/baeldung/spring/redis/configuration/entity/Book.java
@@ -0,0 +1,46 @@
+package com.baeldung.spring.redis.configuration.entity;
+
+import java.io.Serializable;
+
+public class Book implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ private Long id;
+
+ private String name;
+
+ public Book() {
+ }
+
+ public Book(String name) {
+ this.name = name;
+ }
+
+ public Book(Long id, String name) {
+ this.id = id;
+ this.name = name;
+ }
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @Override
+ public String toString() {
+ return "Book [id=" + id + ", name=" + name + "]";
+ }
+
+}
diff --git a/persistence-modules/redis/src/main/java/com/baeldung/spring/redis/configuration/repository/BooksRepository.java b/persistence-modules/redis/src/main/java/com/baeldung/spring/redis/configuration/repository/BooksRepository.java
new file mode 100644
index 0000000000..a6eba0e742
--- /dev/null
+++ b/persistence-modules/redis/src/main/java/com/baeldung/spring/redis/configuration/repository/BooksRepository.java
@@ -0,0 +1,25 @@
+package com.baeldung.spring.redis.configuration.repository;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Component;
+
+import com.baeldung.spring.redis.configuration.entity.Book;
+
+@Component
+public class BooksRepository {
+
+ @Autowired
+ private RedisTemplate redisTemplate;
+
+ public void save(Book book) {
+ redisTemplate.opsForValue()
+ .set(book.getId(), book);
+ }
+
+ public Book findById(Long id) {
+ return redisTemplate.opsForValue()
+ .get(id);
+ }
+
+}
diff --git a/persistence-modules/redis/src/main/resources/application.properties b/persistence-modules/redis/src/main/resources/application.properties
new file mode 100644
index 0000000000..e3140c4e29
--- /dev/null
+++ b/persistence-modules/redis/src/main/resources/application.properties
@@ -0,0 +1,9 @@
+spring.redis.database=0
+spring.redis.host=localhost
+spring.redis.port=16379
+spring.redis.password=mypass
+spring.redis.timeout=60000
+spring.redis.lettuce.pool.max-active=8
+spring.redis.lettuce.pool.max-idle=8
+spring.redis.lettuce.pool.max-wait=-1
+spring.redis.lettuce.pool.min-idle=0
\ No newline at end of file
diff --git a/persistence-modules/redis/src/test/java/com/baeldung/spring/redis/configuration/controller/BooksControllerUnitTest.java b/persistence-modules/redis/src/test/java/com/baeldung/spring/redis/configuration/controller/BooksControllerUnitTest.java
new file mode 100644
index 0000000000..a5c3340065
--- /dev/null
+++ b/persistence-modules/redis/src/test/java/com/baeldung/spring/redis/configuration/controller/BooksControllerUnitTest.java
@@ -0,0 +1,52 @@
+package com.baeldung.spring.redis.configuration.controller;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.jupiter.api.Assertions.assertSame;
+import static org.mockito.Mockito.when;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Spy;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+import com.baeldung.spring.redis.configuration.entity.Book;
+import com.baeldung.spring.redis.configuration.repository.BooksRepository;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+public class BooksControllerUnitTest {
+
+ @Spy
+ @InjectMocks
+ private BooksController booksController;
+
+ @Mock
+ private BooksRepository booksRepository;
+
+ private static final Long BOOK_ID = 1l;
+ private static final Long OTHER_BOOK_ID = 2l;
+ private static final String BOOK_NAME = "Ulysses";
+ private static final String ADDED = "Added";
+
+ @Test
+ public void whenNewBook_thenCorrect() {
+ assertEquals(ADDED, booksController.newBook(new Book(BOOK_ID, BOOK_NAME)));
+ }
+
+ @Test
+ public void whenFindOneFinds_thenCorrect() {
+ Book book = new Book(BOOK_ID, BOOK_NAME);
+ when(booksRepository.findById(BOOK_ID)).thenReturn(book);
+ assertSame(book, booksController.findOne(BOOK_ID));
+ }
+
+ @Test
+ public void whenFindOneNotFound_thenReturnsNull() {
+ Book book = new Book(BOOK_ID, BOOK_NAME);
+ when(booksRepository.findById(BOOK_ID)).thenReturn(book);
+ assertNull(booksController.findOne(OTHER_BOOK_ID));
+ }
+
+}
diff --git a/persistence-modules/redis/src/test/java/com/baeldung/spring/redis/configuration/repository/BooksRepositoryUnitTest.java b/persistence-modules/redis/src/test/java/com/baeldung/spring/redis/configuration/repository/BooksRepositoryUnitTest.java
new file mode 100644
index 0000000000..1edf9c7e89
--- /dev/null
+++ b/persistence-modules/redis/src/test/java/com/baeldung/spring/redis/configuration/repository/BooksRepositoryUnitTest.java
@@ -0,0 +1,66 @@
+package com.baeldung.spring.redis.configuration.repository;
+
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertSame;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Spy;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.core.ValueOperations;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+import com.baeldung.spring.redis.configuration.entity.Book;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+public class BooksRepositoryUnitTest {
+
+ @Spy
+ @InjectMocks
+ private BooksRepository booksRepository;
+
+ @Mock
+ private RedisTemplate redisTemplate;
+
+ @Mock
+ private ValueOperations valueOperations;
+
+ private static final Long BOOK_ID = 1l;
+ private static final Long OTHER_BOOK_ID = 2l;
+ private static final String BOOK_NAME = "Ulysses";
+
+ @Test
+ public void whenSave_thenCorrect() {
+ Book book = new Book(BOOK_ID, BOOK_NAME);
+ when(redisTemplate.opsForValue()).thenReturn(valueOperations);
+ booksRepository.save(book);
+ verify(redisTemplate, times(1)).opsForValue();
+ verify(valueOperations, times(1)).set(BOOK_ID, book);
+ }
+
+ @Test
+ public void whenFindByIdFound_thenReturnsBook() {
+ Book book = new Book(BOOK_ID, BOOK_NAME);
+ when(redisTemplate.opsForValue()).thenReturn(valueOperations);
+ when(valueOperations.get(BOOK_ID)).thenReturn(book);
+ assertSame(book, booksRepository.findById(BOOK_ID));
+ verify(redisTemplate, times(1)).opsForValue();
+ verify(valueOperations, times(1)).get(BOOK_ID);
+ }
+
+ @Test
+ public void whenFindByIdNotFound_thenReturnsNull() {
+ Book book = new Book(BOOK_ID, BOOK_NAME);
+ when(redisTemplate.opsForValue()).thenReturn(valueOperations);
+ when(valueOperations.get(BOOK_ID)).thenReturn(book);
+ assertNull(booksRepository.findById(OTHER_BOOK_ID));
+ verify(redisTemplate, times(1)).opsForValue();
+ verify(valueOperations, times(1)).get(OTHER_BOOK_ID);
+ }
+
+}
diff --git a/persistence-modules/spring-data-jpa-5/README.md b/persistence-modules/spring-data-jpa-5/README.md
new file mode 100644
index 0000000000..e8f83654df
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-5/README.md
@@ -0,0 +1,13 @@
+### Relevant Articles:
+
+- [Spring JPA @Embedded and @EmbeddedId](TBD)
+
+### Eclipse Config
+After importing the project into Eclipse, you may see the following error:
+"No persistence xml file found in project"
+
+This can be ignored:
+- Project -> Properties -> Java Persistance -> JPA -> Error/Warnings -> Select Ignore on "No persistence xml file found in project"
+Or:
+- Eclipse -> Preferences - Validation - disable the "Build" execution of the JPA Validator
+
diff --git a/persistence-modules/spring-data-jpa-5/pom.xml b/persistence-modules/spring-data-jpa-5/pom.xml
new file mode 100644
index 0000000000..3053384559
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-5/pom.xml
@@ -0,0 +1,37 @@
+
+
+ 4.0.0
+ spring-data-jpa-5
+ spring-data-jpa-5
+
+
+ com.baeldung
+ parent-boot-2
+ 0.0.1-SNAPSHOT
+ ../../parent-boot-2
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-jpa
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-jdbc
+
+
+
+ com.h2database
+ h2
+
+
+
+
diff --git a/persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/composite/BookApplication.java b/persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/composite/BookApplication.java
new file mode 100644
index 0000000000..52f06058aa
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/composite/BookApplication.java
@@ -0,0 +1,12 @@
+package com.baeldung.composite;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class BookApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(BookApplication.class);
+ }
+}
diff --git a/persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/composite/entity/Book.java b/persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/composite/entity/Book.java
new file mode 100644
index 0000000000..e4f1727654
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/composite/entity/Book.java
@@ -0,0 +1,47 @@
+package com.baeldung.composite.entity;
+
+import javax.persistence.EmbeddedId;
+import javax.persistence.Entity;
+
+@Entity
+public class Book {
+
+ @EmbeddedId
+ private BookId id;
+ private String genre;
+ private Integer price;
+
+ public Book() {
+ }
+
+ public Book(String author, String name, String genre, Integer price) {
+ BookId id = new BookId(author, name);
+ this.id = id;
+ this.genre = genre;
+ this.price = price;
+ }
+
+ public BookId getId() {
+ return id;
+ }
+
+ public void setId(BookId id) {
+ this.id = id;
+ }
+
+ public String getGenre() {
+ return genre;
+ }
+
+ public void setGenre(String genre) {
+ this.genre = genre;
+ }
+
+ public Integer getPrice() {
+ return price;
+ }
+
+ public void setPrice(Integer price) {
+ this.price = price;
+ }
+}
diff --git a/persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/composite/entity/BookId.java b/persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/composite/entity/BookId.java
new file mode 100644
index 0000000000..1524452412
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/composite/entity/BookId.java
@@ -0,0 +1,51 @@
+package com.baeldung.composite.entity;
+
+import javax.persistence.Embeddable;
+import java.io.Serializable;
+import java.util.Objects;
+
+@Embeddable
+public class BookId implements Serializable {
+
+ private String author;
+ private String name;
+
+ public BookId() {
+ }
+
+ public BookId(String author, String name) {
+ this.author = author;
+ this.name = name;
+ }
+
+ public String getAuthor() {
+ return author;
+ }
+
+ public void setAuthor(String author) {
+ this.author = author;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o)
+ return true;
+ if (o == null || getClass() != o.getClass())
+ return false;
+ BookId bookId = (BookId) o;
+ return Objects.equals(author, bookId.author) && Objects.equals(name, bookId.name);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(author, name);
+ }
+}
diff --git a/persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/composite/repository/BookRepository.java b/persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/composite/repository/BookRepository.java
new file mode 100644
index 0000000000..d5993eaf79
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/composite/repository/BookRepository.java
@@ -0,0 +1,18 @@
+package com.baeldung.composite.repository;
+
+import com.baeldung.composite.entity.Book;
+import com.baeldung.composite.entity.BookId;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public interface BookRepository extends JpaRepository {
+
+ List findByIdName(String name);
+
+ List findByIdAuthor(String author);
+
+ List findByGenre(String genre);
+}
diff --git a/persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/schemageneration/AccountApplication.java b/persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/schemageneration/AccountApplication.java
new file mode 100644
index 0000000000..547992a6c1
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/schemageneration/AccountApplication.java
@@ -0,0 +1,12 @@
+package com.baeldung.schemageneration;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class AccountApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(AccountApplication.class, args);
+ }
+}
diff --git a/persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/schemageneration/HibernateUtil.java b/persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/schemageneration/HibernateUtil.java
new file mode 100644
index 0000000000..7d69d65705
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/schemageneration/HibernateUtil.java
@@ -0,0 +1,39 @@
+package com.baeldung.schemageneration;
+
+import com.baeldung.schemageneration.model.Account;
+import com.baeldung.schemageneration.model.AccountSetting;
+import org.hibernate.boot.Metadata;
+import org.hibernate.boot.MetadataSources;
+import org.hibernate.boot.registry.StandardServiceRegistry;
+import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
+import org.hibernate.cfg.Environment;
+import org.hibernate.tool.hbm2ddl.SchemaExport;
+import org.hibernate.tool.schema.TargetType;
+
+import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.Map;
+
+public class HibernateUtil {
+
+ /**
+ * Generates database create commands for the specified entities using Hibernate native API, SchemaExport.
+ * Creation commands are exported into the create.sql file.
+ */
+ public static void generateSchema() {
+ Map settings = new HashMap<>();
+ settings.put(Environment.URL, "jdbc:h2:mem:schema");
+
+ StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(settings).build();
+
+ MetadataSources metadataSources = new MetadataSources(serviceRegistry);
+ metadataSources.addAnnotatedClass(Account.class);
+ metadataSources.addAnnotatedClass(AccountSetting.class);
+ Metadata metadata = metadataSources.buildMetadata();
+
+ SchemaExport schemaExport = new SchemaExport();
+ schemaExport.setFormat(true);
+ schemaExport.setOutputFile("create.sql");
+ schemaExport.createOnly(EnumSet.of(TargetType.SCRIPT), metadata);
+ }
+}
diff --git a/persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/schemageneration/model/Account.java b/persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/schemageneration/model/Account.java
new file mode 100644
index 0000000000..785e275e26
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/schemageneration/model/Account.java
@@ -0,0 +1,74 @@
+package com.baeldung.schemageneration.model;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+import javax.persistence.Table;
+import java.util.ArrayList;
+import java.util.List;
+
+@Entity
+@Table(name = "accounts")
+public class Account {
+
+ @Id
+ @GeneratedValue
+ private Long id;
+
+ @Column(nullable = false, length = 100)
+ private String name;
+
+ @Column(name = "email_address")
+ private String emailAddress;
+
+ @OneToMany(mappedBy = "account", cascade = CascadeType.ALL)
+ private List accountSettings = new ArrayList<>();
+
+ public Account() {
+ }
+
+ public Account(String name, String emailAddress) {
+ this.name = name;
+ this.emailAddress = emailAddress;
+ }
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getEmailAddress() {
+ return emailAddress;
+ }
+
+ public void setEmailAddress(String emailAddress) {
+ this.emailAddress = emailAddress;
+ }
+
+ public List getAccountSettings() {
+ return accountSettings;
+ }
+
+ public void setAccountSettings(List accountSettings) {
+ this.accountSettings = accountSettings;
+ }
+
+ public void addAccountSetting(AccountSetting setting) {
+ this.accountSettings.add(setting);
+ setting.setAccount(this);
+ }
+}
diff --git a/persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/schemageneration/model/AccountSetting.java b/persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/schemageneration/model/AccountSetting.java
new file mode 100644
index 0000000000..61e43894a8
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/schemageneration/model/AccountSetting.java
@@ -0,0 +1,68 @@
+package com.baeldung.schemageneration.model;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "account_settings")
+public class AccountSetting {
+
+ @Id
+ @GeneratedValue
+ private Long id;
+
+ @Column(name = "name", nullable = false)
+ private String settingName;
+
+ @Column(name = "value", nullable = false)
+ private String settingValue;
+
+ @ManyToOne()
+ @JoinColumn(name ="account_id", nullable = false)
+ private Account account;
+
+ public AccountSetting() {
+ }
+
+ public AccountSetting(String settingName, String settingValue) {
+ this.settingName = settingName;
+ this.settingValue = settingValue;
+ }
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getSettingName() {
+ return settingName;
+ }
+
+ public void setSettingName(String settingName) {
+ this.settingName = settingName;
+ }
+
+ public String getSettingValue() {
+ return settingValue;
+ }
+
+ public void setSettingValue(String settingValue) {
+ this.settingValue = settingValue;
+ }
+
+ public Account getAccount() {
+ return account;
+ }
+
+ public void setAccount(Account account) {
+ this.account = account;
+ }
+}
diff --git a/persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/schemageneration/repository/AccountRepository.java b/persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/schemageneration/repository/AccountRepository.java
new file mode 100644
index 0000000000..dc57ffe6d3
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/schemageneration/repository/AccountRepository.java
@@ -0,0 +1,8 @@
+package com.baeldung.schemageneration.repository;
+
+import com.baeldung.schemageneration.model.Account;
+import org.springframework.data.repository.CrudRepository;
+
+public interface AccountRepository extends CrudRepository {
+ Account findByName(String name);
+}
diff --git a/persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/schemageneration/repository/AccountSettingRepository.java b/persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/schemageneration/repository/AccountSettingRepository.java
new file mode 100644
index 0000000000..c2b8ff7398
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/schemageneration/repository/AccountSettingRepository.java
@@ -0,0 +1,8 @@
+package com.baeldung.schemageneration.repository;
+
+import com.baeldung.schemageneration.model.AccountSetting;
+import org.springframework.data.repository.CrudRepository;
+
+public interface AccountSettingRepository extends CrudRepository {
+ AccountSetting findByAccountId(Long accountId);
+}
diff --git a/persistence-modules/spring-data-jpa-5/src/main/resources/application.properties b/persistence-modules/spring-data-jpa-5/src/main/resources/application.properties
new file mode 100644
index 0000000000..f55ad438ff
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-5/src/main/resources/application.properties
@@ -0,0 +1,13 @@
+
+spring.datasource.url=jdbc:h2:mem:baeldung
+
+# JPA-Schema-Generation
+# Use below configuration to generate database schema create commands based on the entity models
+# and export them into the create.sql file
+#spring.jpa.properties.javax.persistence.schema-generation.scripts.action=create
+#spring.jpa.properties.javax.persistence.schema-generation.scripts.create-target=create.sql
+#spring.jpa.properties.javax.persistence.schema-generation.scripts.create-source=metadata
+#spring.jpa.properties.hibernate.format_sql=true
+
+spring.jpa.show-sql=true
+
diff --git a/persistence-modules/spring-data-jpa-5/src/test/java/com/baeldung/composite/repository/BookRepositoryIntegrationTest.java b/persistence-modules/spring-data-jpa-5/src/test/java/com/baeldung/composite/repository/BookRepositoryIntegrationTest.java
new file mode 100644
index 0000000000..9d25acbd96
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-5/src/test/java/com/baeldung/composite/repository/BookRepositoryIntegrationTest.java
@@ -0,0 +1,64 @@
+package com.baeldung.composite.repository;
+
+import com.baeldung.composite.BookApplication;
+import com.baeldung.composite.entity.Book;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+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 java.util.Arrays;
+import java.util.List;
+
+import static org.junit.Assert.assertEquals;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = BookApplication.class)
+public class BookRepositoryIntegrationTest {
+
+ public static final String JAVA_101 = "Java101";
+ public static final String JANE = "Jane";
+ public static final String TECH = "Tech";
+ @Autowired
+ BookRepository repository;
+
+ @Before
+ public void setUp() {
+ Book book1 = new Book("John", JAVA_101, TECH, 20);
+ Book book2 = new Book(JANE, JAVA_101, "Arch", 25);
+ Book book3 = new Book(JANE, "Scala101", TECH, 23);
+
+ repository.saveAll(Arrays.asList(book1, book2, book3));
+ }
+
+ @After
+ public void tearDown() {
+ repository.deleteAll();
+ }
+
+ @Test
+ public void testFindByName() {
+ List books = repository.findByIdName(JAVA_101);
+
+ assertEquals(2, books.size());
+ }
+
+ @Test
+ public void testFindByAuthor() {
+ List books = repository.findByIdAuthor(JANE);
+
+ assertEquals(2, books.size());
+ }
+
+ @Test
+ public void testFindByGenre() {
+ List books = repository.findByGenre(TECH);
+
+ assertEquals(2, books.size());
+ }
+}
\ No newline at end of file
diff --git a/persistence-modules/spring-data-jpa-5/src/test/java/com/baeldung/schemageneration/AccountRepositoryIntegrationTest.java b/persistence-modules/spring-data-jpa-5/src/test/java/com/baeldung/schemageneration/AccountRepositoryIntegrationTest.java
new file mode 100644
index 0000000000..86a7671fe4
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-5/src/test/java/com/baeldung/schemageneration/AccountRepositoryIntegrationTest.java
@@ -0,0 +1,72 @@
+package com.baeldung.schemageneration;
+
+import com.baeldung.schemageneration.model.Account;
+import com.baeldung.schemageneration.model.AccountSetting;
+import com.baeldung.schemageneration.repository.AccountRepository;
+import com.baeldung.schemageneration.repository.AccountSettingRepository;
+import org.junit.After;
+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 static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = AccountApplication.class)
+public class AccountRepositoryIntegrationTest {
+
+ private static final String USER_NAME = "Eduard";
+ private static final String USER_EMAIL_ADDRESS = "eduard@gmx.com";
+ private static final String ACCOUNT_SETTING_NAME = "Timezone";
+ private static final String ACCOUNT_SETTING_VALUE = "UTC+02";
+
+ @Autowired
+ private AccountRepository accountRepository;
+
+ @Autowired
+ private AccountSettingRepository accountSettingRepository;
+
+ @After
+ public void tearDown() {
+ accountRepository.deleteAll();
+ }
+
+ @Test
+ public void givenNewAccount_whenSave_thenSuccess() {
+ Account account = new Account(USER_NAME, USER_EMAIL_ADDRESS);
+ accountRepository.save(account);
+
+ assertEquals(1, accountRepository.count());
+ }
+
+ @Test
+ public void givenSavedAccount_whenFindByName_thenFound() {
+ Account account = new Account(USER_NAME, USER_EMAIL_ADDRESS);
+ accountRepository.save(account);
+
+ Account accountFound = accountRepository.findByName(USER_NAME);
+
+ assertNotNull(accountFound);
+ assertEquals(USER_NAME, accountFound.getName());
+ assertEquals(USER_EMAIL_ADDRESS, accountFound.getEmailAddress());
+ }
+
+ @Test
+ public void givenSavedAccount_whenAccountSettingIsAdded_thenPersisted() {
+ Account account = new Account(USER_NAME, USER_EMAIL_ADDRESS);
+ account.addAccountSetting(new AccountSetting(ACCOUNT_SETTING_NAME, ACCOUNT_SETTING_VALUE));
+ accountRepository.save(account);
+
+ Account accountFound = accountRepository.findByName(USER_NAME);
+ assertNotNull(accountFound);
+ AccountSetting accountSetting = accountSettingRepository.findByAccountId(accountFound.getId());
+
+ assertNotNull(accountSetting);
+ assertEquals(ACCOUNT_SETTING_NAME, accountSetting.getSettingName());
+ assertEquals(ACCOUNT_SETTING_VALUE, accountSetting.getSettingValue());
+ }
+
+}
diff --git a/persistence-modules/spring-data-jpa-5/src/test/resources/application-test.properties b/persistence-modules/spring-data-jpa-5/src/test/resources/application-test.properties
new file mode 100644
index 0000000000..e3d39fe1e2
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-5/src/test/resources/application-test.properties
@@ -0,0 +1,3 @@
+spring.jpa.hibernate.ddl-auto=update
+spring.datasource.url=jdbc:h2:mem:baeldung
+
diff --git a/persistence-modules/spring-persistence-simple/pom.xml b/persistence-modules/spring-persistence-simple/pom.xml
index 878c4592f9..7318ec55bd 100644
--- a/persistence-modules/spring-persistence-simple/pom.xml
+++ b/persistence-modules/spring-persistence-simple/pom.xml
@@ -132,13 +132,13 @@
- 5.2.5.RELEASE
+ 5.2.6.RELEASE
5.4.13.Final
8.0.19
1.4.200
- 2.2.6.RELEASE
+ 2.2.7.RELEASE
9.0.0.M26
1.1
4.2.1
diff --git a/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/config/PersistenceConfig.java b/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/config/PersistenceConfig.java
index 80f3ff14c5..cdddbaa787 100644
--- a/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/config/PersistenceConfig.java
+++ b/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/config/PersistenceConfig.java
@@ -11,7 +11,6 @@ import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
-import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.hibernate5.HibernateTransactionManager;
import org.springframework.orm.hibernate5.LocalSessionFactoryBean;
import org.springframework.orm.jpa.JpaTransactionManager;
@@ -26,7 +25,6 @@ import java.util.Properties;
@Configuration
@EnableTransactionManagement
-@EnableJpaRepositories(basePackages = { "com.baeldung.hibernate.dao" }, transactionManagerRef = "jpaTransactionManager")
@EnableJpaAuditing
@PropertySource({ "classpath:persistence-mysql.properties" })
@ComponentScan(basePackages = { "com.baeldung.persistence.dao", "com.baeldung.jpa.dao" })
@@ -97,7 +95,7 @@ public class PersistenceConfig {
return new FooService();
}
- private final Properties hibernateProperties() {
+ private Properties hibernateProperties() {
final Properties hibernateProperties = new Properties();
hibernateProperties.setProperty("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto"));
hibernateProperties.setProperty("hibernate.dialect", env.getProperty("hibernate.dialect"));
diff --git a/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/config/PersistenceJPAConfig.java b/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/config/PersistenceJPAConfig.java
index 06cae493c9..e8a2aefd6b 100644
--- a/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/config/PersistenceJPAConfig.java
+++ b/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/config/PersistenceJPAConfig.java
@@ -8,7 +8,6 @@ import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor;
-import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.JpaVendorAdapter;
@@ -24,7 +23,6 @@ import java.util.Properties;
@EnableTransactionManagement
@PropertySource({ "classpath:persistence-h2.properties" })
@ComponentScan({ "com.baeldung.persistence","com.baeldung.jpa.dao" })
-@EnableJpaRepositories(basePackages = "com.baeldung.jpa.dao")
public class PersistenceJPAConfig {
@Autowired
diff --git a/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/spring/data/persistence/config/PersistenceConfig.java b/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/spring/data/persistence/config/PersistenceConfig.java
index 66b540a692..604923d615 100644
--- a/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/spring/data/persistence/config/PersistenceConfig.java
+++ b/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/spring/data/persistence/config/PersistenceConfig.java
@@ -1,9 +1,6 @@
package com.baeldung.spring.data.persistence.config;
-import java.util.Properties;
-
-import javax.sql.DataSource;
-
+import com.google.common.base.Preconditions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
@@ -19,14 +16,15 @@ import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
-import com.google.common.base.Preconditions;
+import javax.sql.DataSource;
+import java.util.Properties;
@Configuration
@EnableTransactionManagement
@PropertySource({ "classpath:persistence-${envTarget:h2}.properties" })
@ComponentScan({ "com.baeldung.spring.data.persistence" })
-// @ImportResource("classpath*:springDataPersistenceConfig.xml")
-@EnableJpaRepositories(basePackages = { "com.baeldung.spring.data.persistence.dao", "com.baeldung.spring.data.persistence.jpaquery" })
+//@ImportResource("classpath*:*springDataJpaRepositoriesConfig.xml")
+@EnableJpaRepositories("com.baeldung.spring.data.persistence.repository")
public class PersistenceConfig {
@Autowired
@@ -40,10 +38,9 @@ public class PersistenceConfig {
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
final LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(dataSource());
- em.setPackagesToScan(new String[] { "com.baeldung.spring.data.persistence.model" });
+ em.setPackagesToScan("com.baeldung.spring.data.persistence.model");
final HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
- // vendorAdapter.set
em.setJpaVendorAdapter(vendorAdapter);
em.setJpaProperties(additionalProperties());
@@ -78,7 +75,7 @@ public class PersistenceConfig {
final Properties hibernateProperties = new Properties();
hibernateProperties.setProperty("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto"));
hibernateProperties.setProperty("hibernate.dialect", env.getProperty("hibernate.dialect"));
- // hibernateProperties.setProperty("hibernate.globally_quoted_identifiers", "true");
+
return hibernateProperties;
}
diff --git a/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/spring/data/persistence/model/User.java b/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/spring/data/persistence/model/User.java
index 09f1092644..1475eccbf0 100644
--- a/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/spring/data/persistence/model/User.java
+++ b/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/spring/data/persistence/model/User.java
@@ -1,7 +1,6 @@
package com.baeldung.spring.data.persistence.model;
import javax.persistence.*;
-
import java.time.LocalDate;
import java.util.List;
import java.util.Objects;
@@ -13,14 +12,22 @@ public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
+
private String name;
+
private LocalDate creationDate;
+
private LocalDate lastLoginDate;
+
private boolean active;
+
private int age;
+
@Column(unique = true, nullable = false)
private String email;
+
private Integer status;
+
@OneToMany
List possessionList;
@@ -28,7 +35,7 @@ public class User {
super();
}
- public User(String name, LocalDate creationDate,String email, Integer status) {
+ public User(String name, LocalDate creationDate, String email, Integer status) {
this.name = name;
this.creationDate = creationDate;
this.email = email;
@@ -75,7 +82,7 @@ public class User {
public void setAge(final int age) {
this.age = age;
}
-
+
public LocalDate getCreationDate() {
return creationDate;
}
@@ -94,18 +101,18 @@ public class User {
builder.append("User [name=").append(name).append(", id=").append(id).append("]");
return builder.toString();
}
-
+
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
return id == user.id &&
- age == user.age &&
- Objects.equals(name, user.name) &&
- Objects.equals(creationDate, user.creationDate) &&
- Objects.equals(email, user.email) &&
- Objects.equals(status, user.status);
+ age == user.age &&
+ Objects.equals(name, user.name) &&
+ Objects.equals(creationDate, user.creationDate) &&
+ Objects.equals(email, user.email) &&
+ Objects.equals(status, user.status);
}
@Override
diff --git a/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/spring/data/persistence/dao/IFooDao.java b/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/spring/data/persistence/repository/IFooDao.java
similarity index 87%
rename from persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/spring/data/persistence/dao/IFooDao.java
rename to persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/spring/data/persistence/repository/IFooDao.java
index d2b746dc8b..0b750e37e1 100644
--- a/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/spring/data/persistence/dao/IFooDao.java
+++ b/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/spring/data/persistence/repository/IFooDao.java
@@ -1,11 +1,13 @@
-package com.baeldung.spring.data.persistence.dao;
+package com.baeldung.spring.data.persistence.repository;
import com.baeldung.spring.data.persistence.model.Foo;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
+
public interface IFooDao extends JpaRepository {
@Query("SELECT f FROM Foo f WHERE LOWER(f.name) = LOWER(:name)")
Foo retrieveByName(@Param("name") String name);
+
}
diff --git a/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/spring/data/persistence/jpaquery/UserRepository.java b/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/spring/data/persistence/repository/UserRepository.java
similarity index 96%
rename from persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/spring/data/persistence/jpaquery/UserRepository.java
rename to persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/spring/data/persistence/repository/UserRepository.java
index f22970c401..a8e3a536c3 100644
--- a/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/spring/data/persistence/jpaquery/UserRepository.java
+++ b/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/spring/data/persistence/repository/UserRepository.java
@@ -1,9 +1,4 @@
-package com.baeldung.spring.data.persistence.jpaquery;
-
-import java.time.LocalDate;
-import java.util.Collection;
-import java.util.List;
-import java.util.stream.Stream;
+package com.baeldung.spring.data.persistence.repository;
import com.baeldung.spring.data.persistence.model.User;
import org.springframework.data.domain.Page;
@@ -14,13 +9,18 @@ import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
+import java.time.LocalDate;
+import java.util.Collection;
+import java.util.List;
+import java.util.stream.Stream;
+
public interface UserRepository extends JpaRepository, UserRepositoryCustom {
Stream findAllByName(String name);
@Query("SELECT u FROM User u WHERE u.status = 1")
Collection findAllActiveUsers();
-
+
@Query("select u from User u where u.email like '%@gmail.com'")
List findUsersWithGmailAddress();
@@ -74,14 +74,14 @@ public interface UserRepository extends JpaRepository, UserReposi
@Query(value = "INSERT INTO Users (name, age, email, status, active) VALUES (:name, :age, :email, :status, :active)", nativeQuery = true)
@Modifying
void insertUser(@Param("name") String name, @Param("age") Integer age, @Param("email") String email, @Param("status") Integer status, @Param("active") boolean active);
-
+
@Modifying
@Query(value = "UPDATE Users u SET status = ? WHERE u.name = ?", nativeQuery = true)
int updateUserSetStatusForNameNativePostgres(Integer status, String name);
-
+
@Query(value = "SELECT u FROM User u WHERE u.name IN :names")
- List findUserByNameList(@Param("names") Collection names);
-
+ List findUserByNameList(@Param("names") Collection names);
+
void deleteAllByCreationDateAfter(LocalDate date);
@Modifying(clearAutomatically = true, flushAutomatically = true)
diff --git a/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/spring/data/persistence/jpaquery/UserRepositoryCustom.java b/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/spring/data/persistence/repository/UserRepositoryCustom.java
similarity index 85%
rename from persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/spring/data/persistence/jpaquery/UserRepositoryCustom.java
rename to persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/spring/data/persistence/repository/UserRepositoryCustom.java
index 8bfcb93158..77e661bbbe 100644
--- a/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/spring/data/persistence/jpaquery/UserRepositoryCustom.java
+++ b/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/spring/data/persistence/repository/UserRepositoryCustom.java
@@ -1,14 +1,16 @@
-package com.baeldung.spring.data.persistence.jpaquery;
+package com.baeldung.spring.data.persistence.repository;
+
+import com.baeldung.spring.data.persistence.model.User;
import java.util.Collection;
import java.util.List;
import java.util.Set;
import java.util.function.Predicate;
-import com.baeldung.spring.data.persistence.model.User;
-
public interface UserRepositoryCustom {
+
List findUserByEmails(Set emails);
List findAllUsersByPredicates(Collection> predicates);
+
}
diff --git a/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/spring/data/persistence/jpaquery/UserRepositoryCustomImpl.java b/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/spring/data/persistence/repository/UserRepositoryCustomImpl.java
similarity index 85%
rename from persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/spring/data/persistence/jpaquery/UserRepositoryCustomImpl.java
rename to persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/spring/data/persistence/repository/UserRepositoryCustomImpl.java
index f264ca0b44..366b2c54d0 100644
--- a/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/spring/data/persistence/jpaquery/UserRepositoryCustomImpl.java
+++ b/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/spring/data/persistence/repository/UserRepositoryCustomImpl.java
@@ -1,5 +1,10 @@
-package com.baeldung.spring.data.persistence.jpaquery;
+package com.baeldung.spring.data.persistence.repository;
+import com.baeldung.spring.data.persistence.model.User;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.criteria.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
@@ -7,16 +12,6 @@ import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import javax.persistence.EntityManager;
-import javax.persistence.PersistenceContext;
-import javax.persistence.criteria.CriteriaBuilder;
-import javax.persistence.criteria.CriteriaQuery;
-import javax.persistence.criteria.Path;
-import javax.persistence.criteria.Predicate;
-import javax.persistence.criteria.Root;
-
-import com.baeldung.spring.data.persistence.model.User;
-
public class UserRepositoryCustomImpl implements UserRepositoryCustom {
@PersistenceContext
diff --git a/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/spring/data/persistence/service/impl/FooService.java b/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/spring/data/persistence/service/impl/FooService.java
index cd566ba9f6..c1406b8602 100644
--- a/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/spring/data/persistence/service/impl/FooService.java
+++ b/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/spring/data/persistence/service/impl/FooService.java
@@ -2,7 +2,7 @@ package com.baeldung.spring.data.persistence.service.impl;
import com.baeldung.spring.data.persistence.model.Foo;
-import com.baeldung.spring.data.persistence.dao.IFooDao;
+import com.baeldung.spring.data.persistence.repository.IFooDao;
import com.baeldung.spring.data.persistence.service.IFooService;
import com.baeldung.spring.data.persistence.service.common.AbstractService;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/persistence-modules/spring-persistence-simple/src/main/resources/springDataPersistenceConfig.xml b/persistence-modules/spring-persistence-simple/src/main/resources/springDataJpaRepositoriesConfig.xml
similarity index 58%
rename from persistence-modules/spring-persistence-simple/src/main/resources/springDataPersistenceConfig.xml
rename to persistence-modules/spring-persistence-simple/src/main/resources/springDataJpaRepositoriesConfig.xml
index 5ea2d9c05b..91778a17af 100644
--- a/persistence-modules/spring-persistence-simple/src/main/resources/springDataPersistenceConfig.xml
+++ b/persistence-modules/spring-persistence-simple/src/main/resources/springDataJpaRepositoriesConfig.xml
@@ -1,12 +1,13 @@
-
-
+
\ No newline at end of file
diff --git a/persistence-modules/spring-persistence-simple/src/test/java/com/baeldung/spring/data/persistence/jpaquery/UserRepositoryCommon.java b/persistence-modules/spring-persistence-simple/src/test/java/com/baeldung/spring/data/persistence/repository/UserRepositoryCommon.java
similarity index 99%
rename from persistence-modules/spring-persistence-simple/src/test/java/com/baeldung/spring/data/persistence/jpaquery/UserRepositoryCommon.java
rename to persistence-modules/spring-persistence-simple/src/test/java/com/baeldung/spring/data/persistence/repository/UserRepositoryCommon.java
index 5874b3c643..13b5b4357d 100644
--- a/persistence-modules/spring-persistence-simple/src/test/java/com/baeldung/spring/data/persistence/jpaquery/UserRepositoryCommon.java
+++ b/persistence-modules/spring-persistence-simple/src/test/java/com/baeldung/spring/data/persistence/repository/UserRepositoryCommon.java
@@ -1,4 +1,4 @@
-package com.baeldung.spring.data.persistence.jpaquery;
+package com.baeldung.spring.data.persistence.repository;
import com.baeldung.spring.data.persistence.config.PersistenceConfig;
import com.baeldung.spring.data.persistence.model.User;
diff --git a/persistence-modules/spring-persistence-simple/src/test/java/com/baeldung/spring/data/persistence/jpaquery/UserRepositoryIntegrationTest.java b/persistence-modules/spring-persistence-simple/src/test/java/com/baeldung/spring/data/persistence/repository/UserRepositoryIntegrationTest.java
similarity index 94%
rename from persistence-modules/spring-persistence-simple/src/test/java/com/baeldung/spring/data/persistence/jpaquery/UserRepositoryIntegrationTest.java
rename to persistence-modules/spring-persistence-simple/src/test/java/com/baeldung/spring/data/persistence/repository/UserRepositoryIntegrationTest.java
index 3bffb51917..c76e345fdd 100644
--- a/persistence-modules/spring-persistence-simple/src/test/java/com/baeldung/spring/data/persistence/jpaquery/UserRepositoryIntegrationTest.java
+++ b/persistence-modules/spring-persistence-simple/src/test/java/com/baeldung/spring/data/persistence/repository/UserRepositoryIntegrationTest.java
@@ -1,8 +1,4 @@
-package com.baeldung.spring.data.persistence.jpaquery;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-import java.time.LocalDate;
+package com.baeldung.spring.data.persistence.repository;
import com.baeldung.spring.data.persistence.config.PersistenceConfig;
import com.baeldung.spring.data.persistence.model.User;
@@ -14,9 +10,10 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.support.AnnotationConfigContextLoader;
import org.springframework.transaction.annotation.Transactional;
-/**
- * Created by adam.
- */
+import java.time.LocalDate;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = { PersistenceConfig.class }, loader = AnnotationConfigContextLoader.class)
@DirtiesContext
diff --git a/pom.xml b/pom.xml
index 2f4579c999..c6addfa6aa 100644
--- a/pom.xml
+++ b/pom.xml
@@ -811,6 +811,9 @@
jws
libraries
+ libraries-4
+ libraries-5
+ libraries-6
vaadin
vavr
@@ -1012,6 +1015,7 @@
libraries-2
libraries-3
+
libraries-apache-commons
libraries-apache-commons-collections
libraries-apache-commons-io
@@ -1311,6 +1315,9 @@
jws
libraries
+ libraries-4
+ libraries-5
+ libraries-6
vaadin
vavr
diff --git a/spring-5-security/src/main/java/com/baeldung/manuallogout/SimpleSecurityConfiguration.java b/spring-5-security/src/main/java/com/baeldung/manuallogout/SimpleSecurityConfiguration.java
index 63394b64f2..08c2d83b99 100644
--- a/spring-5-security/src/main/java/com/baeldung/manuallogout/SimpleSecurityConfiguration.java
+++ b/spring-5-security/src/main/java/com/baeldung/manuallogout/SimpleSecurityConfiguration.java
@@ -2,14 +2,12 @@ package com.baeldung.manuallogout;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
-import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
+
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
-import org.springframework.security.web.authentication.logout.CookieClearingLogoutHandler;
import org.springframework.security.web.authentication.logout.HeaderWriterLogoutHandler;
import org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler;
-import org.springframework.security.web.authentication.rememberme.AbstractRememberMeServices;
import org.springframework.security.web.header.writers.ClearSiteDataHeaderWriter;
import javax.servlet.http.Cookie;
@@ -26,13 +24,11 @@ public class SimpleSecurityConfiguration {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
- .antMatcher("/basic/**")
- .authorizeRequests(authz -> authz.anyRequest().permitAll())
- .logout(logout -> logout
- .logoutUrl("/basic/basiclogout")
- .addLogoutHandler(new SecurityContextLogoutHandler())
- .addLogoutHandler(new CookieClearingLogoutHandler(AbstractRememberMeServices.SPRING_SECURITY_REMEMBER_ME_COOKIE_KEY))
- );
+ .antMatcher("/basic/**")
+ .authorizeRequests(authz -> authz.anyRequest().permitAll())
+ .logout(logout -> logout
+ .logoutUrl("/basic/basiclogout")
+ );
}
}
@@ -42,20 +38,20 @@ public class SimpleSecurityConfiguration {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
- .antMatcher("/cookies/**")
- .authorizeRequests(authz -> authz.anyRequest().permitAll())
- .logout(logout -> logout
- .logoutUrl("/cookies/cookielogout")
- .addLogoutHandler(new SecurityContextLogoutHandler())
- .addLogoutHandler((request, response, auth) -> {
- for (Cookie cookie : request.getCookies()) {
- String cookieName = cookie.getName();
- Cookie cookieToDelete = new Cookie(cookieName, null);
- cookieToDelete.setMaxAge(0);
- response.addCookie(cookieToDelete);
- }
- }
- ));
+ .antMatcher("/cookies/**")
+ .authorizeRequests(authz -> authz.anyRequest().permitAll())
+ .logout(logout -> logout
+ .logoutUrl("/cookies/cookielogout")
+ .addLogoutHandler(new SecurityContextLogoutHandler())
+ .addLogoutHandler((request, response, auth) -> {
+ for (Cookie cookie : request.getCookies()) {
+ String cookieName = cookie.getName();
+ Cookie cookieToDelete = new Cookie(cookieName, null);
+ cookieToDelete.setMaxAge(0);
+ response.addCookie(cookieToDelete);
+ }
+ })
+ );
}
}
@@ -64,17 +60,17 @@ public class SimpleSecurityConfiguration {
public static class ClearSiteDataHeaderLogoutConfiguration extends WebSecurityConfigurerAdapter {
private static final ClearSiteDataHeaderWriter.Directive[] SOURCE =
- { CACHE, COOKIES, STORAGE, EXECUTION_CONTEXTS };
+ {CACHE, COOKIES, STORAGE, EXECUTION_CONTEXTS};
@Override
protected void configure(HttpSecurity http) throws Exception {
http
- .antMatcher("/csd/**")
- .authorizeRequests(authz -> authz.anyRequest().permitAll())
- .logout(logout -> logout
- .logoutUrl("/csd/csdlogout")
- .addLogoutHandler(new HeaderWriterLogoutHandler(new ClearSiteDataHeaderWriter(SOURCE)))
- );
+ .antMatcher("/csd/**")
+ .authorizeRequests(authz -> authz.anyRequest().permitAll())
+ .logout(logout -> logout
+ .logoutUrl("/csd/csdlogout")
+ .addLogoutHandler(new HeaderWriterLogoutHandler(new ClearSiteDataHeaderWriter(SOURCE)))
+ );
}
}
}
diff --git a/spring-5-security/src/test/java/com/baeldung/manuallogout/ManualLogoutIntegrationTest.java b/spring-5-security/src/test/java/com/baeldung/manuallogout/ManualLogoutIntegrationTest.java
index 09e7daf877..8909dc2620 100644
--- a/spring-5-security/src/test/java/com/baeldung/manuallogout/ManualLogoutIntegrationTest.java
+++ b/spring-5-security/src/test/java/com/baeldung/manuallogout/ManualLogoutIntegrationTest.java
@@ -39,15 +39,10 @@ public class ManualLogoutIntegrationTest {
@Test
public void givenLoggedUserWhenUserLogoutThenSessionClearedAndNecessaryCookieCleared() throws Exception {
- MockHttpServletRequest requestStateAfterLogout = this.mockMvc.perform(post("/basic/basiclogout").secure(true).with(csrf()))
+ this.mockMvc.perform(post("/basic/basiclogout").secure(true).with(csrf()))
.andExpect(status().is3xxRedirection())
.andExpect(unauthenticated())
- .andExpect(cookie().maxAge(AbstractRememberMeServices.SPRING_SECURITY_REMEMBER_ME_COOKIE_KEY, 0))
- .andReturn()
- .getRequest();
-
- HttpSession sessionStateAfterLogout = requestStateAfterLogout.getSession();
- assertNull(sessionStateAfterLogout.getAttribute(ATTRIBUTE_NAME));
+ .andReturn();
}
@WithMockUser(value = "spring")
diff --git a/spring-boot-groovy/src/main/groovy/com/baeldung/app/SpringBootGroovyApplication.groovy b/spring-boot-groovy/src/main/groovy/com/baeldung/app/SpringBootGroovyApplication.groovy
deleted file mode 100644
index 226a2ff53d..0000000000
--- a/spring-boot-groovy/src/main/groovy/com/baeldung/app/SpringBootGroovyApplication.groovy
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.baeldung.app
-
-import org.springframework.boot.SpringApplication
-import org.springframework.boot.autoconfigure.SpringBootApplication
-
-import com.baeldung.app.SpringBootGroovyApplication
-
-@SpringBootApplication
-class SpringBootGroovyApplication {
- static void main(String[] args) {
- SpringApplication.run SpringBootGroovyApplication, args
- }
-}
diff --git a/spring-boot-groovy/src/main/groovy/com/baeldung/app/controller/TodoController.groovy b/spring-boot-groovy/src/main/groovy/com/baeldung/app/controller/TodoController.groovy
deleted file mode 100644
index 02f6d0223b..0000000000
--- a/spring-boot-groovy/src/main/groovy/com/baeldung/app/controller/TodoController.groovy
+++ /dev/null
@@ -1,48 +0,0 @@
-package com.baeldung.app.controller
-
-import org.springframework.beans.factory.annotation.Autowired
-import org.springframework.web.bind.annotation.DeleteMapping
-import org.springframework.web.bind.annotation.GetMapping
-import org.springframework.web.bind.annotation.PathVariable
-import org.springframework.web.bind.annotation.PostMapping
-import org.springframework.web.bind.annotation.PutMapping
-import org.springframework.web.bind.annotation.RequestBody
-import org.springframework.web.bind.annotation.RequestMapping
-import org.springframework.web.bind.annotation.RequestMethod
-import org.springframework.web.bind.annotation.RestController
-
-import com.baeldung.app.entity.Todo
-import com.baeldung.app.service.TodoService
-
-@RestController
-@RequestMapping('todo')
-public class TodoController {
-
- @Autowired
- TodoService todoService
-
- @GetMapping
- List getAllTodoList(){
- todoService.findAll()
- }
-
- @PostMapping
- Todo saveTodo(@RequestBody Todo todo){
- todoService.saveTodo todo
- }
-
- @PutMapping
- Todo updateTodo(@RequestBody Todo todo){
- todoService.updateTodo todo
- }
-
- @DeleteMapping('/{todoId}')
- deleteTodo(@PathVariable Integer todoId){
- todoService.deleteTodo todoId
- }
-
- @GetMapping('/{todoId}')
- Todo getTodoById(@PathVariable Integer todoId){
- todoService.findById todoId
- }
-}
\ No newline at end of file
diff --git a/spring-boot-groovy/src/main/groovy/com/baeldung/app/entity/Todo.groovy b/spring-boot-groovy/src/main/groovy/com/baeldung/app/entity/Todo.groovy
deleted file mode 100644
index 9f1253c5b3..0000000000
--- a/spring-boot-groovy/src/main/groovy/com/baeldung/app/entity/Todo.groovy
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.baeldung.app.entity
-
-import javax.persistence.Column
-import javax.persistence.Entity
-import javax.persistence.GeneratedValue
-import javax.persistence.GenerationType
-import javax.persistence.Id
-import javax.persistence.Table
-
-@Entity
-@Table(name = 'todo')
-class Todo {
- @Id
- @GeneratedValue(strategy = GenerationType.IDENTITY)
- Integer id
-
- @Column
- String task
-
- @Column
- Boolean isCompleted
-
-}
diff --git a/spring-boot-groovy/src/main/groovy/com/baeldung/app/repository/TodoRepository.groovy b/spring-boot-groovy/src/main/groovy/com/baeldung/app/repository/TodoRepository.groovy
deleted file mode 100644
index c0b35cc37d..0000000000
--- a/spring-boot-groovy/src/main/groovy/com/baeldung/app/repository/TodoRepository.groovy
+++ /dev/null
@@ -1,9 +0,0 @@
-package com.baeldung.app.repository
-
-import org.springframework.data.jpa.repository.JpaRepository
-import org.springframework.stereotype.Repository
-
-import com.baeldung.app.entity.Todo
-
-@Repository
-interface TodoRepository extends JpaRepository {}
\ No newline at end of file
diff --git a/spring-boot-groovy/src/main/groovy/com/baeldung/app/service/TodoService.groovy b/spring-boot-groovy/src/main/groovy/com/baeldung/app/service/TodoService.groovy
deleted file mode 100644
index 0a59d93330..0000000000
--- a/spring-boot-groovy/src/main/groovy/com/baeldung/app/service/TodoService.groovy
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.baeldung.app.service
-
-import com.baeldung.app.entity.Todo
-
-interface TodoService {
-
- List findAll()
-
- Todo findById(Integer todoId)
-
- Todo saveTodo(Todo todo)
-
- Todo updateTodo(Todo todo)
-
- Todo deleteTodo(Integer todoId)
-}
diff --git a/spring-boot-groovy/src/main/groovy/com/baeldung/app/service/impl/TodoServiceImpl.groovy b/spring-boot-groovy/src/main/groovy/com/baeldung/app/service/impl/TodoServiceImpl.groovy
deleted file mode 100644
index 6d0ee03a9f..0000000000
--- a/spring-boot-groovy/src/main/groovy/com/baeldung/app/service/impl/TodoServiceImpl.groovy
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.baeldung.app.service.impl
-
-import org.springframework.beans.factory.annotation.Autowired
-import org.springframework.stereotype.Service
-
-import com.baeldung.app.entity.Todo
-import com.baeldung.app.repository.TodoRepository
-import com.baeldung.app.service.TodoService
-
-@Service
-class TodoServiceImpl implements TodoService {
-
- @Autowired
- TodoRepository todoRepository
-
- @Override
- List findAll() {
- todoRepository.findAll()
- }
-
- @Override
- Todo findById(Integer todoId) {
- todoRepository.findById todoId get()
- }
-
- @Override
- Todo saveTodo(Todo todo){
- todoRepository.save todo
- }
-
- @Override
- Todo updateTodo(Todo todo){
- todoRepository.save todo
- }
-
- @Override
- Todo deleteTodo(Integer todoId){
- todoRepository.deleteById todoId
- }
-}
diff --git a/spring-boot-groovy/src/test/groovy/com/baeldung/app/TodoAppUnitTest.groovy b/spring-boot-groovy/src/test/groovy/com/baeldung/app/TodoAppUnitTest.groovy
deleted file mode 100644
index faf2d64ba7..0000000000
--- a/spring-boot-groovy/src/test/groovy/com/baeldung/app/TodoAppUnitTest.groovy
+++ /dev/null
@@ -1,97 +0,0 @@
-package com.baeldung.app
-
-import static org.junit.jupiter.api.Assertions.assertEquals
-import static org.junit.jupiter.api.Assertions.assertTrue
-
-import org.junit.BeforeClass
-import org.junit.Test
-import org.junit.runner.RunWith
-import org.springframework.boot.test.context.SpringBootTest
-import org.springframework.http.HttpStatus
-import org.springframework.http.MediaType
-import org.springframework.test.context.event.annotation.BeforeTestClass
-import org.springframework.test.context.junit4.SpringRunner
-
-import com.baeldung.app.entity.Todo
-
-import io.restassured.RestAssured
-import io.restassured.response.Response
-
-class TodoAppUnitTest {
- static API_ROOT = 'http://localhost:8081/todo'
- static readingTodoId
- static writingTodoId
-
- @BeforeClass
- static void populateDummyData() {
- Todo readingTodo = new Todo(task: 'Reading', isCompleted: false)
- Todo writingTodo = new Todo(task: 'Writing', isCompleted: false)
-
- final Response readingResponse =
- RestAssured.given()
- .contentType(MediaType.APPLICATION_JSON_VALUE)
- .body(readingTodo).post(API_ROOT)
-
- Todo cookingTodoResponse = readingResponse.as Todo.class
- readingTodoId = cookingTodoResponse.getId()
-
- final Response writingResponse =
- RestAssured.given()
- .contentType(MediaType.APPLICATION_JSON_VALUE)
- .body(writingTodo).post(API_ROOT)
-
- Todo writingTodoResponse = writingResponse.as Todo.class
- writingTodoId = writingTodoResponse.getId()
- }
-
- @Test
- void whenGetAllTodoList_thenOk(){
- final Response response = RestAssured.get(API_ROOT)
-
- assertEquals HttpStatus.OK.value(),response.getStatusCode()
- assertTrue response.as(List.class).size() > 0
- }
-
- @Test
- void whenGetTodoById_thenOk(){
- final Response response =
- RestAssured.get("$API_ROOT/$readingTodoId")
-
- assertEquals HttpStatus.OK.value(),response.getStatusCode()
- Todo todoResponse = response.as Todo.class
- assertEquals readingTodoId,todoResponse.getId()
- }
-
- @Test
- void whenUpdateTodoById_thenOk(){
- Todo todo = new Todo(id:readingTodoId, isCompleted: true)
- final Response response =
- RestAssured.given()
- .contentType(MediaType.APPLICATION_JSON_VALUE)
- .body(todo).put(API_ROOT)
-
- assertEquals HttpStatus.OK.value(),response.getStatusCode()
- Todo todoResponse = response.as Todo.class
- assertTrue todoResponse.getIsCompleted()
- }
-
- @Test
- void whenDeleteTodoById_thenOk(){
- final Response response =
- RestAssured.given()
- .delete("$API_ROOT/$writingTodoId")
-
- assertEquals HttpStatus.OK.value(),response.getStatusCode()
- }
-
- @Test
- void whenSaveTodo_thenOk(){
- Todo todo = new Todo(task: 'Blogging', isCompleted: false)
- final Response response =
- RestAssured.given()
- .contentType(MediaType.APPLICATION_JSON_VALUE)
- .body(todo).post(API_ROOT)
-
- assertEquals HttpStatus.OK.value(),response.getStatusCode()
- }
-}
\ No newline at end of file
diff --git a/spring-boot-modules/spring-boot-properties/pom.xml b/spring-boot-modules/spring-boot-properties/pom.xml
index ec05ec1bdc..ef9c084f4c 100644
--- a/spring-boot-modules/spring-boot-properties/pom.xml
+++ b/spring-boot-modules/spring-boot-properties/pom.xml
@@ -128,6 +128,7 @@
4.4.11
@
2.2.4.RELEASE
+ com.baeldung.buildproperties.Application
diff --git a/spring-boot-modules/spring-boot-properties/src/main/java/com/baeldung/configuration/processor/JdbcProperties.java b/spring-boot-modules/spring-boot-properties/src/main/java/com/baeldung/configuration/processor/JdbcProperties.java
new file mode 100644
index 0000000000..bbd193acba
--- /dev/null
+++ b/spring-boot-modules/spring-boot-properties/src/main/java/com/baeldung/configuration/processor/JdbcProperties.java
@@ -0,0 +1,21 @@
+package com.baeldung.configuration.processor;
+
+import org.springframework.boot.context.properties.*;
+import org.springframework.context.annotation.*;
+import org.springframework.beans.factory.annotation.*;
+
+@Configuration
+@ConfigurationProperties(prefix = "com.baeldung")
+public class JdbcProperties {
+
+ @Value("${jdbc.url:jdbc:postgresql:/localhost:5432}")
+ private String jdbcUrl;
+
+ public String getJdbcUrl() {
+ return jdbcUrl;
+ }
+
+ public void setJdbcUrl(String jdbcUrl) {
+ this.jdbcUrl = jdbcUrl;
+ }
+}
\ No newline at end of file
diff --git a/spring-boot-modules/spring-boot-properties/src/main/java/com/baeldung/configuration/processor/PropertyBeanInjection.java b/spring-boot-modules/spring-boot-properties/src/main/java/com/baeldung/configuration/processor/PropertyBeanInjection.java
index 3bcbf41f54..89a8f9458c 100644
--- a/spring-boot-modules/spring-boot-properties/src/main/java/com/baeldung/configuration/processor/PropertyBeanInjection.java
+++ b/spring-boot-modules/spring-boot-properties/src/main/java/com/baeldung/configuration/processor/PropertyBeanInjection.java
@@ -6,16 +6,23 @@ import org.springframework.stereotype.*;
@Component
public class PropertyBeanInjection {
- private final CustomProperties customProperties;
+ private CustomProperties customProperties;
- PropertyBeanInjection(@Autowired CustomProperties customProperties) {
+ private JdbcProperties jdbcProperties;
+
+ PropertyBeanInjection(@Autowired CustomProperties customProperties, @Autowired JdbcProperties jdbcProperties) {
this.customProperties = customProperties;
+ this.jdbcProperties = jdbcProperties;
}
String getUrl() {
return customProperties.getUrl();
}
+ String getJdbcUrl() {
+ return jdbcProperties.getJdbcUrl();
+ }
+
int getTimeoutInMilliseconds() {
return customProperties.getTimeoutInMilliSeconds();
}
diff --git a/spring-boot-modules/spring-boot-properties/src/main/java/com/baeldung/configurationproperties/Database.java b/spring-boot-modules/spring-boot-properties/src/main/java/com/baeldung/configurationproperties/Database.java
new file mode 100644
index 0000000000..990ede35cd
--- /dev/null
+++ b/spring-boot-modules/spring-boot-properties/src/main/java/com/baeldung/configurationproperties/Database.java
@@ -0,0 +1,36 @@
+package com.baeldung.configurationproperties;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+
+@ConfigurationProperties(prefix = "database")
+public class Database {
+
+ String url;
+ String username;
+ String password;
+
+ public String getUrl() {
+ return url;
+ }
+
+ public void setUrl(String url) {
+ this.url = url;
+ }
+
+ public String getUsername() {
+ return username;
+ }
+
+ public void setUsername(String username) {
+ this.username = username;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public void setPassword(String password) {
+ this.password = password;
+ }
+}
\ No newline at end of file
diff --git a/spring-boot-modules/spring-boot-properties/src/main/java/com/baeldung/configurationproperties/DatabaseConfig.java b/spring-boot-modules/spring-boot-properties/src/main/java/com/baeldung/configurationproperties/DatabaseConfig.java
new file mode 100644
index 0000000000..8f17c98f03
--- /dev/null
+++ b/spring-boot-modules/spring-boot-properties/src/main/java/com/baeldung/configurationproperties/DatabaseConfig.java
@@ -0,0 +1,23 @@
+package com.baeldung.configurationproperties;
+
+import org.springframework.core.env.Environment;
+import org.springframework.beans.factory.annotation.*;
+import org.springframework.context.annotation.*;
+
+@Configuration
+public class DatabaseConfig {
+
+ @Autowired private Environment env;
+
+ @Bean(name="dataSource")
+ public Database dataSource() {
+
+ Database dataSource = new Database();
+ dataSource.setUrl(env.getProperty("jdbc.url"));
+ dataSource.setUsername(env.getProperty("database.username"));
+ dataSource.setPassword(env.getProperty("database.password"));
+
+ return dataSource;
+ }
+
+}
\ No newline at end of file
diff --git a/spring-boot-modules/spring-boot-properties/src/main/java/com/baeldung/configurationproperties/DatabaseConfigPropertiesApp.java b/spring-boot-modules/spring-boot-properties/src/main/java/com/baeldung/configurationproperties/DatabaseConfigPropertiesApp.java
new file mode 100644
index 0000000000..bb1c937f60
--- /dev/null
+++ b/spring-boot-modules/spring-boot-properties/src/main/java/com/baeldung/configurationproperties/DatabaseConfigPropertiesApp.java
@@ -0,0 +1,13 @@
+package com.baeldung.configurationproperties;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.ComponentScan;
+
+@SpringBootApplication
+@ComponentScan(basePackageClasses = {Database.class,DatabaseConfig.class})
+public class DatabaseConfigPropertiesApp{
+
+ public static void main(String[]args) {SpringApplication.run(DatabaseConfigPropertiesApp.class,args);}
+
+}
\ No newline at end of file
diff --git a/spring-boot-modules/spring-boot-properties/src/main/java/com/baeldung/properties/spring/PropertyPlaceholderConfig.java b/spring-boot-modules/spring-boot-properties/src/main/java/com/baeldung/properties/spring/PropertyPlaceholderConfig.java
new file mode 100644
index 0000000000..0d1eb4ccf7
--- /dev/null
+++ b/spring-boot-modules/spring-boot-properties/src/main/java/com/baeldung/properties/spring/PropertyPlaceholderConfig.java
@@ -0,0 +1,23 @@
+package com.baeldung.properties.spring;
+
+import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.io.*;
+
+@Configuration
+public class PropertyPlaceholderConfig {
+
+ public PropertyPlaceholderConfig(){
+ super();
+ }
+
+ @Bean
+ public static PropertyPlaceholderConfigurer properties() {
+ PropertyPlaceholderConfigurer ppc = new PropertyPlaceholderConfigurer();
+ Resource[] resources = new ClassPathResource[]{ new ClassPathResource("foo.properties") };
+ ppc.setLocations( resources );
+ ppc.setIgnoreUnresolvablePlaceholders( true );
+ return ppc;
+ }
+}
\ No newline at end of file
diff --git a/spring-boot-modules/spring-boot-properties/src/main/java/com/baeldung/properties/spring/PropertySourcesPlaceholderConfig.java b/spring-boot-modules/spring-boot-properties/src/main/java/com/baeldung/properties/spring/PropertySourcesPlaceholderConfig.java
new file mode 100644
index 0000000000..8ff464e4cf
--- /dev/null
+++ b/spring-boot-modules/spring-boot-properties/src/main/java/com/baeldung/properties/spring/PropertySourcesPlaceholderConfig.java
@@ -0,0 +1,24 @@
+package com.baeldung.properties.spring;
+
+import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.io.*;
+
+@Configuration
+public class PropertySourcesPlaceholderConfig{
+
+ public PropertySourcesPlaceholderConfig(){
+ super();
+ }
+
+ @Bean
+ public static PropertySourcesPlaceholderConfigurer properties(){
+ PropertySourcesPlaceholderConfigurer pspc = new PropertySourcesPlaceholderConfigurer();
+ Resource[] resources = new ClassPathResource[]{ new ClassPathResource("foo.properties") };
+ pspc.setLocations(resources);
+ pspc.setIgnoreUnresolvablePlaceholders(true);
+ return pspc;
+ }
+
+}
\ No newline at end of file
diff --git a/spring-boot-modules/spring-boot-properties/src/main/resources/application.properties b/spring-boot-modules/spring-boot-properties/src/main/resources/application.properties
index d4d1df7abc..af38556f81 100644
--- a/spring-boot-modules/spring-boot-properties/src/main/resources/application.properties
+++ b/spring-boot-modules/spring-boot-properties/src/main/resources/application.properties
@@ -3,6 +3,3 @@ spring.properties.refreshDelay=1000
spring.config.location=file:extra.properties
spring.main.allow-bean-definition-overriding=true
-database.url=jdbc:postgresql:/localhost:5432/instance
-database.username=foo
-database.password=bar
\ No newline at end of file
diff --git a/spring-boot-modules/spring-boot-properties/src/main/resources/configForProperties.xml b/spring-boot-modules/spring-boot-properties/src/main/resources/configForProperties.xml
index d796f791cb..4468bb485f 100644
--- a/spring-boot-modules/spring-boot-properties/src/main/resources/configForProperties.xml
+++ b/spring-boot-modules/spring-boot-properties/src/main/resources/configForProperties.xml
@@ -7,10 +7,14 @@
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd"
>
-
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-boot-modules/spring-boot-properties/src/main/resources/configForPropertyPlaceholderBeans.xml b/spring-boot-modules/spring-boot-properties/src/main/resources/configForPropertyPlaceholderBeans.xml
new file mode 100644
index 0000000000..a296cf5169
--- /dev/null
+++ b/spring-boot-modules/spring-boot-properties/src/main/resources/configForPropertyPlaceholderBeans.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+ classpath:foo.properties
+
+
+
+
+
+
+
+
+ classpath:foo.properties
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-boot-modules/spring-boot-properties/src/main/resources/configuration-processor.properties b/spring-boot-modules/spring-boot-properties/src/main/resources/configuration-processor.properties
new file mode 100644
index 0000000000..b68a4fbda3
--- /dev/null
+++ b/spring-boot-modules/spring-boot-properties/src/main/resources/configuration-processor.properties
@@ -0,0 +1,3 @@
+com.baeldung.url=www.abc.test.com
+com.baeldung.jdbc.url=
+com.baeldung.timeout-in-milli-seconds=2000
diff --git a/spring-boot-modules/spring-boot-properties/src/main/resources/database.properties b/spring-boot-modules/spring-boot-properties/src/main/resources/database.properties
new file mode 100644
index 0000000000..6524ce6109
--- /dev/null
+++ b/spring-boot-modules/spring-boot-properties/src/main/resources/database.properties
@@ -0,0 +1,4 @@
+database.url=jdbc:postgresql:/localhost:5432/instance
+database.username=foo
+database.password=bar
+jdbc.url=jdbc:postgresql:/localhost:5432
\ No newline at end of file
diff --git a/spring-boot-modules/spring-boot-properties/src/main/resources/database.yml b/spring-boot-modules/spring-boot-properties/src/main/resources/database.yml
new file mode 100644
index 0000000000..8404d9411a
--- /dev/null
+++ b/spring-boot-modules/spring-boot-properties/src/main/resources/database.yml
@@ -0,0 +1,5 @@
+database:
+ url: jdbc:postresql:/localhost:5432/instance
+ username: foo
+ password: bar
+secret: foo
\ No newline at end of file
diff --git a/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/configuration/processor/PropertyBeanInjectionUnitTest.java b/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/configuration/processor/PropertyBeanInjectionUnitTest.java
index bdeb6547c3..eb6add2b94 100644
--- a/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/configuration/processor/PropertyBeanInjectionUnitTest.java
+++ b/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/configuration/processor/PropertyBeanInjectionUnitTest.java
@@ -15,6 +15,11 @@ class PropertyBeanInjectionUnitTest {
@Autowired
private PropertyBeanInjection propertyBeanInjection;
+ @Test
+ void checkThatJdbcPropertiesHaveTheCorrectValueFromPropertiesFile() {
+ Assertions.assertEquals("jdbc:postgresql:/localhost:5432", propertyBeanInjection.getJdbcUrl());
+ }
+
@Test
void checkThatCustomPropertiesHaveTheCorrectValueFromPropertiesFile() {
Assertions.assertEquals("www.abc.test.com", propertyBeanInjection.getUrl());
diff --git a/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/configurationproperties/ConfigPropertiesIntegrationTest.java b/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/configurationproperties/ConfigPropertiesIntegrationTest.java
index 141400b1fe..2b0833c387 100644
--- a/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/configurationproperties/ConfigPropertiesIntegrationTest.java
+++ b/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/configurationproperties/ConfigPropertiesIntegrationTest.java
@@ -4,6 +4,7 @@ import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.TestPropertySource;
import org.springframework.test.context.junit4.SpringRunner;
@@ -13,13 +14,17 @@ import com.baeldung.properties.AdditionalProperties;
import com.baeldung.properties.ConfigPropertiesDemoApplication;
@RunWith(SpringRunner.class)
-@SpringBootTest(classes = ConfigPropertiesDemoApplication.class)
-@TestPropertySource("classpath:configprops-test.properties")
+@SpringBootTest(classes = {ConfigPropertiesDemoApplication.class, DatabaseConfigPropertiesApp.class})
+@TestPropertySource(locations = {"classpath:configprops-test.properties", "classpath:database-test.properties"})
public class ConfigPropertiesIntegrationTest {
@Autowired
private ConfigProperties properties;
+ @Autowired
+ @Qualifier("dataSource")
+ private Database databaseProperties;
+
@Autowired
private AdditionalProperties additionalProperties;
@@ -53,4 +58,11 @@ public class ConfigPropertiesIntegrationTest {
Assert.assertTrue(additionalProperties.getUnit().equals("km"));
Assert.assertTrue(additionalProperties.getMax() == 100);
}
+
+ @Test
+ public void whenDatabasePropertyQueriedthenReturnsProperty() {
+ Assert.assertTrue(databaseProperties.getUrl().equals("jdbc:postgresql:/localhost:5432"));
+ Assert.assertTrue(databaseProperties.getUsername().equals("foo"));
+ Assert.assertTrue(databaseProperties.getPassword().equals("bar"));
+ }
}
diff --git a/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/properties/multiple/MultiplePlaceholdersJavaConfigIntegrationTest.java b/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/properties/multiple/MultiplePlaceholdersJavaConfigIntegrationTest.java
new file mode 100644
index 0000000000..8ebda90321
--- /dev/null
+++ b/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/properties/multiple/MultiplePlaceholdersJavaConfigIntegrationTest.java
@@ -0,0 +1,23 @@
+package com.baeldung.properties.multiple;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
+
+import com.baeldung.properties.spring.PropertyPlaceholderConfig;
+import com.baeldung.properties.spring.PropertySourcesPlaceholderConfig;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+@SpringJUnitConfig({PropertyPlaceholderConfig.class, PropertySourcesPlaceholderConfig.class})
+public class MultiplePlaceholdersJavaConfigIntegrationTest {
+
+ @Value("${key.something}")
+ private String something;
+
+
+ @Test
+ public void whenReadInjectedValues_thenGetCorrectValues() {
+ assertThat(something).isEqualTo("val");
+ }
+}
\ No newline at end of file
diff --git a/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/properties/multiple/MultiplePlaceholdersXmlConfigIntegrationTest.java b/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/properties/multiple/MultiplePlaceholdersXmlConfigIntegrationTest.java
new file mode 100644
index 0000000000..b863e2e080
--- /dev/null
+++ b/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/properties/multiple/MultiplePlaceholdersXmlConfigIntegrationTest.java
@@ -0,0 +1,25 @@
+package com.baeldung.properties.multiple;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+
+@SpringJUnitConfig(locations = "classpath:configForPropertyPlaceholderBeans.xml")
+public class MultiplePlaceholdersXmlConfigIntegrationTest {
+
+ @Value("${foo}")
+ private String something;
+
+ @Value("${key.something}")
+ private String something2;
+
+
+ @Test
+ public void whenReadInjectedValues_thenGetCorrectValues() {
+ assertThat(something).isEqualTo("bar");
+ assertThat(something2).isEqualTo("val");
+ }
+}
\ No newline at end of file
diff --git a/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/properties/multiple/MultiplePropertiesXmlConfigIntegrationTest.java b/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/properties/multiple/MultiplePropertiesXmlConfigIntegrationTest.java
index db71e816dd..6827ee1cf1 100644
--- a/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/properties/multiple/MultiplePropertiesXmlConfigIntegrationTest.java
+++ b/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/properties/multiple/MultiplePropertiesXmlConfigIntegrationTest.java
@@ -13,9 +13,12 @@ public class MultiplePropertiesXmlConfigIntegrationTest {
@Value("${key.something2}") private String something2;
+ @Value("${jdbc.url}") private String jdbcUrl;
+
@Test
public void whenReadInjectedValues_thenGetCorrectValues() {
assertThat(something).isEqualTo("val");
assertThat(something2).isEqualTo("val2");
+ assertThat(jdbcUrl).isEqualTo("jdbc:postgresql:/localhost:5432");
}
}
diff --git a/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/test/IntegrationTestSuite.java b/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/test/IntegrationTestSuite.java
index d41d328867..0e0f8f6230 100644
--- a/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/test/IntegrationTestSuite.java
+++ b/spring-boot-modules/spring-boot-properties/src/test/java/com/baeldung/test/IntegrationTestSuite.java
@@ -10,6 +10,8 @@ import com.baeldung.properties.basic.PropertiesWithXmlIntegrationTest;
import com.baeldung.properties.external.ExternalPropertiesWithJavaIntegrationTest;
import com.baeldung.properties.external.ExternalPropertiesWithMultipleXmlsIntegrationTest;
import com.baeldung.properties.external.ExternalPropertiesWithXmlManualTest;
+import com.baeldung.properties.multiple.MultiplePropertiesXmlConfigIntegrationTest;
+import com.baeldung.properties.multiple.MultiplePlaceholdersXmlConfigIntegrationTest;
@RunWith(Suite.class)
@SuiteClasses({ //@formatter:off
@@ -17,8 +19,8 @@ import com.baeldung.properties.external.ExternalPropertiesWithXmlManualTest;
ExternalPropertiesWithJavaIntegrationTest.class,
ExternalPropertiesWithMultipleXmlsIntegrationTest.class,
ExternalPropertiesWithXmlManualTest.class,
- ExtendedPropertiesWithJavaIntegrationTest.class,
- PropertiesWithMultipleXmlsIntegrationTest.class,
+ ExtendedPropertiesWithJavaIntegrationTest.class, MultiplePropertiesXmlConfigIntegrationTest.class,
+ PropertiesWithMultipleXmlsIntegrationTest.class, MultiplePlaceholdersXmlConfigIntegrationTest.class
})// @formatter:on
public final class IntegrationTestSuite {
//
diff --git a/spring-boot-modules/spring-boot-properties/src/test/resources/configuration-processor.properties b/spring-boot-modules/spring-boot-properties/src/test/resources/configuration-processor.properties
index 00369f2eff..b68a4fbda3 100644
--- a/spring-boot-modules/spring-boot-properties/src/test/resources/configuration-processor.properties
+++ b/spring-boot-modules/spring-boot-properties/src/test/resources/configuration-processor.properties
@@ -1,2 +1,3 @@
com.baeldung.url=www.abc.test.com
+com.baeldung.jdbc.url=
com.baeldung.timeout-in-milli-seconds=2000
diff --git a/spring-boot-modules/spring-boot-properties/src/test/resources/database-test.properties b/spring-boot-modules/spring-boot-properties/src/test/resources/database-test.properties
new file mode 100644
index 0000000000..384d0850ab
--- /dev/null
+++ b/spring-boot-modules/spring-boot-properties/src/test/resources/database-test.properties
@@ -0,0 +1,3 @@
+jdbc.url=jdbc:postgresql:/localhost:5432
+database.username=foo
+database.password=bar
diff --git a/spring-caching/src/test/java/com/baeldung/caching/boot/SimpleCacheCustomizerIntegrationTest.java b/spring-caching/src/test/java/com/baeldung/caching/boot/SimpleCacheCustomizerIntegrationTest.java
index 56a4bd4745..3c83065c5c 100644
--- a/spring-caching/src/test/java/com/baeldung/caching/boot/SimpleCacheCustomizerIntegrationTest.java
+++ b/spring-caching/src/test/java/com/baeldung/caching/boot/SimpleCacheCustomizerIntegrationTest.java
@@ -10,7 +10,7 @@ import org.springframework.test.context.junit4.SpringRunner;
import static org.assertj.core.api.Assertions.assertThat;
@RunWith(SpringRunner.class)
-@SpringBootTest
+@SpringBootTest("spring.cache.type=simple")
public class SimpleCacheCustomizerIntegrationTest {
@Autowired
diff --git a/spring-cloud/spring-cloud-aws/README.md b/spring-cloud/spring-cloud-aws/README.md
index bf33728c74..ddcc97420f 100644
--- a/spring-cloud/spring-cloud-aws/README.md
+++ b/spring-cloud/spring-cloud-aws/README.md
@@ -23,7 +23,6 @@ Let's say that the RDS instance is called `spring-cloud-test-db` having the mast
to write the following in `application.properties`:
```
-cloud.aws.rds.spring-cloud-test-db
cloud.aws.rds.spring-cloud-test-db.password=se3retpass
```
Multiple application classes are available under this project. To launch InstanceProfileAwsApplication application, replace `start-class` under `pom.xml`:
diff --git a/spring-cloud/spring-cloud-aws/pom.xml b/spring-cloud/spring-cloud-aws/pom.xml
index abf9363288..2b05020888 100644
--- a/spring-cloud/spring-cloud-aws/pom.xml
+++ b/spring-cloud/spring-cloud-aws/pom.xml
@@ -10,9 +10,9 @@
com.baeldung
- parent-boot-1
+ parent-boot-2
0.0.1-SNAPSHOT
- ../../parent-boot-1
+ ../../parent-boot-2
@@ -43,6 +43,12 @@
org.postgresql
postgresql
+
+
+ mysql
+ mysql-connector-java
+
+
@@ -60,7 +66,7 @@
com.baeldung.spring.cloud.aws.SpringCloudAwsApplication
Dalston.SR4
- 2.0.1.RELEASE
+ 2.2.1.RELEASE
diff --git a/spring-cloud/spring-cloud-aws/src/main/java/com/baeldung/spring/cloud/aws/s3/SpringCloudS3.java b/spring-cloud/spring-cloud-aws/src/main/java/com/baeldung/spring/cloud/aws/s3/SpringCloudS3.java
index cfad6e904f..acfd6d339e 100644
--- a/spring-cloud/spring-cloud-aws/src/main/java/com/baeldung/spring/cloud/aws/s3/SpringCloudS3.java
+++ b/spring-cloud/spring-cloud-aws/src/main/java/com/baeldung/spring/cloud/aws/s3/SpringCloudS3.java
@@ -1,12 +1,5 @@
package com.baeldung.spring.cloud.aws.s3;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.core.io.Resource;
-import org.springframework.core.io.ResourceLoader;
-import org.springframework.core.io.WritableResource;
-import org.springframework.core.io.support.ResourcePatternResolver;
-import org.springframework.stereotype.Component;
-
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
@@ -14,14 +7,29 @@ import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cloud.aws.core.io.s3.PathMatchingSimpleStorageResourcePatternResolver;
+import org.springframework.context.ApplicationContext;
+import org.springframework.core.io.Resource;
+import org.springframework.core.io.ResourceLoader;
+import org.springframework.core.io.WritableResource;
+import org.springframework.core.io.support.ResourcePatternResolver;
+import org.springframework.stereotype.Component;
+
+import com.amazonaws.services.s3.AmazonS3;
+
@Component
public class SpringCloudS3 {
@Autowired
ResourceLoader resourceLoader;
+ private ResourcePatternResolver resourcePatternResolver;
+
@Autowired
- ResourcePatternResolver resourcePatternResolver;
+ public void setupResolver(ApplicationContext applicationContext, AmazonS3 amazonS3) {
+ this.resourcePatternResolver = new PathMatchingSimpleStorageResourcePatternResolver(amazonS3, applicationContext);
+ }
public void downloadS3Object(String s3Url) throws IOException {
Resource resource = resourceLoader.getResource(s3Url);
diff --git a/spring-cloud/spring-cloud-aws/src/main/resources/application.properties b/spring-cloud/spring-cloud-aws/src/main/resources/application.properties
index 690eda13a2..e8139326b9 100644
--- a/spring-cloud/spring-cloud-aws/src/main/resources/application.properties
+++ b/spring-cloud/spring-cloud-aws/src/main/resources/application.properties
@@ -2,7 +2,6 @@ cloud.aws.credentials.accessKey=YourAccessKey
cloud.aws.credentials.secretKey=YourSecretKey
cloud.aws.region.static=us-east-1
-cloud.aws.rds.spring-cloud-test-db
cloud.aws.rds.spring-cloud-test-db.password=se3retpass
# These 3 properties are optional
diff --git a/spring-mvc-java-2/README.md b/spring-mvc-java-2/README.md
index b5d5df3cd4..09c8d8b294 100644
--- a/spring-mvc-java-2/README.md
+++ b/spring-mvc-java-2/README.md
@@ -1,3 +1,6 @@
### Relevant Articles:
- [Cache Headers in Spring MVC](https://www.baeldung.com/spring-mvc-cache-headers)
+- [Working with Date Parameters in Spring](https://www.baeldung.com/spring-date-parameters)
+- [Spring MVC @PathVariable with a dot (.) gets truncated](https://www.baeldung.com/spring-mvc-pathvariable-dot)
+- [A Quick Guide to Spring MVC Matrix Variables](https://www.baeldung.com/spring-mvc-matrix-variables)
\ No newline at end of file
diff --git a/spring-mvc-java-2/pom.xml b/spring-mvc-java-2/pom.xml
index d5b7d087ab..af622321cb 100644
--- a/spring-mvc-java-2/pom.xml
+++ b/spring-mvc-java-2/pom.xml
@@ -7,14 +7,14 @@
0.1-SNAPSHOT
spring-mvc-java-2
war
-
+
com.baeldung
parent-boot-2
0.0.1-SNAPSHOT
../parent-boot-2
-
+
javax.servlet
@@ -26,14 +26,27 @@
spring-webmvc
${spring.mvc.version}
-
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ ${jackson.version}
+
-
+
+
+ spring-mvc-java-2
+
+
+ src/main/resources
+ true
+
+
+
+
4.0.1
5.2.2.RELEASE
-
\ No newline at end of file
diff --git a/spring-mvc-java-2/src/main/java/com/baeldung/cache/WebConfig.java b/spring-mvc-java-2/src/main/java/com/baeldung/cache/CacheWebConfig.java
similarity index 96%
rename from spring-mvc-java-2/src/main/java/com/baeldung/cache/WebConfig.java
rename to spring-mvc-java-2/src/main/java/com/baeldung/cache/CacheWebConfig.java
index 2f07912e80..95367077bd 100644
--- a/spring-mvc-java-2/src/main/java/com/baeldung/cache/WebConfig.java
+++ b/spring-mvc-java-2/src/main/java/com/baeldung/cache/CacheWebConfig.java
@@ -15,7 +15,7 @@ import java.util.concurrent.TimeUnit;
@EnableWebMvc
@Configuration
@ComponentScan(basePackages = {"com.baeldung.cache"})
-public class WebConfig implements WebMvcConfigurer {
+public class CacheWebConfig implements WebMvcConfigurer {
@Override
public void addViewControllers(final ViewControllerRegistry registry) {
diff --git a/spring-mvc-java/src/main/java/com/baeldung/datetime/DateTimeConfig.java b/spring-mvc-java-2/src/main/java/com/baeldung/datetime/DateTimeConfig.java
similarity index 100%
rename from spring-mvc-java/src/main/java/com/baeldung/datetime/DateTimeConfig.java
rename to spring-mvc-java-2/src/main/java/com/baeldung/datetime/DateTimeConfig.java
diff --git a/spring-mvc-java/src/main/java/com/baeldung/datetime/DateTimeController.java b/spring-mvc-java-2/src/main/java/com/baeldung/datetime/DateTimeController.java
similarity index 100%
rename from spring-mvc-java/src/main/java/com/baeldung/datetime/DateTimeController.java
rename to spring-mvc-java-2/src/main/java/com/baeldung/datetime/DateTimeController.java
diff --git a/spring-mvc-java-2/src/main/java/com/baeldung/matrix/config/MatrixWebConfig.java b/spring-mvc-java-2/src/main/java/com/baeldung/matrix/config/MatrixWebConfig.java
new file mode 100644
index 0000000000..489740fd33
--- /dev/null
+++ b/spring-mvc-java-2/src/main/java/com/baeldung/matrix/config/MatrixWebConfig.java
@@ -0,0 +1,18 @@
+package com.baeldung.matrix.config;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.PathMatchConfigurer;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+import org.springframework.web.util.UrlPathHelper;
+
+@Configuration
+public class MatrixWebConfig implements WebMvcConfigurer {
+
+ @Override
+ public void configurePathMatch(PathMatchConfigurer configurer) {
+ final UrlPathHelper urlPathHelper = new UrlPathHelper();
+ urlPathHelper.setRemoveSemicolonContent(false);
+
+ configurer.setUrlPathHelper(urlPathHelper);
+ }
+}
diff --git a/spring-mvc-java/src/main/java/com/baeldung/web/controller/CompanyController.java b/spring-mvc-java-2/src/main/java/com/baeldung/matrix/controller/CompanyController.java
similarity index 81%
rename from spring-mvc-java/src/main/java/com/baeldung/web/controller/CompanyController.java
rename to spring-mvc-java-2/src/main/java/com/baeldung/matrix/controller/CompanyController.java
index af1e729c13..7a21ded026 100644
--- a/spring-mvc-java/src/main/java/com/baeldung/web/controller/CompanyController.java
+++ b/spring-mvc-java-2/src/main/java/com/baeldung/matrix/controller/CompanyController.java
@@ -1,23 +1,16 @@
-package com.baeldung.web.controller;
-
-import java.util.HashMap;
-import java.util.Map;
+package com.baeldung.matrix.controller;
+import com.baeldung.matrix.model.Company;
import org.springframework.http.HttpStatus;
-import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
-import org.springframework.web.bind.annotation.MatrixVariable;
-import org.springframework.web.bind.annotation.ModelAttribute;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
-import com.baeldung.model.Company;
+import java.util.HashMap;
+import java.util.Map;
@Controller
public class CompanyController {
diff --git a/spring-mvc-java/src/main/java/com/baeldung/web/controller/EmployeeController.java b/spring-mvc-java-2/src/main/java/com/baeldung/matrix/controller/EmployeeController.java
similarity index 86%
rename from spring-mvc-java/src/main/java/com/baeldung/web/controller/EmployeeController.java
rename to spring-mvc-java-2/src/main/java/com/baeldung/matrix/controller/EmployeeController.java
index 251287dff8..3f9de2179a 100644
--- a/spring-mvc-java/src/main/java/com/baeldung/web/controller/EmployeeController.java
+++ b/spring-mvc-java-2/src/main/java/com/baeldung/matrix/controller/EmployeeController.java
@@ -1,32 +1,22 @@
-package com.baeldung.web.controller;
+package com.baeldung.matrix.controller;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
+import com.baeldung.matrix.model.Employee;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
-import org.springframework.web.bind.annotation.MatrixVariable;
-import org.springframework.web.bind.annotation.ModelAttribute;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.bind.annotation.SessionAttributes;
+import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
-import com.baeldung.model.Employee;
+import java.util.*;
@SessionAttributes("employees")
@Controller
public class EmployeeController {
- Map employeeMap = new HashMap<>();
+ public Map employeeMap = new HashMap<>();
@ModelAttribute("employees")
public void initEmployees() {
diff --git a/spring-mvc-java/src/main/java/com/baeldung/model/Company.java b/spring-mvc-java-2/src/main/java/com/baeldung/matrix/model/Company.java
similarity index 94%
rename from spring-mvc-java/src/main/java/com/baeldung/model/Company.java
rename to spring-mvc-java-2/src/main/java/com/baeldung/matrix/model/Company.java
index 558507268a..cdf6cb0fd6 100644
--- a/spring-mvc-java/src/main/java/com/baeldung/model/Company.java
+++ b/spring-mvc-java-2/src/main/java/com/baeldung/matrix/model/Company.java
@@ -1,4 +1,4 @@
-package com.baeldung.model;
+package com.baeldung.matrix.model;
public class Company {
diff --git a/spring-mvc-java/src/main/java/com/baeldung/model/Employee.java b/spring-mvc-java-2/src/main/java/com/baeldung/matrix/model/Employee.java
similarity index 97%
rename from spring-mvc-java/src/main/java/com/baeldung/model/Employee.java
rename to spring-mvc-java-2/src/main/java/com/baeldung/matrix/model/Employee.java
index fb0a452219..c3384122b4 100644
--- a/spring-mvc-java/src/main/java/com/baeldung/model/Employee.java
+++ b/spring-mvc-java-2/src/main/java/com/baeldung/matrix/model/Employee.java
@@ -1,4 +1,4 @@
-package com.baeldung.model;
+package com.baeldung.matrix.model;
import javax.xml.bind.annotation.XmlRootElement;
diff --git a/spring-mvc-java/src/main/java/com/baeldung/spring/web/config/CustomWebMvcConfigurationSupport.java b/spring-mvc-java-2/src/main/java/com/baeldung/pathvariable/CustomWebMvcConfigurationSupport.java
similarity index 93%
rename from spring-mvc-java/src/main/java/com/baeldung/spring/web/config/CustomWebMvcConfigurationSupport.java
rename to spring-mvc-java-2/src/main/java/com/baeldung/pathvariable/CustomWebMvcConfigurationSupport.java
index a0dd7358d0..12c208c623 100644
--- a/spring-mvc-java/src/main/java/com/baeldung/spring/web/config/CustomWebMvcConfigurationSupport.java
+++ b/spring-mvc-java-2/src/main/java/com/baeldung/pathvariable/CustomWebMvcConfigurationSupport.java
@@ -1,4 +1,4 @@
-package com.baeldung.spring.web.config;
+package com.baeldung.pathvariable;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.PathMatchConfigurer;
diff --git a/spring-mvc-java/src/main/java/com/baeldung/web/controller/SiteController.java b/spring-mvc-java-2/src/main/java/com/baeldung/pathvariable/SiteController.java
similarity index 69%
rename from spring-mvc-java/src/main/java/com/baeldung/web/controller/SiteController.java
rename to spring-mvc-java-2/src/main/java/com/baeldung/pathvariable/SiteController.java
index 3867380665..493161b0eb 100644
--- a/spring-mvc-java/src/main/java/com/baeldung/web/controller/SiteController.java
+++ b/spring-mvc-java-2/src/main/java/com/baeldung/pathvariable/SiteController.java
@@ -1,27 +1,30 @@
-package com.baeldung.web.controller;
+package com.baeldung.pathvariable;
+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;
+import org.springframework.web.bind.annotation.RestController;
+@RestController
@RequestMapping("/site")
public class SiteController {
- @RequestMapping(value = "/{firstValue}/{secondValue}", method = RequestMethod.GET)
+ @GetMapping("/{firstValue}/{secondValue}")
public String requestWithError(@PathVariable("firstValue") String firstValue,
@PathVariable("secondValue") String secondValue) {
return firstValue + " - " + secondValue;
}
- @RequestMapping(value = "/{firstValue}/{secondValue:.+}", method = RequestMethod.GET)
+ @GetMapping("/{firstValue}/{secondValue:.+}")
public String requestWithRegex(@PathVariable("firstValue") String firstValue,
@PathVariable("secondValue") String secondValue) {
return firstValue + " - " + secondValue;
}
- @RequestMapping(value = "/{firstValue}/{secondValue}/", method = RequestMethod.GET)
+ @GetMapping("/{firstValue}/{secondValue}/")
public String requestWithSlash(@PathVariable("firstValue") String firstValue,
@PathVariable("secondValue") String secondValue) {
diff --git a/spring-mvc-java-2/src/main/webapp/WEB-INF/mvc-servlet.xml b/spring-mvc-java-2/src/main/webapp/WEB-INF/mvc-servlet.xml
new file mode 100644
index 0000000000..00dac5f8cb
--- /dev/null
+++ b/spring-mvc-java-2/src/main/webapp/WEB-INF/mvc-servlet.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+ /WEB-INF/view/
+
+
+ .jsp
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-mvc-java/src/main/webapp/WEB-INF/view/companyHome.jsp b/spring-mvc-java-2/src/main/webapp/WEB-INF/view/companyHome.jsp
similarity index 100%
rename from spring-mvc-java/src/main/webapp/WEB-INF/view/companyHome.jsp
rename to spring-mvc-java-2/src/main/webapp/WEB-INF/view/companyHome.jsp
diff --git a/spring-mvc-java/src/main/webapp/WEB-INF/view/companyView.jsp b/spring-mvc-java-2/src/main/webapp/WEB-INF/view/companyView.jsp
similarity index 100%
rename from spring-mvc-java/src/main/webapp/WEB-INF/view/companyView.jsp
rename to spring-mvc-java-2/src/main/webapp/WEB-INF/view/companyView.jsp
diff --git a/spring-mvc-java/src/main/webapp/WEB-INF/view/employeeHome.jsp b/spring-mvc-java-2/src/main/webapp/WEB-INF/view/employeeHome.jsp
similarity index 100%
rename from spring-mvc-java/src/main/webapp/WEB-INF/view/employeeHome.jsp
rename to spring-mvc-java-2/src/main/webapp/WEB-INF/view/employeeHome.jsp
diff --git a/spring-mvc-java/src/main/webapp/WEB-INF/view/employeeView.jsp b/spring-mvc-java-2/src/main/webapp/WEB-INF/view/employeeView.jsp
similarity index 100%
rename from spring-mvc-java/src/main/webapp/WEB-INF/view/employeeView.jsp
rename to spring-mvc-java-2/src/main/webapp/WEB-INF/view/employeeView.jsp
diff --git a/spring-mvc-java-2/src/main/webapp/WEB-INF/web.xml b/spring-mvc-java-2/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000000..86a24e7646
--- /dev/null
+++ b/spring-mvc-java-2/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,22 @@
+
+
+ Spring MVC Application 2
+
+
+ mvc
+
+ org.springframework.web.servlet.DispatcherServlet
+
+
+ contextConfigLocation
+ /WEB-INF/mvc-servlet.xml
+
+ 1
+
+
+
+ mvc
+ /
+
+
\ No newline at end of file
diff --git a/spring-mvc-java-2/src/test/java/com/baeldung/cache/CacheControlControllerIntegrationTest.java b/spring-mvc-java-2/src/test/java/com/baeldung/cache/CacheControlControllerIntegrationTest.java
index 7acfe5e480..1e34dd182b 100644
--- a/spring-mvc-java-2/src/test/java/com/baeldung/cache/CacheControlControllerIntegrationTest.java
+++ b/spring-mvc-java-2/src/test/java/com/baeldung/cache/CacheControlControllerIntegrationTest.java
@@ -19,7 +19,7 @@ import static org.springframework.http.HttpHeaders.IF_UNMODIFIED_SINCE;
@ExtendWith(SpringExtension.class)
@WebAppConfiguration
-@ContextConfiguration(classes = {WebConfig.class, WebConfig.class})
+@ContextConfiguration(classes = {CacheWebConfig.class, CacheWebConfig.class})
public class CacheControlControllerIntegrationTest {
@Autowired
diff --git a/spring-mvc-java/src/test/java/com/baeldung/web/controller/EmployeeMvcIntegrationTest.java b/spring-mvc-java-2/src/test/java/com/baeldung/matrix/EmployeeMvcIntegrationTest.java
similarity index 81%
rename from spring-mvc-java/src/test/java/com/baeldung/web/controller/EmployeeMvcIntegrationTest.java
rename to spring-mvc-java-2/src/test/java/com/baeldung/matrix/EmployeeMvcIntegrationTest.java
index 86420a5fbd..c061c1efc7 100644
--- a/spring-mvc-java/src/test/java/com/baeldung/web/controller/EmployeeMvcIntegrationTest.java
+++ b/spring-mvc-java-2/src/test/java/com/baeldung/matrix/EmployeeMvcIntegrationTest.java
@@ -1,11 +1,7 @@
-package com.baeldung.web.controller;
-
-import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
-import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.model;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.view;
+package com.baeldung.matrix;
+import com.baeldung.matrix.config.MatrixWebConfig;
+import com.baeldung.matrix.controller.EmployeeController;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -18,11 +14,13 @@ import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;
-import com.baeldung.spring.web.config.WebConfig;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
+import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
-@ContextConfiguration(classes = WebConfig.class)
+@ContextConfiguration(classes = { MatrixWebConfig.class, EmployeeController.class })
public class EmployeeMvcIntegrationTest {
@Autowired
diff --git a/spring-mvc-java/src/test/java/com/baeldung/web/controller/EmployeeNoMvcIntegrationTest.java b/spring-mvc-java-2/src/test/java/com/baeldung/matrix/EmployeeNoMvcIntegrationTest.java
similarity index 86%
rename from spring-mvc-java/src/test/java/com/baeldung/web/controller/EmployeeNoMvcIntegrationTest.java
rename to spring-mvc-java-2/src/test/java/com/baeldung/matrix/EmployeeNoMvcIntegrationTest.java
index e84c20c973..2ca70cc0b9 100644
--- a/spring-mvc-java/src/test/java/com/baeldung/web/controller/EmployeeNoMvcIntegrationTest.java
+++ b/spring-mvc-java-2/src/test/java/com/baeldung/matrix/EmployeeNoMvcIntegrationTest.java
@@ -1,5 +1,8 @@
-package com.baeldung.web.controller;
+package com.baeldung.matrix;
+import com.baeldung.matrix.config.MatrixWebConfig;
+import com.baeldung.matrix.controller.EmployeeController;
+import com.baeldung.matrix.model.Employee;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
@@ -9,12 +12,9 @@ import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
-import com.baeldung.model.Employee;
-import com.baeldung.spring.web.config.WebConfig;
-
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
-@ContextConfiguration(classes = WebConfig.class)
+@ContextConfiguration(classes = { MatrixWebConfig.class, EmployeeController.class })
public class EmployeeNoMvcIntegrationTest {
@Autowired
diff --git a/spring-mvc-java/README.md b/spring-mvc-java/README.md
index f1263860f9..877d92901a 100644
--- a/spring-mvc-java/README.md
+++ b/spring-mvc-java/README.md
@@ -8,12 +8,9 @@ The "REST With Spring" Classes: http://bit.ly/restwithspring
### Relevant Articles:
- [Integration Testing in Spring](https://www.baeldung.com/integration-testing-in-spring)
-- [A Quick Guide to Spring MVC Matrix Variables](https://www.baeldung.com/spring-mvc-matrix-variables)
- [File Upload with Spring MVC](https://www.baeldung.com/spring-file-upload)
- [Introduction to HtmlUnit](https://www.baeldung.com/htmlunit)
- [Upload and Display Excel Files with Spring MVC](https://www.baeldung.com/spring-mvc-excel-files)
- [web.xml vs Initializer with Spring](https://www.baeldung.com/spring-xml-vs-java-config)
-- [Spring MVC @PathVariable with a dot (.) gets truncated](https://www.baeldung.com/spring-mvc-pathvariable-dot)
-- [Working with Date Parameters in Spring](https://www.baeldung.com/spring-date-parameters)
- [A Java Web Application Without a web.xml](https://www.baeldung.com/java-web-app-without-web-xml)
- [Accessing Spring MVC Model Objects in JavaScript](https://www.baeldung.com/spring-mvc-model-objects-js)
diff --git a/spring-mvc-java/pom.xml b/spring-mvc-java/pom.xml
index 079a664a5d..9e3457aa8a 100644
--- a/spring-mvc-java/pom.xml
+++ b/spring-mvc-java/pom.xml
@@ -69,6 +69,12 @@
commons-io
${commons-io.version}
+
+ commons-fileupload
+ commons-fileupload
+ ${commons-fileupload.version}
+
+
@@ -237,6 +243,7 @@
3.5
1.3.2
2.5
+ 1.4
2.2.0
diff --git a/spring-security-modules/spring-security-core/README.md b/spring-security-modules/spring-security-core/README.md
index e42dfecaa0..f28b3abb2b 100644
--- a/spring-security-modules/spring-security-core/README.md
+++ b/spring-security-modules/spring-security-core/README.md
@@ -8,6 +8,7 @@ This module contains articles about core Spring Security
- [Introduction to Spring Method Security](https://www.baeldung.com/spring-security-method-security)
- [Overview and Need for DelegatingFilterProxy in Spring](https://www.baeldung.com/spring-delegating-filter-proxy)
- [Deny Access on Missing @PreAuthorize to Spring Controller Methods](https://www.baeldung.com/spring-deny-access)
+- [Spring Security: Check If a User Has a Role in Java](https://www.baeldung.com/spring-security-check-user-role)
### Build the Project
diff --git a/spring-security-modules/spring-security-core/src/main/java/com/baeldung/app/controller/TaskController.java b/spring-security-modules/spring-security-core/src/main/java/com/baeldung/app/controller/TaskController.java
index 67072b5d61..7e6b2c3d9c 100644
--- a/spring-security-modules/spring-security-core/src/main/java/com/baeldung/app/controller/TaskController.java
+++ b/spring-security-modules/spring-security-core/src/main/java/com/baeldung/app/controller/TaskController.java
@@ -42,62 +42,4 @@ public class TaskController {
return ResponseEntity.ok().body(tasks);
}
-
- /**
- * Example of restricting specific endpoints to specific roles using @PreAuthorize.
- */
- @GetMapping("/manager")
- @PreAuthorize("hasRole('ROLE_MANAGER')")
- public ResponseEntity> getAlManagerTasks() {
- Iterable tasks = taskService.findAll();
-
- return ResponseEntity.ok().body(tasks);
- }
-
- /**
- * Example of restricting specific endpoints to specific roles using SecurityContext.
- */
- @GetMapping("/actuator")
- public ResponseEntity> getAlActuatorTasks() {
- Authentication auth = SecurityContextHolder.getContext().getAuthentication();
- if (auth != null && auth.getAuthorities().stream().anyMatch(a -> a.getAuthority().equals("ACTUATOR")))
- {
- return ResponseEntity.status(HttpStatus.FORBIDDEN).build();
- }
-
- Iterable tasks = taskService.findAll();
-
- return ResponseEntity.ok().body(tasks);
- }
-
- /**
- * Example of restricting specific endpoints to specific roles using UserDetailsService.
- */
- @GetMapping("/admin")
- public ResponseEntity> getAlAdminTasks() {
- if(userDetailsService != null) {
- UserDetails details = userDetailsService.loadUserByUsername("pam");
- if (details != null && details.getAuthorities().stream().anyMatch(a -> a.getAuthority().equals("ADMIN"))) {
- return ResponseEntity.status(HttpStatus.FORBIDDEN).build();
- }
- }
-
- Iterable tasks = taskService.findAll();
-
- return ResponseEntity.ok().body(tasks);
- }
-
- /**
- * Example of restricting specific endpoints to specific roles using HttpServletRequest.
- */
- @GetMapping("/admin2")
- public ResponseEntity> getAlAdminTasksUsingServlet(HttpServletRequest request) {
- if (!request.isUserInRole("ROLE_ADMIN")) {
- return ResponseEntity.status(HttpStatus.FORBIDDEN).build();
- }
-
- Iterable tasks = taskService.findAll();
-
- return ResponseEntity.ok().body(tasks);
- }
}
diff --git a/spring-security-modules/spring-security-core/src/main/java/com/baeldung/checkrolejava/App.java b/spring-security-modules/spring-security-core/src/main/java/com/baeldung/checkrolejava/App.java
new file mode 100644
index 0000000000..357583a572
--- /dev/null
+++ b/spring-security-modules/spring-security-core/src/main/java/com/baeldung/checkrolejava/App.java
@@ -0,0 +1,11 @@
+package com.baeldung.checkrolejava;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class App {
+ public static void main(String[] args) {
+ SpringApplication.run(com.baeldung.app.App.class, args);
+ }
+}
diff --git a/spring-security-modules/spring-security-core/src/main/java/com/baeldung/checkrolejava/UnauthorizedException.java b/spring-security-modules/spring-security-core/src/main/java/com/baeldung/checkrolejava/UnauthorizedException.java
new file mode 100644
index 0000000000..11fe9f9e5f
--- /dev/null
+++ b/spring-security-modules/spring-security-core/src/main/java/com/baeldung/checkrolejava/UnauthorizedException.java
@@ -0,0 +1,8 @@
+package com.baeldung.checkrolejava;
+
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.ResponseStatus;
+
+@ResponseStatus(value = HttpStatus.UNAUTHORIZED)
+public class UnauthorizedException extends RuntimeException {
+}
diff --git a/spring-security-modules/spring-security-core/src/main/java/com/baeldung/checkrolejava/UserController.java b/spring-security-modules/spring-security-core/src/main/java/com/baeldung/checkrolejava/UserController.java
new file mode 100644
index 0000000000..3092e94c7f
--- /dev/null
+++ b/spring-security-modules/spring-security-core/src/main/java/com/baeldung/checkrolejava/UserController.java
@@ -0,0 +1,62 @@
+package com.baeldung.checkrolejava;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.security.core.userdetails.UserDetails;
+import org.springframework.security.core.userdetails.UserDetailsService;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+
+import javax.servlet.http.HttpServletRequest;
+
+@Controller
+public class UserController {
+
+ @Autowired
+ private UserDetailsService userDetailsService;
+
+ @PreAuthorize("hasRole('ROLE_ADMIN')")
+ @GetMapping("/user/{id}")
+ public String getUser(@PathVariable("id") String id) {
+ return "user";
+ }
+
+ @PreAuthorize("hasAnyRole('ROLE_ADMIN','ROLE_MANAGER')")
+ @GetMapping("/users")
+ public String getUsers() {
+ return "users";
+ }
+
+ @GetMapping("v2/user/{id}")
+ public String getUserUsingSecurityContext() {
+ Authentication auth = SecurityContextHolder.getContext().getAuthentication();
+ if (auth != null && auth.getAuthorities().stream().anyMatch(a -> a.getAuthority().equals("ADMIN"))) {
+ return "user";
+ }
+
+ throw new UnauthorizedException();
+ }
+
+ @GetMapping("v2/users")
+ public String getUsersUsingDetailsService() {
+ UserDetails details = userDetailsService.loadUserByUsername("mike");
+ if (details != null && details.getAuthorities().stream()
+ .anyMatch(a -> a.getAuthority().equals("ADMIN"))) {
+ return "users";
+ }
+
+ throw new UnauthorizedException();
+ }
+
+ @GetMapping("v3/users")
+ public String getUsers(HttpServletRequest request) {
+ if (request.isUserInRole("ROLE_ADMIN")) {
+ return "users";
+ }
+
+ throw new UnauthorizedException();
+ }
+}
diff --git a/spring-security-modules/spring-security-mvc-boot-2/src/test/resources/customlogouthandler/application.properties b/spring-security-modules/spring-security-mvc-boot-2/src/test/resources/customlogouthandler/application.properties
index 9edd853f2c..84347c2664 100644
--- a/spring-security-modules/spring-security-mvc-boot-2/src/test/resources/customlogouthandler/application.properties
+++ b/spring-security-modules/spring-security-mvc-boot-2/src/test/resources/customlogouthandler/application.properties
@@ -1,5 +1,4 @@
-spring.datasource.url=jdbc:postgresql://localhost:5432/test
+spring.datasource.driver-class-name=org.h2.Driver
+spring.datasource.url=jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
spring.datasource.username=test
-spring.datasource.password=test
-
-spring.jpa.hibernate.ddl-auto=create
+spring.datasource.password=test
\ No newline at end of file
diff --git a/stripe/pom.xml b/stripe/pom.xml
index 07d2968f5f..48505c9e4e 100644
--- a/stripe/pom.xml
+++ b/stripe/pom.xml
@@ -11,9 +11,9 @@
com.baeldung
- parent-boot-1
+ parent-boot-2
0.0.1-SNAPSHOT
- ../parent-boot-1
+ ../parent-boot-2
@@ -28,9 +28,6 @@
org.projectlombok
lombok
- ${lombok.version}
-
com.stripe
diff --git a/stripe/src/main/java/com/baeldung/stripe/ChargeRequest.java b/stripe/src/main/java/com/baeldung/stripe/ChargeRequest.java
index a5c056b659..190911afb3 100644
--- a/stripe/src/main/java/com/baeldung/stripe/ChargeRequest.java
+++ b/stripe/src/main/java/com/baeldung/stripe/ChargeRequest.java
@@ -13,4 +13,27 @@ public class ChargeRequest {
private Currency currency;
private String stripeEmail;
private String stripeToken;
+ public String getDescription() {
+ return description;
+ }
+ public int getAmount() {
+ return amount;
+ }
+ public Currency getCurrency() {
+ return currency;
+ }
+ public String getStripeEmail() {
+ return stripeEmail;
+ }
+ public String getStripeToken() {
+ return stripeToken;
+ }
+ public void setDescription(String description) {
+ this.description = description;
+ }
+ public void setCurrency(Currency currency) {
+ this.currency = currency;
+ }
+
+
}
diff --git a/stripe/src/main/resources/application.properties b/stripe/src/main/resources/application.properties
new file mode 100644
index 0000000000..f36df33897
--- /dev/null
+++ b/stripe/src/main/resources/application.properties
@@ -0,0 +1,2 @@
+STRIPE_SECRET_KEY=
+STRIPE_PUBLIC_KEY=
\ No newline at end of file
diff --git a/stripe/src/main/resources/static/index.html b/stripe/src/main/resources/static/index.html
index 090a01e91d..d7ba2bef91 100644
--- a/stripe/src/main/resources/static/index.html
+++ b/stripe/src/main/resources/static/index.html
@@ -1,7 +1,7 @@
-
+
diff --git a/testing-modules/pom.xml b/testing-modules/pom.xml
index 951909b36f..b467b3c503 100644
--- a/testing-modules/pom.xml
+++ b/testing-modules/pom.xml
@@ -33,6 +33,7 @@
selenium-junit-testng
spring-testing
test-containers
+ testing-assertions
testng
junit-5-basics
easymock
diff --git a/testing-modules/testing-assertions/pom.xml b/testing-modules/testing-assertions/pom.xml
new file mode 100644
index 0000000000..0a7c4b0860
--- /dev/null
+++ b/testing-modules/testing-assertions/pom.xml
@@ -0,0 +1,28 @@
+
+ 4.0.0
+ testing-assertions
+ 0.0.1-SNAPSHOT
+
+
+ com.baeldung
+ parent-java
+ 0.0.1-SNAPSHOT
+ ../../parent-java
+
+
+
+
+ ch.qos.logback
+ logback-classic
+ 1.2.3
+
+
+ org.assertj
+ assertj-core
+ 3.15.0
+ test
+
+
+
diff --git a/testing-modules/testing-assertions/src/main/java/com/baeldung/junit/log/BusinessWorker.java b/testing-modules/testing-assertions/src/main/java/com/baeldung/junit/log/BusinessWorker.java
new file mode 100644
index 0000000000..86cd38824c
--- /dev/null
+++ b/testing-modules/testing-assertions/src/main/java/com/baeldung/junit/log/BusinessWorker.java
@@ -0,0 +1,16 @@
+package com.baeldung.junit.log;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class BusinessWorker {
+ private static Logger LOGGER = LoggerFactory.getLogger(BusinessWorker.class);
+
+ public void generateLogs(String msg) {
+ LOGGER.trace(msg);
+ LOGGER.debug(msg);
+ LOGGER.info(msg);
+ LOGGER.warn(msg);
+ LOGGER.error(msg);
+ }
+}
diff --git a/testing-modules/testing-assertions/src/main/resources/logback.xml b/testing-modules/testing-assertions/src/main/resources/logback.xml
new file mode 100644
index 0000000000..d485da62ff
--- /dev/null
+++ b/testing-modules/testing-assertions/src/main/resources/logback.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+ %d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/testing-modules/testing-assertions/src/test/java/com/baeldung/junit/log/BusinessWorkerUnitTest.java b/testing-modules/testing-assertions/src/test/java/com/baeldung/junit/log/BusinessWorkerUnitTest.java
new file mode 100644
index 0000000000..9200caf13d
--- /dev/null
+++ b/testing-modules/testing-assertions/src/test/java/com/baeldung/junit/log/BusinessWorkerUnitTest.java
@@ -0,0 +1,48 @@
+package com.baeldung.junit.log;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.slf4j.LoggerFactory;
+
+import ch.qos.logback.classic.Level;
+import ch.qos.logback.classic.Logger;
+import ch.qos.logback.classic.LoggerContext;
+
+public class BusinessWorkerUnitTest {
+ private static MemoryAppender memoryAppender;
+ private static final String LOGGER_NAME = "com.baeldung.junit.log";
+ private static final String MSG = "This is a test message!!!";
+
+ @Before
+ public void setup() {
+ Logger logger = (Logger) LoggerFactory.getLogger(LOGGER_NAME);
+ memoryAppender = new MemoryAppender();
+ memoryAppender.setContext((LoggerContext) LoggerFactory.getILoggerFactory());
+ logger.setLevel(Level.DEBUG);
+ logger.addAppender(memoryAppender);
+ memoryAppender.start();
+
+ }
+
+ @After
+ public void cleanUp() {
+ memoryAppender.reset();
+ memoryAppender.stop();
+ }
+
+ @Test
+ public void test() {
+ BusinessWorker worker = new BusinessWorker();
+ worker.generateLogs(MSG);
+
+ // I check that I only have 4 messages (all but trace)
+ assertThat(memoryAppender.countEventsForLogger(LOGGER_NAME)).isEqualTo(4);
+ // I look for a specific message at a specific level, and I only have 1
+ assertThat(memoryAppender.search(MSG, Level.INFO).size()).isEqualTo(1);
+ // I check that the entry that is not present is the trace level
+ assertThat(memoryAppender.contains(MSG, Level.TRACE)).isFalse();
+ }
+}
diff --git a/testing-modules/testing-assertions/src/test/java/com/baeldung/junit/log/MemoryAppender.java b/testing-modules/testing-assertions/src/test/java/com/baeldung/junit/log/MemoryAppender.java
new file mode 100644
index 0000000000..31c5c69766
--- /dev/null
+++ b/testing-modules/testing-assertions/src/test/java/com/baeldung/junit/log/MemoryAppender.java
@@ -0,0 +1,51 @@
+package com.baeldung.junit.log;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import ch.qos.logback.classic.Level;
+import ch.qos.logback.classic.spi.ILoggingEvent;
+import ch.qos.logback.core.read.ListAppender;
+
+/**
+ * In memory slf4j appender
+ * Convenient appender to be able to check slf4j invocations
+ */
+public class MemoryAppender extends ListAppender {
+ public void reset() {
+ this.list.clear();
+ }
+
+ public boolean contains(String string, Level level) {
+ return this.list.stream()
+ .anyMatch(event -> event.getMessage().toString().contains(string)
+ && event.getLevel().equals(level));
+ }
+
+ public int countEventsForLogger(String loggerName) {
+ return (int) this.list.stream()
+ .filter(event -> event.getLoggerName().contains(loggerName)).count();
+ }
+
+ public List search(String string) {
+ return this.list.stream()
+ .filter(event -> event.getMessage().toString().contains(string))
+ .collect(Collectors.toList());
+ }
+
+ public List search(String string, Level level) {
+ return this.list.stream()
+ .filter(event -> event.getMessage().toString().contains(string)
+ && event.getLevel().equals(level))
+ .collect(Collectors.toList());
+ }
+
+ public int getSize() {
+ return this.list.size();
+ }
+
+ public List getLoggedEvents() {
+ return Collections.unmodifiableList(this.list);
+ }
+}
diff --git a/testing-modules/testing-assertions/src/test/resources/logback.xml b/testing-modules/testing-assertions/src/test/resources/logback.xml
new file mode 100644
index 0000000000..980ce897ff
--- /dev/null
+++ b/testing-modules/testing-assertions/src/test/resources/logback.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+ %d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n
+
+
+
+
+
+
+
\ No newline at end of file