diff --git a/algorithms-miscellaneous-3/README.md b/algorithms-miscellaneous-3/README.md index cd3711d573..6a38df484a 100644 --- a/algorithms-miscellaneous-3/README.md +++ b/algorithms-miscellaneous-3/README.md @@ -1,4 +1,4 @@ -## Relevant articles: +## Relevant Articles: - [Java Two Pointer Technique](https://www.baeldung.com/java-two-pointer-technique) - [Implementing Simple State Machines with Java Enums](https://www.baeldung.com/java-enum-simple-state-machine) diff --git a/core-groovy-2/src/main/groovy/com/baeldung/metaprogramming/Employee.groovy b/core-groovy-2/src/main/groovy/com/baeldung/metaprogramming/Employee.groovy new file mode 100644 index 0000000000..f49d0f906b --- /dev/null +++ b/core-groovy-2/src/main/groovy/com/baeldung/metaprogramming/Employee.groovy @@ -0,0 +1,45 @@ +package com.baeldung.metaprogramming + +import groovy.transform.AutoClone +import groovy.transform.Canonical +import groovy.transform.EqualsAndHashCode +import groovy.transform.ToString +import groovy.transform.TupleConstructor +import groovy.util.logging.* + +@Canonical +@TupleConstructor +@EqualsAndHashCode +@ToString(includePackage=false, excludes=['id']) +@Log +@AutoClone +class Employee { + + long id + String firstName + String lastName + int age + + //method to catch missing property's getter + def propertyMissing(String propertyName) { + log.info "$propertyName is not available" + "property '$propertyName' is not available" + } + + //method to catch missing property's setter + def propertyMissing(String propertyName, propertyValue) { + println "property '$propertyName' is not available" + log.info "$propertyName is not available" + "property '$propertyName' is not available" + } + + def methodMissing(String methodName, def methodArgs) { + log.info "$methodName is not defined" + "method '$methodName' is not defined" + } + + def logEmp() { + log.info "Employee: $lastName, $firstName is of $age years age" + } + +} \ No newline at end of file diff --git a/core-groovy-2/src/main/groovy/com/baeldung/metaprogramming/extension/BasicExtensions.groovy b/core-groovy-2/src/main/groovy/com/baeldung/metaprogramming/extension/BasicExtensions.groovy new file mode 100644 index 0000000000..65591cae8d --- /dev/null +++ b/core-groovy-2/src/main/groovy/com/baeldung/metaprogramming/extension/BasicExtensions.groovy @@ -0,0 +1,30 @@ +package com.baeldung.metaprogramming.extension + +import com.baeldung.metaprogramming.Employee + +class BasicExtensions { + + static int getYearOfBirth(Employee self) { + return (new Date().getYear() + 1900) - self.age; + } + + static String capitalize(String self) { + return self.substring(0, 1).toUpperCase() + self.substring(1) + } + + static void printCounter(Integer self) { + while (self>0) { + println self + self-- + } + } + + static Long square(Long self) { + return self*self + } + + static BigDecimal cube(BigDecimal self) { + return self*self*self + } + +} \ No newline at end of file diff --git a/core-groovy-2/src/main/groovy/com/baeldung/metaprogramming/extension/StaticEmployeeExtension.groovy b/core-groovy-2/src/main/groovy/com/baeldung/metaprogramming/extension/StaticEmployeeExtension.groovy new file mode 100644 index 0000000000..ab2aac38ea --- /dev/null +++ b/core-groovy-2/src/main/groovy/com/baeldung/metaprogramming/extension/StaticEmployeeExtension.groovy @@ -0,0 +1,10 @@ +package com.baeldung.metaprogramming.extension + +import com.baeldung.metaprogramming.Employee + +class StaticEmployeeExtension { + + static Employee getDefaultObj(Employee self) { + return new Employee(firstName: "firstName", lastName: "lastName", age: 20) + } +} \ No newline at end of file diff --git a/core-groovy-2/src/main/resources/META-INF/services/org.codehaus.groovy.runtime.ExtensionModule b/core-groovy-2/src/main/resources/META-INF/services/org.codehaus.groovy.runtime.ExtensionModule new file mode 100644 index 0000000000..967108b846 --- /dev/null +++ b/core-groovy-2/src/main/resources/META-INF/services/org.codehaus.groovy.runtime.ExtensionModule @@ -0,0 +1,4 @@ +moduleName=core-groovy-2 +moduleVersion=1.0-SNAPSHOT +extensionClasses=com.baeldung.metaprogramming.extension.BasicExtensions +staticExtensionClasses=com.baeldung.metaprogramming.extension.StaticEmployeeExtension diff --git a/core-groovy-2/src/test/groovy/com/baeldung/metaprogramming/MetaprogrammingUnitTest.groovy b/core-groovy-2/src/test/groovy/com/baeldung/metaprogramming/MetaprogrammingUnitTest.groovy new file mode 100644 index 0000000000..8066b10f9b --- /dev/null +++ b/core-groovy-2/src/test/groovy/com/baeldung/metaprogramming/MetaprogrammingUnitTest.groovy @@ -0,0 +1,118 @@ +package com.baeldung.metaprogramming + +import groovy.time.TimeCategory + +class MetaprogrammingUnitTest extends GroovyTestCase { + + Employee emp = new Employee(firstName: "Norman", lastName: "Lewis") + + void testPropertyMissing() { + assert emp.address == "property 'address' is not available" + } + + void testMethodMissing() { + Employee emp = new Employee() + try { + emp.getFullName() + } catch(MissingMethodException e) { + println "method is not defined" + } + assert emp.getFullName() == "method 'getFullName' is not defined" + } + + void testMetaClassProperty() { + Employee.metaClass.address = "" + emp = new Employee(firstName: "Norman", lastName: "Lewis", address: "US") + assert emp.address == "US" + } + + void testMetaClassMethod() { + emp.metaClass.getFullName = { + "$lastName, $firstName" + } + assert emp.getFullName() == "Lewis, Norman" + } + + void testMetaClassConstructor() { + try { + Employee emp = new Employee("Norman") + } catch(GroovyRuntimeException e) { + assert e.message == "Could not find matching constructor for: com.baeldung.metaprogramming.Employee(String)" + } + + Employee.metaClass.constructor = { String firstName -> + new Employee(firstName: firstName) + } + + Employee norman = new Employee("Norman") + assert norman.firstName == "Norman" + assert norman.lastName == null + } + + void testJavaMetaClass() { + String.metaClass.capitalize = { String str -> + str.substring(0, 1).toUpperCase() + str.substring(1); + } + assert "norman".capitalize() == "Norman" + } + + void testEmployeeExtension() { + Employee emp = new Employee(age: 28) + assert emp.getYearOfBirth() == 1991 + } + + void testJavaClassesExtensions() { + 5.printCounter() + + assert 40l.square() == 1600l + + assert (2.98).cube() == 26.463592 + } + + void testStaticEmployeeExtension() { + assert Employee.getDefaultObj().firstName == "firstName" + assert Employee.getDefaultObj().lastName == "lastName" + assert Employee.getDefaultObj().age == 20 + } + + void testToStringAnnotation() { + Employee employee = new Employee() + employee.id = 1 + employee.firstName = "norman" + employee.lastName = "lewis" + employee.age = 28 + + assert employee.toString() == "Employee(norman, lewis, 28)" + } + + void testTupleConstructorAnnotation() { + Employee norman = new Employee(1, "norman", "lewis", 28) + assert norman.toString() == "Employee(norman, lewis, 28)" + + Employee snape = new Employee(2, "snape") + assert snape.toString() == "Employee(snape, null, 0)" + + } + + void testEqualsAndHashCodeAnnotation() { + Employee norman = new Employee(1, "norman", "lewis", 28) + Employee normanCopy = new Employee(1, "norman", "lewis", 28) + assert norman.equals(normanCopy) + assert norman.hashCode() == normanCopy.hashCode() + } + + void testAutoCloneAnnotation() { + try { + Employee norman = new Employee(1, "norman", "lewis", 28) + def normanCopy = norman.clone() + assert norman == normanCopy + } catch(CloneNotSupportedException e) { + e.printStackTrace() + } + } + + void testLoggingAnnotation() { + Employee employee = new Employee(1, "Norman", "Lewis", 28) + employee.logEmp() + } +} \ No newline at end of file diff --git a/core-java-modules/core-java-8-2/README.md b/core-java-modules/core-java-8-2/README.md index 245fa93ba7..d11510b2aa 100644 --- a/core-java-modules/core-java-8-2/README.md +++ b/core-java-modules/core-java-8-2/README.md @@ -7,3 +7,4 @@ - [How to Delay Code Execution in Java](https://www.baeldung.com/java-delay-code-execution) - [Run JAR Application With Command Line Arguments](https://www.baeldung.com/java-run-jar-with-arguments) - [Java 8 Stream skip() vs limit()](https://www.baeldung.com/java-stream-skip-vs-limit) +- [Guide to Java BiFunction Interface](https://www.baeldung.com/java-bifunction-interface) diff --git a/core-java-modules/core-java-arrays/README.md b/core-java-modules/core-java-arrays/README.md index b5f71cc253..45feff3edc 100644 --- a/core-java-modules/core-java-arrays/README.md +++ b/core-java-modules/core-java-arrays/README.md @@ -7,7 +7,7 @@ - [Check if a Java Array Contains a Value](http://www.baeldung.com/java-array-contains-value) - [Initializing Arrays in Java](http://www.baeldung.com/java-initialize-array) - [Guide to the java.util.Arrays Class](http://www.baeldung.com/java-util-arrays) -- [Jagged Arrays In Java](http://www.baeldung.com/java-jagged-arrays) +- [Multi-Dimensional Arrays In Java](http://www.baeldung.com/java-jagged-arrays) - [Find Sum and Average in a Java Array](http://www.baeldung.com/java-array-sum-average) - [Arrays in Java: A Reference Guide](https://www.baeldung.com/java-arrays-guide) - [How to Invert an Array in Java](http://www.baeldung.com/java-invert-array) @@ -16,3 +16,4 @@ - [Sorting Arrays in Java](https://www.baeldung.com/java-sorting-arrays) - [Convert a Float to a Byte Array in Java](https://www.baeldung.com/java-convert-float-to-byte-array) - [Converting Between Stream and Array in Java](https://www.baeldung.com/java-stream-to-array) +- [Removing an Element from an Array in Java](https://www.baeldung.com/java-array-remove-element) diff --git a/core-java-modules/core-java-jpms/README.md b/core-java-modules/core-java-jpms/README.md new file mode 100644 index 0000000000..5c424711bc --- /dev/null +++ b/core-java-modules/core-java-jpms/README.md @@ -0,0 +1,3 @@ +### Relevant Articles + +- [Design Strategies for Decoupling Java Modules](https://www.baeldung.com/java-modules-decoupling-design-strategies) diff --git a/core-java-modules/core-java-lang-operators/pom.xml b/core-java-modules/core-java-lang-operators/pom.xml new file mode 100644 index 0000000000..58cab9d507 --- /dev/null +++ b/core-java-modules/core-java-lang-operators/pom.xml @@ -0,0 +1,43 @@ + + 4.0.0 + com.baeldung + core-java-lang-operators + 0.1.0-SNAPSHOT + core-java-lang-operators + jar + + + com.baeldung + parent-java + 0.0.1-SNAPSHOT + ../../parent-java + + + + + + org.assertj + assertj-core + ${assertj-core.version} + test + + + + + core-java-lang-operators + + + src/main/resources + true + + + + + + + 3.10.0 + + + diff --git a/core-java-modules/core-java-lang-syntax/src/main/java/com/baeldung/keyword/Circle.java b/core-java-modules/core-java-lang-operators/src/main/java/com/baeldung/keyword/Circle.java similarity index 100% rename from core-java-modules/core-java-lang-syntax/src/main/java/com/baeldung/keyword/Circle.java rename to core-java-modules/core-java-lang-operators/src/main/java/com/baeldung/keyword/Circle.java diff --git a/core-java-modules/core-java-lang-syntax/src/main/java/com/baeldung/keyword/Ring.java b/core-java-modules/core-java-lang-operators/src/main/java/com/baeldung/keyword/Ring.java similarity index 100% rename from core-java-modules/core-java-lang-syntax/src/main/java/com/baeldung/keyword/Ring.java rename to core-java-modules/core-java-lang-operators/src/main/java/com/baeldung/keyword/Ring.java diff --git a/core-java-modules/core-java-lang-syntax/src/main/java/com/baeldung/keyword/Round.java b/core-java-modules/core-java-lang-operators/src/main/java/com/baeldung/keyword/Round.java similarity index 100% rename from core-java-modules/core-java-lang-syntax/src/main/java/com/baeldung/keyword/Round.java rename to core-java-modules/core-java-lang-operators/src/main/java/com/baeldung/keyword/Round.java diff --git a/core-java-modules/core-java-lang-syntax/src/main/java/com/baeldung/keyword/Shape.java b/core-java-modules/core-java-lang-operators/src/main/java/com/baeldung/keyword/Shape.java similarity index 100% rename from core-java-modules/core-java-lang-syntax/src/main/java/com/baeldung/keyword/Shape.java rename to core-java-modules/core-java-lang-operators/src/main/java/com/baeldung/keyword/Shape.java diff --git a/core-java-modules/core-java-lang-syntax/src/main/java/com/baeldung/keyword/Triangle.java b/core-java-modules/core-java-lang-operators/src/main/java/com/baeldung/keyword/Triangle.java similarity index 100% rename from core-java-modules/core-java-lang-syntax/src/main/java/com/baeldung/keyword/Triangle.java rename to core-java-modules/core-java-lang-operators/src/main/java/com/baeldung/keyword/Triangle.java diff --git a/core-java-modules/core-java-lang-syntax/src/test/java/com/baeldung/incrementdecrementunaryoperator/IncrementDecrementUnaryOperatorUnitTest.java b/core-java-modules/core-java-lang-operators/src/test/java/com/baeldung/incrementdecrementunaryoperators/IncrementDecrementUnaryOperatorUnitTest.java similarity index 97% rename from core-java-modules/core-java-lang-syntax/src/test/java/com/baeldung/incrementdecrementunaryoperator/IncrementDecrementUnaryOperatorUnitTest.java rename to core-java-modules/core-java-lang-operators/src/test/java/com/baeldung/incrementdecrementunaryoperators/IncrementDecrementUnaryOperatorUnitTest.java index ee17c1e8ea..8fbc2eeab8 100644 --- a/core-java-modules/core-java-lang-syntax/src/test/java/com/baeldung/incrementdecrementunaryoperator/IncrementDecrementUnaryOperatorUnitTest.java +++ b/core-java-modules/core-java-lang-operators/src/test/java/com/baeldung/incrementdecrementunaryoperators/IncrementDecrementUnaryOperatorUnitTest.java @@ -1,6 +1,7 @@ -package com.baeldung.incrementdecrementunaryoperator; +package com.baeldung.incrementdecrementunaryoperators; import static org.assertj.core.api.Assertions.assertThat; + import org.junit.Test; public class IncrementDecrementUnaryOperatorUnitTest { diff --git a/core-java-modules/core-java-lang-syntax/src/test/java/com/baeldung/java/diamond/Car.java b/core-java-modules/core-java-lang-operators/src/test/java/com/baeldung/java/diamond/Car.java similarity index 100% rename from core-java-modules/core-java-lang-syntax/src/test/java/com/baeldung/java/diamond/Car.java rename to core-java-modules/core-java-lang-operators/src/test/java/com/baeldung/java/diamond/Car.java diff --git a/core-java-modules/core-java-lang-syntax/src/test/java/com/baeldung/java/diamond/DiamondOperatorUnitTest.java b/core-java-modules/core-java-lang-operators/src/test/java/com/baeldung/java/diamond/DiamondOperatorUnitTest.java similarity index 100% rename from core-java-modules/core-java-lang-syntax/src/test/java/com/baeldung/java/diamond/DiamondOperatorUnitTest.java rename to core-java-modules/core-java-lang-operators/src/test/java/com/baeldung/java/diamond/DiamondOperatorUnitTest.java diff --git a/core-java-modules/core-java-lang-syntax/src/test/java/com/baeldung/java/diamond/Diesel.java b/core-java-modules/core-java-lang-operators/src/test/java/com/baeldung/java/diamond/Diesel.java similarity index 100% rename from core-java-modules/core-java-lang-syntax/src/test/java/com/baeldung/java/diamond/Diesel.java rename to core-java-modules/core-java-lang-operators/src/test/java/com/baeldung/java/diamond/Diesel.java diff --git a/core-java-modules/core-java-lang-syntax/src/test/java/com/baeldung/java/diamond/Engine.java b/core-java-modules/core-java-lang-operators/src/test/java/com/baeldung/java/diamond/Engine.java similarity index 100% rename from core-java-modules/core-java-lang-syntax/src/test/java/com/baeldung/java/diamond/Engine.java rename to core-java-modules/core-java-lang-operators/src/test/java/com/baeldung/java/diamond/Engine.java diff --git a/core-java-modules/core-java-lang-syntax/src/test/java/com/baeldung/java/diamond/Vehicle.java b/core-java-modules/core-java-lang-operators/src/test/java/com/baeldung/java/diamond/Vehicle.java similarity index 100% rename from core-java-modules/core-java-lang-syntax/src/test/java/com/baeldung/java/diamond/Vehicle.java rename to core-java-modules/core-java-lang-operators/src/test/java/com/baeldung/java/diamond/Vehicle.java diff --git a/core-java-modules/core-java-lang-syntax/src/test/java/com/baeldung/java/doublebrace/DoubleBraceUnitTest.java b/core-java-modules/core-java-lang-operators/src/test/java/com/baeldung/java/doublebrace/DoubleBraceUnitTest.java similarity index 100% rename from core-java-modules/core-java-lang-syntax/src/test/java/com/baeldung/java/doublebrace/DoubleBraceUnitTest.java rename to core-java-modules/core-java-lang-operators/src/test/java/com/baeldung/java/doublebrace/DoubleBraceUnitTest.java diff --git a/core-java-modules/core-java-lang-syntax/src/test/java/com/baeldung/keyword/test/InstanceOfUnitTest.java b/core-java-modules/core-java-lang-operators/src/test/java/com/baeldung/keyword/test/InstanceOfUnitTest.java similarity index 100% rename from core-java-modules/core-java-lang-syntax/src/test/java/com/baeldung/keyword/test/InstanceOfUnitTest.java rename to core-java-modules/core-java-lang-operators/src/test/java/com/baeldung/keyword/test/InstanceOfUnitTest.java diff --git a/core-java-modules/core-java-lang-syntax/src/test/java/com/baeldung/modulo/ModuloUnitTest.java b/core-java-modules/core-java-lang-operators/src/test/java/com/baeldung/modulo/ModuloUnitTest.java similarity index 100% rename from core-java-modules/core-java-lang-syntax/src/test/java/com/baeldung/modulo/ModuloUnitTest.java rename to core-java-modules/core-java-lang-operators/src/test/java/com/baeldung/modulo/ModuloUnitTest.java diff --git a/core-java-modules/core-java-lang-syntax/src/test/java/com/baeldung/ternaryoperator/TernaryOperatorUnitTest.java b/core-java-modules/core-java-lang-operators/src/test/java/com/baeldung/ternaryoperator/TernaryOperatorUnitTest.java similarity index 100% rename from core-java-modules/core-java-lang-syntax/src/test/java/com/baeldung/ternaryoperator/TernaryOperatorUnitTest.java rename to core-java-modules/core-java-lang-operators/src/test/java/com/baeldung/ternaryoperator/TernaryOperatorUnitTest.java diff --git a/core-java-modules/core-java-lang-syntax/README.md b/core-java-modules/core-java-lang-syntax/README.md index 81c3d6c354..3293e9b23d 100644 --- a/core-java-modules/core-java-lang-syntax/README.md +++ b/core-java-modules/core-java-lang-syntax/README.md @@ -18,3 +18,4 @@ - [The Modulo Operator in Java](https://www.baeldung.com/modulo-java) - [Ternary Operator In Java](https://www.baeldung.com/java-ternary-operator) - [Java instanceof Operator](https://www.baeldung.com/java-instanceof) +- [Breaking Out of Nested Loops](https://www.baeldung.com/java-breaking-out-nested-loop) diff --git a/core-java-modules/core-java-nio/README.md b/core-java-modules/core-java-nio/README.md index 9034c3b3b1..1ac3b6c089 100644 --- a/core-java-modules/core-java-nio/README.md +++ b/core-java-modules/core-java-nio/README.md @@ -1,3 +1,3 @@ -## Relevant articles: +## Relevant Articles: -- [Determine File Creating Date in Java](https://www.baeldung.com/java-file-creation-date) +- [Determine File Creation Date in Java](https://www.baeldung.com/java-file-creation-date) diff --git a/core-java-modules/core-java-security/README.md b/core-java-modules/core-java-security/README.md index 9526b15be5..a833ca30bb 100644 --- a/core-java-modules/core-java-security/README.md +++ b/core-java-modules/core-java-security/README.md @@ -10,3 +10,4 @@ - [SSL Handshake Failures](https://www.baeldung.com/java-ssl-handshake-failures) - [SHA-256 and SHA3-256 Hashing in Java](https://www.baeldung.com/sha-256-hashing-java) - [Enabling TLS v1.2 in Java 7](https://www.baeldung.com/java-7-tls-v12) +- [The Java SecureRandom Class](https://www.baeldung.com/java-secure-random) diff --git a/core-java-modules/pom.xml b/core-java-modules/pom.xml index 2dca62005d..ecf1f4147e 100644 --- a/core-java-modules/pom.xml +++ b/core-java-modules/pom.xml @@ -17,6 +17,7 @@ pre-jpms core-java-exceptions core-java-optional + core-java-lang-operators core-java-networking-2 diff --git a/data-structures/README.md b/data-structures/README.md index 2d92068390..5ea9657173 100644 --- a/data-structures/README.md +++ b/data-structures/README.md @@ -1,4 +1,5 @@ ## Relevant articles: -[The Trie Data Structure in Java](https://www.baeldung.com/trie-java) -[Implementing a Binary Tree in Java](https://www.baeldung.com/java-binary-tree) +- [The Trie Data Structure in Java](https://www.baeldung.com/trie-java) +- [Implementing a Binary Tree in Java](https://www.baeldung.com/java-binary-tree) +- [Depth First Search in Java](https://www.baeldung.com/java-depth-first-search) diff --git a/intelliJ/intelliJ-formatter.xml b/intelliJ/intelliJ-formatter.xml index 6dd1ae67f3..9b1d12a3be 100644 --- a/intelliJ/intelliJ-formatter.xml +++ b/intelliJ/intelliJ-formatter.xml @@ -1,19 +1,15 @@ - + \ No newline at end of file diff --git a/jackson-2/README.md b/jackson-2/README.md index d8c233a00e..bb2a58483f 100644 --- a/jackson-2/README.md +++ b/jackson-2/README.md @@ -2,7 +2,7 @@ ## Jackson Cookbooks and Examples -###The Course +### The Course The "REST With Spring" Classes: http://bit.ly/restwithspring ### Relevant Articles: @@ -10,3 +10,4 @@ The "REST With Spring" Classes: http://bit.ly/restwithspring - [How to Process YAML with Jackson](https://www.baeldung.com/jackson-yaml) - [Working with Tree Model Nodes in Jackson](https://www.baeldung.com/jackson-json-node-tree-model) - [Converting JSON to CSV in Java](https://www.baeldung.com/java-converting-json-to-csv) +- [Compare Two JSON Objects with Jackson](https://www.baeldung.com/jackson-compare-two-json-objects) diff --git a/java-dates-2/README.md b/java-dates-2/README.md index 35286115d4..b2f8319e58 100644 --- a/java-dates-2/README.md +++ b/java-dates-2/README.md @@ -1,3 +1,4 @@ ## Relevant Articles: - [Converting Between LocalDate and XMLGregorianCalendar](https://www.baeldung.com/java-localdate-to-xmlgregoriancalendar) - [Convert Time to Milliseconds in Java](https://www.baeldung.com/java-time-milliseconds) +- [Check If a String Is a Valid Date in Java](https://www.baeldung.com/java-string-valid-date) diff --git a/java-dates/README.md b/java-dates/README.md index 8171e5def9..7da309924d 100644 --- a/java-dates/README.md +++ b/java-dates/README.md @@ -29,3 +29,4 @@ - [A Guide to SimpleDateFormat](https://www.baeldung.com/java-simple-date-format) - [ZoneOffset in Java](https://www.baeldung.com/java-zone-offset) - [Differences Between ZonedDateTime and OffsetDateTime](https://www.baeldung.com/java-zoneddatetime-offsetdatetime) +- [Introduction to Joda-Time](http://www.baeldung.com/joda-time) diff --git a/java-math/pom.xml b/java-math/pom.xml index f71577b707..b5c31c4487 100644 --- a/java-math/pom.xml +++ b/java-math/pom.xml @@ -17,6 +17,26 @@ commons-math3 ${commons-math3.version} + + org.ejml + ejml-all + ${ejml.version} + + + org.nd4j + nd4j-native + ${nd4j.version} + + + org.la4j + la4j + ${la4j.version} + + + colt + colt + ${colt.version} + com.google.guava guava @@ -44,6 +64,17 @@ combinatoricslib3 ${combinatoricslib3.version} + + + org.openjdk.jmh + jmh-core + ${jmh.version} + + + org.openjdk.jmh + jmh-generator-annprocess + ${jmh.version} + @@ -64,6 +95,11 @@ 1.11 27.0.1-jre 3.3.0 + 0.38 + 1.0.0-beta4 + 1.2.0 + 0.6.0 + 1.19 \ No newline at end of file diff --git a/libraries-2/src/test/java/com/baeldung/matrices/MatrixMultiplicationBenchmarking.java b/java-math/src/test/java/com/baeldung/matrices/MatrixMultiplicationBenchmarking.java similarity index 100% rename from libraries-2/src/test/java/com/baeldung/matrices/MatrixMultiplicationBenchmarking.java rename to java-math/src/test/java/com/baeldung/matrices/MatrixMultiplicationBenchmarking.java diff --git a/libraries-2/src/test/java/com/baeldung/matrices/apache/RealMatrixUnitTest.java b/java-math/src/test/java/com/baeldung/matrices/apache/RealMatrixUnitTest.java similarity index 100% rename from libraries-2/src/test/java/com/baeldung/matrices/apache/RealMatrixUnitTest.java rename to java-math/src/test/java/com/baeldung/matrices/apache/RealMatrixUnitTest.java diff --git a/libraries-2/src/test/java/com/baeldung/matrices/colt/DoubleMatrix2DUnitTest.java b/java-math/src/test/java/com/baeldung/matrices/colt/DoubleMatrix2DUnitTest.java similarity index 100% rename from libraries-2/src/test/java/com/baeldung/matrices/colt/DoubleMatrix2DUnitTest.java rename to java-math/src/test/java/com/baeldung/matrices/colt/DoubleMatrix2DUnitTest.java diff --git a/libraries-2/src/test/java/com/baeldung/matrices/ejml/SimpleMatrixUnitTest.java b/java-math/src/test/java/com/baeldung/matrices/ejml/SimpleMatrixUnitTest.java similarity index 100% rename from libraries-2/src/test/java/com/baeldung/matrices/ejml/SimpleMatrixUnitTest.java rename to java-math/src/test/java/com/baeldung/matrices/ejml/SimpleMatrixUnitTest.java diff --git a/libraries-2/src/test/java/com/baeldung/matrices/homemade/HomemadeMatrixUnitTest.java b/java-math/src/test/java/com/baeldung/matrices/homemade/HomemadeMatrixUnitTest.java similarity index 100% rename from libraries-2/src/test/java/com/baeldung/matrices/homemade/HomemadeMatrixUnitTest.java rename to java-math/src/test/java/com/baeldung/matrices/homemade/HomemadeMatrixUnitTest.java diff --git a/libraries-2/src/test/java/com/baeldung/matrices/la4j/Basic2DMatrixUnitTest.java b/java-math/src/test/java/com/baeldung/matrices/la4j/Basic2DMatrixUnitTest.java similarity index 100% rename from libraries-2/src/test/java/com/baeldung/matrices/la4j/Basic2DMatrixUnitTest.java rename to java-math/src/test/java/com/baeldung/matrices/la4j/Basic2DMatrixUnitTest.java diff --git a/libraries-2/src/test/java/com/baeldung/matrices/nd4j/INDArrayUnitTest.java b/java-math/src/test/java/com/baeldung/matrices/nd4j/INDArrayUnitTest.java similarity index 100% rename from libraries-2/src/test/java/com/baeldung/matrices/nd4j/INDArrayUnitTest.java rename to java-math/src/test/java/com/baeldung/matrices/nd4j/INDArrayUnitTest.java diff --git a/java-numbers-2/src/main/java/com/baeldung/binarynumbers/BinaryNumbers.java b/java-numbers-2/src/main/java/com/baeldung/binarynumbers/BinaryNumbers.java index effdee07ad..62cead726f 100644 --- a/java-numbers-2/src/main/java/com/baeldung/binarynumbers/BinaryNumbers.java +++ b/java-numbers-2/src/main/java/com/baeldung/binarynumbers/BinaryNumbers.java @@ -1,148 +1,140 @@ -package com.baeldung.binarynumbers; - -public class BinaryNumbers { - - /** - * This method takes a decimal number and convert it into a binary number. - * example:- input:10, output:1010 - * - * @param decimalNumber - * @return binary number - */ - public Integer convertDecimalToBinary(Integer decimalNumber) { - - if (decimalNumber == 0) { - return decimalNumber; - } - - StringBuilder binaryNumber = new StringBuilder(); - - while (decimalNumber > 0) { - - int remainder = decimalNumber % 2; - int result = decimalNumber / 2; - - binaryNumber.append(remainder); - decimalNumber = result; - } - - binaryNumber = binaryNumber.reverse(); - - return Integer.valueOf(binaryNumber.toString()); - } - - /** - * This method takes a binary number and convert it into a decimal number. - * example:- input:101, output:5 - * - * @param binary number - * @return decimal Number - */ - public Integer convertBinaryToDecimal(Integer binaryNumber) { - - Integer result = 0; - Integer base = 1; - - while (binaryNumber > 0) { - - int lastDigit = binaryNumber % 10; - binaryNumber = binaryNumber / 10; - - result += lastDigit * base; - - base = base * 2; - } - return result; - } - - /** - * This method accepts two binary numbers and returns sum of input numbers. - * Example:- firstNum: 101, secondNum: 100, output: 1001 - * - * @param firstNum - * @param secondNum - * @return addition of input numbers - */ - public Integer addBinaryNumber(Integer firstNum, Integer secondNum) { - - StringBuilder output = new StringBuilder(); - - int carry = 0; - int temp; - - while (firstNum != 0 || secondNum != 0) { - - temp = (firstNum % 10 + secondNum % 10 + carry) % 2; - output.append(temp); - - carry = (firstNum % 10 + secondNum % 10 + carry) / 2; - - firstNum = firstNum / 10; - secondNum = secondNum / 10; - } - - if (carry != 0) { - output.append(carry); - } - - return Integer.valueOf(output.reverse() - .toString()); - } - - /** - * This method takes two binary number as input and subtract second number from the first number. - * example:- firstNum: 1000, secondNum: 11, output: 101 - * @param firstNum - * @param secondNum - * @return Result of subtraction of secondNum from first - */ - public Integer substractBinaryNumber(Integer firstNum, Integer secondNum) { - - int onesComplement = Integer.valueOf(getOnesComplement(secondNum)); - - StringBuilder output = new StringBuilder(); - - int carry = 0; - int temp; - - while (firstNum != 0 || onesComplement != 0) { - - temp = (firstNum % 10 + onesComplement % 10 + carry) % 2; - output.append(temp); - - carry = (firstNum % 10 + onesComplement % 10 + carry) / 2; - - firstNum = firstNum / 10; - onesComplement = onesComplement / 10; - } - - String additionOfFirstNumAndOnesComplement = output.reverse() - .toString(); - - if (carry == 1) { - return addBinaryNumber(Integer.valueOf(additionOfFirstNumAndOnesComplement), carry); - } else { - return getOnesComplement(Integer.valueOf(additionOfFirstNumAndOnesComplement)); - } - - } - - public Integer getOnesComplement(Integer num) { - - StringBuilder onesComplement = new StringBuilder(); - - while (num > 0) { - int lastDigit = num % 10; - if (lastDigit == 0) { - onesComplement.append(1); - } else { - onesComplement.append(0); - } - num = num / 10; - } - - return Integer.valueOf(onesComplement.reverse() - .toString()); - } - -} +package com.baeldung.binarynumbers; + +public class BinaryNumbers { + + /** + * This method takes a decimal number and convert it into a binary number. + * example:- input:10, output:1010 + * + * @param decimalNumber + * @return binary number + */ + public Integer convertDecimalToBinary(Integer decimalNumber) { + + if (decimalNumber == 0) { + return decimalNumber; + } + + StringBuilder binaryNumber = new StringBuilder(); + Integer quotient = decimalNumber; + + while (quotient > 0) { + + int remainder = quotient % 2; + binaryNumber.append(remainder); + quotient /= 2; + } + + binaryNumber = binaryNumber.reverse(); + return Integer.valueOf(binaryNumber.toString()); + } + + /** + * This method takes a binary number and convert it into a decimal number. + * example:- input:101, output:5 + * + * @param binary number + * @return decimal Number + */ + public Integer convertBinaryToDecimal(Integer binaryNumber) { + + Integer decimalNumber = 0; + Integer base = 1; + + while (binaryNumber > 0) { + + int lastDigit = binaryNumber % 10; + binaryNumber = binaryNumber / 10; + + decimalNumber += lastDigit * base; + base = base * 2; + } + return decimalNumber; + } + + /** + * This method accepts two binary numbers and returns sum of input numbers. + * Example:- firstNum: 101, secondNum: 100, output: 1001 + * + * @param firstNum + * @param secondNum + * @return addition of input numbers + */ + public Integer addBinaryNumber(Integer firstNum, Integer secondNum) { + + StringBuilder output = new StringBuilder(); + + int carry = 0; + int temp; + + while (firstNum != 0 || secondNum != 0) { + + temp = (firstNum % 10 + secondNum % 10 + carry) % 2; + output.append(temp); + + carry = (firstNum % 10 + secondNum % 10 + carry) / 2; + + firstNum = firstNum / 10; + secondNum = secondNum / 10; + } + + if (carry != 0) { + output.append(carry); + } + + return Integer.valueOf(output.reverse() + .toString()); + } + + /** + * This method takes two binary number as input and subtract second number from the first number. + * example:- firstNum: 1000, secondNum: 11, output: 101 + * @param firstNum + * @param secondNum + * @return Result of subtraction of secondNum from first + */ + public Integer substractBinaryNumber(Integer firstNum, Integer secondNum) { + + int onesComplement = Integer.valueOf(getOnesComplement(secondNum)); + StringBuilder output = new StringBuilder(); + int carry = 0; + int temp; + + while (firstNum != 0 || onesComplement != 0) { + + temp = (firstNum % 10 + onesComplement % 10 + carry) % 2; + output.append(temp); + + carry = (firstNum % 10 + onesComplement % 10 + carry) / 2; + + firstNum = firstNum / 10; + onesComplement = onesComplement / 10; + } + + String additionOfFirstNumAndOnesComplement = output.reverse() + .toString(); + + if (carry == 1) { + return addBinaryNumber(Integer.valueOf(additionOfFirstNumAndOnesComplement), carry); + } else { + return getOnesComplement(Integer.valueOf(additionOfFirstNumAndOnesComplement)); + } + } + + public Integer getOnesComplement(Integer num) { + + StringBuilder onesComplement = new StringBuilder(); + while (num > 0) { + int lastDigit = num % 10; + if (lastDigit == 0) { + onesComplement.append(1); + } else { + onesComplement.append(0); + } + num = num / 10; + } + return Integer.valueOf(onesComplement.reverse() + .toString()); + } + +} \ No newline at end of file diff --git a/java-strings-2/README.MD b/java-strings-2/README.md similarity index 83% rename from java-strings-2/README.MD rename to java-strings-2/README.md index b4b16fbaef..55760bfac7 100644 --- a/java-strings-2/README.MD +++ b/java-strings-2/README.md @@ -1,4 +1,4 @@ -## Relevant Articles +## Relevant Articles: - [Java Localization – Formatting Messages](https://www.baeldung.com/java-localization-messages-formatting) - [Check If a String Contains a Substring](https://www.baeldung.com/java-string-contains-substring) @@ -18,5 +18,8 @@ - [Java String Interview Questions and Answers](https://www.baeldung.com/java-string-interview-questions) - [Check if a String is a Pangram in Java](https://www.baeldung.com/java-string-pangram) - [Check If a String Contains Multiple Keywords](https://www.baeldung.com/string-contains-multiple-words) -- [Blank and Empty Strings in Java](https://www.baeldung.com/java-blank-empty-strings) +- [Checking for Empty or Blank Strings in Java](https://www.baeldung.com/java-blank-empty-strings) - [String Initialization in Java](https://www.baeldung.com/java-string-initialization) +- [Java Multi-line String](https://www.baeldung.com/java-multiline-string) +- [Checking If a String Is a Repeated Substring](https://www.baeldung.com/java-repeated-substring) +- [How to Reverse a String in Java](https://www.baeldung.com/java-reverse-string) diff --git a/libraries-2/README.md b/libraries-2/README.md index 1b042ac3c5..400aa475d1 100644 --- a/libraries-2/README.md +++ b/libraries-2/README.md @@ -1,5 +1,4 @@ - -### Relevant Articles: +## Relevant Articles: - [A Guide to jBPM with Java](https://www.baeldung.com/jbpm-java) - [Guide to Classgraph Library](https://www.baeldung.com/classgraph) @@ -8,3 +7,7 @@ - [Templating with Handlebars](https://www.baeldung.com/handlebars) - [A Guide to Crawler4j](https://www.baeldung.com/crawler4j) - [Decode an OkHttp JSON Response](https://www.baeldung.com/okhttp-json-response) +- [Key Value Store with Chronicle Map](https://www.baeldung.com/java-chronicle-map) +- [Matrix Multiplication in Java](https://www.baeldung.com/java-matrix-multiplication) +- [Guide to MapDB](https://www.baeldung.com/mapdb) +- [A Guide to Apache Mesos](https://www.baeldung.com/apache-mesos) diff --git a/libraries-2/pom.xml b/libraries-2/pom.xml index c6be8df38d..a9a818615f 100644 --- a/libraries-2/pom.xml +++ b/libraries-2/pom.xml @@ -59,26 +59,6 @@ picocli ${picocli.version} - - org.ejml - ejml-all - ${ejml.version} - - - org.nd4j - nd4j-native - ${nd4j.version} - - - org.la4j - la4j - ${la4j.version} - - - colt - colt - ${colt.version} - org.springframework.boot spring-boot-starter @@ -127,17 +107,6 @@ handlebars ${handlebars.version} - - - org.openjdk.jmh - jmh-core - ${jmh.version} - - - org.openjdk.jmh - jmh-generator-annprocess - ${jmh.version} - org.apache.mesos mesos @@ -160,11 +129,6 @@ 3.17.2 4.4.0 2.1.4.RELEASE - 0.38 - 1.0.0-beta4 - 1.2.0 - 0.6.0 - 1.19 0.28.3 1.1.0 3.14.2 diff --git a/libraries-data-2/README.md b/libraries-data-2/README.md new file mode 100644 index 0000000000..8101138c0e --- /dev/null +++ b/libraries-data-2/README.md @@ -0,0 +1,11 @@ +### Relevant articles +- [Introduction to Apache Flink with Java](http://www.baeldung.com/apache-flink) +- [Guide to the HyperLogLog Algorithm](http://www.baeldung.com/java-hyperloglog) +- [Introduction to Conflict-Free Replicated Data Types](http://www.baeldung.com/java-conflict-free-replicated-data-types) +- [Introduction to javax.measure](http://www.baeldung.com/javax-measure) +- [Introduction To Docx4J](http://www.baeldung.com/docx4j) +- [Interact with Google Sheets from Java](http://www.baeldung.com/google-sheets-java-client) +- [Introduction To OpenCSV](http://www.baeldung.com/opencsv) +- [Introduction to Smooks](http://www.baeldung.com/smooks) +- [A Guide to Infinispan in Java](http://www.baeldung.com/infinispan) + diff --git a/libraries-data-2/log4j.properties b/libraries-data-2/log4j.properties new file mode 100644 index 0000000000..2173c5d96f --- /dev/null +++ b/libraries-data-2/log4j.properties @@ -0,0 +1 @@ +log4j.rootLogger=INFO, stdout diff --git a/libraries-data-2/pom.xml b/libraries-data-2/pom.xml new file mode 100644 index 0000000000..87c620f438 --- /dev/null +++ b/libraries-data-2/pom.xml @@ -0,0 +1,145 @@ + + + + 4.0.0 + libraries-data-2 + libraries-data-2 + + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + + + + + org.apache.flink + flink-connector-kafka-0.11_2.11 + ${flink.version} + + + org.apache.flink + flink-streaming-java_2.11 + ${flink.version} + + + org.apache.flink + flink-core + ${flink.version} + + + commons-logging + commons-logging + + + + + org.apache.flink + flink-java + ${flink.version} + + + commons-logging + commons-logging + + + + + org.apache.flink + flink-test-utils_2.11 + ${flink.version} + test + + + net.agkn + hll + ${hll.version} + + + com.netopyr.wurmloch + wurmloch-crdt + ${crdt.version} + + + tec.units + unit-ri + ${unit-ri.version} + + + javax.xml.bind + jaxb-api + ${jaxb-api.version} + + + org.docx4j + docx4j + ${docx4j.version} + + + + com.google.api-client + google-api-client + ${google-api.version} + + + com.google.oauth-client + google-oauth-client-jetty + ${google-api.version} + + + com.google.apis + google-api-services-sheets + ${google-sheets.version} + + + + com.opencsv + opencsv + ${opencsv.version} + + + org.milyn + milyn-smooks-all + ${smooks.version} + + + org.infinispan + infinispan-core + ${infinispan.version} + + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + ${jackson.version} + + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + + + org.springframework + spring-web + ${spring.version} + + + + + + 1.5.0 + 1.6.0 + 0.1.0 + 1.0.3 + 3.3.5 + 2.1 + 1.23.0 + 4.1 + 1.7.0 + 9.1.5.Final + v4-rev493-1.21.0 + 2.9.8 + 4.3.8.RELEASE + + \ No newline at end of file diff --git a/libraries-data-2/src/main/java/com/baeldung/docx/Docx4jExample.java b/libraries-data-2/src/main/java/com/baeldung/docx/Docx4jExample.java new file mode 100644 index 0000000000..6fe29d26e3 --- /dev/null +++ b/libraries-data-2/src/main/java/com/baeldung/docx/Docx4jExample.java @@ -0,0 +1,105 @@ +package com.baeldung.docx; + +import org.docx4j.dml.wordprocessingDrawing.Inline; +import org.docx4j.jaxb.Context; +import org.docx4j.model.table.TblFactory; +import org.docx4j.openpackaging.exceptions.Docx4JException; +import org.docx4j.openpackaging.packages.WordprocessingMLPackage; +import org.docx4j.openpackaging.parts.WordprocessingML.BinaryPartAbstractImage; +import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart; +import org.docx4j.wml.BooleanDefaultTrue; +import org.docx4j.wml.Color; +import org.docx4j.wml.Drawing; +import org.docx4j.wml.ObjectFactory; +import org.docx4j.wml.P; +import org.docx4j.wml.R; +import org.docx4j.wml.RPr; +import org.docx4j.wml.Tbl; +import org.docx4j.wml.Tc; +import org.docx4j.wml.Text; +import org.docx4j.wml.Tr; + +import javax.xml.bind.JAXBElement; +import javax.xml.bind.JAXBException; +import java.io.File; +import java.nio.file.Files; +import java.util.List; + +class Docx4jExample { + + void createDocumentPackage(String outputPath, String imagePath) throws Exception { + WordprocessingMLPackage wordPackage = WordprocessingMLPackage.createPackage(); + MainDocumentPart mainDocumentPart = wordPackage.getMainDocumentPart(); + mainDocumentPart.addStyledParagraphOfText("Title", "Hello World!"); + mainDocumentPart.addParagraphOfText("Welcome To Baeldung!"); + + ObjectFactory factory = Context.getWmlObjectFactory(); + P p = factory.createP(); + R r = factory.createR(); + Text t = factory.createText(); + t.setValue("Welcome To Baeldung"); + r.getContent().add(t); + p.getContent().add(r); + RPr rpr = factory.createRPr(); + BooleanDefaultTrue b = new BooleanDefaultTrue(); + rpr.setB(b); + rpr.setI(b); + rpr.setCaps(b); + Color red = factory.createColor(); + red.setVal("green"); + rpr.setColor(red); + r.setRPr(rpr); + mainDocumentPart.getContent().add(p); + + File image = new File(imagePath); + byte[] fileContent = Files.readAllBytes(image.toPath()); + BinaryPartAbstractImage imagePart = BinaryPartAbstractImage.createImagePart(wordPackage, fileContent); + Inline inline = imagePart.createImageInline("Baeldung Image", "Alt Text", 1, 2, false); + P Imageparagraph = addImageToParagraph(inline); + mainDocumentPart.getContent().add(Imageparagraph); + + int writableWidthTwips = wordPackage.getDocumentModel().getSections().get(0).getPageDimensions().getWritableWidthTwips(); + int columnNumber = 3; + Tbl tbl = TblFactory.createTable(3, 3, writableWidthTwips / columnNumber); + List rows = tbl.getContent(); + for (Object row : rows) { + Tr tr = (Tr) row; + List cells = tr.getContent(); + for (Object cell : cells) { + Tc td = (Tc) cell; + td.getContent().add(p); + } + } + + mainDocumentPart.getContent().add(tbl); + File exportFile = new File(outputPath); + wordPackage.save(exportFile); + } + + boolean isTextExist(String testText) throws Docx4JException, JAXBException { + File doc = new File("helloWorld.docx"); + WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(doc); + MainDocumentPart mainDocumentPart = wordMLPackage.getMainDocumentPart(); + String textNodesXPath = "//w:t"; + List paragraphs = mainDocumentPart.getJAXBNodesViaXPath(textNodesXPath, true); + for (Object obj : paragraphs) { + Text text = (Text) ((JAXBElement) obj).getValue(); + String textValue = text.getValue(); + if (textValue != null && textValue.contains(testText)) { + return true; + } + } + return false; + } + + private static P addImageToParagraph(Inline inline) { + ObjectFactory factory = new ObjectFactory(); + P p = factory.createP(); + R r = factory.createR(); + p.getContent().add(r); + Drawing drawing = factory.createDrawing(); + r.getContent().add(drawing); + drawing.getAnchorOrInline().add(inline); + return p; + } +} diff --git a/libraries-data/src/main/java/com/baeldung/flink/FlinkDataPipeline.java b/libraries-data-2/src/main/java/com/baeldung/flink/FlinkDataPipeline.java similarity index 100% rename from libraries-data/src/main/java/com/baeldung/flink/FlinkDataPipeline.java rename to libraries-data-2/src/main/java/com/baeldung/flink/FlinkDataPipeline.java diff --git a/libraries-data/src/main/java/com/baeldung/flink/LineSplitter.java b/libraries-data-2/src/main/java/com/baeldung/flink/LineSplitter.java similarity index 100% rename from libraries-data/src/main/java/com/baeldung/flink/LineSplitter.java rename to libraries-data-2/src/main/java/com/baeldung/flink/LineSplitter.java diff --git a/libraries-data/src/main/java/com/baeldung/flink/WordCount.java b/libraries-data-2/src/main/java/com/baeldung/flink/WordCount.java similarity index 100% rename from libraries-data/src/main/java/com/baeldung/flink/WordCount.java rename to libraries-data-2/src/main/java/com/baeldung/flink/WordCount.java diff --git a/libraries-data/src/main/java/com/baeldung/flink/connector/Consumers.java b/libraries-data-2/src/main/java/com/baeldung/flink/connector/Consumers.java similarity index 100% rename from libraries-data/src/main/java/com/baeldung/flink/connector/Consumers.java rename to libraries-data-2/src/main/java/com/baeldung/flink/connector/Consumers.java diff --git a/libraries-data/src/main/java/com/baeldung/flink/connector/Producers.java b/libraries-data-2/src/main/java/com/baeldung/flink/connector/Producers.java similarity index 100% rename from libraries-data/src/main/java/com/baeldung/flink/connector/Producers.java rename to libraries-data-2/src/main/java/com/baeldung/flink/connector/Producers.java diff --git a/libraries-data/src/main/java/com/baeldung/flink/model/Backup.java b/libraries-data-2/src/main/java/com/baeldung/flink/model/Backup.java similarity index 100% rename from libraries-data/src/main/java/com/baeldung/flink/model/Backup.java rename to libraries-data-2/src/main/java/com/baeldung/flink/model/Backup.java diff --git a/libraries-data/src/main/java/com/baeldung/flink/model/InputMessage.java b/libraries-data-2/src/main/java/com/baeldung/flink/model/InputMessage.java similarity index 100% rename from libraries-data/src/main/java/com/baeldung/flink/model/InputMessage.java rename to libraries-data-2/src/main/java/com/baeldung/flink/model/InputMessage.java diff --git a/libraries-data/src/main/java/com/baeldung/flink/operator/BackupAggregator.java b/libraries-data-2/src/main/java/com/baeldung/flink/operator/BackupAggregator.java similarity index 100% rename from libraries-data/src/main/java/com/baeldung/flink/operator/BackupAggregator.java rename to libraries-data-2/src/main/java/com/baeldung/flink/operator/BackupAggregator.java diff --git a/libraries-data/src/main/java/com/baeldung/flink/operator/InputMessageTimestampAssigner.java b/libraries-data-2/src/main/java/com/baeldung/flink/operator/InputMessageTimestampAssigner.java similarity index 100% rename from libraries-data/src/main/java/com/baeldung/flink/operator/InputMessageTimestampAssigner.java rename to libraries-data-2/src/main/java/com/baeldung/flink/operator/InputMessageTimestampAssigner.java diff --git a/libraries-data/src/main/java/com/baeldung/flink/operator/WordsCapitalizer.java b/libraries-data-2/src/main/java/com/baeldung/flink/operator/WordsCapitalizer.java similarity index 100% rename from libraries-data/src/main/java/com/baeldung/flink/operator/WordsCapitalizer.java rename to libraries-data-2/src/main/java/com/baeldung/flink/operator/WordsCapitalizer.java diff --git a/libraries-data/src/main/java/com/baeldung/flink/schema/BackupSerializationSchema.java b/libraries-data-2/src/main/java/com/baeldung/flink/schema/BackupSerializationSchema.java similarity index 100% rename from libraries-data/src/main/java/com/baeldung/flink/schema/BackupSerializationSchema.java rename to libraries-data-2/src/main/java/com/baeldung/flink/schema/BackupSerializationSchema.java diff --git a/libraries-data/src/main/java/com/baeldung/flink/schema/InputMessageDeserializationSchema.java b/libraries-data-2/src/main/java/com/baeldung/flink/schema/InputMessageDeserializationSchema.java similarity index 100% rename from libraries-data/src/main/java/com/baeldung/flink/schema/InputMessageDeserializationSchema.java rename to libraries-data-2/src/main/java/com/baeldung/flink/schema/InputMessageDeserializationSchema.java diff --git a/libraries/src/main/java/com/baeldung/google/sheets/GoogleAuthorizeUtil.java b/libraries-data-2/src/main/java/com/baeldung/google/sheets/GoogleAuthorizeUtil.java similarity index 100% rename from libraries/src/main/java/com/baeldung/google/sheets/GoogleAuthorizeUtil.java rename to libraries-data-2/src/main/java/com/baeldung/google/sheets/GoogleAuthorizeUtil.java diff --git a/libraries/src/main/java/com/baeldung/google/sheets/SheetsServiceUtil.java b/libraries-data-2/src/main/java/com/baeldung/google/sheets/SheetsServiceUtil.java similarity index 100% rename from libraries/src/main/java/com/baeldung/google/sheets/SheetsServiceUtil.java rename to libraries-data-2/src/main/java/com/baeldung/google/sheets/SheetsServiceUtil.java diff --git a/libraries/src/main/java/com/baeldung/infinispan/CacheConfiguration.java b/libraries-data-2/src/main/java/com/baeldung/infinispan/CacheConfiguration.java similarity index 100% rename from libraries/src/main/java/com/baeldung/infinispan/CacheConfiguration.java rename to libraries-data-2/src/main/java/com/baeldung/infinispan/CacheConfiguration.java diff --git a/libraries/src/main/java/com/baeldung/infinispan/listener/CacheListener.java b/libraries-data-2/src/main/java/com/baeldung/infinispan/listener/CacheListener.java similarity index 100% rename from libraries/src/main/java/com/baeldung/infinispan/listener/CacheListener.java rename to libraries-data-2/src/main/java/com/baeldung/infinispan/listener/CacheListener.java diff --git a/libraries/src/main/java/com/baeldung/infinispan/repository/HelloWorldRepository.java b/libraries-data-2/src/main/java/com/baeldung/infinispan/repository/HelloWorldRepository.java similarity index 100% rename from libraries/src/main/java/com/baeldung/infinispan/repository/HelloWorldRepository.java rename to libraries-data-2/src/main/java/com/baeldung/infinispan/repository/HelloWorldRepository.java diff --git a/libraries/src/main/java/com/baeldung/infinispan/service/HelloWorldService.java b/libraries-data-2/src/main/java/com/baeldung/infinispan/service/HelloWorldService.java similarity index 100% rename from libraries/src/main/java/com/baeldung/infinispan/service/HelloWorldService.java rename to libraries-data-2/src/main/java/com/baeldung/infinispan/service/HelloWorldService.java diff --git a/libraries/src/main/java/com/baeldung/infinispan/service/TransactionalService.java b/libraries-data-2/src/main/java/com/baeldung/infinispan/service/TransactionalService.java similarity index 100% rename from libraries/src/main/java/com/baeldung/infinispan/service/TransactionalService.java rename to libraries-data-2/src/main/java/com/baeldung/infinispan/service/TransactionalService.java diff --git a/libraries/src/main/java/com/baeldung/measurement/WaterTank.java b/libraries-data-2/src/main/java/com/baeldung/measurement/WaterTank.java similarity index 100% rename from libraries/src/main/java/com/baeldung/measurement/WaterTank.java rename to libraries-data-2/src/main/java/com/baeldung/measurement/WaterTank.java diff --git a/libraries/src/main/java/com/baeldung/opencsv/Application.java b/libraries-data-2/src/main/java/com/baeldung/opencsv/Application.java similarity index 100% rename from libraries/src/main/java/com/baeldung/opencsv/Application.java rename to libraries-data-2/src/main/java/com/baeldung/opencsv/Application.java diff --git a/libraries/src/main/java/com/baeldung/opencsv/Constants.java b/libraries-data-2/src/main/java/com/baeldung/opencsv/Constants.java similarity index 100% rename from libraries/src/main/java/com/baeldung/opencsv/Constants.java rename to libraries-data-2/src/main/java/com/baeldung/opencsv/Constants.java diff --git a/libraries/src/main/java/com/baeldung/opencsv/beans/CsvBean.java b/libraries-data-2/src/main/java/com/baeldung/opencsv/beans/CsvBean.java similarity index 100% rename from libraries/src/main/java/com/baeldung/opencsv/beans/CsvBean.java rename to libraries-data-2/src/main/java/com/baeldung/opencsv/beans/CsvBean.java diff --git a/libraries/src/main/java/com/baeldung/opencsv/beans/NamedColumnBean.java b/libraries-data-2/src/main/java/com/baeldung/opencsv/beans/NamedColumnBean.java similarity index 100% rename from libraries/src/main/java/com/baeldung/opencsv/beans/NamedColumnBean.java rename to libraries-data-2/src/main/java/com/baeldung/opencsv/beans/NamedColumnBean.java diff --git a/libraries/src/main/java/com/baeldung/opencsv/beans/SimplePositionBean.java b/libraries-data-2/src/main/java/com/baeldung/opencsv/beans/SimplePositionBean.java similarity index 100% rename from libraries/src/main/java/com/baeldung/opencsv/beans/SimplePositionBean.java rename to libraries-data-2/src/main/java/com/baeldung/opencsv/beans/SimplePositionBean.java diff --git a/libraries/src/main/java/com/baeldung/opencsv/beans/WriteExampleBean.java b/libraries-data-2/src/main/java/com/baeldung/opencsv/beans/WriteExampleBean.java similarity index 100% rename from libraries/src/main/java/com/baeldung/opencsv/beans/WriteExampleBean.java rename to libraries-data-2/src/main/java/com/baeldung/opencsv/beans/WriteExampleBean.java diff --git a/libraries/src/main/java/com/baeldung/opencsv/examples/sync/BeanExamples.java b/libraries-data-2/src/main/java/com/baeldung/opencsv/examples/sync/BeanExamples.java similarity index 100% rename from libraries/src/main/java/com/baeldung/opencsv/examples/sync/BeanExamples.java rename to libraries-data-2/src/main/java/com/baeldung/opencsv/examples/sync/BeanExamples.java diff --git a/libraries/src/main/java/com/baeldung/opencsv/examples/sync/CsvReaderExamples.java b/libraries-data-2/src/main/java/com/baeldung/opencsv/examples/sync/CsvReaderExamples.java similarity index 100% rename from libraries/src/main/java/com/baeldung/opencsv/examples/sync/CsvReaderExamples.java rename to libraries-data-2/src/main/java/com/baeldung/opencsv/examples/sync/CsvReaderExamples.java diff --git a/libraries/src/main/java/com/baeldung/opencsv/examples/sync/CsvWriterExamples.java b/libraries-data-2/src/main/java/com/baeldung/opencsv/examples/sync/CsvWriterExamples.java similarity index 100% rename from libraries/src/main/java/com/baeldung/opencsv/examples/sync/CsvWriterExamples.java rename to libraries-data-2/src/main/java/com/baeldung/opencsv/examples/sync/CsvWriterExamples.java diff --git a/libraries/src/main/java/com/baeldung/opencsv/helpers/Helpers.java b/libraries-data-2/src/main/java/com/baeldung/opencsv/helpers/Helpers.java similarity index 100% rename from libraries/src/main/java/com/baeldung/opencsv/helpers/Helpers.java rename to libraries-data-2/src/main/java/com/baeldung/opencsv/helpers/Helpers.java diff --git a/libraries/src/main/java/com/baeldung/opencsv/pojos/CsvTransfer.java b/libraries-data-2/src/main/java/com/baeldung/opencsv/pojos/CsvTransfer.java similarity index 100% rename from libraries/src/main/java/com/baeldung/opencsv/pojos/CsvTransfer.java rename to libraries-data-2/src/main/java/com/baeldung/opencsv/pojos/CsvTransfer.java diff --git a/libraries/src/main/java/com/baeldung/smooks/converter/OrderConverter.java b/libraries-data-2/src/main/java/com/baeldung/smooks/converter/OrderConverter.java similarity index 100% rename from libraries/src/main/java/com/baeldung/smooks/converter/OrderConverter.java rename to libraries-data-2/src/main/java/com/baeldung/smooks/converter/OrderConverter.java diff --git a/libraries/src/main/java/com/baeldung/smooks/converter/OrderValidator.java b/libraries-data-2/src/main/java/com/baeldung/smooks/converter/OrderValidator.java similarity index 100% rename from libraries/src/main/java/com/baeldung/smooks/converter/OrderValidator.java rename to libraries-data-2/src/main/java/com/baeldung/smooks/converter/OrderValidator.java diff --git a/libraries/src/main/java/com/baeldung/smooks/model/Item.java b/libraries-data-2/src/main/java/com/baeldung/smooks/model/Item.java similarity index 100% rename from libraries/src/main/java/com/baeldung/smooks/model/Item.java rename to libraries-data-2/src/main/java/com/baeldung/smooks/model/Item.java diff --git a/libraries/src/main/java/com/baeldung/smooks/model/Order.java b/libraries-data-2/src/main/java/com/baeldung/smooks/model/Order.java similarity index 100% rename from libraries/src/main/java/com/baeldung/smooks/model/Order.java rename to libraries-data-2/src/main/java/com/baeldung/smooks/model/Order.java diff --git a/libraries/src/main/java/com/baeldung/smooks/model/Status.java b/libraries-data-2/src/main/java/com/baeldung/smooks/model/Status.java similarity index 100% rename from libraries/src/main/java/com/baeldung/smooks/model/Status.java rename to libraries-data-2/src/main/java/com/baeldung/smooks/model/Status.java diff --git a/libraries/src/main/java/com/baeldung/smooks/model/Supplier.java b/libraries-data-2/src/main/java/com/baeldung/smooks/model/Supplier.java similarity index 100% rename from libraries/src/main/java/com/baeldung/smooks/model/Supplier.java rename to libraries-data-2/src/main/java/com/baeldung/smooks/model/Supplier.java diff --git a/libraries/src/main/resources/google-sheets-client-secret.json b/libraries-data-2/src/main/resources/google-sheets-client-secret.json similarity index 100% rename from libraries/src/main/resources/google-sheets-client-secret.json rename to libraries-data-2/src/main/resources/google-sheets-client-secret.json diff --git a/libraries/src/main/resources/smooks/email.ftl b/libraries-data-2/src/main/resources/smooks/email.ftl similarity index 100% rename from libraries/src/main/resources/smooks/email.ftl rename to libraries-data-2/src/main/resources/smooks/email.ftl diff --git a/libraries/src/main/resources/smooks/item-rules.csv b/libraries-data-2/src/main/resources/smooks/item-rules.csv similarity index 100% rename from libraries/src/main/resources/smooks/item-rules.csv rename to libraries-data-2/src/main/resources/smooks/item-rules.csv diff --git a/libraries/src/main/resources/smooks/order.ftl b/libraries-data-2/src/main/resources/smooks/order.ftl similarity index 100% rename from libraries/src/main/resources/smooks/order.ftl rename to libraries-data-2/src/main/resources/smooks/order.ftl diff --git a/libraries/src/main/resources/smooks/order.json b/libraries-data-2/src/main/resources/smooks/order.json similarity index 100% rename from libraries/src/main/resources/smooks/order.json rename to libraries-data-2/src/main/resources/smooks/order.json diff --git a/libraries/src/main/resources/smooks/order.xml b/libraries-data-2/src/main/resources/smooks/order.xml similarity index 100% rename from libraries/src/main/resources/smooks/order.xml rename to libraries-data-2/src/main/resources/smooks/order.xml diff --git a/libraries/src/main/resources/smooks/smooks-mapping.xml b/libraries-data-2/src/main/resources/smooks/smooks-mapping.xml similarity index 100% rename from libraries/src/main/resources/smooks/smooks-mapping.xml rename to libraries-data-2/src/main/resources/smooks/smooks-mapping.xml diff --git a/libraries/src/main/resources/smooks/smooks-transform-edi.xml b/libraries-data-2/src/main/resources/smooks/smooks-transform-edi.xml similarity index 100% rename from libraries/src/main/resources/smooks/smooks-transform-edi.xml rename to libraries-data-2/src/main/resources/smooks/smooks-transform-edi.xml diff --git a/libraries/src/main/resources/smooks/smooks-transform-email.xml b/libraries-data-2/src/main/resources/smooks/smooks-transform-email.xml similarity index 100% rename from libraries/src/main/resources/smooks/smooks-transform-email.xml rename to libraries-data-2/src/main/resources/smooks/smooks-transform-email.xml diff --git a/libraries/src/main/resources/smooks/smooks-validation.xml b/libraries-data-2/src/main/resources/smooks/smooks-validation.xml similarity index 100% rename from libraries/src/main/resources/smooks/smooks-validation.xml rename to libraries-data-2/src/main/resources/smooks/smooks-validation.xml diff --git a/libraries/src/main/resources/smooks/supplier.properties b/libraries-data-2/src/main/resources/smooks/supplier.properties similarity index 100% rename from libraries/src/main/resources/smooks/supplier.properties rename to libraries-data-2/src/main/resources/smooks/supplier.properties diff --git a/libraries/src/test/java/com/baeldung/crdt/CRDTUnitTest.java b/libraries-data-2/src/test/com/baeldung/crdt/CRDTUnitTest.java similarity index 100% rename from libraries/src/test/java/com/baeldung/crdt/CRDTUnitTest.java rename to libraries-data-2/src/test/com/baeldung/crdt/CRDTUnitTest.java diff --git a/libraries-data/src/test/java/com/baeldung/flink/BackupCreatorIntegrationTest.java b/libraries-data-2/src/test/com/baeldung/flink/BackupCreatorIntegrationTest.java similarity index 100% rename from libraries-data/src/test/java/com/baeldung/flink/BackupCreatorIntegrationTest.java rename to libraries-data-2/src/test/com/baeldung/flink/BackupCreatorIntegrationTest.java diff --git a/libraries-data/src/test/java/com/baeldung/flink/WordCapitalizerIntegrationTest.java b/libraries-data-2/src/test/com/baeldung/flink/WordCapitalizerIntegrationTest.java similarity index 100% rename from libraries-data/src/test/java/com/baeldung/flink/WordCapitalizerIntegrationTest.java rename to libraries-data-2/src/test/com/baeldung/flink/WordCapitalizerIntegrationTest.java diff --git a/libraries-data/src/test/java/com/baeldung/flink/WordCountIntegrationTest.java b/libraries-data-2/src/test/com/baeldung/flink/WordCountIntegrationTest.java similarity index 100% rename from libraries-data/src/test/java/com/baeldung/flink/WordCountIntegrationTest.java rename to libraries-data-2/src/test/com/baeldung/flink/WordCountIntegrationTest.java diff --git a/libraries/src/test/java/com/baeldung/google/sheets/GoogleSheetsLiveTest.java b/libraries-data-2/src/test/com/baeldung/google/sheets/GoogleSheetsLiveTest.java similarity index 100% rename from libraries/src/test/java/com/baeldung/google/sheets/GoogleSheetsLiveTest.java rename to libraries-data-2/src/test/com/baeldung/google/sheets/GoogleSheetsLiveTest.java diff --git a/libraries/src/test/java/com/baeldung/hll/HLLLongRunningManualTest.java b/libraries-data-2/src/test/com/baeldung/hll/HLLLongRunningManualTest.java similarity index 100% rename from libraries/src/test/java/com/baeldung/hll/HLLLongRunningManualTest.java rename to libraries-data-2/src/test/com/baeldung/hll/HLLLongRunningManualTest.java diff --git a/libraries/src/test/java/com/baeldung/infinispan/AbstractIntegrationTest.java b/libraries-data-2/src/test/com/baeldung/infinispan/AbstractIntegrationTest.java similarity index 100% rename from libraries/src/test/java/com/baeldung/infinispan/AbstractIntegrationTest.java rename to libraries-data-2/src/test/com/baeldung/infinispan/AbstractIntegrationTest.java diff --git a/libraries/src/test/java/com/baeldung/infinispan/service/HelloWorldServiceTemporaryLiveTest.java b/libraries-data-2/src/test/com/baeldung/infinispan/service/HelloWorldServiceTemporaryLiveTest.java similarity index 100% rename from libraries/src/test/java/com/baeldung/infinispan/service/HelloWorldServiceTemporaryLiveTest.java rename to libraries-data-2/src/test/com/baeldung/infinispan/service/HelloWorldServiceTemporaryLiveTest.java diff --git a/libraries/src/test/java/com/baeldung/infinispan/service/TransactionalServiceIntegrationTest.java b/libraries-data-2/src/test/com/baeldung/infinispan/service/TransactionalServiceIntegrationTest.java similarity index 100% rename from libraries/src/test/java/com/baeldung/infinispan/service/TransactionalServiceIntegrationTest.java rename to libraries-data-2/src/test/com/baeldung/infinispan/service/TransactionalServiceIntegrationTest.java diff --git a/libraries/src/test/java/com/baeldung/measurement/WaterTankUnitTest.java b/libraries-data-2/src/test/com/baeldung/measurement/WaterTankUnitTest.java similarity index 100% rename from libraries/src/test/java/com/baeldung/measurement/WaterTankUnitTest.java rename to libraries-data-2/src/test/com/baeldung/measurement/WaterTankUnitTest.java diff --git a/libraries/src/test/java/com/baeldung/opencsv/OpenCsvIntegrationTest.java b/libraries-data-2/src/test/com/baeldung/opencsv/OpenCsvIntegrationTest.java similarity index 100% rename from libraries/src/test/java/com/baeldung/opencsv/OpenCsvIntegrationTest.java rename to libraries-data-2/src/test/com/baeldung/opencsv/OpenCsvIntegrationTest.java diff --git a/libraries/src/test/java/com/baeldung/smooks/converter/SmooksIntegrationTest.java b/libraries-data-2/src/test/com/baeldung/smooks/converter/SmooksIntegrationTest.java similarity index 100% rename from libraries/src/test/java/com/baeldung/smooks/converter/SmooksIntegrationTest.java rename to libraries-data-2/src/test/com/baeldung/smooks/converter/SmooksIntegrationTest.java diff --git a/libraries-server/README.md b/libraries-server/README.md index dc6bcd0716..b5392f5883 100644 --- a/libraries-server/README.md +++ b/libraries-server/README.md @@ -1,4 +1,4 @@ -### Relevant articles +## Relevant Articles: - [Embedded Jetty Server in Java](http://www.baeldung.com/jetty-embedded) - [Introduction to Netty](http://www.baeldung.com/netty) @@ -8,3 +8,4 @@ - [Testing Netty with EmbeddedChannel](http://www.baeldung.com/testing-netty-embedded-channel) - [MQTT Client in Java](https://www.baeldung.com/java-mqtt-client) - [Guide to XMPP Smack Client](https://www.baeldung.com/xmpp-smack-chat-client) +- [A Guide to NanoHTTPD](https://www.baeldung.com/nanohttpd) diff --git a/libraries/README.md b/libraries/README.md index c7b40e3c94..649e83177b 100644 --- a/libraries/README.md +++ b/libraries/README.md @@ -52,7 +52,6 @@ - [Java Concurrency Utility with JCTools](http://www.baeldung.com/java-concurrency-jc-tools) - [Creating REST Microservices with Javalin](http://www.baeldung.com/javalin-rest-microservices) - [Introduction to JavaPoet](http://www.baeldung.com/java-poet) -- [Introduction to Joda-Time](http://www.baeldung.com/joda-time) - [Convert String to Date in Java](http://www.baeldung.com/java-string-to-date) - [Guide to Resilience4j](http://www.baeldung.com/resilience4j) - [Parsing YAML with SnakeYAML](http://www.baeldung.com/java-snake-yaml) diff --git a/libraries/pom.xml b/libraries/pom.xml index e8ffde5f99..438fe6a519 100644 --- a/libraries/pom.xml +++ b/libraries/pom.xml @@ -36,12 +36,6 @@ cglib ${cglib.version} - - - com.opencsv - opencsv - ${opencsv.version} - org.apache.commons commons-lang3 @@ -52,11 +46,6 @@ commons-net ${commons-net.version} - - tec.units - unit-ri - ${unit-ri.version} - org.jasypt jasypt @@ -347,11 +336,6 @@ ${org.hamcrest.java-hamcrest.version} test - - net.agkn - hll - ${hll.version} - net.bytebuddy byte-buddy @@ -464,21 +448,6 @@ jgrapht-core ${jgrapht.version} - - com.netopyr.wurmloch - wurmloch-crdt - ${crdt.version} - - - org.docx4j - docx4j - ${docx4j.version} - - - javax.xml.bind - jaxb-api - ${jaxb-api.version} - com.github.ben-manes.caffeine caffeine @@ -509,11 +478,6 @@ google-http-client-gson ${googleclient.version} - - org.infinispan - infinispan-core - ${infinispan.version} - @@ -553,11 +517,6 @@ google-oauth-client-jetty ${google-api.version} - - com.google.apis - google-api-services-sheets - ${google-sheets.version} - org.apache.kafka kafka-streams @@ -581,12 +540,6 @@ test test - - - org.milyn - milyn-smooks-all - ${smooks.version} - com.mashape.unirest unirest-java @@ -815,7 +768,6 @@ 4.0.0 1.21 1.23.0 - 0.1.0 0.7.0 3.2.7 1.9.2 @@ -839,7 +791,6 @@ 3.5.0 3.0.0 2.0.0.0 - 1.6.0 1.7.1 2.1.2 1.0 @@ -852,17 +803,13 @@ 2.10 1.5.1 1.15 - 1.0.3 1.0.0 3.10.2 2.5.5 1.23.0 v4-rev493-1.21.0 2.0.0 - 1.7.0 3.0.14 - 9.1.5.Final - 4.1 1.4.9 2.1.2 1.10.L001 @@ -893,8 +840,6 @@ 1.2.6 4.8.1 1.0.1 - 3.3.5 - 2.1 1.58 1.19.4 1.6.0 diff --git a/persistence-modules/spring-boot-mysql/README.md b/persistence-modules/spring-boot-mysql/README.md new file mode 100644 index 0000000000..a5043f965d --- /dev/null +++ b/persistence-modules/spring-boot-mysql/README.md @@ -0,0 +1,3 @@ +## Relevant Articles: + +- [Setting the MySQL JDBC Timezone Using Spring Boot Configuration](https://www.baeldung.com/mysql-jdbc-timezone-spring-boot) diff --git a/persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/hibernate/dynamicupdate/AccountRepository.java b/persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/hibernate/dynamicupdate/AccountRepository.java new file mode 100644 index 0000000000..2fb26c2db6 --- /dev/null +++ b/persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/hibernate/dynamicupdate/AccountRepository.java @@ -0,0 +1,11 @@ +package com.baeldung.hibernate.dynamicupdate; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import com.baeldung.hibernate.dynamicupdate.model.Account; + +@Repository +public interface AccountRepository extends JpaRepository { + +} diff --git a/persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/hibernate/dynamicupdate/DynamicUpdateConfig.java b/persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/hibernate/dynamicupdate/DynamicUpdateConfig.java new file mode 100644 index 0000000000..4871a3d1e2 --- /dev/null +++ b/persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/hibernate/dynamicupdate/DynamicUpdateConfig.java @@ -0,0 +1,80 @@ +package com.baeldung.hibernate.dynamicupdate; + +import java.util.Properties; + +import javax.persistence.EntityManagerFactory; +import javax.sql.DataSource; + +import org.apache.tomcat.dbcp.dbcp2.BasicDataSource; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +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.orm.jpa.JpaTransactionManager; +import org.springframework.orm.jpa.JpaVendorAdapter; +import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; +import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter; +import org.springframework.transaction.PlatformTransactionManager; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +import com.google.common.base.Preconditions; + +@EnableTransactionManagement +@Configuration +@PropertySource({ "classpath:persistence-h2.properties" }) +@EnableJpaRepositories(basePackages = { "com.baeldung.hibernate.dynamicupdate" }) +@ComponentScan({ "com.baeldung.hibernate.dynamicupdate" }) +public class DynamicUpdateConfig { + + @Autowired + private Environment env; + + @Bean + public LocalContainerEntityManagerFactoryBean entityManagerFactory() { + LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean(); + em.setDataSource(dataSource()); + em.setPackagesToScan(new String[] { "com.baeldung.hibernate.dynamicupdate.model" }); + + JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); + em.setJpaVendorAdapter(vendorAdapter); + em.setJpaProperties(additionalProperties()); + + return em; + } + + @Bean + public DataSource dataSource() { + final BasicDataSource dataSource = new BasicDataSource(); + dataSource.setDriverClassName(Preconditions.checkNotNull(env.getProperty("jdbc.driverClassName"))); + dataSource.setUrl(Preconditions.checkNotNull(env.getProperty("jdbc.url"))); + dataSource.setUsername(env.getProperty("jdbc.user")); + dataSource.setPassword(env.getProperty("jdbc.pass")); + + return dataSource; + } + + @Bean + public PlatformTransactionManager transactionManager(EntityManagerFactory emf) { + JpaTransactionManager transactionManager = new JpaTransactionManager(); + transactionManager.setEntityManagerFactory(emf); + + return transactionManager; + } + + @Bean + public PersistenceExceptionTranslationPostProcessor exceptionTranslation() { + return new PersistenceExceptionTranslationPostProcessor(); + } + + Properties additionalProperties() { + Properties properties = new Properties(); + properties.setProperty("hibernate.hbm2ddl.auto", Preconditions.checkNotNull(env.getProperty("hibernate.hbm2ddl.auto"))); + properties.setProperty("hibernate.dialect", Preconditions.checkNotNull(env.getProperty("hibernate.dialect"))); + properties.setProperty("hibernate.show_sql", "true"); + return properties; + } +} \ No newline at end of file diff --git a/persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/hibernate/dynamicupdate/model/Account.java b/persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/hibernate/dynamicupdate/model/Account.java new file mode 100644 index 0000000000..b3753112fe --- /dev/null +++ b/persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/hibernate/dynamicupdate/model/Account.java @@ -0,0 +1,97 @@ +package com.baeldung.hibernate.dynamicupdate.model; + +import java.text.MessageFormat; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; + +import org.hibernate.annotations.DynamicUpdate; + +@Entity +@DynamicUpdate +public class Account { + + @Id + private int id; + + @Column + private String name; + + @Column + private String type; + + @Column + private boolean active; + + public Account() { + } + + public Account(int id, String name, String type, boolean active) { + super(); + this.id = id; + this.name = name; + this.type = type; + this.active = active; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public boolean isActive() { + return active; + } + + public void setActive(boolean active) { + this.active = active; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + id; + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Account other = (Account) obj; + if (id != other.id) + return false; + return true; + } + + @Override + public String toString() { + return MessageFormat.format("id:{0}, name:{1}, active:{2}, type:{3}", id, name, active, type); + } + +} diff --git a/persistence-modules/spring-hibernate-5/src/main/resources/logback.xml b/persistence-modules/spring-hibernate-5/src/main/resources/logback.xml index ec0dc2469a..035520aa15 100644 --- a/persistence-modules/spring-hibernate-5/src/main/resources/logback.xml +++ b/persistence-modules/spring-hibernate-5/src/main/resources/logback.xml @@ -1,19 +1,19 @@ - - - - - web - %date [%thread] %-5level %logger{36} - %message%n - - - - - - - - - - - - - + + + + + web - %date [%thread] %-5level %logger{36} - %message%n + + + + + + + + + + + + + \ No newline at end of file diff --git a/persistence-modules/spring-hibernate-5/src/test/java/com/baeldung/hibernate/dynamicupdate/DynamicUpdateIntegrationTest.java b/persistence-modules/spring-hibernate-5/src/test/java/com/baeldung/hibernate/dynamicupdate/DynamicUpdateIntegrationTest.java new file mode 100644 index 0000000000..fc183d1f19 --- /dev/null +++ b/persistence-modules/spring-hibernate-5/src/test/java/com/baeldung/hibernate/dynamicupdate/DynamicUpdateIntegrationTest.java @@ -0,0 +1,44 @@ +package com.baeldung.hibernate.dynamicupdate; + +import javax.transaction.Transactional; + +import org.junit.FixMethodOrder; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.MethodSorters; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.annotation.Commit; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.AnnotationConfigContextLoader; + +import com.baeldung.hibernate.dynamicupdate.model.Account; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = DynamicUpdateConfig.class, loader = AnnotationConfigContextLoader.class) +@Transactional +@FixMethodOrder(MethodSorters.NAME_ASCENDING) +public class DynamicUpdateIntegrationTest { + + private static final Integer ACCOUNT_ID = 1; + + @Autowired + private AccountRepository accountRepository; + + @Test + @Commit + public void testA_whenTestAccountIsSaved_thenSuccess() { + Account account = new Account(ACCOUNT_ID, "account1", "regional", true); + accountRepository.save(account); + } + + @Test + @Commit + // Enable Hibernate's debug logging in logback.xml to see the generated SQL statement. + public void testB_whenAccountNameUpdated_thenSuccess() { + Account account = accountRepository.findOne(ACCOUNT_ID); + account.setName("Test Account"); + accountRepository.save(account); + } + +} diff --git a/pom.xml b/pom.xml index 31fc639d87..14b9d3cf81 100644 --- a/pom.xml +++ b/pom.xml @@ -676,6 +676,7 @@ spring-dispatcher-servlet spring-drools + spring-di spring-ehcache @@ -731,8 +732,6 @@ spring-security-angular/server spring-security-cache-control - spring-security-client - spring-security-core spring-security-mvc-boot spring-security-mvc-custom @@ -875,6 +874,7 @@ spring-data-rest spring-dispatcher-servlet spring-drools + spring-di spring-ehcache spring-freemarker persistence-modules/spring-hibernate-3 @@ -910,7 +910,6 @@ spring-security-acl spring-security-angular spring-security-cache-control - spring-security-client spring-security-core spring-security-mvc-boot spring-security-mvc-custom @@ -1348,6 +1347,7 @@ spring-data-rest-querydsl spring-dispatcher-servlet spring-drools + spring-di spring-ehcache spring-ejb @@ -1403,9 +1403,6 @@ spring-security-acl spring-security-angular/server spring-security-cache-control - - spring-security-client - spring-security-core spring-security-mvc-boot spring-security-mvc-custom @@ -1591,3 +1588,4 @@ + diff --git a/spring-5-mvc/pom.xml b/spring-5-mvc/pom.xml index 1d96df3d03..9569d52abf 100644 --- a/spring-5-mvc/pom.xml +++ b/spring-5-mvc/pom.xml @@ -3,9 +3,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - com.baeldung spring-5-mvc - 0.0.1-SNAPSHOT spring-5-mvc spring 5 MVC sample project about new features jar @@ -83,6 +81,11 @@ ${jayway-rest-assured.version} test + + com.github.javafaker + javafaker + 0.18 + diff --git a/spring-security-client/spring-security-thymeleaf-authentication/src/main/java/org/baeldung/config/Application.java b/spring-5-mvc/src/main/java/com/baeldung/idc/Application.java similarity index 60% rename from spring-security-client/spring-security-thymeleaf-authentication/src/main/java/org/baeldung/config/Application.java rename to spring-5-mvc/src/main/java/com/baeldung/idc/Application.java index 329b104143..7288aded73 100644 --- a/spring-security-client/spring-security-thymeleaf-authentication/src/main/java/org/baeldung/config/Application.java +++ b/spring-5-mvc/src/main/java/com/baeldung/idc/Application.java @@ -1,11 +1,10 @@ -package org.baeldung.config; +package com.baeldung.idc; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.support.SpringBootServletInitializer; @SpringBootApplication -public class Application extends SpringBootServletInitializer { +public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); diff --git a/spring-5-mvc/src/main/java/com/baeldung/idc/Book.java b/spring-5-mvc/src/main/java/com/baeldung/idc/Book.java new file mode 100644 index 0000000000..387f7049e1 --- /dev/null +++ b/spring-5-mvc/src/main/java/com/baeldung/idc/Book.java @@ -0,0 +1,55 @@ +package com.baeldung.idc; + +import org.springframework.stereotype.Component; + +@Component +public class Book { + + private final int id; + + private final String title; + + private final String author; + + private final String genre; + + public Book() { + this(-1, "", "", ""); + } + + public Book(int id, String title, String author, String genre) { + this.id = id; + this.title = title; + this.author = author; + this.genre = genre; + } + + /** + * @return the id + */ + public int getId() { + return id; + } + + /** + * @return the title + */ + public String getTitle() { + return title; + } + + /** + * @return the author + */ + public String getAuthor() { + return author; + } + + /** + * @return the genre + */ + public String getGenre() { + return genre; + } + +} diff --git a/spring-5-mvc/src/main/java/com/baeldung/idc/BookController.java b/spring-5-mvc/src/main/java/com/baeldung/idc/BookController.java new file mode 100644 index 0000000000..5b2349715d --- /dev/null +++ b/spring-5-mvc/src/main/java/com/baeldung/idc/BookController.java @@ -0,0 +1,34 @@ +package com.baeldung.idc; + +import java.util.List; +import java.util.Optional; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/book") +public class BookController implements BookOperations { + + private BookRepository repo; + + public BookController(BookRepository repo) { + this.repo = repo; + } + + @Override + public List getAll() { + return repo.getItems(); + } + + @Override + public Optional getById(int id) { + return repo.getById(id); + } + + @Override + public void save(Book book, int id) { + repo.save(id, book); + } + +} diff --git a/spring-5-mvc/src/main/java/com/baeldung/idc/BookOperations.java b/spring-5-mvc/src/main/java/com/baeldung/idc/BookOperations.java new file mode 100644 index 0000000000..70b44561af --- /dev/null +++ b/spring-5-mvc/src/main/java/com/baeldung/idc/BookOperations.java @@ -0,0 +1,23 @@ +package com.baeldung.idc; + +import java.util.List; +import java.util.Optional; + +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; + +@RequestMapping("/default") +public interface BookOperations { + + @GetMapping("/") + List getAll(); + + @GetMapping("/{id}") + Optional getById(@PathVariable int id); + + @PostMapping("/save/{id}") + public void save(@RequestBody Book book, @PathVariable int id); +} diff --git a/spring-5-mvc/src/main/java/com/baeldung/idc/BookRepository.java b/spring-5-mvc/src/main/java/com/baeldung/idc/BookRepository.java new file mode 100644 index 0000000000..0550b3b79a --- /dev/null +++ b/spring-5-mvc/src/main/java/com/baeldung/idc/BookRepository.java @@ -0,0 +1,61 @@ +package com.baeldung.idc; + +import java.util.List; +import java.util.Locale; +import java.util.Optional; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +import javax.annotation.PostConstruct; + +import org.springframework.stereotype.Component; + +import com.github.javafaker.Faker; + +/** + * Repository for storing the books. + * + * It serves just for illustrative purposes and is completely in-memory. It uses Java Faker library in order to generate data. + * + * @author A.Shcherbakov + * + */ +@Component +public class BookRepository { + + private List items; + + @PostConstruct + public void init() { + Faker faker = new Faker(Locale.ENGLISH); + final com.github.javafaker.Book book = faker.book(); + this.items = IntStream.range(1, faker.random() + .nextInt(10, 20)) + .mapToObj(i -> new Book(i, book.title(), book.author(), book.genre())) + .collect(Collectors.toList()); + + } + + public int getCount() { + return items.size(); + } + + public List getItems() { + return items; + } + + public Optional getById(int id) { + return this.items.stream() + .filter(item -> id == item.getId()) + .findFirst(); + } + + public void save(int id, Book book) { + IntStream.range(0, items.size()) + .filter(i -> items.get(i) + .getId() == id) + .findFirst() + .ifPresent(i -> this.items.set(i, book)); + } + +} diff --git a/spring-all/README.md b/spring-all/README.md index b5e91d8d60..d3296bd457 100644 --- a/spring-all/README.md +++ b/spring-all/README.md @@ -34,3 +34,4 @@ The "REST With Spring" Classes: http://bit.ly/restwithspring - [Spring Events](https://www.baeldung.com/spring-events) - [Spring Null-Safety Annotations](https://www.baeldung.com/spring-null-safety-annotations) - [Using @Autowired in Abstract Classes](https://www.baeldung.com/spring-autowired-abstract-class) +- [The Spring @Qualifier Annotation](https://www.baeldung.com/spring-qualifier-annotation) diff --git a/spring-all/src/main/java/com/baeldung/scheduling/ScheduledFixedRateExample.java b/spring-all/src/main/java/com/baeldung/scheduling/ScheduledFixedRateExample.java new file mode 100644 index 0000000000..8ccd2c773b --- /dev/null +++ b/spring-all/src/main/java/com/baeldung/scheduling/ScheduledFixedRateExample.java @@ -0,0 +1,18 @@ +package com.baeldung.scheduling; + +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +@Component +@EnableAsync +public class ScheduledFixedRateExample { + @Async + @Scheduled(fixedRate = 1000) + public void scheduleFixedRateTaskAsync() throws InterruptedException { + System.out.println("Fixed rate task async - " + System.currentTimeMillis() / 1000); + Thread.sleep(2000); + } + +} diff --git a/spring-all/src/main/java/com/baeldung/scheduling/SpringSchedulingFixedRateConfig.java b/spring-all/src/main/java/com/baeldung/scheduling/SpringSchedulingFixedRateConfig.java new file mode 100644 index 0000000000..6000f75ec2 --- /dev/null +++ b/spring-all/src/main/java/com/baeldung/scheduling/SpringSchedulingFixedRateConfig.java @@ -0,0 +1,12 @@ +package com.baeldung.scheduling; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.EnableScheduling; + +@Configuration +@EnableScheduling +@ComponentScan("com.baeldung.scheduling") +public class SpringSchedulingFixedRateConfig { + +} \ No newline at end of file diff --git a/spring-all/src/test/java/com/baeldung/scheduling/ScheduledFixedRateExampleIntegrationTest.java b/spring-all/src/test/java/com/baeldung/scheduling/ScheduledFixedRateExampleIntegrationTest.java new file mode 100644 index 0000000000..ef7c7c68fd --- /dev/null +++ b/spring-all/src/test/java/com/baeldung/scheduling/ScheduledFixedRateExampleIntegrationTest.java @@ -0,0 +1,17 @@ +package com.baeldung.scheduling; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.AnnotationConfigContextLoader; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = { SpringSchedulingFixedRateConfig.class }, loader = AnnotationConfigContextLoader.class) +public class ScheduledFixedRateExampleIntegrationTest { + + @Test + public void testScheduledFixedRateAnnotation() throws InterruptedException { + Thread.sleep(5000); + } +} diff --git a/spring-boot-data/README.md b/spring-boot-data/README.md index 3fd1d17994..6f0b8c8123 100644 --- a/spring-boot-data/README.md +++ b/spring-boot-data/README.md @@ -1,3 +1,5 @@ -### Relevant Articles: +## Relevant Articles: + - [Formatting JSON Dates in Spring Boot](https://www.baeldung.com/spring-boot-formatting-json-dates) - [Rendering Exceptions in JSON with Spring](https://www.baeldung.com/spring-exceptions-json) +- [Disable Spring Data Auto Configuration](https://www.baeldung.com/spring-data-disable-auto-config) diff --git a/spring-cloud/spring-cloud-stream/spring-cloud-stream-kafka/README.md b/spring-cloud/spring-cloud-stream/spring-cloud-stream-kafka/README.md new file mode 100644 index 0000000000..81e0ffe5c8 --- /dev/null +++ b/spring-cloud/spring-cloud-stream/spring-cloud-stream-kafka/README.md @@ -0,0 +1,3 @@ +## Relevant Articles: + +- [Guide to Spring Cloud Stream with Kafka, Apache Avro and Confluent Schema Registry](https://www.baeldung.com/spring-cloud-stream-kafka-avro-confluent) diff --git a/spring-core-2/README.md b/spring-core-2/README.md new file mode 100644 index 0000000000..4c9e3b9ddf --- /dev/null +++ b/spring-core-2/README.md @@ -0,0 +1,3 @@ +## Relevant Articles: + +- [Understanding getBean() in Spring](https://www.baeldung.com/spring-getbean) diff --git a/spring-di/pom.xml b/spring-di/pom.xml new file mode 100644 index 0000000000..62456ba31c --- /dev/null +++ b/spring-di/pom.xml @@ -0,0 +1,101 @@ + + + 4.0.0 + spring-di + 1.0-SNAPSHOT + war + + + parent-boot-2 + com.baeldung + 0.0.1-SNAPSHOT + ../parent-boot-2 + + + + + + org.springframework + spring-context + + + + javax.annotation + javax.annotation-api + ${annotation-api.version} + + + + + org.springframework + spring-test + test + + + + + + + + org.springframework + spring-framework-bom + ${org.springframework.version} + pom + import + + + org.springframework + spring-core + ${org.springframework.version} + + + + + + spring-di + + + src/main/resources + true + + + + + org.apache.maven.plugins + maven-war-plugin + 3.2.2 + + false + + + + + + + + dev + + true + + + dev + + + + prod + + prod + + + + + + org.baeldung.org.baeldung.sample.App + + 5.0.6.RELEASE + 1.3.2 + + + \ No newline at end of file diff --git a/spring-di/src/main/java/org/baeldung/sample/App.java b/spring-di/src/main/java/org/baeldung/sample/App.java new file mode 100644 index 0000000000..17fc49fc8c --- /dev/null +++ b/spring-di/src/main/java/org/baeldung/sample/App.java @@ -0,0 +1,11 @@ +package org.baeldung.sample; + +import org.springframework.context.annotation.AnnotationConfigApplicationContext; + +public class App { + public static void main(String[] args) { + AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class); + FooService fooService = ctx.getBean(FooService.class); + fooService.doStuff(); + } +} diff --git a/spring-di/src/main/java/org/baeldung/sample/AppConfig.java b/spring-di/src/main/java/org/baeldung/sample/AppConfig.java new file mode 100644 index 0000000000..8a177d2611 --- /dev/null +++ b/spring-di/src/main/java/org/baeldung/sample/AppConfig.java @@ -0,0 +1,10 @@ +package org.baeldung.sample; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ComponentScan("org.baeldung.sample") +public class AppConfig { + +} diff --git a/spring-di/src/main/java/org/baeldung/sample/Bar.java b/spring-di/src/main/java/org/baeldung/sample/Bar.java new file mode 100644 index 0000000000..54e8d54418 --- /dev/null +++ b/spring-di/src/main/java/org/baeldung/sample/Bar.java @@ -0,0 +1,5 @@ +package org.baeldung.sample; + +public class Bar { + +} diff --git a/spring-di/src/main/java/org/baeldung/sample/BarFormatter.java b/spring-di/src/main/java/org/baeldung/sample/BarFormatter.java new file mode 100644 index 0000000000..8396653970 --- /dev/null +++ b/spring-di/src/main/java/org/baeldung/sample/BarFormatter.java @@ -0,0 +1,13 @@ +package org.baeldung.sample; + +import org.springframework.stereotype.Component; + +@FormatterType("Bar") +@Component +public class BarFormatter implements Formatter { + + public String format() { + return "bar"; + } + +} diff --git a/spring-di/src/main/java/org/baeldung/sample/Foo.java b/spring-di/src/main/java/org/baeldung/sample/Foo.java new file mode 100644 index 0000000000..562a00121a --- /dev/null +++ b/spring-di/src/main/java/org/baeldung/sample/Foo.java @@ -0,0 +1,5 @@ +package org.baeldung.sample; + +public class Foo { + +} diff --git a/spring-di/src/main/java/org/baeldung/sample/FooDAO.java b/spring-di/src/main/java/org/baeldung/sample/FooDAO.java new file mode 100644 index 0000000000..151c0c38de --- /dev/null +++ b/spring-di/src/main/java/org/baeldung/sample/FooDAO.java @@ -0,0 +1,5 @@ +package org.baeldung.sample; + +public class FooDAO { + +} diff --git a/spring-di/src/main/java/org/baeldung/sample/FooFormatter.java b/spring-di/src/main/java/org/baeldung/sample/FooFormatter.java new file mode 100644 index 0000000000..68cb7f81f2 --- /dev/null +++ b/spring-di/src/main/java/org/baeldung/sample/FooFormatter.java @@ -0,0 +1,13 @@ +package org.baeldung.sample; + +import org.springframework.stereotype.Component; + +@FormatterType("Foo") +@Component +public class FooFormatter implements Formatter { + + public String format() { + return "foo"; + } + +} diff --git a/spring-di/src/main/java/org/baeldung/sample/FooService.java b/spring-di/src/main/java/org/baeldung/sample/FooService.java new file mode 100644 index 0000000000..711711f205 --- /dev/null +++ b/spring-di/src/main/java/org/baeldung/sample/FooService.java @@ -0,0 +1,17 @@ +package org.baeldung.sample; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class FooService { + + @Autowired + @FormatterType("Foo") + private Formatter formatter; + + public String doStuff() { + return formatter.format(); + } + +} diff --git a/spring-di/src/main/java/org/baeldung/sample/Formatter.java b/spring-di/src/main/java/org/baeldung/sample/Formatter.java new file mode 100644 index 0000000000..ab29c2b848 --- /dev/null +++ b/spring-di/src/main/java/org/baeldung/sample/Formatter.java @@ -0,0 +1,7 @@ +package org.baeldung.sample; + +public interface Formatter { + + String format(); + +} diff --git a/spring-di/src/main/java/org/baeldung/sample/FormatterType.java b/spring-di/src/main/java/org/baeldung/sample/FormatterType.java new file mode 100644 index 0000000000..a00a9750bf --- /dev/null +++ b/spring-di/src/main/java/org/baeldung/sample/FormatterType.java @@ -0,0 +1,17 @@ +package org.baeldung.sample; + +import org.springframework.beans.factory.annotation.Qualifier; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Qualifier +@Target({ ElementType.FIELD, ElementType.METHOD, ElementType.TYPE, ElementType.PARAMETER }) +@Retention(RetentionPolicy.RUNTIME) +public @interface FormatterType { + + String value(); + +} diff --git a/spring-di/src/test/java/org/baeldung/sample/FooServiceIntegrationTest.java b/spring-di/src/test/java/org/baeldung/sample/FooServiceIntegrationTest.java new file mode 100644 index 0000000000..6b518395a1 --- /dev/null +++ b/spring-di/src/test/java/org/baeldung/sample/FooServiceIntegrationTest.java @@ -0,0 +1,22 @@ +package org.baeldung.sample; + +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.AnnotationConfigContextLoader; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = AppConfig.class, loader = AnnotationConfigContextLoader.class) +public class FooServiceIntegrationTest { + + @Autowired + FooService fooService; + + @Test + public void whenFooFormatterType_thenReturnFoo() { + Assert.assertEquals("foo", fooService.doStuff()); + } +} diff --git a/spring-security-client/README.MD b/spring-security-client/README.MD deleted file mode 100644 index 0b0af7ffe1..0000000000 --- a/spring-security-client/README.MD +++ /dev/null @@ -1,11 +0,0 @@ -========= -## Spring Security Authentication/Authorization Example Project - -##The Course -The "REST With Spring" Classes: http://github.learnspringsecurity.com - -### Relevant Articles: -- [Spring Security Manual Authentication](http://www.baeldung.com/spring-security-authentication) - -### Build the Project -mvn clean install diff --git a/spring-security-client/pom.xml b/spring-security-client/pom.xml deleted file mode 100644 index 96ac837a09..0000000000 --- a/spring-security-client/pom.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - 4.0.0 - spring-security-client - spring-security-client - pom - - - com.baeldung - parent-modules - 1.0.0-SNAPSHOT - .. - - - - spring-security-jsp-authentication - spring-security-jsp-authorize - spring-security-jsp-config - spring-security-mvc - spring-security-thymeleaf-authentication - spring-security-thymeleaf-authorize - spring-security-thymeleaf-config - - diff --git a/spring-security-client/spring-security-jsp-authentication/pom.xml b/spring-security-client/spring-security-jsp-authentication/pom.xml deleted file mode 100644 index 9cb2a45331..0000000000 --- a/spring-security-client/spring-security-jsp-authentication/pom.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - 4.0.0 - com.baeldung - spring-security-jsp-authentication - 0.0.1-SNAPSHOT - spring-security-jsp-authentication - war - Spring Security JSP Authentication tag sample - - - parent-boot-1 - com.baeldung - 0.0.1-SNAPSHOT - ../../parent-boot-1 - - - - - org.springframework.boot - spring-boot-starter-security - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-tomcat - - - org.apache.tomcat.embed - tomcat-embed-jasper - provided - - - javax.servlet - jstl - - - org.springframework.security - spring-security-taglibs - - - - diff --git a/spring-security-client/spring-security-jsp-authentication/src/main/java/org/baeldung/config/Application.java b/spring-security-client/spring-security-jsp-authentication/src/main/java/org/baeldung/config/Application.java deleted file mode 100644 index c2c5939676..0000000000 --- a/spring-security-client/spring-security-jsp-authentication/src/main/java/org/baeldung/config/Application.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.baeldung.config; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.support.SpringBootServletInitializer; - -@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class }) -public class Application extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(Application.class); - } - - public static void main(String[] args) { - SpringApplication.run(Application.class, args); - } - -} diff --git a/spring-security-client/spring-security-jsp-authentication/src/main/java/org/baeldung/config/MvcConfig.java b/spring-security-client/spring-security-jsp-authentication/src/main/java/org/baeldung/config/MvcConfig.java deleted file mode 100644 index fa2a324146..0000000000 --- a/spring-security-client/spring-security-jsp-authentication/src/main/java/org/baeldung/config/MvcConfig.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.baeldung.config; - -import org.springframework.context.annotation.Configuration; -import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; - -@Configuration -public class MvcConfig extends WebMvcConfigurerAdapter { - - public MvcConfig() { - super(); - } - - // - - @Override - public void addViewControllers(final ViewControllerRegistry registry) { - super.addViewControllers(registry); - registry.addViewController("/").setViewName("forward:/index"); - registry.addViewController("/index"); - } - -} \ No newline at end of file diff --git a/spring-security-client/spring-security-jsp-authentication/src/main/java/org/baeldung/config/SecurityConfig.java b/spring-security-client/spring-security-jsp-authentication/src/main/java/org/baeldung/config/SecurityConfig.java deleted file mode 100644 index bd6c56d38a..0000000000 --- a/spring-security-client/spring-security-jsp-authentication/src/main/java/org/baeldung/config/SecurityConfig.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.baeldung.config; - -import org.springframework.context.annotation.Configuration; -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.builders.WebSecurity; -import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; - -@Configuration -@EnableWebSecurity -public class SecurityConfig extends WebSecurityConfigurerAdapter { - - @Override - protected void configure(final AuthenticationManagerBuilder auth) throws Exception { - // @formatter:off - auth.inMemoryAuthentication() - .withUser("john").password("123").roles("USER") - .and() - .withUser("tom").password("111").roles("ADMIN"); - // @formatter:on - } - - @Override - public void configure(WebSecurity web) throws Exception { - web.ignoring().antMatchers("/resources/**"); - } - - @Override - protected void configure(final HttpSecurity http) throws Exception { - // @formatter:off - http.authorizeRequests() - .antMatchers("/login").permitAll() - .antMatchers("/admin").hasRole("ADMIN") - .anyRequest().authenticated() - .and().formLogin().permitAll() - ; - // @formatter:on - } -} \ No newline at end of file diff --git a/spring-security-client/spring-security-jsp-authentication/src/main/resources/application.properties b/spring-security-client/spring-security-jsp-authentication/src/main/resources/application.properties deleted file mode 100644 index 26a80c79f3..0000000000 --- a/spring-security-client/spring-security-jsp-authentication/src/main/resources/application.properties +++ /dev/null @@ -1,3 +0,0 @@ -server.port: 8081 -spring.mvc.view.prefix: /WEB-INF/jsp/ -spring.mvc.view.suffix: .jsp \ No newline at end of file diff --git a/spring-security-client/spring-security-jsp-authentication/src/main/resources/logback.xml b/spring-security-client/spring-security-jsp-authentication/src/main/resources/logback.xml deleted file mode 100644 index 7d900d8ea8..0000000000 --- a/spring-security-client/spring-security-jsp-authentication/src/main/resources/logback.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - - \ No newline at end of file diff --git a/spring-security-client/spring-security-jsp-authentication/src/main/webapp/WEB-INF/jsp/index.jsp b/spring-security-client/spring-security-jsp-authentication/src/main/webapp/WEB-INF/jsp/index.jsp deleted file mode 100644 index 90c00e980a..0000000000 --- a/spring-security-client/spring-security-jsp-authentication/src/main/webapp/WEB-INF/jsp/index.jsp +++ /dev/null @@ -1,24 +0,0 @@ - <%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %> - - - - -Spring Security JSP Authorize - - - - - -
- Current user name: -
- Current user roles: -
- - \ No newline at end of file diff --git a/spring-security-client/spring-security-jsp-authentication/src/test/java/org/baeldung/SpringContextIntegrationTest.java b/spring-security-client/spring-security-jsp-authentication/src/test/java/org/baeldung/SpringContextIntegrationTest.java deleted file mode 100644 index 66243ef00d..0000000000 --- a/spring-security-client/spring-security-jsp-authentication/src/test/java/org/baeldung/SpringContextIntegrationTest.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.baeldung; - -import org.baeldung.config.Application; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = Application.class) -public class SpringContextIntegrationTest { - - @Test - public void whenSpringContextIsBootstrapped_thenNoExceptions() { - } -} diff --git a/spring-security-client/spring-security-jsp-authentication/src/test/java/org/baeldung/SpringContextTest.java b/spring-security-client/spring-security-jsp-authentication/src/test/java/org/baeldung/SpringContextTest.java deleted file mode 100644 index 0afb3899db..0000000000 --- a/spring-security-client/spring-security-jsp-authentication/src/test/java/org/baeldung/SpringContextTest.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.baeldung; - -import org.baeldung.config.Application; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = Application.class) -public class SpringContextTest { - - @Test - public void whenSpringContextIsBootstrapped_thenNoExceptions() { - } -} diff --git a/spring-security-client/spring-security-jsp-authorize/pom.xml b/spring-security-client/spring-security-jsp-authorize/pom.xml deleted file mode 100644 index ad4c9d105b..0000000000 --- a/spring-security-client/spring-security-jsp-authorize/pom.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - 4.0.0 - com.baeldung - spring-security-jsp-authorize - 0.0.1-SNAPSHOT - spring-security-jsp-authorize - Spring Security JSP Authorize tag sample - war - - - parent-boot-1 - com.baeldung - 0.0.1-SNAPSHOT - ../../parent-boot-1 - - - - - org.springframework.boot - spring-boot-starter-security - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-tomcat - - - org.apache.tomcat.embed - tomcat-embed-jasper - provided - - - javax.servlet - jstl - - - org.springframework.security - spring-security-taglibs - - - - diff --git a/spring-security-client/spring-security-jsp-authorize/src/main/java/org/baeldung/config/Application.java b/spring-security-client/spring-security-jsp-authorize/src/main/java/org/baeldung/config/Application.java deleted file mode 100644 index c2c5939676..0000000000 --- a/spring-security-client/spring-security-jsp-authorize/src/main/java/org/baeldung/config/Application.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.baeldung.config; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.support.SpringBootServletInitializer; - -@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class }) -public class Application extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(Application.class); - } - - public static void main(String[] args) { - SpringApplication.run(Application.class, args); - } - -} diff --git a/spring-security-client/spring-security-jsp-authorize/src/main/java/org/baeldung/config/MvcConfig.java b/spring-security-client/spring-security-jsp-authorize/src/main/java/org/baeldung/config/MvcConfig.java deleted file mode 100644 index fa2a324146..0000000000 --- a/spring-security-client/spring-security-jsp-authorize/src/main/java/org/baeldung/config/MvcConfig.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.baeldung.config; - -import org.springframework.context.annotation.Configuration; -import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; - -@Configuration -public class MvcConfig extends WebMvcConfigurerAdapter { - - public MvcConfig() { - super(); - } - - // - - @Override - public void addViewControllers(final ViewControllerRegistry registry) { - super.addViewControllers(registry); - registry.addViewController("/").setViewName("forward:/index"); - registry.addViewController("/index"); - } - -} \ No newline at end of file diff --git a/spring-security-client/spring-security-jsp-authorize/src/main/java/org/baeldung/config/SecurityConfig.java b/spring-security-client/spring-security-jsp-authorize/src/main/java/org/baeldung/config/SecurityConfig.java deleted file mode 100644 index bd6c56d38a..0000000000 --- a/spring-security-client/spring-security-jsp-authorize/src/main/java/org/baeldung/config/SecurityConfig.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.baeldung.config; - -import org.springframework.context.annotation.Configuration; -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.builders.WebSecurity; -import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; - -@Configuration -@EnableWebSecurity -public class SecurityConfig extends WebSecurityConfigurerAdapter { - - @Override - protected void configure(final AuthenticationManagerBuilder auth) throws Exception { - // @formatter:off - auth.inMemoryAuthentication() - .withUser("john").password("123").roles("USER") - .and() - .withUser("tom").password("111").roles("ADMIN"); - // @formatter:on - } - - @Override - public void configure(WebSecurity web) throws Exception { - web.ignoring().antMatchers("/resources/**"); - } - - @Override - protected void configure(final HttpSecurity http) throws Exception { - // @formatter:off - http.authorizeRequests() - .antMatchers("/login").permitAll() - .antMatchers("/admin").hasRole("ADMIN") - .anyRequest().authenticated() - .and().formLogin().permitAll() - ; - // @formatter:on - } -} \ No newline at end of file diff --git a/spring-security-client/spring-security-jsp-authorize/src/main/resources/application.properties b/spring-security-client/spring-security-jsp-authorize/src/main/resources/application.properties deleted file mode 100644 index 26a80c79f3..0000000000 --- a/spring-security-client/spring-security-jsp-authorize/src/main/resources/application.properties +++ /dev/null @@ -1,3 +0,0 @@ -server.port: 8081 -spring.mvc.view.prefix: /WEB-INF/jsp/ -spring.mvc.view.suffix: .jsp \ No newline at end of file diff --git a/spring-security-client/spring-security-jsp-authorize/src/main/resources/logback.xml b/spring-security-client/spring-security-jsp-authorize/src/main/resources/logback.xml deleted file mode 100644 index 7d900d8ea8..0000000000 --- a/spring-security-client/spring-security-jsp-authorize/src/main/resources/logback.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - - \ No newline at end of file diff --git a/spring-security-client/spring-security-jsp-authorize/src/main/webapp/WEB-INF/jsp/index.jsp b/spring-security-client/spring-security-jsp-authorize/src/main/webapp/WEB-INF/jsp/index.jsp deleted file mode 100644 index 08af845bd4..0000000000 --- a/spring-security-client/spring-security-jsp-authorize/src/main/webapp/WEB-INF/jsp/index.jsp +++ /dev/null @@ -1,33 +0,0 @@ - <%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %> - - - - -Spring Security JSP Authorize - - - - - -
- - Only admins can see this message - - - - Only users can see this message - -
- - - Only users who can call "/admin" URL can see this message - -
- - \ No newline at end of file diff --git a/spring-security-client/spring-security-jsp-authorize/src/test/java/org/baeldung/SpringContextIntegrationTest.java b/spring-security-client/spring-security-jsp-authorize/src/test/java/org/baeldung/SpringContextIntegrationTest.java deleted file mode 100644 index 66243ef00d..0000000000 --- a/spring-security-client/spring-security-jsp-authorize/src/test/java/org/baeldung/SpringContextIntegrationTest.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.baeldung; - -import org.baeldung.config.Application; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = Application.class) -public class SpringContextIntegrationTest { - - @Test - public void whenSpringContextIsBootstrapped_thenNoExceptions() { - } -} diff --git a/spring-security-client/spring-security-jsp-authorize/src/test/java/org/baeldung/SpringContextTest.java b/spring-security-client/spring-security-jsp-authorize/src/test/java/org/baeldung/SpringContextTest.java deleted file mode 100644 index 0afb3899db..0000000000 --- a/spring-security-client/spring-security-jsp-authorize/src/test/java/org/baeldung/SpringContextTest.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.baeldung; - -import org.baeldung.config.Application; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = Application.class) -public class SpringContextTest { - - @Test - public void whenSpringContextIsBootstrapped_thenNoExceptions() { - } -} diff --git a/spring-security-client/spring-security-jsp-config/pom.xml b/spring-security-client/spring-security-jsp-config/pom.xml deleted file mode 100644 index 02ea206738..0000000000 --- a/spring-security-client/spring-security-jsp-config/pom.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - 4.0.0 - com.baeldung - spring-security-jsp-config - 0.0.1-SNAPSHOT - spring-security-jsp-config - Spring Security JSP configuration - war - - - parent-boot-1 - com.baeldung - 0.0.1-SNAPSHOT - ../../parent-boot-1 - - - - - org.springframework.boot - spring-boot-starter-security - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-tomcat - - - org.apache.tomcat.embed - tomcat-embed-jasper - provided - - - javax.servlet - jstl - - - org.springframework.security - spring-security-taglibs - - - - diff --git a/spring-security-client/spring-security-jsp-config/src/main/java/org/baeldung/config/Application.java b/spring-security-client/spring-security-jsp-config/src/main/java/org/baeldung/config/Application.java deleted file mode 100644 index c2c5939676..0000000000 --- a/spring-security-client/spring-security-jsp-config/src/main/java/org/baeldung/config/Application.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.baeldung.config; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.support.SpringBootServletInitializer; - -@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class }) -public class Application extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(Application.class); - } - - public static void main(String[] args) { - SpringApplication.run(Application.class, args); - } - -} diff --git a/spring-security-client/spring-security-jsp-config/src/main/java/org/baeldung/config/MvcConfig.java b/spring-security-client/spring-security-jsp-config/src/main/java/org/baeldung/config/MvcConfig.java deleted file mode 100644 index fa2a324146..0000000000 --- a/spring-security-client/spring-security-jsp-config/src/main/java/org/baeldung/config/MvcConfig.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.baeldung.config; - -import org.springframework.context.annotation.Configuration; -import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; - -@Configuration -public class MvcConfig extends WebMvcConfigurerAdapter { - - public MvcConfig() { - super(); - } - - // - - @Override - public void addViewControllers(final ViewControllerRegistry registry) { - super.addViewControllers(registry); - registry.addViewController("/").setViewName("forward:/index"); - registry.addViewController("/index"); - } - -} \ No newline at end of file diff --git a/spring-security-client/spring-security-jsp-config/src/main/java/org/baeldung/config/SecurityConfig.java b/spring-security-client/spring-security-jsp-config/src/main/java/org/baeldung/config/SecurityConfig.java deleted file mode 100644 index bd6c56d38a..0000000000 --- a/spring-security-client/spring-security-jsp-config/src/main/java/org/baeldung/config/SecurityConfig.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.baeldung.config; - -import org.springframework.context.annotation.Configuration; -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.builders.WebSecurity; -import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; - -@Configuration -@EnableWebSecurity -public class SecurityConfig extends WebSecurityConfigurerAdapter { - - @Override - protected void configure(final AuthenticationManagerBuilder auth) throws Exception { - // @formatter:off - auth.inMemoryAuthentication() - .withUser("john").password("123").roles("USER") - .and() - .withUser("tom").password("111").roles("ADMIN"); - // @formatter:on - } - - @Override - public void configure(WebSecurity web) throws Exception { - web.ignoring().antMatchers("/resources/**"); - } - - @Override - protected void configure(final HttpSecurity http) throws Exception { - // @formatter:off - http.authorizeRequests() - .antMatchers("/login").permitAll() - .antMatchers("/admin").hasRole("ADMIN") - .anyRequest().authenticated() - .and().formLogin().permitAll() - ; - // @formatter:on - } -} \ No newline at end of file diff --git a/spring-security-client/spring-security-jsp-config/src/main/resources/application.properties b/spring-security-client/spring-security-jsp-config/src/main/resources/application.properties deleted file mode 100644 index 26a80c79f3..0000000000 --- a/spring-security-client/spring-security-jsp-config/src/main/resources/application.properties +++ /dev/null @@ -1,3 +0,0 @@ -server.port: 8081 -spring.mvc.view.prefix: /WEB-INF/jsp/ -spring.mvc.view.suffix: .jsp \ No newline at end of file diff --git a/spring-security-client/spring-security-jsp-config/src/main/resources/logback.xml b/spring-security-client/spring-security-jsp-config/src/main/resources/logback.xml deleted file mode 100644 index 7d900d8ea8..0000000000 --- a/spring-security-client/spring-security-jsp-config/src/main/resources/logback.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - - \ No newline at end of file diff --git a/spring-security-client/spring-security-jsp-config/src/main/webapp/WEB-INF/jsp/index.jsp b/spring-security-client/spring-security-jsp-config/src/main/webapp/WEB-INF/jsp/index.jsp deleted file mode 100644 index bd5ccb0c78..0000000000 --- a/spring-security-client/spring-security-jsp-config/src/main/webapp/WEB-INF/jsp/index.jsp +++ /dev/null @@ -1,21 +0,0 @@ - - - - -Spring Security JSP - - - - - -
- Welcome -
- - \ No newline at end of file diff --git a/spring-security-client/spring-security-jsp-config/src/test/java/org/baeldung/SpringContextIntegrationTest.java b/spring-security-client/spring-security-jsp-config/src/test/java/org/baeldung/SpringContextIntegrationTest.java deleted file mode 100644 index 66243ef00d..0000000000 --- a/spring-security-client/spring-security-jsp-config/src/test/java/org/baeldung/SpringContextIntegrationTest.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.baeldung; - -import org.baeldung.config.Application; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = Application.class) -public class SpringContextIntegrationTest { - - @Test - public void whenSpringContextIsBootstrapped_thenNoExceptions() { - } -} diff --git a/spring-security-client/spring-security-jsp-config/src/test/java/org/baeldung/SpringContextTest.java b/spring-security-client/spring-security-jsp-config/src/test/java/org/baeldung/SpringContextTest.java deleted file mode 100644 index 0afb3899db..0000000000 --- a/spring-security-client/spring-security-jsp-config/src/test/java/org/baeldung/SpringContextTest.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.baeldung; - -import org.baeldung.config.Application; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = Application.class) -public class SpringContextTest { - - @Test - public void whenSpringContextIsBootstrapped_thenNoExceptions() { - } -} diff --git a/spring-security-client/spring-security-mvc/pom.xml b/spring-security-client/spring-security-mvc/pom.xml deleted file mode 100644 index 75298026a8..0000000000 --- a/spring-security-client/spring-security-mvc/pom.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - 4.0.0 - com.baeldung - spring-security-mvc - 0.0.1-SNAPSHOT - spring-security-mvc - Spring Security MVC - war - - - parent-boot-1 - com.baeldung - 0.0.1-SNAPSHOT - ../../parent-boot-1 - - - - - org.springframework.boot - spring-boot-starter-security - - - org.springframework.boot - spring-boot-starter-web - - - - diff --git a/spring-security-client/spring-security-mvc/src/main/java/org/baeldung/config/Application.java b/spring-security-client/spring-security-mvc/src/main/java/org/baeldung/config/Application.java deleted file mode 100644 index 34c43fbe5a..0000000000 --- a/spring-security-client/spring-security-mvc/src/main/java/org/baeldung/config/Application.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.baeldung.config; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.support.SpringBootServletInitializer; - -@SpringBootApplication -public class Application extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(Application.class); - } - - public static void main(String[] args) { - SpringApplication.run(Application.class, args); - } - -} diff --git a/spring-security-client/spring-security-mvc/src/main/java/org/baeldung/config/SecurityConfig.java b/spring-security-client/spring-security-mvc/src/main/java/org/baeldung/config/SecurityConfig.java deleted file mode 100644 index bd6c56d38a..0000000000 --- a/spring-security-client/spring-security-mvc/src/main/java/org/baeldung/config/SecurityConfig.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.baeldung.config; - -import org.springframework.context.annotation.Configuration; -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.builders.WebSecurity; -import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; - -@Configuration -@EnableWebSecurity -public class SecurityConfig extends WebSecurityConfigurerAdapter { - - @Override - protected void configure(final AuthenticationManagerBuilder auth) throws Exception { - // @formatter:off - auth.inMemoryAuthentication() - .withUser("john").password("123").roles("USER") - .and() - .withUser("tom").password("111").roles("ADMIN"); - // @formatter:on - } - - @Override - public void configure(WebSecurity web) throws Exception { - web.ignoring().antMatchers("/resources/**"); - } - - @Override - protected void configure(final HttpSecurity http) throws Exception { - // @formatter:off - http.authorizeRequests() - .antMatchers("/login").permitAll() - .antMatchers("/admin").hasRole("ADMIN") - .anyRequest().authenticated() - .and().formLogin().permitAll() - ; - // @formatter:on - } -} \ No newline at end of file diff --git a/spring-security-client/spring-security-mvc/src/main/resources/application.properties b/spring-security-client/spring-security-mvc/src/main/resources/application.properties deleted file mode 100644 index c2eee0d931..0000000000 --- a/spring-security-client/spring-security-mvc/src/main/resources/application.properties +++ /dev/null @@ -1 +0,0 @@ -server.port: 8081 \ No newline at end of file diff --git a/spring-security-client/spring-security-mvc/src/main/resources/logback.xml b/spring-security-client/spring-security-mvc/src/main/resources/logback.xml deleted file mode 100644 index 7d900d8ea8..0000000000 --- a/spring-security-client/spring-security-mvc/src/main/resources/logback.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - - \ No newline at end of file diff --git a/spring-security-client/spring-security-mvc/src/test/java/org/baeldung/SpringContextIntegrationTest.java b/spring-security-client/spring-security-mvc/src/test/java/org/baeldung/SpringContextIntegrationTest.java deleted file mode 100644 index 66243ef00d..0000000000 --- a/spring-security-client/spring-security-mvc/src/test/java/org/baeldung/SpringContextIntegrationTest.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.baeldung; - -import org.baeldung.config.Application; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = Application.class) -public class SpringContextIntegrationTest { - - @Test - public void whenSpringContextIsBootstrapped_thenNoExceptions() { - } -} diff --git a/spring-security-client/spring-security-mvc/src/test/java/org/baeldung/SpringContextTest.java b/spring-security-client/spring-security-mvc/src/test/java/org/baeldung/SpringContextTest.java deleted file mode 100644 index 0afb3899db..0000000000 --- a/spring-security-client/spring-security-mvc/src/test/java/org/baeldung/SpringContextTest.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.baeldung; - -import org.baeldung.config.Application; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = Application.class) -public class SpringContextTest { - - @Test - public void whenSpringContextIsBootstrapped_thenNoExceptions() { - } -} diff --git a/spring-security-client/spring-security-thymeleaf-authentication/pom.xml b/spring-security-client/spring-security-thymeleaf-authentication/pom.xml deleted file mode 100644 index 01d2c6bdbe..0000000000 --- a/spring-security-client/spring-security-thymeleaf-authentication/pom.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - 4.0.0 - - com.baeldung - spring-security-thymeleaf-authentication - 0.0.1-SNAPSHOT - spring-security-thymeleaf-authentication - Spring Security thymeleaf authentication tag sample - war - - - parent-boot-1 - com.baeldung - 0.0.1-SNAPSHOT - ../../parent-boot-1 - - - - - org.springframework.boot - spring-boot-starter-security - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-tomcat - - - org.springframework.boot - spring-boot-starter-thymeleaf - - - org.thymeleaf.extras - thymeleaf-extras-springsecurity4 - - - - diff --git a/spring-security-client/spring-security-thymeleaf-authentication/src/main/java/org/baeldung/config/MvcConfig.java b/spring-security-client/spring-security-thymeleaf-authentication/src/main/java/org/baeldung/config/MvcConfig.java deleted file mode 100644 index 259433f6ae..0000000000 --- a/spring-security-client/spring-security-thymeleaf-authentication/src/main/java/org/baeldung/config/MvcConfig.java +++ /dev/null @@ -1,44 +0,0 @@ -package org.baeldung.config; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; -import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer; -import org.springframework.web.servlet.config.annotation.EnableWebMvc; -import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; -import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; -import org.springframework.context.annotation.Profile; - -@Configuration -@EnableWebMvc -@Profile("!manual") -public class MvcConfig extends WebMvcConfigurerAdapter { - - public MvcConfig() { - super(); - } - - // - @Bean - public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { - return new PropertySourcesPlaceholderConfigurer(); - } - - @Override - public void configureDefaultServletHandling(final DefaultServletHandlerConfigurer configurer) { - configurer.enable(); - } - - @Override - public void addViewControllers(final ViewControllerRegistry registry) { - super.addViewControllers(registry); - registry.addViewController("/").setViewName("forward:/index"); - registry.addViewController("/index"); - } - - @Override - public void addResourceHandlers(final ResourceHandlerRegistry registry) { - registry.addResourceHandler("/resources/**").addResourceLocations("/resources/"); - } -} \ No newline at end of file diff --git a/spring-security-client/spring-security-thymeleaf-authentication/src/main/java/org/baeldung/config/MvcConfigManual.java b/spring-security-client/spring-security-thymeleaf-authentication/src/main/java/org/baeldung/config/MvcConfigManual.java deleted file mode 100644 index d80527c30a..0000000000 --- a/spring-security-client/spring-security-thymeleaf-authentication/src/main/java/org/baeldung/config/MvcConfigManual.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.baeldung.config; - -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Profile; -import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; -import org.springframework.web.servlet.config.annotation.EnableWebMvc; - -@Configuration -@EnableWebMvc -@Profile("manual") -public class MvcConfigManual extends WebMvcConfigurerAdapter { - - @Override - public void addViewControllers(ViewControllerRegistry registry) { - registry.addViewController("/home").setViewName("home"); - registry.addViewController("/").setViewName("home"); - registry.addViewController("/hello").setViewName("hello"); - registry.addViewController("/login").setViewName("login"); - } - -} diff --git a/spring-security-client/spring-security-thymeleaf-authentication/src/main/java/org/baeldung/config/RegistrationController.java b/spring-security-client/spring-security-thymeleaf-authentication/src/main/java/org/baeldung/config/RegistrationController.java deleted file mode 100644 index 2414ff9cac..0000000000 --- a/spring-security-client/spring-security-thymeleaf-authentication/src/main/java/org/baeldung/config/RegistrationController.java +++ /dev/null @@ -1,89 +0,0 @@ -package org.baeldung.config; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Profile; -import org.springframework.security.authentication.AbstractAuthenticationToken; -import org.springframework.security.authentication.AuthenticationManager; -import org.springframework.security.authentication.BadCredentialsException; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.web.authentication.WebAuthenticationDetails; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -/** - * Manually authenticate a user using Spring Security / Spring Web MVC' (upon successful account registration) - * (http://stackoverflow.com/questions/4664893/how-to-manually-set-an-authenticated-user-in-spring-security-springmvc) - * - * @author jim clayson - */ -@Controller -@Profile("manual") -public class RegistrationController { - private static final Logger logger = LoggerFactory.getLogger(RegistrationController.class); - - @Autowired - private AuthenticationManager authenticationManager; - - /** - * For demo purposes this need only be a GET request method - * - * @param request - * @param response - * @return The view. Page confirming either successful registration (and/or - * successful authentication) or failed registration. - */ - @GetMapping("/register") - public String registerAndAuthenticate(HttpServletRequest request, HttpServletResponse response) { - logger.debug("registerAndAuthenticate: attempt to register, application should manually authenticate."); - - // Mocked values. Potentially could come from an HTML registration form, - // in which case this mapping would match on an HTTP POST, rather than a GET - String username = "user"; - String password = "password"; - - if (requestQualifiesForManualAuthentication()) { - try { - authenticate(username, password, request, response); - logger.debug("registerAndAuthenticate: authentication completed."); - } catch (BadCredentialsException bce) { - logger.debug("Authentication failure: bad credentials"); - bce.printStackTrace(); - return "systemError"; // assume a low-level error, since the registration - // form would have been successfully validated - } - } - - return "registrationSuccess"; - } - - private boolean requestQualifiesForManualAuthentication() { - // Some processing to determine that the user requires a Spring Security-recognized, - // application-directed login e.g. successful account registration. - return true; - } - - private void authenticate(String username, String password, HttpServletRequest request, HttpServletResponse response) throws BadCredentialsException { - logger.debug("attempting to authenticated, manually ... "); - - // create and populate the token - AbstractAuthenticationToken authToken = new UsernamePasswordAuthenticationToken(username, password); - authToken.setDetails(new WebAuthenticationDetails(request)); - - // This call returns an authentication object, which holds principle and user credentials - Authentication authentication = this.authenticationManager.authenticate(authToken); - - // The security context holds the authentication object, and is stored - // in thread local scope. - SecurityContextHolder.getContext().setAuthentication(authentication); - - logger.debug("User should now be authenticated."); - } - -} \ No newline at end of file diff --git a/spring-security-client/spring-security-thymeleaf-authentication/src/main/java/org/baeldung/config/SecurityConfig.java b/spring-security-client/spring-security-thymeleaf-authentication/src/main/java/org/baeldung/config/SecurityConfig.java deleted file mode 100644 index 153cc67661..0000000000 --- a/spring-security-client/spring-security-thymeleaf-authentication/src/main/java/org/baeldung/config/SecurityConfig.java +++ /dev/null @@ -1,42 +0,0 @@ -package org.baeldung.config; - -import org.springframework.context.annotation.Configuration; -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.builders.WebSecurity; -import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; -import org.springframework.context.annotation.Profile; - -@Configuration -@EnableWebSecurity -@Profile("!manual") -public class SecurityConfig extends WebSecurityConfigurerAdapter { - - @Override - protected void configure(final AuthenticationManagerBuilder auth) throws Exception { - // @formatter:off - auth.inMemoryAuthentication() - .withUser("john").password("123").roles("USER") - .and() - .withUser("tom").password("111").roles("ADMIN"); - // @formatter:on - } - - @Override - public void configure(WebSecurity web) throws Exception { - web.ignoring().antMatchers("/resources/**"); - } - - @Override - protected void configure(final HttpSecurity http) throws Exception { - // @formatter:off - http.authorizeRequests() - .antMatchers("/login").permitAll() - .antMatchers("/admin").hasRole("ADMIN") - .anyRequest().authenticated() - .and().formLogin().permitAll() - ; - // @formatter:on - } -} \ No newline at end of file diff --git a/spring-security-client/spring-security-thymeleaf-authentication/src/main/java/org/baeldung/config/WebSecurityConfigManual.java b/spring-security-client/spring-security-thymeleaf-authentication/src/main/java/org/baeldung/config/WebSecurityConfigManual.java deleted file mode 100644 index 180a53deba..0000000000 --- a/spring-security-client/spring-security-thymeleaf-authentication/src/main/java/org/baeldung/config/WebSecurityConfigManual.java +++ /dev/null @@ -1,35 +0,0 @@ -package org.baeldung.config; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Profile; -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; - -@Configuration -@EnableWebSecurity -@Profile("manual") -public class WebSecurityConfigManual extends WebSecurityConfigurerAdapter { - - @Override - protected void configure(HttpSecurity http) throws Exception { - // @formatter:off - http - .authorizeRequests() - .antMatchers("/", "/home", "/register").permitAll() - .anyRequest().authenticated() - .and() - .formLogin() - .loginPage("/login").permitAll() - .and() - .logout().permitAll(); - // @formatter:on - } - - @Autowired - public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { - auth.inMemoryAuthentication().withUser("user").password("password").roles("USER"); - } -} diff --git a/spring-security-client/spring-security-thymeleaf-authentication/src/main/resources/application.properties b/spring-security-client/spring-security-thymeleaf-authentication/src/main/resources/application.properties deleted file mode 100644 index bafddced85..0000000000 --- a/spring-security-client/spring-security-thymeleaf-authentication/src/main/resources/application.properties +++ /dev/null @@ -1 +0,0 @@ -server.port=8081 \ No newline at end of file diff --git a/spring-security-client/spring-security-thymeleaf-authentication/src/main/resources/logback.xml b/spring-security-client/spring-security-thymeleaf-authentication/src/main/resources/logback.xml deleted file mode 100644 index 7d900d8ea8..0000000000 --- a/spring-security-client/spring-security-thymeleaf-authentication/src/main/resources/logback.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - - \ No newline at end of file diff --git a/spring-security-client/spring-security-thymeleaf-authentication/src/main/resources/templates/hello.html b/spring-security-client/spring-security-thymeleaf-authentication/src/main/resources/templates/hello.html deleted file mode 100644 index b37731b0ed..0000000000 --- a/spring-security-client/spring-security-thymeleaf-authentication/src/main/resources/templates/hello.html +++ /dev/null @@ -1,15 +0,0 @@ - - - - Hello World! - - -

Hello [[${#httpServletRequest.remoteUser}]]!

-
- -
-

Click here to go to the home page.

- - - \ No newline at end of file diff --git a/spring-security-client/spring-security-thymeleaf-authentication/src/main/resources/templates/home.html b/spring-security-client/spring-security-thymeleaf-authentication/src/main/resources/templates/home.html deleted file mode 100644 index 6dbdf491c6..0000000000 --- a/spring-security-client/spring-security-thymeleaf-authentication/src/main/resources/templates/home.html +++ /dev/null @@ -1,15 +0,0 @@ - - - - Spring Security Example - - -

Welcome!

- -

Click here to see a greeting.

-

Click here to send a dummy registration request, where the application logs you in.

- - \ No newline at end of file diff --git a/spring-security-client/spring-security-thymeleaf-authentication/src/main/resources/templates/index.html b/spring-security-client/spring-security-thymeleaf-authentication/src/main/resources/templates/index.html deleted file mode 100644 index c65b5f092b..0000000000 --- a/spring-security-client/spring-security-thymeleaf-authentication/src/main/resources/templates/index.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - -Spring Security Thymeleaf - - - - - -
- Current user name: Bob -
- Current user roles: [ROLE_USER, ROLE_ADMIN] -
- - \ No newline at end of file diff --git a/spring-security-client/spring-security-thymeleaf-authentication/src/main/resources/templates/login.html b/spring-security-client/spring-security-thymeleaf-authentication/src/main/resources/templates/login.html deleted file mode 100644 index 3f28efac69..0000000000 --- a/spring-security-client/spring-security-thymeleaf-authentication/src/main/resources/templates/login.html +++ /dev/null @@ -1,21 +0,0 @@ - - - - Spring Security Example - - -
- Invalid username and password. -
-
- You have been logged out. -
-
-
-
-
-
-

Click here to go to the home page.

- - \ No newline at end of file diff --git a/spring-security-client/spring-security-thymeleaf-authentication/src/main/resources/templates/registrationError.html b/spring-security-client/spring-security-thymeleaf-authentication/src/main/resources/templates/registrationError.html deleted file mode 100644 index 756cc2390d..0000000000 --- a/spring-security-client/spring-security-thymeleaf-authentication/src/main/resources/templates/registrationError.html +++ /dev/null @@ -1 +0,0 @@ -Registration could not be completed at this time. Please try again later or contact support! \ No newline at end of file diff --git a/spring-security-client/spring-security-thymeleaf-authentication/src/main/resources/templates/registrationSuccess.html b/spring-security-client/spring-security-thymeleaf-authentication/src/main/resources/templates/registrationSuccess.html deleted file mode 100644 index b1c4336f2f..0000000000 --- a/spring-security-client/spring-security-thymeleaf-authentication/src/main/resources/templates/registrationSuccess.html +++ /dev/null @@ -1,15 +0,0 @@ - - - - Registration Success! - - -

Registration succeeded. You have been logged in by the system. Welcome [[${#httpServletRequest.remoteUser}]]!

-
- -
-

Click here to go to the home page.

- - - \ No newline at end of file diff --git a/spring-security-client/spring-security-thymeleaf-authentication/src/test/java/org/baeldung/SpringContextIntegrationTest.java b/spring-security-client/spring-security-thymeleaf-authentication/src/test/java/org/baeldung/SpringContextIntegrationTest.java deleted file mode 100644 index 66243ef00d..0000000000 --- a/spring-security-client/spring-security-thymeleaf-authentication/src/test/java/org/baeldung/SpringContextIntegrationTest.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.baeldung; - -import org.baeldung.config.Application; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = Application.class) -public class SpringContextIntegrationTest { - - @Test - public void whenSpringContextIsBootstrapped_thenNoExceptions() { - } -} diff --git a/spring-security-client/spring-security-thymeleaf-authentication/src/test/java/org/baeldung/SpringContextTest.java b/spring-security-client/spring-security-thymeleaf-authentication/src/test/java/org/baeldung/SpringContextTest.java deleted file mode 100644 index 0afb3899db..0000000000 --- a/spring-security-client/spring-security-thymeleaf-authentication/src/test/java/org/baeldung/SpringContextTest.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.baeldung; - -import org.baeldung.config.Application; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = Application.class) -public class SpringContextTest { - - @Test - public void whenSpringContextIsBootstrapped_thenNoExceptions() { - } -} diff --git a/spring-security-client/spring-security-thymeleaf-authorize/pom.xml b/spring-security-client/spring-security-thymeleaf-authorize/pom.xml deleted file mode 100644 index 8c600c1f81..0000000000 --- a/spring-security-client/spring-security-thymeleaf-authorize/pom.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - 4.0.0 - - com.baeldung - spring-security-thymeleaf-authorize - 0.0.1-SNAPSHOT - spring-security-thymeleaf-authorize - Spring Security thymeleaf authorize tag sample - war - - - parent-boot-1 - com.baeldung - 0.0.1-SNAPSHOT - ../../parent-boot-1 - - - - - org.springframework.boot - spring-boot-starter-security - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-tomcat - - - org.springframework.boot - spring-boot-starter-thymeleaf - - - org.thymeleaf.extras - thymeleaf-extras-springsecurity4 - - - - diff --git a/spring-security-client/spring-security-thymeleaf-authorize/src/main/java/org/baeldung/config/Application.java b/spring-security-client/spring-security-thymeleaf-authorize/src/main/java/org/baeldung/config/Application.java deleted file mode 100644 index 329b104143..0000000000 --- a/spring-security-client/spring-security-thymeleaf-authorize/src/main/java/org/baeldung/config/Application.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.baeldung.config; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.support.SpringBootServletInitializer; - -@SpringBootApplication -public class Application extends SpringBootServletInitializer { - - public static void main(String[] args) { - SpringApplication.run(Application.class, args); - } - -} diff --git a/spring-security-client/spring-security-thymeleaf-authorize/src/main/java/org/baeldung/config/MvcConfig.java b/spring-security-client/spring-security-thymeleaf-authorize/src/main/java/org/baeldung/config/MvcConfig.java deleted file mode 100644 index 9ade60e54c..0000000000 --- a/spring-security-client/spring-security-thymeleaf-authorize/src/main/java/org/baeldung/config/MvcConfig.java +++ /dev/null @@ -1,42 +0,0 @@ -package org.baeldung.config; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; -import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer; -import org.springframework.web.servlet.config.annotation.EnableWebMvc; -import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; -import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; - -@Configuration -@EnableWebMvc -public class MvcConfig extends WebMvcConfigurerAdapter { - - public MvcConfig() { - super(); - } - - // - @Bean - public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { - return new PropertySourcesPlaceholderConfigurer(); - } - - @Override - public void configureDefaultServletHandling(final DefaultServletHandlerConfigurer configurer) { - configurer.enable(); - } - - @Override - public void addViewControllers(final ViewControllerRegistry registry) { - super.addViewControllers(registry); - registry.addViewController("/").setViewName("forward:/index"); - registry.addViewController("/index"); - } - - @Override - public void addResourceHandlers(final ResourceHandlerRegistry registry) { - registry.addResourceHandler("/resources/**").addResourceLocations("/resources/"); - } -} \ No newline at end of file diff --git a/spring-security-client/spring-security-thymeleaf-authorize/src/main/java/org/baeldung/config/SecurityConfig.java b/spring-security-client/spring-security-thymeleaf-authorize/src/main/java/org/baeldung/config/SecurityConfig.java deleted file mode 100644 index bd6c56d38a..0000000000 --- a/spring-security-client/spring-security-thymeleaf-authorize/src/main/java/org/baeldung/config/SecurityConfig.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.baeldung.config; - -import org.springframework.context.annotation.Configuration; -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.builders.WebSecurity; -import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; - -@Configuration -@EnableWebSecurity -public class SecurityConfig extends WebSecurityConfigurerAdapter { - - @Override - protected void configure(final AuthenticationManagerBuilder auth) throws Exception { - // @formatter:off - auth.inMemoryAuthentication() - .withUser("john").password("123").roles("USER") - .and() - .withUser("tom").password("111").roles("ADMIN"); - // @formatter:on - } - - @Override - public void configure(WebSecurity web) throws Exception { - web.ignoring().antMatchers("/resources/**"); - } - - @Override - protected void configure(final HttpSecurity http) throws Exception { - // @formatter:off - http.authorizeRequests() - .antMatchers("/login").permitAll() - .antMatchers("/admin").hasRole("ADMIN") - .anyRequest().authenticated() - .and().formLogin().permitAll() - ; - // @formatter:on - } -} \ No newline at end of file diff --git a/spring-security-client/spring-security-thymeleaf-authorize/src/main/resources/application.properties b/spring-security-client/spring-security-thymeleaf-authorize/src/main/resources/application.properties deleted file mode 100644 index bafddced85..0000000000 --- a/spring-security-client/spring-security-thymeleaf-authorize/src/main/resources/application.properties +++ /dev/null @@ -1 +0,0 @@ -server.port=8081 \ No newline at end of file diff --git a/spring-security-client/spring-security-thymeleaf-authorize/src/main/resources/logback.xml b/spring-security-client/spring-security-thymeleaf-authorize/src/main/resources/logback.xml deleted file mode 100644 index 7d900d8ea8..0000000000 --- a/spring-security-client/spring-security-thymeleaf-authorize/src/main/resources/logback.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - - \ No newline at end of file diff --git a/spring-security-client/spring-security-thymeleaf-authorize/src/main/resources/templates/index.html b/spring-security-client/spring-security-thymeleaf-authorize/src/main/resources/templates/index.html deleted file mode 100644 index fcbbfb4957..0000000000 --- a/spring-security-client/spring-security-thymeleaf-authorize/src/main/resources/templates/index.html +++ /dev/null @@ -1,32 +0,0 @@ - - - - -Spring Security Thymeleaf - - - - - -
-
- Only admins can see this message -
- -
- Only users can see this message -
-
- -
- Only users who can call "/admin" URL can see this message -
-
- - \ No newline at end of file diff --git a/spring-security-client/spring-security-thymeleaf-authorize/src/test/java/org/baeldung/SpringContextIntegrationTest.java b/spring-security-client/spring-security-thymeleaf-authorize/src/test/java/org/baeldung/SpringContextIntegrationTest.java deleted file mode 100644 index 66243ef00d..0000000000 --- a/spring-security-client/spring-security-thymeleaf-authorize/src/test/java/org/baeldung/SpringContextIntegrationTest.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.baeldung; - -import org.baeldung.config.Application; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = Application.class) -public class SpringContextIntegrationTest { - - @Test - public void whenSpringContextIsBootstrapped_thenNoExceptions() { - } -} diff --git a/spring-security-client/spring-security-thymeleaf-authorize/src/test/java/org/baeldung/SpringContextTest.java b/spring-security-client/spring-security-thymeleaf-authorize/src/test/java/org/baeldung/SpringContextTest.java deleted file mode 100644 index 0afb3899db..0000000000 --- a/spring-security-client/spring-security-thymeleaf-authorize/src/test/java/org/baeldung/SpringContextTest.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.baeldung; - -import org.baeldung.config.Application; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = Application.class) -public class SpringContextTest { - - @Test - public void whenSpringContextIsBootstrapped_thenNoExceptions() { - } -} diff --git a/spring-security-client/spring-security-thymeleaf-config/pom.xml b/spring-security-client/spring-security-thymeleaf-config/pom.xml deleted file mode 100644 index aeda999405..0000000000 --- a/spring-security-client/spring-security-thymeleaf-config/pom.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - 4.0.0 - com.baeldung - spring-security-thymeleaf-config - 0.0.1-SNAPSHOT - spring-security-thymeleaf-config - Spring Security thymeleaf configuration sample project - war - - - parent-boot-1 - com.baeldung - 0.0.1-SNAPSHOT - ../../parent-boot-1 - - - - - org.springframework.boot - spring-boot-starter-security - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-tomcat - - - org.springframework.boot - spring-boot-starter-thymeleaf - - - org.thymeleaf.extras - thymeleaf-extras-springsecurity4 - - - - diff --git a/spring-security-client/spring-security-thymeleaf-config/src/main/java/org/baeldung/config/Application.java b/spring-security-client/spring-security-thymeleaf-config/src/main/java/org/baeldung/config/Application.java deleted file mode 100644 index 329b104143..0000000000 --- a/spring-security-client/spring-security-thymeleaf-config/src/main/java/org/baeldung/config/Application.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.baeldung.config; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.support.SpringBootServletInitializer; - -@SpringBootApplication -public class Application extends SpringBootServletInitializer { - - public static void main(String[] args) { - SpringApplication.run(Application.class, args); - } - -} diff --git a/spring-security-client/spring-security-thymeleaf-config/src/main/java/org/baeldung/config/MvcConfig.java b/spring-security-client/spring-security-thymeleaf-config/src/main/java/org/baeldung/config/MvcConfig.java deleted file mode 100644 index 9ade60e54c..0000000000 --- a/spring-security-client/spring-security-thymeleaf-config/src/main/java/org/baeldung/config/MvcConfig.java +++ /dev/null @@ -1,42 +0,0 @@ -package org.baeldung.config; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; -import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer; -import org.springframework.web.servlet.config.annotation.EnableWebMvc; -import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; -import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; - -@Configuration -@EnableWebMvc -public class MvcConfig extends WebMvcConfigurerAdapter { - - public MvcConfig() { - super(); - } - - // - @Bean - public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { - return new PropertySourcesPlaceholderConfigurer(); - } - - @Override - public void configureDefaultServletHandling(final DefaultServletHandlerConfigurer configurer) { - configurer.enable(); - } - - @Override - public void addViewControllers(final ViewControllerRegistry registry) { - super.addViewControllers(registry); - registry.addViewController("/").setViewName("forward:/index"); - registry.addViewController("/index"); - } - - @Override - public void addResourceHandlers(final ResourceHandlerRegistry registry) { - registry.addResourceHandler("/resources/**").addResourceLocations("/resources/"); - } -} \ No newline at end of file diff --git a/spring-security-client/spring-security-thymeleaf-config/src/main/java/org/baeldung/config/SecurityConfig.java b/spring-security-client/spring-security-thymeleaf-config/src/main/java/org/baeldung/config/SecurityConfig.java deleted file mode 100644 index bd6c56d38a..0000000000 --- a/spring-security-client/spring-security-thymeleaf-config/src/main/java/org/baeldung/config/SecurityConfig.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.baeldung.config; - -import org.springframework.context.annotation.Configuration; -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.builders.WebSecurity; -import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; - -@Configuration -@EnableWebSecurity -public class SecurityConfig extends WebSecurityConfigurerAdapter { - - @Override - protected void configure(final AuthenticationManagerBuilder auth) throws Exception { - // @formatter:off - auth.inMemoryAuthentication() - .withUser("john").password("123").roles("USER") - .and() - .withUser("tom").password("111").roles("ADMIN"); - // @formatter:on - } - - @Override - public void configure(WebSecurity web) throws Exception { - web.ignoring().antMatchers("/resources/**"); - } - - @Override - protected void configure(final HttpSecurity http) throws Exception { - // @formatter:off - http.authorizeRequests() - .antMatchers("/login").permitAll() - .antMatchers("/admin").hasRole("ADMIN") - .anyRequest().authenticated() - .and().formLogin().permitAll() - ; - // @formatter:on - } -} \ No newline at end of file diff --git a/spring-security-client/spring-security-thymeleaf-config/src/main/resources/application.properties b/spring-security-client/spring-security-thymeleaf-config/src/main/resources/application.properties deleted file mode 100644 index bafddced85..0000000000 --- a/spring-security-client/spring-security-thymeleaf-config/src/main/resources/application.properties +++ /dev/null @@ -1 +0,0 @@ -server.port=8081 \ No newline at end of file diff --git a/spring-security-client/spring-security-thymeleaf-config/src/main/resources/logback.xml b/spring-security-client/spring-security-thymeleaf-config/src/main/resources/logback.xml deleted file mode 100644 index 7d900d8ea8..0000000000 --- a/spring-security-client/spring-security-thymeleaf-config/src/main/resources/logback.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - - \ No newline at end of file diff --git a/spring-security-client/spring-security-thymeleaf-config/src/main/resources/templates/index.html b/spring-security-client/spring-security-thymeleaf-config/src/main/resources/templates/index.html deleted file mode 100644 index 8e7394ad6a..0000000000 --- a/spring-security-client/spring-security-thymeleaf-config/src/main/resources/templates/index.html +++ /dev/null @@ -1,21 +0,0 @@ - - - - -Spring Security Thymeleaf - - - - - -
- Welcome -
- - \ No newline at end of file diff --git a/spring-security-client/spring-security-thymeleaf-config/src/test/java/org/baeldung/SpringContextIntegrationTest.java b/spring-security-client/spring-security-thymeleaf-config/src/test/java/org/baeldung/SpringContextIntegrationTest.java deleted file mode 100644 index 66243ef00d..0000000000 --- a/spring-security-client/spring-security-thymeleaf-config/src/test/java/org/baeldung/SpringContextIntegrationTest.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.baeldung; - -import org.baeldung.config.Application; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = Application.class) -public class SpringContextIntegrationTest { - - @Test - public void whenSpringContextIsBootstrapped_thenNoExceptions() { - } -} diff --git a/spring-security-client/spring-security-thymeleaf-config/src/test/java/org/baeldung/SpringContextTest.java b/spring-security-client/spring-security-thymeleaf-config/src/test/java/org/baeldung/SpringContextTest.java deleted file mode 100644 index 0afb3899db..0000000000 --- a/spring-security-client/spring-security-thymeleaf-config/src/test/java/org/baeldung/SpringContextTest.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.baeldung; - -import org.baeldung.config.Application; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = Application.class) -public class SpringContextTest { - - @Test - public void whenSpringContextIsBootstrapped_thenNoExceptions() { - } -} diff --git a/spring-thymeleaf-2/README.md b/spring-thymeleaf-2/README.md new file mode 100644 index 0000000000..9bd441a6bd --- /dev/null +++ b/spring-thymeleaf-2/README.md @@ -0,0 +1,3 @@ +## Relevant Articles: + +- [Working with Enums in Thymeleaf](https://www.baeldung.com/thymeleaf-enums) diff --git a/testing-modules/easy-random/README.md b/testing-modules/easy-random/README.md new file mode 100644 index 0000000000..117d636bcc --- /dev/null +++ b/testing-modules/easy-random/README.md @@ -0,0 +1,3 @@ +## Relevant Articles: + +- [Quick Guide to EasyRandom in Java](https://www.baeldung.com/java-easy-random) diff --git a/testing-modules/junit-5-advanced/README.md b/testing-modules/junit-5-advanced/README.md index 7282a4efad..61a65b2e5a 100644 --- a/testing-modules/junit-5-advanced/README.md +++ b/testing-modules/junit-5-advanced/README.md @@ -1,3 +1,4 @@ -### Relevant Articles +## Relevant Articles: - [JUnit 5 TestWatcher API](https://www.baeldung.com/junit-testwatcher) +- [JUnit Custom Display Name Generator API](https://www.baeldung.com/junit-custom-display-name-generator) diff --git a/testing-modules/spring-testing/README.md b/testing-modules/spring-testing/README.md index 0970eabeff..1b06c13953 100644 --- a/testing-modules/spring-testing/README.md +++ b/testing-modules/spring-testing/README.md @@ -1,8 +1,8 @@ -### Relevant Articles: +## Relevant Articles: - [Mockito.mock() vs @Mock vs @MockBean](http://www.baeldung.com/java-spring-mockito-mock-mockbean) - [A Quick Guide to @TestPropertySource](https://www.baeldung.com/spring-test-property-source) - [Guide to ReflectionTestUtils for Unit Testing](https://www.baeldung.com/spring-reflection-test-utils) - [How to Test the @Scheduled Annotation](https://www.baeldung.com/spring-testing-scheduled-annotation) - [Using SpringJUnit4ClassRunner with Parameterized](https://www.baeldung.com/springjunit4classrunner-parameterized) -- [Override properties in Spring]() +- [Override Properties in Spring’s Tests](https://www.baeldung.com/spring-tests-override-properties) diff --git a/twitter4j/src/test/java/com/baeldung/ApplicationLiveTest.java b/twitter4j/src/test/java/com/baeldung/ApplicationIntegrationTest.java similarity index 95% rename from twitter4j/src/test/java/com/baeldung/ApplicationLiveTest.java rename to twitter4j/src/test/java/com/baeldung/ApplicationIntegrationTest.java index 0d4114e72d..4696283faa 100644 --- a/twitter4j/src/test/java/com/baeldung/ApplicationLiveTest.java +++ b/twitter4j/src/test/java/com/baeldung/ApplicationIntegrationTest.java @@ -9,7 +9,7 @@ import org.junit.Test; import twitter4j.TwitterException; -public class ApplicationLiveTest { +public class ApplicationIntegrationTest { /** * In order run this jUnit test you need to configure your API details in the twitter4j.properties diff --git a/xml/src/main/java/com/baeldung/xml/attribute/Dom4jTransformer.java b/xml/src/main/java/com/baeldung/xml/attribute/Dom4jTransformer.java index a1922ad224..d4fdeb0d58 100644 --- a/xml/src/main/java/com/baeldung/xml/attribute/Dom4jTransformer.java +++ b/xml/src/main/java/com/baeldung/xml/attribute/Dom4jTransformer.java @@ -3,6 +3,7 @@ package com.baeldung.xml.attribute; import org.dom4j.*; import org.dom4j.io.DocumentSource; import org.dom4j.io.SAXReader; +import org.xml.sax.SAXException; import javax.xml.XMLConstants; import javax.xml.transform.OutputKeys; @@ -17,9 +18,12 @@ import java.util.List; public class Dom4jTransformer { private final Document input; - public Dom4jTransformer(String resourcePath) throws DocumentException { + public Dom4jTransformer(String resourcePath) throws DocumentException, SAXException { // 1- Build the doc from the XML file SAXReader xmlReader = new SAXReader(); + xmlReader.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); + xmlReader.setFeature("http://xml.org/sax/features/external-general-entities", false); + xmlReader.setFeature("http://xml.org/sax/features/external-parameter-entities", false); this.input = xmlReader.read(resourcePath); } diff --git a/xml/src/main/java/com/baeldung/xml/attribute/JaxpTransformer.java b/xml/src/main/java/com/baeldung/xml/attribute/JaxpTransformer.java index a2266a2b44..a55b00950c 100644 --- a/xml/src/main/java/com/baeldung/xml/attribute/JaxpTransformer.java +++ b/xml/src/main/java/com/baeldung/xml/attribute/JaxpTransformer.java @@ -32,7 +32,8 @@ public class JaxpTransformer { // 1- Build the doc from the XML file DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); - input = factory.newDocumentBuilder() + factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); + this.input = factory.newDocumentBuilder() .parse(resourcePath); } @@ -40,24 +41,24 @@ public class JaxpTransformer { // 2- Locate the node(s) with xpath XPath xpath = XPathFactory.newInstance() .newXPath(); - NodeList nodes = (NodeList) xpath.evaluate(String.format("//*[contains(@%s, '%s')]", attribute, oldValue), input, XPathConstants.NODESET); + NodeList nodes = (NodeList) xpath.evaluate(String.format("//*[contains(@%s, '%s')]", attribute, oldValue), this.input, XPathConstants.NODESET); // 3- Make the change on the selected nodes for (int i = 0; i < nodes.getLength(); i++) { Element value = (Element) nodes.item(i); value.setAttribute(attribute, newValue); } - //Stream api syntax - // IntStream - // .range(0, nodes.getLength()) - // .mapToObj(i -> (Element) nodes.item(i)) - // .forEach(value -> value.setAttribute(attribute, newValue)); + // Stream api syntax + // IntStream + // .range(0, nodes.getLength()) + // .mapToObj(i -> (Element) nodes.item(i)) + // .forEach(value -> value.setAttribute(attribute, newValue)); // 4- Save the result to a new XML doc TransformerFactory factory = TransformerFactory.newInstance(); factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); Transformer xformer = factory.newTransformer(); xformer.setOutputProperty(OutputKeys.INDENT, "yes"); Writer output = new StringWriter(); - xformer.transform(new DOMSource(input), new StreamResult(output)); + xformer.transform(new DOMSource(this.input), new StreamResult(output)); return output.toString(); } } diff --git a/xml/src/main/java/com/baeldung/xml/attribute/jmh/AttributeBenchMark.java b/xml/src/main/java/com/baeldung/xml/attribute/jmh/AttributeBenchMark.java index 064e181713..f5f3a2ce6c 100644 --- a/xml/src/main/java/com/baeldung/xml/attribute/jmh/AttributeBenchMark.java +++ b/xml/src/main/java/com/baeldung/xml/attribute/jmh/AttributeBenchMark.java @@ -1,7 +1,19 @@ package com.baeldung.xml.attribute.jmh; +import java.io.IOException; +import java.util.concurrent.TimeUnit; + +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.TransformerException; +import javax.xml.xpath.XPathExpressionException; + import org.dom4j.DocumentException; -import org.openjdk.jmh.annotations.*; +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.OutputTimeUnit; +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.State; import org.openjdk.jmh.runner.Runner; import org.openjdk.jmh.runner.RunnerException; import org.openjdk.jmh.runner.options.Options; @@ -12,30 +24,23 @@ import com.baeldung.xml.attribute.Dom4jTransformer; import com.baeldung.xml.attribute.JaxpTransformer; import com.baeldung.xml.attribute.JooxTransformer; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.transform.TransformerException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.util.concurrent.TimeUnit; - @BenchmarkMode(Mode.AverageTime) @OutputTimeUnit(TimeUnit.MILLISECONDS) @State(Scope.Benchmark) public class AttributeBenchMark { public static void main(String[] args) throws RunnerException { - Options opt = new OptionsBuilder() - .include(AttributeBenchMark.class.getSimpleName()) - .forks(1) - .build(); + Options opt = new OptionsBuilder().include(AttributeBenchMark.class.getSimpleName()) + .forks(1) + .build(); new Runner(opt).run(); } @Benchmark - public String dom4jBenchmark() throws DocumentException, TransformerException { - String path = getClass() - .getResource("/xml/attribute.xml") - .toString(); + public String dom4jBenchmark() throws DocumentException, TransformerException, SAXException { + String path = this.getClass() + .getResource("/xml/attribute.xml") + .toString(); Dom4jTransformer transformer = new Dom4jTransformer(path); String attribute = "customer"; String oldValue = "true"; @@ -46,9 +51,9 @@ public class AttributeBenchMark { @Benchmark public String jooxBenchmark() throws IOException, SAXException { - String path = getClass() - .getResource("/xml/attribute.xml") - .toString(); + String path = this.getClass() + .getResource("/xml/attribute.xml") + .toString(); JooxTransformer transformer = new JooxTransformer(path); String attribute = "customer"; String oldValue = "true"; @@ -59,9 +64,9 @@ public class AttributeBenchMark { @Benchmark public String jaxpBenchmark() throws TransformerException, ParserConfigurationException, SAXException, IOException, XPathExpressionException { - String path = getClass() - .getResource("/xml/attribute.xml") - .toString(); + String path = this.getClass() + .getResource("/xml/attribute.xml") + .toString(); JaxpTransformer transformer = new JaxpTransformer(path); String attribute = "customer"; String oldValue = "true"; diff --git a/xml/src/test/java/com/baeldung/xml/attribute/Dom4jProcessorUnitTest.java b/xml/src/test/java/com/baeldung/xml/attribute/Dom4jProcessorUnitTest.java index 485744f9a5..351b8bc437 100644 --- a/xml/src/test/java/com/baeldung/xml/attribute/Dom4jProcessorUnitTest.java +++ b/xml/src/test/java/com/baeldung/xml/attribute/Dom4jProcessorUnitTest.java @@ -2,14 +2,19 @@ package com.baeldung.xml.attribute; import org.dom4j.DocumentException; import org.junit.jupiter.api.Test; +import org.xml.sax.SAXException; +import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactoryConfigurationError; +import javax.xml.xpath.XPathExpressionException; + import java.io.IOException; import java.net.URISyntaxException; import java.nio.file.Files; import java.nio.file.Paths; +import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.xmlunit.assertj.XmlAssert.assertThat; /** @@ -18,10 +23,9 @@ import static org.xmlunit.assertj.XmlAssert.assertThat; public class Dom4jProcessorUnitTest { @Test - public void givenXmlWithAttributes_whenModifyAttribute_thenGetXmlUpdated() throws TransformerFactoryConfigurationError, TransformerException, DocumentException { - String path = getClass() - .getResource("/xml/attribute.xml") - .toString(); + public void givenXmlWithAttributes_whenModifyAttribute_thenGetXmlUpdated() throws TransformerFactoryConfigurationError, TransformerException, DocumentException, SAXException { + String path = getClass().getResource("/xml/attribute.xml") + .toString(); Dom4jTransformer transformer = new Dom4jTransformer(path); String attribute = "customer"; String oldValue = "true"; @@ -33,23 +37,32 @@ public class Dom4jProcessorUnitTest { } @Test - public void givenTwoXml_whenModifyAttribute_thenGetSimilarXml() throws IOException, TransformerFactoryConfigurationError, TransformerException, URISyntaxException, DocumentException { - String path = getClass() - .getResource("/xml/attribute.xml") - .toString(); + public void givenTwoXml_whenModifyAttribute_thenGetSimilarXml() throws IOException, TransformerFactoryConfigurationError, TransformerException, URISyntaxException, DocumentException, SAXException { + String path = getClass().getResource("/xml/attribute.xml") + .toString(); Dom4jTransformer transformer = new Dom4jTransformer(path); String attribute = "customer"; String oldValue = "true"; String newValue = "false"; - String expectedXml = new String(Files.readAllBytes((Paths.get(getClass() - .getResource("/xml/attribute_expected.xml") - .toURI())))); + String expectedXml = new String(Files.readAllBytes((Paths.get(getClass().getResource("/xml/attribute_expected.xml") + .toURI())))); String result = transformer.modifyAttribute(attribute, oldValue, newValue); - assertThat(result) - .and(expectedXml) - .areSimilar(); + assertThat(result).and(expectedXml) + .areSimilar(); + } + + @Test + public void givenXmlXee_whenInit_thenThrowException() throws IOException, SAXException, ParserConfigurationException, XPathExpressionException, TransformerFactoryConfigurationError, TransformerException { + String path = getClass().getResource("/xml/xee_attribute.xml") + .toString(); + + assertThatThrownBy(() -> { + + new Dom4jTransformer(path); + + }).isInstanceOf(DocumentException.class); } } diff --git a/xml/src/test/java/com/baeldung/xml/attribute/JaxpProcessorUnitTest.java b/xml/src/test/java/com/baeldung/xml/attribute/JaxpProcessorUnitTest.java index 8394016dbd..8d814783e0 100644 --- a/xml/src/test/java/com/baeldung/xml/attribute/JaxpProcessorUnitTest.java +++ b/xml/src/test/java/com/baeldung/xml/attribute/JaxpProcessorUnitTest.java @@ -1,5 +1,6 @@ package com.baeldung.xml.attribute; +import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.xmlunit.assertj.XmlAssert.assertThat; import java.io.IOException; @@ -11,6 +12,7 @@ import javax.xml.xpath.XPathExpressionException; import org.junit.jupiter.api.Test; import org.xml.sax.SAXException; +import org.xml.sax.SAXParseException; /** * Unit test for {@link JaxpTransformer}. @@ -31,4 +33,16 @@ public class JaxpProcessorUnitTest { assertThat(result).hasXPath("//*[contains(@customer, 'false')]"); } + @Test + public void givenXmlXee_whenInit_thenThrowException() throws IOException, SAXException, ParserConfigurationException, XPathExpressionException, TransformerFactoryConfigurationError, TransformerException { + String path = getClass().getResource("/xml/xee_attribute.xml") + .toString(); + + assertThatThrownBy(() -> { + + new JaxpTransformer(path); + + }).isInstanceOf(SAXParseException.class); + } + } diff --git a/xml/src/test/java/com/baeldung/xml/attribute/JooxProcessorUnitTest.java b/xml/src/test/java/com/baeldung/xml/attribute/JooxProcessorUnitTest.java index 38c7c59789..40d0c671e7 100644 --- a/xml/src/test/java/com/baeldung/xml/attribute/JooxProcessorUnitTest.java +++ b/xml/src/test/java/com/baeldung/xml/attribute/JooxProcessorUnitTest.java @@ -2,13 +2,19 @@ package com.baeldung.xml.attribute; import org.junit.jupiter.api.Test; import org.xml.sax.SAXException; +import org.xml.sax.SAXParseException; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactoryConfigurationError; +import javax.xml.xpath.XPathExpressionException; + import java.io.IOException; import java.net.URISyntaxException; import java.nio.file.Files; import java.nio.file.Paths; +import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.xmlunit.assertj.XmlAssert.assertThat; /** @@ -18,9 +24,8 @@ public class JooxProcessorUnitTest { @Test public void givenXmlWithAttributes_whenModifyAttribute_thenGetXmlUpdated() throws IOException, SAXException, TransformerFactoryConfigurationError { - String path = getClass() - .getResource("/xml/attribute.xml") - .toString(); + String path = getClass().getResource("/xml/attribute.xml") + .toString(); JooxTransformer transformer = new JooxTransformer(path); String attribute = "customer"; String oldValue = "true"; @@ -33,22 +38,31 @@ public class JooxProcessorUnitTest { @Test public void givenTwoXml_whenModifyAttribute_thenGetSimilarXml() throws IOException, TransformerFactoryConfigurationError, URISyntaxException, SAXException { - String path = getClass() - .getResource("/xml/attribute.xml") - .toString(); + String path = getClass().getResource("/xml/attribute.xml") + .toString(); JooxTransformer transformer = new JooxTransformer(path); String attribute = "customer"; String oldValue = "true"; String newValue = "false"; - String expectedXml = new String(Files.readAllBytes((Paths.get(getClass() - .getResource("/xml/attribute_expected.xml") - .toURI())))); + String expectedXml = new String(Files.readAllBytes((Paths.get(getClass().getResource("/xml/attribute_expected.xml") + .toURI())))); String result = transformer.modifyAttribute(attribute, oldValue, newValue); - assertThat(result) - .and(expectedXml) - .areSimilar(); + assertThat(result).and(expectedXml) + .areSimilar(); + } + + @Test + public void givenXmlXee_whenInit_thenThrowException() throws IOException, SAXException, ParserConfigurationException, XPathExpressionException, TransformerFactoryConfigurationError, TransformerException { + String path = getClass().getResource("/xml/xee_attribute.xml") + .toString(); + + assertThatThrownBy(() -> { + + new JooxTransformer(path); + + }).isInstanceOf(SAXParseException.class); } } diff --git a/xml/src/test/resources/xml/xee_attribute.xml b/xml/src/test/resources/xml/xee_attribute.xml new file mode 100644 index 0000000000..9633ca15b0 --- /dev/null +++ b/xml/src/test/resources/xml/xee_attribute.xml @@ -0,0 +1,9 @@ + + ]> + + &xxe; + + john@email.com + mary@email.com + \ No newline at end of file diff --git a/xstream/README.md b/xstream/README.md index e8302c14ef..bf917e81fb 100644 --- a/xstream/README.md +++ b/xstream/README.md @@ -1,4 +1,6 @@ -### Relevant Articles: +## Relevant Articles: + - [XStream User Guide: JSON](http://www.baeldung.com/xstream-json-processing) - [XStream User Guide: Converting XML to Objects](http://www.baeldung.com/xstream-deserialize-xml-to-object) - [XStream User Guide: Converting Objects to XML](http://www.baeldung.com/xstream-serialize-object-to-xml) +- [Remote Code Execution with XStream](https://www.baeldung.com/java-xstream-remote-code-execution)