diff --git a/core-java-8/src/main/java/com/baeldung/hashtable/Word.java b/core-java-8/src/main/java/com/baeldung/hashtable/Word.java new file mode 100644 index 0000000000..eb7c5b7dca --- /dev/null +++ b/core-java-8/src/main/java/com/baeldung/hashtable/Word.java @@ -0,0 +1,28 @@ +package com.baeldung.hashtable; + +public class Word { + private String name; + + public Word(String name) { + this.name = name; + } + + public String getName() { + return name; + } + + public boolean equals(Object o) { + if (o == this) + return true; + if (!(o instanceof Word)) + return false; + + Word word = (Word) o; + return word.getName().equals(this.name) ? true : false; + + } + + public int hashCode() { + return name.hashCode(); + } +} diff --git a/core-java-8/src/test/java/com/baeldung/hashtable/HashtableUnitTest.java b/core-java-8/src/test/java/com/baeldung/hashtable/HashtableUnitTest.java new file mode 100644 index 0000000000..e8c42c94e1 --- /dev/null +++ b/core-java-8/src/test/java/com/baeldung/hashtable/HashtableUnitTest.java @@ -0,0 +1,274 @@ +package com.baeldung.hashtable; + +import java.util.ConcurrentModificationException; +import java.util.Enumeration; +import java.util.Hashtable; +import java.util.Iterator; +import java.util.Map; + +import static org.junit.Assert.*; +import static org.hamcrest.Matchers.*; +import org.junit.Test; + +public class HashtableUnitTest { + + @Test + public void whenPutAndGet_thenReturnsValue() { + Hashtable table = new Hashtable(); + + Word word = new Word("cat"); + table.put(word, "an animal"); + + String definition = table.get(word); + + assertEquals("an animal", definition); + + definition = table.remove(word); + + assertEquals("an animal", definition); + } + + @Test + public void whenThesameInstanceOfKey_thenReturnsValue() { + Hashtable table = new Hashtable(); + Word word = new Word("cat"); + table.put(word, "an animal"); + String extracted = table.get(word); + assertEquals("an animal", extracted); + } + + @Test + public void whenEqualsOverridden_thenReturnsValue() { + Hashtable table = new Hashtable(); + Word word = new Word("cat"); + table.put(word, "an animal"); + String extracted = table.get(new Word("cat")); + assertEquals("an animal", extracted); + } + + @Test(expected = NullPointerException.class) + public void whenNullKey_thenException() { + Hashtable table = new Hashtable(); + table.put(null, "an animal"); + } + + @Test(expected = ConcurrentModificationException.class) + public void whenIterate_thenFailFast() { + + Hashtable table = new Hashtable(); + table.put(new Word("cat"), "an animal"); + table.put(new Word("dog"), "another animal"); + + Iterator it = table.keySet().iterator(); + System.out.println("iterator created"); + + table.remove(new Word("dog")); + System.out.println("element removed"); + + while (it.hasNext()) { + Word key = it.next(); + System.out.println(table.get(key)); + } + } + + @Test + public void whenEnumerate_thenNotFailFast() { + + Hashtable table = new Hashtable(); + table.put(new Word("1"), "one"); + table.put(new Word("2"), "two"); + table.put(new Word("3"), "three"); + table.put(new Word("4"), "four"); + table.put(new Word("5"), "five"); + table.put(new Word("6"), "six"); + table.put(new Word("7"), "seven"); + table.put(new Word("8"), "eight"); + + Enumeration enumKey = table.keys(); + System.out.println("Enumeration created"); + table.remove(new Word("1")); + System.out.println("element removed"); + while (enumKey.hasMoreElements()) { + Word key = enumKey.nextElement(); + System.out.println(table.get(key)); + } + } + + @Test + public void whenAddElements_thenIterationOrderUnpredicable() { + + Hashtable table = new Hashtable(); + table.put(new Word("1"), "one"); + table.put(new Word("2"), "two"); + table.put(new Word("3"), "three"); + table.put(new Word("4"), "four"); + table.put(new Word("5"), "five"); + table.put(new Word("6"), "six"); + table.put(new Word("7"), "seven"); + table.put(new Word("8"), "eight"); + + Iterator> it = table.entrySet().iterator(); + while (it.hasNext()) { + Map.Entry entry = it.next(); + System.out.println(entry.getValue()); + } + } + + @Test + public void whenGetOrDefault_thenDefaultGot() { + + Hashtable table = new Hashtable(); + table.put(new Word("cat"), "a small domesticated carnivorous mammal"); + Word key = new Word("dog"); + String definition; + + // old way + /* if (table.containsKey(key)) { + definition = table.get(key); + } else { + definition = "not found"; + }*/ + + // new way + definition = table.getOrDefault(key, "not found"); + + assertThat(definition, is("not found")); + } + + @Test + public void whenPutifAbsent_thenNotRewritten() { + + Hashtable table = new Hashtable(); + table.put(new Word("cat"), "a small domesticated carnivorous mammal"); + + String definition = "an animal"; + // old way + /* if (!table.containsKey(new Word("cat"))) { + table.put(new Word("cat"), definition); + }*/ + // new way + table.putIfAbsent(new Word("cat"), definition); + + assertThat(table.get(new Word("cat")), is("a small domesticated carnivorous mammal")); + } + + @Test + public void whenRemovePair_thenCheckKeyAndValue() { + + Hashtable table = new Hashtable(); + table.put(new Word("cat"), "a small domesticated carnivorous mammal"); + + // old way + /* if (table.get(new Word("cat")).equals("an animal")) { + table.remove(new Word("cat")); + }*/ + + // new way + boolean result = table.remove(new Word("cat"), "an animal"); + + assertThat(result, is(false)); + } + + @Test + public void whenReplacePair_thenValueChecked() { + + Hashtable table = new Hashtable(); + table.put(new Word("cat"), "a small domesticated carnivorous mammal"); + + String definition = "an animal"; + + // old way + /* if (table.containsKey(new Word("cat")) && table.get(new Word("cat")).equals("a small domesticated carnivorous mammal")) { + table.put(new Word("cat"), definition); + }*/ + // new way + table.replace(new Word("cat"), "a small domesticated carnivorous mammal", definition); + + assertThat(table.get(new Word("cat")), is("an animal")); + + } + + @Test + public void whenKeyIsAbsent_thenNotRewritten() { + + Hashtable table = new Hashtable(); + table.put(new Word("cat"), "a small domesticated carnivorous mammal"); + + // old way + /* if (!table.containsKey(cat)) { + String definition = "an animal";// calculate + table.put(new Word("cat"), definition); + } + */ + // new way + + table.computeIfAbsent(new Word("cat"), key -> "an animal"); + assertThat(table.get(new Word("cat")), is("a small domesticated carnivorous mammal")); + + } + + @Test + public void whenKeyIsPresent_thenComputeIfPresent() { + + Hashtable table = new Hashtable(); + table.put(new Word("cat"), "a small domesticated carnivorous mammal"); + + Word cat = new Word("cat"); + // old way + /* if (table.containsKey(cat)) { + String concatination = cat.getName() + " - " + table.get(cat); + table.put(cat, concatination); + }*/ + + // new way + table.computeIfPresent(cat, (key, value) -> key.getName() + " - " + value); + + assertThat(table.get(cat), is("cat - a small domesticated carnivorous mammal")); + + } + + @Test + public void whenCompute_thenForAllKeys() { + + Hashtable table = new Hashtable(); + String[] animals = { "cat", "dog", "dog", "cat", "bird", "mouse", "mouse" }; + for (String animal : animals) { + table.compute(animal, (key, value) -> (value == null ? Integer.valueOf(1) : Integer.valueOf(value) + 1)); + } + assertThat(table.values(), hasItems(2, 2, 2, 1)); + + } + + @Test + public void whenInsteadOfCompute_thenMerge() { + + Hashtable table = new Hashtable(); + String[] animals = { "cat", "dog", "dog", "cat", "bird", "mouse", "mouse" }; + for (String animal : animals) { + table.merge(animal, 1, (oldValue, value) -> (oldValue + value)); + } + assertThat(table.values(), hasItems(2, 2, 2, 1)); + } + + @Test + public void whenForeach_thenIterate() { + + Hashtable table = new Hashtable(); + table.put(new Word("cat"), "a small domesticated carnivorous mammal"); + table.put(new Word("dog"), "another animal"); + table.forEach((k, v) -> System.out.println(k.getName() + " - " + v) + + ); + } + + @Test + public void whenReplaceall_thenNoIterationNeeded() { + + Hashtable table = new Hashtable(); + table.put(new Word("cat"), "a small domesticated carnivorous mammal"); + table.put(new Word("dog"), "another animal"); + table.replaceAll((k, v) -> k.getName() + " - " + v); + + assertThat(table.values(), hasItems("cat - a small domesticated carnivorous mammal", "dog - another animal")); + } +} diff --git a/core-java/README.md b/core-java/README.md index 8a94c9de8e..cc3097006c 100644 --- a/core-java/README.md +++ b/core-java/README.md @@ -74,17 +74,14 @@ - [CharSequence vs. String in Java](http://www.baeldung.com/java-char-sequence-string) - [Period and Duration in Java](http://www.baeldung.com/java-period-duration) - [Guide to the Diamond Operator in Java](http://www.baeldung.com/java-diamond-operator) -- [Singletons in Java](http://www.baeldung.com/java-singleton) - [“Sneaky Throws” in Java](http://www.baeldung.com/java-sneaky-throws) - [OutOfMemoryError: GC Overhead Limit Exceeded](http://www.baeldung.com/java-gc-overhead-limit-exceeded) - [StringBuilder and StringBuffer in Java](http://www.baeldung.com/java-string-builder-string-buffer) - [Number of Digits in an Integer in Java](http://www.baeldung.com/java-number-of-digits-in-int) -- [Proxy, Decorator, Adapter and Bridge Patterns](http://www.baeldung.com/java-structural-design-patterns) - [Creating a Java Compiler Plugin](http://www.baeldung.com/java-build-compiler-plugin) - [A Guide to the Static Keyword in Java](http://www.baeldung.com/java-static) - [Initializing Arrays in Java](http://www.baeldung.com/java-initialize-array) - [Guide to Java String Pool](http://www.baeldung.com/java-string-pool) -- [Introduction to Creational Design Patterns](http://www.baeldung.com/creational-design-patterns) - [Quick Example - Comparator vs Comparable in Java](http://www.baeldung.com/java-comparator-comparable) - [Quick Guide to Java Stack](http://www.baeldung.com/java-stack) - [The Java continue and break Keywords](http://www.baeldung.com/java-continue-and-break) @@ -116,8 +113,6 @@ - [Comparing Strings in Java](http://www.baeldung.com/java-compare-strings) - [Guide to Inheritance in Java](http://www.baeldung.com/java-inheritance) - [Guide to Externalizable Interface in Java](http://www.baeldung.com/java-externalizable) -- [The Observer Pattern in Java](http://www.baeldung.com/java-observer-pattern) -- [Flyweight Pattern in Java](http://www.baeldung.com/java-flyweight) - [Object Type Casting in Java](http://www.baeldung.com/java-type-casting) - [A Practical Guide to DecimalFormat](http://www.baeldung.com/java-decimalformat) - [How to Detect the OS Using Java](http://www.baeldung.com/java-detect-os) @@ -136,7 +131,6 @@ - [Class Loaders in Java](http://www.baeldung.com/java-classloaders) - [Find Sum and Average in a Java Array](http://www.baeldung.com/java-array-sum-average) - [Java List UnsupportedOperationException](http://www.baeldung.com/java-list-unsupported-operation-exception) -- [Service Locator Pattern](http://www.baeldung.com/java-service-locator-pattern) - [Type Erasure in Java Explained](http://www.baeldung.com/java-type-erasure) - [BigDecimal and BigInteger in Java](http://www.baeldung.com/java-bigdecimal-biginteger) - [Display All Time Zones With GMT And UTC in Java](http://www.baeldung.com/java-time-zones) @@ -145,4 +139,5 @@ - [Sending Emails with Java](http://www.baeldung.com/java-email) - [Introduction to SSL in Java](http://www.baeldung.com/java-ssl) - [Java KeyStore API](http://www.baeldung.com/java-keystore) -- [Double-Checked Locking with Singleton](http://www.baeldung.com/java-singleton-double-checked-locking) +- [Using Java Assertions](http://www.baeldung.com/java-assert) +- [Guide to Java Clock Class](http://www.baeldung.com/java-clock) diff --git a/core-java/src/main/java/com/baeldung/designpatterns/creational/abstractfactory/Color.java b/core-java/src/main/java/com/baeldung/designpatterns/creational/abstractfactory/Color.java deleted file mode 100644 index 897bb71f38..0000000000 --- a/core-java/src/main/java/com/baeldung/designpatterns/creational/abstractfactory/Color.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.baeldung.designpatterns.creational.abstractfactory; - -public interface Color { - String getColor(); -} diff --git a/core-java/src/main/java/com/baeldung/designpatterns/creational/factory/Polygon.java b/core-java/src/main/java/com/baeldung/designpatterns/creational/factory/Polygon.java deleted file mode 100644 index 8364e546b0..0000000000 --- a/core-java/src/main/java/com/baeldung/designpatterns/creational/factory/Polygon.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.baeldung.designpatterns.creational.factory; - -public interface Polygon { - String getType(); -} diff --git a/core-java/src/main/java/com/baeldung/numberofdigits/NumberOfDigitsDriver.java b/core-java/src/main/java/com/baeldung/numberofdigits/NumberOfDigitsDriver.java index 32d3051327..c3cc567eaa 100755 --- a/core-java/src/main/java/com/baeldung/numberofdigits/NumberOfDigitsDriver.java +++ b/core-java/src/main/java/com/baeldung/numberofdigits/NumberOfDigitsDriver.java @@ -1,10 +1,12 @@ package com.baeldung.numberofdigits; -import static com.baeldung.designpatterns.util.LogerUtil.LOG; +import org.apache.log4j.Logger; public class NumberOfDigitsDriver { private static NumberOfDigits numberOfDigits; + private static Logger LOG = Logger.getLogger(NumberOfDigitsDriver.class); + static { numberOfDigits = new NumberOfDigits(); } diff --git a/core-java/src/main/java/com/baeldung/stringisnumeric/Benchmarking.java b/core-java/src/main/java/com/baeldung/stringisnumeric/Benchmarking.java new file mode 100644 index 0000000000..4ae1f5aa83 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/stringisnumeric/Benchmarking.java @@ -0,0 +1,75 @@ +package com.baeldung.stringisnumeric; + +import java.util.concurrent.TimeUnit; + +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.OutputTimeUnit; +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.State; +import org.openjdk.jmh.runner.Runner; +import org.openjdk.jmh.runner.RunnerException; +import org.openjdk.jmh.runner.options.Options; +import org.openjdk.jmh.runner.options.OptionsBuilder; + + +public class Benchmarking { + public static void main(String[] args) throws RunnerException { + Options opt = new OptionsBuilder() + .include(Benchmarking.class.getSimpleName()) + .forks(1) + .build(); + + new Runner(opt).run(); + } + + @State(Scope.Thread) + public static class ExecutionPlan { + public String number = Integer.toString(Integer.MAX_VALUE); + public boolean isNumber = false; + public IsNumeric isNumeric= new IsNumeric(); + } + + @Benchmark + @BenchmarkMode(Mode.AverageTime) + @OutputTimeUnit(TimeUnit.NANOSECONDS) + public void usingCoreJava(ExecutionPlan plan) { + plan.isNumber = plan.isNumeric.usingCoreJava(plan.number); + } + + @Benchmark + @BenchmarkMode(Mode.AverageTime) + @OutputTimeUnit(TimeUnit.NANOSECONDS) + public void usingRegularExpressions(ExecutionPlan plan) { + plan.isNumber = plan.isNumeric.usingRegularExpressions(plan.number); + } + + @Benchmark + @BenchmarkMode(Mode.AverageTime) + @OutputTimeUnit(TimeUnit.NANOSECONDS) + public void usingNumberUtils_isCreatable(ExecutionPlan plan) { + plan.isNumber = plan.isNumeric.usingNumberUtils_isCreatable(plan.number); + } + + @Benchmark + @BenchmarkMode(Mode.AverageTime) + @OutputTimeUnit(TimeUnit.NANOSECONDS) + public void usingNumberUtils_isParsable(ExecutionPlan plan) { + plan.isNumber = plan.isNumeric.usingNumberUtils_isParsable(plan.number); + } + + @Benchmark + @BenchmarkMode(Mode.AverageTime) + @OutputTimeUnit(TimeUnit.NANOSECONDS) + public void usingStringUtils_isNumeric(ExecutionPlan plan) { + plan.isNumber = plan.isNumeric.usingStringUtils_isNumeric(plan.number); + } + + @Benchmark + @BenchmarkMode(Mode.AverageTime) + @OutputTimeUnit(TimeUnit.NANOSECONDS) + public void usingStringUtils_isNumericSpace(ExecutionPlan plan) { + plan.isNumber = plan.isNumeric.usingStringUtils_isNumericSpace(plan.number); + } +} \ No newline at end of file diff --git a/core-java/src/main/java/com/baeldung/stringisnumeric/IsNumeric.java b/core-java/src/main/java/com/baeldung/stringisnumeric/IsNumeric.java new file mode 100644 index 0000000000..c438071e42 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/stringisnumeric/IsNumeric.java @@ -0,0 +1,35 @@ +package com.baeldung.stringisnumeric; + +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.math.NumberUtils; + +public class IsNumeric { + public boolean usingCoreJava(String strNum) { + try { + double d = Double.parseDouble(strNum); + } catch (NumberFormatException | NullPointerException nfe) { + return false; + } + return true; + } + + public boolean usingRegularExpressions(String strNum) { + return strNum.matches("-?\\d+(\\.\\d+)?"); + } + + public boolean usingNumberUtils_isCreatable(String strNum) { + return NumberUtils.isCreatable(strNum); + } + + public boolean usingNumberUtils_isParsable(String strNum) { + return NumberUtils.isParsable(strNum); + } + + public boolean usingStringUtils_isNumeric(String strNum) { + return StringUtils.isNumeric(strNum); + } + + public boolean usingStringUtils_isNumericSpace(String strNum) { + return StringUtils.isNumericSpace(strNum); + } +} diff --git a/core-java/src/main/java/com/baeldung/stringisnumeric/IsNumericDriver.java b/core-java/src/main/java/com/baeldung/stringisnumeric/IsNumericDriver.java new file mode 100644 index 0000000000..c0a6edae50 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/stringisnumeric/IsNumericDriver.java @@ -0,0 +1,34 @@ +package com.baeldung.stringisnumeric; + +import org.apache.log4j.Logger; + +public class IsNumericDriver { + private static IsNumeric isNumeric; + private static Logger LOG = Logger.getLogger(IsNumericDriver.class); + static { + isNumeric =new IsNumeric(); + + } + + public static void main(String[] args) { + LOG.info("Testing all methods..."); + + boolean res = isNumeric.usingCoreJava("1001"); + LOG.info("Using Core Java : " + res); + + res = isNumeric.usingRegularExpressions("1001"); + LOG.info("Using Regular Expressions : " + res); + + res =isNumeric.usingNumberUtils_isCreatable("1001"); + LOG.info("Using NumberUtils.isCreatable : " + res); + + res =isNumeric.usingNumberUtils_isParsable("1001"); + LOG.info("Using NumberUtils.isParsable : " + res); + + res =isNumeric.usingStringUtils_isNumeric("1001"); + LOG.info("Using StringUtils.isNumeric : " + res); + + res =isNumeric.usingStringUtils_isNumericSpace("1001"); + LOG.info("Using StringUtils.isNumericSpace : " + res); + } +} diff --git a/core-java/src/test/java/com/baeldung/stringisnumeric.zip b/core-java/src/test/java/com/baeldung/stringisnumeric.zip new file mode 100644 index 0000000000..b8a7b9b35a Binary files /dev/null and b/core-java/src/test/java/com/baeldung/stringisnumeric.zip differ diff --git a/core-java/src/test/java/com/baeldung/stringisnumeric/CoreJavaIsNumericUnitTest.java b/core-java/src/test/java/com/baeldung/stringisnumeric/CoreJavaIsNumericUnitTest.java new file mode 100644 index 0000000000..808d3c45b0 --- /dev/null +++ b/core-java/src/test/java/com/baeldung/stringisnumeric/CoreJavaIsNumericUnitTest.java @@ -0,0 +1,31 @@ +package com.baeldung.stringisnumeric; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.Test; + +public class CoreJavaIsNumericUnitTest { + public static boolean isNumeric(String strNum) { + try { + double d = Double.parseDouble(strNum); + } catch (NumberFormatException | NullPointerException nfe) { + return false; + } + return true; + } + + @Test + public void whenUsingCoreJava_thenTrue() { + // Valid Numbers + assertThat(isNumeric("22")).isTrue(); + assertThat(isNumeric("5.05")).isTrue(); + assertThat(isNumeric("-200")).isTrue(); + assertThat(isNumeric("10.0d")).isTrue(); + assertThat(isNumeric(" 22 ")).isTrue(); + + // Invalid Numbers + assertThat(isNumeric(null)).isFalse(); + assertThat(isNumeric("")).isFalse(); + assertThat(isNumeric("abc")).isFalse(); + } +} diff --git a/core-java/src/test/java/com/baeldung/stringisnumeric/NumberUtilsIsCreatableUnitTest.java b/core-java/src/test/java/com/baeldung/stringisnumeric/NumberUtilsIsCreatableUnitTest.java new file mode 100644 index 0000000000..467d58837a --- /dev/null +++ b/core-java/src/test/java/com/baeldung/stringisnumeric/NumberUtilsIsCreatableUnitTest.java @@ -0,0 +1,28 @@ +package com.baeldung.stringisnumeric; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.apache.commons.lang3.math.NumberUtils; +import org.junit.Test; + +public class NumberUtilsIsCreatableUnitTest { + @Test + public void givenApacheCommons_whenUsingIsParsable_thenTrue() { + // Valid Numbers + assertThat(NumberUtils.isCreatable("22")).isTrue(); + assertThat(NumberUtils.isCreatable("5.05")).isTrue(); + assertThat(NumberUtils.isCreatable("-200")).isTrue(); + assertThat(NumberUtils.isCreatable("10.0d")).isTrue(); + assertThat(NumberUtils.isCreatable("1000L")).isTrue(); + assertThat(NumberUtils.isCreatable("0xFF")).isTrue(); + assertThat(NumberUtils.isCreatable("07")).isTrue(); + assertThat(NumberUtils.isCreatable("2.99e+8")).isTrue(); + + // Invalid Numbers + assertThat(NumberUtils.isCreatable(null)).isFalse(); + assertThat(NumberUtils.isCreatable("")).isFalse(); + assertThat(NumberUtils.isCreatable("abc")).isFalse(); + assertThat(NumberUtils.isCreatable(" 22 ")).isFalse(); + assertThat(NumberUtils.isCreatable("09")).isFalse(); + } +} diff --git a/core-java/src/test/java/com/baeldung/stringisnumeric/NumberUtilsIsParsableUnitTest.java b/core-java/src/test/java/com/baeldung/stringisnumeric/NumberUtilsIsParsableUnitTest.java new file mode 100644 index 0000000000..141a761158 --- /dev/null +++ b/core-java/src/test/java/com/baeldung/stringisnumeric/NumberUtilsIsParsableUnitTest.java @@ -0,0 +1,26 @@ +package com.baeldung.stringisnumeric; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.apache.commons.lang3.math.NumberUtils; +import org.junit.Test; + +public class NumberUtilsIsParsableUnitTest { + @Test + public void givenApacheCommons_whenUsingIsParsable_thenTrue() { + // Valid Numbers + assertThat(NumberUtils.isParsable("22")).isTrue(); + assertThat(NumberUtils.isParsable("-23")).isTrue(); + assertThat(NumberUtils.isParsable("2.2")).isTrue(); + assertThat(NumberUtils.isParsable("09")).isTrue(); + + // Invalid Numbers + assertThat(NumberUtils.isParsable(null)).isFalse(); + assertThat(NumberUtils.isParsable("")).isFalse(); + assertThat(NumberUtils.isParsable("6.2f")).isFalse(); + assertThat(NumberUtils.isParsable("9.8d")).isFalse(); + assertThat(NumberUtils.isParsable("22L")).isFalse(); + assertThat(NumberUtils.isParsable("0xFF")).isFalse(); + assertThat(NumberUtils.isParsable("2.99e+8")).isFalse(); + } +} diff --git a/core-java/src/test/java/com/baeldung/stringisnumeric/RegularExpressionsUnitTest.java b/core-java/src/test/java/com/baeldung/stringisnumeric/RegularExpressionsUnitTest.java new file mode 100644 index 0000000000..c3aa43ac94 --- /dev/null +++ b/core-java/src/test/java/com/baeldung/stringisnumeric/RegularExpressionsUnitTest.java @@ -0,0 +1,22 @@ +package com.baeldung.stringisnumeric; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.Test; + +public class RegularExpressionsUnitTest { + public static boolean isNumeric(String strNum) { + return strNum.matches("-?\\d+(\\.\\d+)?"); + } + + @Test + public void whenUsingRegularExpressions_thenTrue() { + // Valid Numbers + assertThat(isNumeric("22")).isTrue(); + assertThat(isNumeric("5.05")).isTrue(); + assertThat(isNumeric("-200")).isTrue(); + + // Invalid Numbers + assertThat(isNumeric("abc")).isFalse(); + } +} diff --git a/core-java/src/test/java/com/baeldung/stringisnumeric/StringUtilsIsNumericSpaceUnitTest.java b/core-java/src/test/java/com/baeldung/stringisnumeric/StringUtilsIsNumericSpaceUnitTest.java new file mode 100644 index 0000000000..135780d9ad --- /dev/null +++ b/core-java/src/test/java/com/baeldung/stringisnumeric/StringUtilsIsNumericSpaceUnitTest.java @@ -0,0 +1,23 @@ +package com.baeldung.stringisnumeric; + +import org.apache.commons.lang3.StringUtils; +import org.junit.Test; +import static org.assertj.core.api.Assertions.assertThat; + +public class StringUtilsIsNumericSpaceUnitTest { + @Test + public void givenApacheCommons_whenUsingIsNumericSpace_thenTrue() { + // Valid Numbers + assertThat(StringUtils.isNumericSpace("123")).isTrue(); + assertThat(StringUtils.isNumericSpace("١٢٣")).isTrue(); + assertThat(StringUtils.isNumericSpace("")).isTrue(); + assertThat(StringUtils.isNumericSpace(" ")).isTrue(); + assertThat(StringUtils.isNumericSpace("12 3")).isTrue(); + + // Invalid Numbers + assertThat(StringUtils.isNumericSpace(null)).isFalse(); + assertThat(StringUtils.isNumericSpace("ab2c")).isFalse(); + assertThat(StringUtils.isNumericSpace("12.3")).isFalse(); + assertThat(StringUtils.isNumericSpace("-123")).isFalse(); + } +} diff --git a/core-java/src/test/java/com/baeldung/stringisnumeric/StringUtilsIsNumericUnitTest.java b/core-java/src/test/java/com/baeldung/stringisnumeric/StringUtilsIsNumericUnitTest.java new file mode 100644 index 0000000000..b667dda906 --- /dev/null +++ b/core-java/src/test/java/com/baeldung/stringisnumeric/StringUtilsIsNumericUnitTest.java @@ -0,0 +1,24 @@ +package com.baeldung.stringisnumeric; + +import org.apache.commons.lang3.StringUtils; +import org.junit.Test; +import static org.assertj.core.api.Assertions.assertThat; + +public class StringUtilsIsNumericUnitTest { + @Test + public void givenApacheCommons_whenUsingIsNumeric_thenTrue() { + // Valid Numbers + assertThat(StringUtils.isNumeric("123")).isTrue(); + assertThat(StringUtils.isNumeric("١٢٣")).isTrue(); + assertThat(StringUtils.isNumeric("१२३")).isTrue(); + + // Invalid Numbers + assertThat(StringUtils.isNumeric(null)).isFalse(); + assertThat(StringUtils.isNumeric("")).isFalse(); + assertThat(StringUtils.isNumeric(" ")).isFalse(); + assertThat(StringUtils.isNumeric("12 3")).isFalse(); + assertThat(StringUtils.isNumeric("ab2c")).isFalse(); + assertThat(StringUtils.isNumeric("12.3")).isFalse(); + assertThat(StringUtils.isNumeric("-123")).isFalse(); + } +} diff --git a/core-kotlin/pom.xml b/core-kotlin/pom.xml index 00c3ac188d..24bfb302cf 100644 --- a/core-kotlin/pom.xml +++ b/core-kotlin/pom.xml @@ -63,6 +63,24 @@ kotlinx-coroutines-core ${kotlinx.version} + + org.jetbrains.spek + spek-api + 1.1.5 + test + + + org.jetbrains.spek + spek-subject-extension + 1.1.5 + test + + + org.jetbrains.spek + spek-junit-platform-engine + 1.1.5 + test + com.nhaarman mockito-kotlin diff --git a/core-kotlin/src/test/kotlin/com/baeldung/kotlin/spek/CalculatorSubjectTest5.kt b/core-kotlin/src/test/kotlin/com/baeldung/kotlin/spek/CalculatorSubjectTest5.kt new file mode 100644 index 0000000000..f595d65bf2 --- /dev/null +++ b/core-kotlin/src/test/kotlin/com/baeldung/kotlin/spek/CalculatorSubjectTest5.kt @@ -0,0 +1,19 @@ +package com.baeldung.kotlin.spek + +import com.baeldung.kotlin.junit5.Calculator +import org.jetbrains.spek.api.dsl.describe +import org.jetbrains.spek.api.dsl.it +import org.jetbrains.spek.subject.SubjectSpek +import org.junit.jupiter.api.Assertions.assertEquals + +class CalculatorSubjectTest5 : SubjectSpek({ + subject { Calculator() } + describe("A calculator") { + describe("Addition") { + val result = subject.add(3, 5) + it("Produces the correct answer") { + assertEquals(8, result) + } + } + } +}) diff --git a/core-kotlin/src/test/kotlin/com/baeldung/kotlin/spek/CalculatorTest5.kt b/core-kotlin/src/test/kotlin/com/baeldung/kotlin/spek/CalculatorTest5.kt new file mode 100644 index 0000000000..3c49d916e4 --- /dev/null +++ b/core-kotlin/src/test/kotlin/com/baeldung/kotlin/spek/CalculatorTest5.kt @@ -0,0 +1,32 @@ +package com.baeldung.kotlin.spek + +import com.baeldung.kotlin.junit5.Calculator +import org.jetbrains.spek.api.Spek +import org.jetbrains.spek.api.dsl.describe +import org.jetbrains.spek.api.dsl.given +import org.jetbrains.spek.api.dsl.it +import org.jetbrains.spek.api.dsl.on +import org.junit.jupiter.api.Assertions.assertEquals + +class CalculatorTest5 : Spek({ + given("A calculator") { + val calculator = Calculator() + on("Adding 3 and 5") { + val result = calculator.add(3, 5) + it("Produces 8") { + assertEquals(8, result) + } + } + } + + describe("A calculator") { + val calculator = Calculator() + describe("Addition") { + val result = calculator.add(3, 5) + it("Produces the correct answer") { + assertEquals(8, result) + } + } + } + +}) diff --git a/core-kotlin/src/test/kotlin/com/baeldung/kotlin/spek/DataDrivenTest5.kt b/core-kotlin/src/test/kotlin/com/baeldung/kotlin/spek/DataDrivenTest5.kt new file mode 100644 index 0000000000..bbcb36e8bb --- /dev/null +++ b/core-kotlin/src/test/kotlin/com/baeldung/kotlin/spek/DataDrivenTest5.kt @@ -0,0 +1,21 @@ +package com.baeldung.kotlin.spek + +import org.jetbrains.spek.api.Spek +import org.jetbrains.spek.api.dsl.describe +import org.jetbrains.spek.api.dsl.it +import org.junit.jupiter.api.Assertions + +class DataDrivenTest5 : Spek({ + describe("A data driven test") { + mapOf( + "hello" to "HELLO", + "world" to "WORLD" + ).forEach { input, expected -> + describe("Capitalising $input") { + it("Correctly returns $expected") { + Assertions.assertEquals(expected, input.toUpperCase()) + } + } + } + } +}) diff --git a/core-kotlin/src/test/kotlin/com/baeldung/kotlin/spek/GroupTest5.kt b/core-kotlin/src/test/kotlin/com/baeldung/kotlin/spek/GroupTest5.kt new file mode 100644 index 0000000000..5aeee622e4 --- /dev/null +++ b/core-kotlin/src/test/kotlin/com/baeldung/kotlin/spek/GroupTest5.kt @@ -0,0 +1,62 @@ +package com.baeldung.kotlin.spek + +import org.jetbrains.spek.api.Spek +import org.jetbrains.spek.api.dsl.describe +import org.jetbrains.spek.api.dsl.it + +class GroupTest5 : Spek({ + describe("Outer group") { + beforeEachTest { + System.out.println("BeforeEachTest 0") + } + beforeGroup { + System.out.println("BeforeGroup 0") + } + afterEachTest { + System.out.println("AfterEachTest 0") + } + afterGroup { + System.out.println("AfterGroup 0") + } + describe("Inner group 1") { + beforeEachTest { + System.out.println("BeforeEachTest 1") + } + beforeGroup { + System.out.println("BeforeGroup 1") + } + afterEachTest { + System.out.println("AfterEachTest 1") + } + afterGroup { + System.out.println("AfterGroup 1") + } + it("Test 1") { + System.out.println("Test 1") + } + it("Test 2") { + System.out.println("Test 2") + } + } + describe("Inner group 2") { + beforeEachTest { + System.out.println("BeforeEachTest 2") + } + beforeGroup { + System.out.println("BeforeGroup 2") + } + afterEachTest { + System.out.println("AfterEachTest 2") + } + afterGroup { + System.out.println("AfterGroup 2") + } + it("Test 3") { + System.out.println("Test 3") + } + it("Test 4") { + System.out.println("Test 4") + } + } + } +}) diff --git a/guava/pom.xml b/guava/pom.xml index da880cc995..b36506f87a 100644 --- a/guava/pom.xml +++ b/guava/pom.xml @@ -32,6 +32,14 @@ ${assertj.version} test + + + + org.hamcrest + java-hamcrest + ${java-hamcrest.version} + test + @@ -52,6 +60,7 @@ 3.6.1 + 2.0.0.0 \ No newline at end of file diff --git a/guava/src/test/java/org/baeldung/hamcrest/HamcrestExamplesUnitTest.java b/guava/src/test/java/org/baeldung/hamcrest/HamcrestExamplesUnitTest.java index 6b9cee1992..82b6b8c87c 100644 --- a/guava/src/test/java/org/baeldung/hamcrest/HamcrestExamplesUnitTest.java +++ b/guava/src/test/java/org/baeldung/hamcrest/HamcrestExamplesUnitTest.java @@ -12,6 +12,7 @@ import static org.hamcrest.Matchers.hasItems; import static org.hamcrest.Matchers.hasSize; import static org.hamcrest.Matchers.not; import static org.junit.Assert.assertThat; +import static org.hamcrest.Matchers.emptyIterable; import java.util.Collections; import java.util.List; @@ -57,6 +58,12 @@ public class HamcrestExamplesUnitTest { final List collection = Lists.newArrayList(); assertThat(collection, empty()); } + + @Test + public final void givenIterableIsEmpty_whenChecking_thenEmpty() { + final Iterable collection = Lists.newArrayList(); + assertThat(collection, emptyIterable()); + } @Test public final void givenCollectionIsNotEmpty_whenChecking_thenNotEmpty() { diff --git a/hibernate5/src/main/java/com/baeldung/hibernate/HibernateUtil.java b/hibernate5/src/main/java/com/baeldung/hibernate/HibernateUtil.java index 130edec8cc..e8fdabebbc 100644 --- a/hibernate5/src/main/java/com/baeldung/hibernate/HibernateUtil.java +++ b/hibernate5/src/main/java/com/baeldung/hibernate/HibernateUtil.java @@ -1,30 +1,12 @@ package com.baeldung.hibernate; -import com.baeldung.hibernate.pojo.Employee; -import com.baeldung.hibernate.pojo.EntityDescription; -import com.baeldung.hibernate.pojo.OrderEntry; -import com.baeldung.hibernate.pojo.OrderEntryIdClass; -import com.baeldung.hibernate.pojo.OrderEntryPK; -import com.baeldung.hibernate.pojo.PointEntity; -import com.baeldung.hibernate.pojo.PolygonEntity; -import com.baeldung.hibernate.pojo.Product; -import com.baeldung.hibernate.pojo.Phone; -import com.baeldung.hibernate.pojo.TemporalValues; -import com.baeldung.hibernate.pojo.Course; -import com.baeldung.hibernate.pojo.Student; -import com.baeldung.hibernate.pojo.User; -import com.baeldung.hibernate.pojo.UserProfile; -import com.baeldung.hibernate.pojo.inheritance.Animal; -import com.baeldung.hibernate.pojo.inheritance.Bag; -import com.baeldung.hibernate.pojo.inheritance.Book; -import com.baeldung.hibernate.pojo.inheritance.Car; -import com.baeldung.hibernate.pojo.inheritance.MyEmployee; -import com.baeldung.hibernate.pojo.inheritance.MyProduct; -import com.baeldung.hibernate.pojo.inheritance.Pen; -import com.baeldung.hibernate.pojo.inheritance.Person; -import com.baeldung.hibernate.pojo.inheritance.Pet; -import com.baeldung.hibernate.pojo.inheritance.Vehicle; - +import com.baeldung.hibernate.pessimisticlocking.Individual; +import com.baeldung.hibernate.pessimisticlocking.PessimisticLockingCourse; +import com.baeldung.hibernate.pessimisticlocking.PessimisticLockingEmployee; +import com.baeldung.hibernate.pessimisticlocking.PessimisticLockingStudent; +import com.baeldung.hibernate.pojo.*; +import com.baeldung.hibernate.pojo.Person; +import com.baeldung.hibernate.pojo.inheritance.*; import org.apache.commons.lang3.StringUtils; import org.hibernate.SessionFactory; import org.hibernate.boot.Metadata; @@ -82,6 +64,12 @@ public class HibernateUtil { metadataSources.addAnnotatedClass(PointEntity.class); metadataSources.addAnnotatedClass(PolygonEntity.class); metadataSources.addAnnotatedClass(com.baeldung.hibernate.pojo.Person.class); + metadataSources.addAnnotatedClass(Individual.class); + metadataSources.addAnnotatedClass(PessimisticLockingEmployee.class); + metadataSources.addAnnotatedClass(PessimisticLockingStudent.class); + metadataSources.addAnnotatedClass(PessimisticLockingCourse.class); + metadataSources.addAnnotatedClass(com.baeldung.hibernate.pessimisticlocking.Customer.class); + metadataSources.addAnnotatedClass(com.baeldung.hibernate.pessimisticlocking.Address.class); Metadata metadata = metadataSources.buildMetadata(); return metadata.getSessionFactoryBuilder() diff --git a/hibernate5/src/main/java/com/baeldung/hibernate/pessimisticlocking/Address.java b/hibernate5/src/main/java/com/baeldung/hibernate/pessimisticlocking/Address.java new file mode 100644 index 0000000000..c889cb6127 --- /dev/null +++ b/hibernate5/src/main/java/com/baeldung/hibernate/pessimisticlocking/Address.java @@ -0,0 +1,34 @@ +package com.baeldung.hibernate.pessimisticlocking; + +import javax.persistence.Embeddable; + +@Embeddable +public class Address { + + private String country; + private String city; + + public Address(String country, String city) { + this.country = country; + this.city = city; + } + + public Address() { + } + + public String getCountry() { + return country; + } + + public void setCountry(String country) { + this.country = country; + } + + public String getCity() { + return city; + } + + public void setCity(String city) { + this.city = city; + } +} diff --git a/hibernate5/src/main/java/com/baeldung/hibernate/pessimisticlocking/Customer.java b/hibernate5/src/main/java/com/baeldung/hibernate/pessimisticlocking/Customer.java new file mode 100644 index 0000000000..cb73cbc958 --- /dev/null +++ b/hibernate5/src/main/java/com/baeldung/hibernate/pessimisticlocking/Customer.java @@ -0,0 +1,58 @@ +package com.baeldung.hibernate.pessimisticlocking; + +import javax.persistence.*; +import java.util.List; + +@Entity +public class Customer { + + @Id + private Long customerId; + private String name; + private String lastName; + @ElementCollection + @CollectionTable(name = "customer_address") + private List
addressList; + + public Customer() { + } + + public Customer(Long customerId, String name, String lastName, List
addressList) { + this.customerId = customerId; + this.name = name; + this.lastName = lastName; + this.addressList = addressList; + } + + public Long getCustomerId() { + return customerId; + } + + public void setCustomerId(Long customerId) { + this.customerId = customerId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public List
getAddressList() { + return addressList; + } + + public void setAddressList(List
addressList) { + this.addressList = addressList; + } +} diff --git a/hibernate5/src/main/java/com/baeldung/hibernate/pessimisticlocking/Individual.java b/hibernate5/src/main/java/com/baeldung/hibernate/pessimisticlocking/Individual.java new file mode 100644 index 0000000000..e491c09eb5 --- /dev/null +++ b/hibernate5/src/main/java/com/baeldung/hibernate/pessimisticlocking/Individual.java @@ -0,0 +1,49 @@ +package com.baeldung.hibernate.pessimisticlocking; + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Inheritance; +import javax.persistence.InheritanceType; + +@Entity +@Inheritance(strategy = InheritanceType.JOINED) +public class Individual { + + @Id + private Long id; + private String name; + private String lastName; + + public Individual(Long id, String name, String lastName) { + this.id = id; + this.name = name; + this.lastName = lastName; + } + + public Individual() { + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } +} diff --git a/hibernate5/src/main/java/com/baeldung/hibernate/pessimisticlocking/PessimisticLockingCourse.java b/hibernate5/src/main/java/com/baeldung/hibernate/pessimisticlocking/PessimisticLockingCourse.java new file mode 100644 index 0000000000..aea7d5fc87 --- /dev/null +++ b/hibernate5/src/main/java/com/baeldung/hibernate/pessimisticlocking/PessimisticLockingCourse.java @@ -0,0 +1,47 @@ +package com.baeldung.hibernate.pessimisticlocking; + +import javax.persistence.*; + +@Entity +public class PessimisticLockingCourse { + + @Id + private Long courseId; + private String name; + @ManyToOne + @JoinTable(name = "student_course") + private PessimisticLockingStudent student; + + public PessimisticLockingCourse(Long courseId, String name, PessimisticLockingStudent student) { + this.courseId = courseId; + this.name = name; + this.student = student; + } + + public PessimisticLockingCourse() { + } + + public Long getCourseId() { + return courseId; + } + + public void setCourseId(Long courseId) { + this.courseId = courseId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public PessimisticLockingStudent getStudent() { + return student; + } + + public void setStudent(PessimisticLockingStudent students) { + this.student = students; + } +} diff --git a/hibernate5/src/main/java/com/baeldung/hibernate/pessimisticlocking/PessimisticLockingEmployee.java b/hibernate5/src/main/java/com/baeldung/hibernate/pessimisticlocking/PessimisticLockingEmployee.java new file mode 100644 index 0000000000..a1328cbdad --- /dev/null +++ b/hibernate5/src/main/java/com/baeldung/hibernate/pessimisticlocking/PessimisticLockingEmployee.java @@ -0,0 +1,27 @@ +package com.baeldung.hibernate.pessimisticlocking; + +import javax.persistence.Entity; +import java.math.BigDecimal; + +@Entity +public class PessimisticLockingEmployee extends Individual { + + private BigDecimal salary; + + public PessimisticLockingEmployee(Long id, String name, String lastName, BigDecimal salary) { + super(id, name, lastName); + this.salary = salary; + } + + public PessimisticLockingEmployee() { + super(); + } + + public BigDecimal getSalary() { + return salary; + } + + public void setSalary(BigDecimal average) { + this.salary = average; + } +} diff --git a/hibernate5/src/main/java/com/baeldung/hibernate/pessimisticlocking/PessimisticLockingStudent.java b/hibernate5/src/main/java/com/baeldung/hibernate/pessimisticlocking/PessimisticLockingStudent.java new file mode 100644 index 0000000000..e6c5f476b4 --- /dev/null +++ b/hibernate5/src/main/java/com/baeldung/hibernate/pessimisticlocking/PessimisticLockingStudent.java @@ -0,0 +1,46 @@ +package com.baeldung.hibernate.pessimisticlocking; + +import javax.persistence.*; +import java.util.List; + +@Entity +public class PessimisticLockingStudent { + + @Id + private Long id; + private String name; + @OneToMany(mappedBy = "student") + private List courses; + + public PessimisticLockingStudent(Long id, String name) { + this.id = id; + this.name = name; + } + + public PessimisticLockingStudent() { + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public List getCourses() { + return courses; + } + + public void setCourses(List courses) { + this.courses = courses; + } +} diff --git a/hibernate5/src/test/java/com/baeldung/hibernate/pessimisticlocking/BasicPessimisticLockingIntegrationTest.java b/hibernate5/src/test/java/com/baeldung/hibernate/pessimisticlocking/BasicPessimisticLockingIntegrationTest.java new file mode 100644 index 0000000000..f416c11d1f --- /dev/null +++ b/hibernate5/src/test/java/com/baeldung/hibernate/pessimisticlocking/BasicPessimisticLockingIntegrationTest.java @@ -0,0 +1,151 @@ +package com.baeldung.hibernate.pessimisticlocking; + +import com.baeldung.hibernate.HibernateUtil; +import com.vividsolutions.jts.util.Assert; +import org.junit.BeforeClass; +import org.junit.Test; + +import javax.persistence.*; +import java.io.IOException; +import java.util.Arrays; + +public class BasicPessimisticLockingIntegrationTest { + + @BeforeClass + public static void setUp() throws IOException { + EntityManager entityManager = getEntityManagerWithOpenTransaction(); + PessimisticLockingStudent student = new PessimisticLockingStudent(1L, "JOHN"); + PessimisticLockingCourse course = new PessimisticLockingCourse(1L, "MATH", student); + student.setCourses(Arrays.asList(course)); + entityManager.persist(course); + entityManager.persist(student); + entityManager.getTransaction() + .commit(); + entityManager.close(); + } + + @Test + public void givenFoundRecordWithPessimisticRead_whenFindingNewOne_PessimisticLockExceptionThrown() { + try { + EntityManager entityManager = getEntityManagerWithOpenTransaction(); + entityManager.find(PessimisticLockingStudent.class, 1L, LockModeType.PESSIMISTIC_READ); + + EntityManager entityManager2 = getEntityManagerWithOpenTransaction(); + entityManager2.find(PessimisticLockingStudent.class, 1L, LockModeType.PESSIMISTIC_READ); + + entityManager.close(); + entityManager2.close(); + } catch (Exception e) { + Assert.isTrue(e instanceof PessimisticLockException); + } + } + + @Test + public void givenRecordWithPessimisticReadQuery_whenQueryingNewOne_PessimisticLockExceptionThrown() throws IOException { + try { + EntityManager entityManager = getEntityManagerWithOpenTransaction(); + Query query = entityManager.createQuery("from Student where studentId = :studentId"); + query.setParameter("studentId", 1L); + query.setLockMode(LockModeType.PESSIMISTIC_WRITE); + query.getResultList(); + + EntityManager entityManager2 = getEntityManagerWithOpenTransaction(); + Query query2 = entityManager2.createQuery("from Student where studentId = :studentId"); + query2.setParameter("studentId", 1L); + query2.setLockMode(LockModeType.PESSIMISTIC_READ); + query2.getResultList(); + + entityManager.close(); + entityManager2.close(); + } catch (Exception e) { + Assert.isTrue(e instanceof PessimisticLockException); + } + } + + @Test + public void givenRecordWithPessimisticReadLock_whenFindingNewOne_PessimisticLockExceptionThrown() { + try { + EntityManager entityManager = getEntityManagerWithOpenTransaction(); + PessimisticLockingStudent resultStudent = entityManager.find(PessimisticLockingStudent.class, 1L); + entityManager.lock(resultStudent, LockModeType.PESSIMISTIC_READ); + + EntityManager entityManager2 = getEntityManagerWithOpenTransaction(); + entityManager2.find(PessimisticLockingStudent.class, 1L, LockModeType.PESSIMISTIC_FORCE_INCREMENT); + + entityManager.close(); + entityManager2.close(); + } catch (Exception e) { + Assert.isTrue(e instanceof PessimisticLockException); + } + } + + @Test + public void givenRecordAndRefreshWithPessimisticRead_whenFindingWithPessimisticWrite_PessimisticLockExceptionThrown() { + try { + EntityManager entityManager = getEntityManagerWithOpenTransaction(); + PessimisticLockingStudent resultStudent = entityManager.find(PessimisticLockingStudent.class, 1L); + entityManager.refresh(resultStudent, LockModeType.PESSIMISTIC_FORCE_INCREMENT); + + EntityManager entityManager2 = getEntityManagerWithOpenTransaction(); + entityManager2.find(PessimisticLockingStudent.class, 1L, LockModeType.PESSIMISTIC_WRITE); + + entityManager.close(); + entityManager2.close(); + } catch (Exception e) { + Assert.isTrue(e instanceof PessimisticLockException); + } + } + + @Test + public void givenRecordWithPessimisticRead_whenUpdatingRecord_PessimisticLockExceptionThrown() { + try { + EntityManager entityManager = getEntityManagerWithOpenTransaction(); + PessimisticLockingStudent resultStudent = entityManager.find(PessimisticLockingStudent.class, 1L); + entityManager.refresh(resultStudent, LockModeType.PESSIMISTIC_READ); + + EntityManager entityManager2 = getEntityManagerWithOpenTransaction(); + PessimisticLockingStudent resultStudent2 = entityManager2.find(PessimisticLockingStudent.class, 1L); + resultStudent2.setName("Change"); + entityManager2.persist(resultStudent2); + entityManager2.getTransaction() + .commit(); + + entityManager.close(); + entityManager2.close(); + } catch (Exception e) { + Assert.isTrue(e instanceof PessimisticLockException); + } + } + + @Test + public void givenRecordWithPessimisticWrite_whenUpdatingRecord_PessimisticLockExceptionThrown() { + try { + EntityManager entityManager = getEntityManagerWithOpenTransaction(); + PessimisticLockingStudent resultStudent = entityManager.find(PessimisticLockingStudent.class, 1L); + entityManager.refresh(resultStudent, LockModeType.PESSIMISTIC_WRITE); + + EntityManager entityManager2 = getEntityManagerWithOpenTransaction(); + PessimisticLockingStudent resultStudent2 = entityManager2.find(PessimisticLockingStudent.class, 1L); + resultStudent2.setName("Change"); + entityManager2.persist(resultStudent2); + entityManager2.getTransaction() + .commit(); + + entityManager.close(); + entityManager2.close(); + } catch (Exception e) { + Assert.isTrue(e instanceof PessimisticLockException); + } + } + + protected static EntityManager getEntityManagerWithOpenTransaction() throws IOException { + String propertyFileName = "hibernate-pessimistic-locking.properties"; + EntityManager entityManager = HibernateUtil.getSessionFactory(propertyFileName) + .openSession(); + entityManager.getTransaction() + .begin(); + + return entityManager; + } + +} diff --git a/hibernate5/src/test/java/com/baeldung/hibernate/pessimisticlocking/PessimisticLockScopesIntegrationTest.java b/hibernate5/src/test/java/com/baeldung/hibernate/pessimisticlocking/PessimisticLockScopesIntegrationTest.java new file mode 100644 index 0000000000..ac56ab7133 --- /dev/null +++ b/hibernate5/src/test/java/com/baeldung/hibernate/pessimisticlocking/PessimisticLockScopesIntegrationTest.java @@ -0,0 +1,115 @@ +package com.baeldung.hibernate.pessimisticlocking; + +import com.baeldung.hibernate.HibernateUtil; +import org.junit.Test; + +import javax.persistence.EntityManager; +import javax.persistence.LockModeType; +import javax.persistence.PessimisticLockScope; +import java.io.IOException; +import java.math.BigDecimal; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; + +public class PessimisticLockScopesIntegrationTest { + + @Test + public void givenEclipseEntityWithJoinInheritance_whenNormalLock_thenShouldChildAndParentEntity() throws IOException { + EntityManager em = getEntityManagerWithOpenTransaction(); + PessimisticLockingEmployee employee = new PessimisticLockingEmployee(1L, "JOHN", "SMITH", new BigDecimal(4.5)); + em.persist(employee); + em.getTransaction() + .commit(); + em.close(); + + // NORMAL SCOPE + EntityManager em2 = getEntityManagerWithOpenTransaction(); + PessimisticLockingEmployee foundEmployee = em2.find(PessimisticLockingEmployee.class, 1L, LockModeType.PESSIMISTIC_WRITE); + em2.getTransaction() + .rollback(); + + // EXTENDED SCOPE + Map map = new HashMap<>(); + map.put("javax.persistence.lock.scope", PessimisticLockScope.EXTENDED); + + EntityManager em3 = getEntityManagerWithOpenTransaction(); + foundEmployee = em3.find(PessimisticLockingEmployee.class, 1L, LockModeType.PESSIMISTIC_WRITE, map); + em3.getTransaction() + .rollback(); + + em2.close(); + em3.close(); + } + + @Test + public void givenEntityWithElementCollection_whenLock_thenHibernateExtendedScopeLockOnlyOwningEntity() throws IOException { + EntityManager em = getEntityManagerWithOpenTransaction(); + Address address = new Address("Poland", "Warsaw"); + Customer customer = new Customer(1L, "JOE", "DOE", Arrays.asList(address)); + em.persist(customer); + em.getTransaction() + .commit(); + em.close(); + + // NORMAL SCOPE + EntityManager em2 = getEntityManagerWithOpenTransaction(); + Customer foundCustomer = em2.find(Customer.class, 1L, LockModeType.PESSIMISTIC_WRITE); + em2.getTransaction() + .rollback(); + + // EXTENDED SCOPE + Map map = new HashMap<>(); + map.put("javax.persistence.lock.scope", PessimisticLockScope.EXTENDED); + + EntityManager em3 = getEntityManagerWithOpenTransaction(); + foundCustomer = em3.find(Customer.class, 1L, LockModeType.PESSIMISTIC_WRITE, map); + em2.getTransaction() + .rollback(); + + em2.close(); + em3.close(); + } + + @Test + public void givenEntityWithOneToMany_whenLock_thenHibernateExtendedScopeLockOnlyOwningEntity() throws IOException { + EntityManager em = getEntityManagerWithOpenTransaction(); + PessimisticLockingStudent student = new PessimisticLockingStudent(1L, "JOE"); + PessimisticLockingCourse course = new PessimisticLockingCourse(1L, "COURSE", student); + student.setCourses(Arrays.asList(course)); + em.persist(course); + em.persist(student); + em.getTransaction() + .commit(); + em.close(); + + // NORMAL SCOPE + EntityManager em2 = getEntityManagerWithOpenTransaction(); + PessimisticLockingCourse foundCourse = em2.find(PessimisticLockingCourse.class, 1L, LockModeType.PESSIMISTIC_WRITE); + em2.getTransaction() + .rollback(); + + // EXTENDED SCOPE + Map map = new HashMap<>(); + map.put("javax.persistence.lock.scope", PessimisticLockScope.EXTENDED); + + EntityManager em3 = getEntityManagerWithOpenTransaction(); + foundCourse = em3.find(PessimisticLockingCourse.class, 1L, LockModeType.PESSIMISTIC_WRITE, map); + em3.getTransaction() + .rollback(); + + em2.close(); + em3.close(); + } + + protected EntityManager getEntityManagerWithOpenTransaction() throws IOException { + String propertyFileName = "hibernate-pessimistic-locking.properties"; + EntityManager entityManager = HibernateUtil.getSessionFactory(propertyFileName) + .openSession(); + entityManager.getTransaction() + .begin(); + + return entityManager; + } + +} diff --git a/hibernate5/src/test/resources/hibernate-pessimistic-locking.properties b/hibernate5/src/test/resources/hibernate-pessimistic-locking.properties new file mode 100644 index 0000000000..c76bd3358b --- /dev/null +++ b/hibernate5/src/test/resources/hibernate-pessimistic-locking.properties @@ -0,0 +1,8 @@ +hibernate.connection.driver_class=org.h2.Driver +hibernate.connection.url=jdbc:h2:mem:mydb1;DB_CLOSE_DELAY=-1;LOCK_TIMEOUT=100;MVCC=FALSE +hibernate.connection.username=sa +hibernate.connection.autocommit=true +hibernate.dialect=org.hibernate.dialect.H2Dialect + +hibernate.show_sql=true +hibernate.hbm2ddl.auto=create-drop \ No newline at end of file diff --git a/httpclient/src/test/java/org/baeldung/httpclient/sec/HttpClientAuthLiveTest.java b/httpclient/src/test/java/org/baeldung/httpclient/sec/HttpClientAuthLiveTest.java index 7a75729ea5..c9956e5852 100644 --- a/httpclient/src/test/java/org/baeldung/httpclient/sec/HttpClientAuthLiveTest.java +++ b/httpclient/src/test/java/org/baeldung/httpclient/sec/HttpClientAuthLiveTest.java @@ -24,6 +24,7 @@ import org.junit.Test; import java.io.IOException; import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; import static org.hamcrest.Matchers.equalTo; import static org.junit.Assert.assertThat; @@ -89,7 +90,7 @@ public class HttpClientAuthLiveTest { public final void givenAuthorizationHeaderIsSetManually_whenExecutingGetRequest_thenSuccess2() throws IOException { final HttpGet request = new HttpGet(URL_SECURED_BY_BASIC_AUTHENTICATION); final String auth = DEFAULT_USER + ":" + DEFAULT_PASS; - final byte[] encodedAuth = Base64.encodeBase64(auth.getBytes(Charset.forName("ISO-8859-1"))); + final byte[] encodedAuth = Base64.encodeBase64(auth.getBytes(StandardCharsets.ISO_8859_1)); final String authHeader = "Basic " + new String(encodedAuth); request.setHeader(HttpHeaders.AUTHORIZATION, authHeader); @@ -129,7 +130,7 @@ public class HttpClientAuthLiveTest { private String authorizationHeader(final String username, final String password) { final String auth = username + ":" + password; - final byte[] encodedAuth = Base64.encodeBase64(auth.getBytes(Charset.forName("ISO-8859-1"))); + final byte[] encodedAuth = Base64.encodeBase64(auth.getBytes(StandardCharsets.ISO_8859_1)); return "Basic " + new String(encodedAuth); } diff --git a/javax-servlets/pom.xml b/javax-servlets/pom.xml index 69d952da9c..41a3bb69be 100644 --- a/javax-servlets/pom.xml +++ b/javax-servlets/pom.xml @@ -1,46 +1,75 @@ - - 4.0.0 - javax-servlets - 1.0-SNAPSHOT + + 4.0.0 + javax-servlets + 1.0-SNAPSHOT - - com.baeldung - parent-modules - 1.0.0-SNAPSHOT - + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + - - - javax.servlet - javax.servlet-api - ${javax.servlet.version} - - - org.apache.httpcomponents - httpclient - ${org.apache.httpcomponents.version} - test - - - commons-logging - commons-logging - - - - - org.springframework - spring-test - ${spring-test.version} - test - - + + + + commons-fileupload + commons-fileupload + 1.3.3 + + + commons-io + commons-io + 2.6 + - - 3.1.0 - 4.5.3 - 5.0.5.RELEASE - + + + javax.servlet + javax.servlet-api + 4.0.1 + + + javax.servlet.jsp.jstl + jstl-api + 1.2 + + + javax.servlet.jsp + javax.servlet.jsp-api + 2.3.1 + + + javax.servlet + jstl + 1.2 + + + + org.apache.httpcomponents + httpclient + ${org.apache.httpcomponents.version} + test + + + commons-logging + commons-logging + + + + + org.springframework + spring-test + ${spring-test.version} + test + + + + + 4.5.3 + 5.0.5.RELEASE + \ No newline at end of file diff --git a/javax-servlets/src/main/java/com/baeldung/Constants.java b/javax-servlets/src/main/java/com/baeldung/Constants.java new file mode 100644 index 0000000000..90c64870ad --- /dev/null +++ b/javax-servlets/src/main/java/com/baeldung/Constants.java @@ -0,0 +1,11 @@ +package com.baeldung; + +public class Constants { + + public static final String UPLOAD_DIRECTORY = "upload"; + public static final String DEFAULT_FILENAME = "default.file"; + + public static final int MEMORY_THRESHOLD = 1024 * 1024 * 3; + public static final int MAX_FILE_SIZE = 1024 * 1024 * 40; + public static final int MAX_REQUEST_SIZE = 1024 * 1024 * 50; +} \ No newline at end of file diff --git a/javax-servlets/src/main/java/com/baeldung/servlets/MultipartServlet.java b/javax-servlets/src/main/java/com/baeldung/servlets/MultipartServlet.java new file mode 100644 index 0000000000..185edcf916 --- /dev/null +++ b/javax-servlets/src/main/java/com/baeldung/servlets/MultipartServlet.java @@ -0,0 +1,54 @@ +package com.baeldung.servlets; + +import com.baeldung.Constants; + +import javax.servlet.ServletException; +import javax.servlet.annotation.MultipartConfig; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.Part; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; + +import static com.baeldung.Constants.UPLOAD_DIRECTORY; + +@WebServlet( + name = "MultiPartServlet", + urlPatterns = {"/multiPartServlet"} +) +@MultipartConfig(fileSizeThreshold = 1024 * 1024, maxFileSize = 1024 * 1024 * 5, maxRequestSize = 1024 * 1024 * 5 * 5) +public class MultipartServlet extends HttpServlet { + + private static final long serialVersionUID = 1L; + + private String getFileName(Part part) { + for (String content : part.getHeader("content-disposition").split(";")) { + if (content.trim().startsWith("filename")) + return content.substring(content.indexOf("=") + 2, content.length() - 1); + } + return Constants.DEFAULT_FILENAME; + } + + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + + String uploadPath = getServletContext().getRealPath("") + File.separator + UPLOAD_DIRECTORY; + File uploadDir = new File(uploadPath); + if (!uploadDir.exists()) + uploadDir.mkdir(); + + try { + String fileName = ""; + for (Part part : request.getParts()) { + fileName = getFileName(part); + part.write(uploadPath + File.separator + fileName); + } + request.setAttribute("message", "File " + fileName + " has uploaded successfully!"); + } catch (FileNotFoundException fne) { + request.setAttribute("message", "There was an error: " + fne.getMessage()); + } + getServletContext().getRequestDispatcher("/result.jsp").forward(request, response); + } +} \ No newline at end of file diff --git a/javax-servlets/src/main/java/com/baeldung/servlets/UploadServlet.java b/javax-servlets/src/main/java/com/baeldung/servlets/UploadServlet.java new file mode 100644 index 0000000000..4de7b20913 --- /dev/null +++ b/javax-servlets/src/main/java/com/baeldung/servlets/UploadServlet.java @@ -0,0 +1,63 @@ +package com.baeldung.servlets; + +import javax.servlet.annotation.WebServlet; +import org.apache.commons.fileupload.FileItem; +import org.apache.commons.fileupload.disk.DiskFileItemFactory; +import org.apache.commons.fileupload.servlet.ServletFileUpload; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.io.IOException; +import java.util.List; + +import static com.baeldung.Constants.*; + +@WebServlet( + name = "UploadServlet", + urlPatterns = {"/uploadFile"} +) +public class UploadServlet extends HttpServlet { + + private static final long serialVersionUID = 1L; + + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + + if (ServletFileUpload.isMultipartContent(request)) { + + DiskFileItemFactory factory = new DiskFileItemFactory(); + factory.setSizeThreshold(MEMORY_THRESHOLD); + factory.setRepository(new File(System.getProperty("java.io.tmpdir"))); + + ServletFileUpload upload = new ServletFileUpload(factory); + upload.setFileSizeMax(MAX_FILE_SIZE); + upload.setSizeMax(MAX_REQUEST_SIZE); + String uploadPath = getServletContext().getRealPath("") + File.separator + UPLOAD_DIRECTORY; + File uploadDir = new File(uploadPath); + if (!uploadDir.exists()) { + uploadDir.mkdir(); + } + + try { + List formItems = upload.parseRequest(request); + + if (formItems != null && formItems.size() > 0) { + for (FileItem item : formItems) { + if (!item.isFormField()) { + String fileName = new File(item.getName()).getName(); + String filePath = uploadPath + File.separator + fileName; + File storeFile = new File(filePath); + item.write(storeFile); + request.setAttribute("message", "File " + fileName + " has uploaded successfully!"); + } + } + } + } catch (Exception ex) { + request.setAttribute("message", "There was an error: " + ex.getMessage()); + } + getServletContext().getRequestDispatcher("/result.jsp").forward(request, response); + } + } +} \ No newline at end of file diff --git a/javax-servlets/src/main/java/com/baeldung/servlets/UploadWelcomeServlet.java b/javax-servlets/src/main/java/com/baeldung/servlets/UploadWelcomeServlet.java new file mode 100644 index 0000000000..56cec546be --- /dev/null +++ b/javax-servlets/src/main/java/com/baeldung/servlets/UploadWelcomeServlet.java @@ -0,0 +1,18 @@ +package com.baeldung.servlets; + +import java.io.IOException; +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +@WebServlet(name = "UploadWelcomeServlet", urlPatterns = "/uploadwelcome") +public class UploadWelcomeServlet extends HttpServlet { + + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + request.getRequestDispatcher("/upload.jsp").forward(request, response); + } +} diff --git a/javax-servlets/src/main/webapp/WEB-INF/web.xml b/javax-servlets/src/main/webapp/WEB-INF/web.xml deleted file mode 100644 index 66934d8fd3..0000000000 --- a/javax-servlets/src/main/webapp/WEB-INF/web.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - \ No newline at end of file diff --git a/javax-servlets/src/main/webapp/result.jsp b/javax-servlets/src/main/webapp/result.jsp new file mode 100644 index 0000000000..2e985cb322 --- /dev/null +++ b/javax-servlets/src/main/webapp/result.jsp @@ -0,0 +1,13 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> + + + + + + Upload Result + + + +

${message}

+ + \ No newline at end of file diff --git a/javax-servlets/src/main/webapp/upload.jsp b/javax-servlets/src/main/webapp/upload.jsp new file mode 100644 index 0000000000..f365484892 --- /dev/null +++ b/javax-servlets/src/main/webapp/upload.jsp @@ -0,0 +1,23 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> + + + + + + File Upload Demo + + + +
Apache FileUpload
+
+ Choose a file: +
+ +
+ +
Servlet Multipart
+
+ Choose a file: +
+ + \ No newline at end of file diff --git a/libraries/pom.xml b/libraries/pom.xml index f4bf994a58..678ba3279c 100644 --- a/libraries/pom.xml +++ b/libraries/pom.xml @@ -680,6 +680,12 @@ ${unirest.version} + + + io.javalin + javalin + 1.6.0 + io.atlassian.fugue diff --git a/libraries/src/main/java/com/baeldung/javalin/JavalinApp.java b/libraries/src/main/java/com/baeldung/javalin/JavalinApp.java new file mode 100644 index 0000000000..33d2c7083f --- /dev/null +++ b/libraries/src/main/java/com/baeldung/javalin/JavalinApp.java @@ -0,0 +1,16 @@ +package com.baeldung.javalin; + +import com.baeldung.javalin.User.UserController; +import io.javalin.Javalin; + +public class JavalinApp { + public static void main(String[] args) { + Javalin app = Javalin.create() + .port(7000) + .start(); + + app.get("/hello", ctx -> ctx.html("Hello, Javalin!")); + app.get("/users", UserController.fetchAllUsernames); + app.get("/users/:id", UserController.fetchById); + } +} diff --git a/libraries/src/main/java/com/baeldung/javalin/User/User.java b/libraries/src/main/java/com/baeldung/javalin/User/User.java new file mode 100644 index 0000000000..09f710453b --- /dev/null +++ b/libraries/src/main/java/com/baeldung/javalin/User/User.java @@ -0,0 +1,11 @@ +package com.baeldung.javalin.User; + +public class User { + public final int id; + public final String name; + + public User(int id, String name) { + this.id = id; + this.name = name; + } +} diff --git a/libraries/src/main/java/com/baeldung/javalin/User/UserController.java b/libraries/src/main/java/com/baeldung/javalin/User/UserController.java new file mode 100644 index 0000000000..fd713606cf --- /dev/null +++ b/libraries/src/main/java/com/baeldung/javalin/User/UserController.java @@ -0,0 +1,24 @@ +package com.baeldung.javalin.User; + +import io.javalin.Handler; + +import java.util.Objects; + +public class UserController { + public static Handler fetchAllUsernames = ctx -> { + UserDao dao = UserDao.instance(); + Iterable allUsers = dao.getAllUsernames(); + ctx.json(allUsers); + }; + + public static Handler fetchById = ctx -> { + int id = Integer.parseInt(Objects.requireNonNull(ctx.param("id"))); + UserDao dao = UserDao.instance(); + User user = dao.getUserById(id); + if (user == null) { + ctx.html("Not Found"); + } else { + ctx.json(user); + } + }; +} diff --git a/libraries/src/main/java/com/baeldung/javalin/User/UserDao.java b/libraries/src/main/java/com/baeldung/javalin/User/UserDao.java new file mode 100644 index 0000000000..1cbf3012a8 --- /dev/null +++ b/libraries/src/main/java/com/baeldung/javalin/User/UserDao.java @@ -0,0 +1,33 @@ +package com.baeldung.javalin.User; + +import java.util.Arrays; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +class UserDao { + + private final List users = Arrays.asList( + new User(0, "Steve Rogers"), + new User(1, "Tony Stark"), + new User(2, "Carol Danvers") + ); + + private static UserDao userDao = null; + + private UserDao() { + } + + static UserDao instance() { + if (userDao == null) { + userDao = new UserDao(); + } + return userDao; + } + + Optional getUserById(int id) { return users.stream().filter(u -> u.id == id).findFirst(); } + + Iterable getAllUsernames() { + return users.stream().map(user -> user.name).collect(Collectors.toList()); + } +} diff --git a/mapstruct/src/main/java/com/baeldung/dto/TransactionDTO.java b/mapstruct/src/main/java/com/baeldung/dto/TransactionDTO.java new file mode 100644 index 0000000000..132607ddd6 --- /dev/null +++ b/mapstruct/src/main/java/com/baeldung/dto/TransactionDTO.java @@ -0,0 +1,23 @@ +package com.baeldung.dto; + +public class TransactionDTO { + + private String uuid; + private Long totalInCents; + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public Long getTotalInCents() { + return totalInCents; + } + + public void setTotalInCents(Long totalInCents) { + this.totalInCents = totalInCents; + } +} diff --git a/mapstruct/src/main/java/com/baeldung/entity/Transaction.java b/mapstruct/src/main/java/com/baeldung/entity/Transaction.java new file mode 100644 index 0000000000..fd2a09e7ce --- /dev/null +++ b/mapstruct/src/main/java/com/baeldung/entity/Transaction.java @@ -0,0 +1,23 @@ +package com.baeldung.entity; + +import java.math.BigDecimal; +import java.util.UUID; + +public class Transaction { + + private Long id; + private String uuid = UUID.randomUUID().toString(); + private BigDecimal total; + + public Long getId() { + return id; + } + + public String getUuid() { + return uuid; + } + + public BigDecimal getTotal() { + return total; + } +} diff --git a/mapstruct/src/main/java/com/baeldung/mapper/TransactionMapper.java b/mapstruct/src/main/java/com/baeldung/mapper/TransactionMapper.java new file mode 100644 index 0000000000..42957bff46 --- /dev/null +++ b/mapstruct/src/main/java/com/baeldung/mapper/TransactionMapper.java @@ -0,0 +1,23 @@ +package com.baeldung.mapper; + +import java.math.BigDecimal; +import java.util.Collection; +import java.util.List; + +import org.mapstruct.Mapper; + +import com.baeldung.dto.TransactionDTO; +import com.baeldung.entity.Transaction; + +@Mapper +abstract class TransactionMapper { + + public TransactionDTO toTransactionDTO(Transaction transaction) { + TransactionDTO transactionDTO = new TransactionDTO(); + transactionDTO.setUuid(transaction.getUuid()); + transactionDTO.setTotalInCents(transaction.getTotal().multiply(new BigDecimal("100")).longValue()); + return transactionDTO; + } + + public abstract List toTransactionDTO(Collection transactions); +} diff --git a/patterns/README.md b/patterns/README.md index f00e7c351d..df39b39224 100644 --- a/patterns/README.md +++ b/patterns/README.md @@ -3,4 +3,5 @@ - [Introduction to Intercepting Filter Pattern in Java](http://www.baeldung.com/intercepting-filter-pattern-in-java) - [Implementing the Template Method Pattern in Java](http://www.baeldung.com/java-template-method-pattern) - [Chain of Responsibility Design Pattern in Java](http://www.baeldung.com/chain-of-responsibility-pattern) +- [The Command Pattern in Java](http://www.baeldung.com/java-command-pattern) diff --git a/patterns/design-patterns/README.md b/patterns/design-patterns/README.md new file mode 100644 index 0000000000..fb80f4bd6a --- /dev/null +++ b/patterns/design-patterns/README.md @@ -0,0 +1,11 @@ +### Relevant Articles: +- [Facade Design Pattern in Java](http://www.baeldung.com/java-facade-pattern) +- [Singletons in Java](http://www.baeldung.com/java-singleton) +- [Proxy, Decorator, Adapter and Bridge Patterns](http://www.baeldung.com/java-structural-design-patterns) +- [Introduction to Creational Design Patterns](http://www.baeldung.com/creational-design-patterns) +- [The Observer Pattern in Java](http://www.baeldung.com/java-observer-pattern) +- [Flyweight Pattern in Java](http://www.baeldung.com/java-flyweight) +- [Service Locator Pattern](http://www.baeldung.com/java-service-locator-pattern) +- [Double-Checked Locking with Singleton](http://www.baeldung.com/java-singleton-double-checked-locking) +- [Composite Design Pattern in Java](http://www.baeldung.com/java-composite-pattern) + diff --git a/patterns/behavioral-patterns/pom.xml b/patterns/design-patterns/pom.xml similarity index 68% rename from patterns/behavioral-patterns/pom.xml rename to patterns/design-patterns/pom.xml index 435f07aa98..87db08ab32 100644 --- a/patterns/behavioral-patterns/pom.xml +++ b/patterns/design-patterns/pom.xml @@ -1,12 +1,12 @@ 4.0.0 - com.baeldung.pattern.templatemethod - pattern.templatemethod + com.baeldung + design-patterns 1.0 jar - com.baeldung.patterns + com.baeldung patterns-parent 1.0.0-SNAPSHOT .. @@ -19,7 +19,7 @@ 4.12 test - + org.hamcrest hamcrest-core 1.3 @@ -31,10 +31,22 @@ 3.8.0 test + + log4j + log4j + ${log4j.version} + + + com.googlecode.grep4j + grep4j + ${grep4j.version} + UTF-8 1.8 1.8 - + 1.2.17 + 1.8.7 +
\ No newline at end of file diff --git a/core-java/src/main/java/com/baeldung/designpatterns/adapter/AdapterPatternDriver.java b/patterns/design-patterns/src/main/java/com/baeldung/adapter/AdapterPatternDriver.java similarity index 87% rename from core-java/src/main/java/com/baeldung/designpatterns/adapter/AdapterPatternDriver.java rename to patterns/design-patterns/src/main/java/com/baeldung/adapter/AdapterPatternDriver.java index 79f618d038..a4e10a0868 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/adapter/AdapterPatternDriver.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/adapter/AdapterPatternDriver.java @@ -1,6 +1,6 @@ -package com.baeldung.designpatterns.adapter; +package com.baeldung.adapter; -import static com.baeldung.designpatterns.util.LogerUtil.LOG; +import static com.baeldung.util.LogerUtil.LOG; public class AdapterPatternDriver { diff --git a/core-java/src/main/java/com/baeldung/designpatterns/adapter/AstonMartin.java b/patterns/design-patterns/src/main/java/com/baeldung/adapter/AstonMartin.java similarity index 69% rename from core-java/src/main/java/com/baeldung/designpatterns/adapter/AstonMartin.java rename to patterns/design-patterns/src/main/java/com/baeldung/adapter/AstonMartin.java index 7dd83079a2..c6aa0c525a 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/adapter/AstonMartin.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/adapter/AstonMartin.java @@ -1,8 +1,8 @@ -package com.baeldung.designpatterns.adapter; - -public class AstonMartin implements Movable { - @Override - public double getSpeed() { - return 220; - } -} +package com.baeldung.adapter; + +public class AstonMartin implements Movable { + @Override + public double getSpeed() { + return 220; + } +} diff --git a/core-java/src/main/java/com/baeldung/designpatterns/adapter/BugattiVeyron.java b/patterns/design-patterns/src/main/java/com/baeldung/adapter/BugattiVeyron.java similarity index 69% rename from core-java/src/main/java/com/baeldung/designpatterns/adapter/BugattiVeyron.java rename to patterns/design-patterns/src/main/java/com/baeldung/adapter/BugattiVeyron.java index a249d64b6f..e7d47d138a 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/adapter/BugattiVeyron.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/adapter/BugattiVeyron.java @@ -1,8 +1,8 @@ -package com.baeldung.designpatterns.adapter; - -public class BugattiVeyron implements Movable { - @Override - public double getSpeed() { - return 268; - } -} +package com.baeldung.adapter; + +public class BugattiVeyron implements Movable { + @Override + public double getSpeed() { + return 268; + } +} diff --git a/core-java/src/main/java/com/baeldung/designpatterns/adapter/McLaren.java b/patterns/design-patterns/src/main/java/com/baeldung/adapter/McLaren.java similarity index 68% rename from core-java/src/main/java/com/baeldung/designpatterns/adapter/McLaren.java rename to patterns/design-patterns/src/main/java/com/baeldung/adapter/McLaren.java index c807df67db..4ca1cde856 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/adapter/McLaren.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/adapter/McLaren.java @@ -1,8 +1,8 @@ -package com.baeldung.designpatterns.adapter; - -public class McLaren implements Movable { - @Override - public double getSpeed() { - return 241; - } -} +package com.baeldung.adapter; + +public class McLaren implements Movable { + @Override + public double getSpeed() { + return 241; + } +} diff --git a/core-java/src/main/java/com/baeldung/designpatterns/adapter/Movable.java b/patterns/design-patterns/src/main/java/com/baeldung/adapter/Movable.java similarity index 61% rename from core-java/src/main/java/com/baeldung/designpatterns/adapter/Movable.java rename to patterns/design-patterns/src/main/java/com/baeldung/adapter/Movable.java index ec94e90af0..bec0bee568 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/adapter/Movable.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/adapter/Movable.java @@ -1,6 +1,6 @@ -package com.baeldung.designpatterns.adapter; - -public interface Movable { - // returns speed in MPH - double getSpeed(); +package com.baeldung.adapter; + +public interface Movable { + // returns speed in MPH + double getSpeed(); } \ No newline at end of file diff --git a/core-java/src/main/java/com/baeldung/designpatterns/adapter/MovableAdapter.java b/patterns/design-patterns/src/main/java/com/baeldung/adapter/MovableAdapter.java similarity index 66% rename from core-java/src/main/java/com/baeldung/designpatterns/adapter/MovableAdapter.java rename to patterns/design-patterns/src/main/java/com/baeldung/adapter/MovableAdapter.java index b9c7484446..8d529e7b13 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/adapter/MovableAdapter.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/adapter/MovableAdapter.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.adapter; +package com.baeldung.adapter; public interface MovableAdapter { // returns speed in KMPH diff --git a/core-java/src/main/java/com/baeldung/designpatterns/adapter/MovableAdapterImpl.java b/patterns/design-patterns/src/main/java/com/baeldung/adapter/MovableAdapterImpl.java similarity index 90% rename from core-java/src/main/java/com/baeldung/designpatterns/adapter/MovableAdapterImpl.java rename to patterns/design-patterns/src/main/java/com/baeldung/adapter/MovableAdapterImpl.java index eb74641389..8f18cc9942 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/adapter/MovableAdapterImpl.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/adapter/MovableAdapterImpl.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.adapter; +package com.baeldung.adapter; public class MovableAdapterImpl implements MovableAdapter { private Movable luxuryCars; diff --git a/core-java/src/main/java/com/baeldung/designpatterns/bridge/Blue.java b/patterns/design-patterns/src/main/java/com/baeldung/bridge/Blue.java similarity index 73% rename from core-java/src/main/java/com/baeldung/designpatterns/bridge/Blue.java rename to patterns/design-patterns/src/main/java/com/baeldung/bridge/Blue.java index da5d29617f..022905f30d 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/bridge/Blue.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/bridge/Blue.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.bridge; +package com.baeldung.bridge; public class Blue implements Color { @Override diff --git a/core-java/src/main/java/com/baeldung/designpatterns/bridge/BridgePatternDriver.java b/patterns/design-patterns/src/main/java/com/baeldung/bridge/BridgePatternDriver.java similarity index 88% rename from core-java/src/main/java/com/baeldung/designpatterns/bridge/BridgePatternDriver.java rename to patterns/design-patterns/src/main/java/com/baeldung/bridge/BridgePatternDriver.java index e6a7fb41c1..31d18a2347 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/bridge/BridgePatternDriver.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/bridge/BridgePatternDriver.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.bridge; +package com.baeldung.bridge; public class BridgePatternDriver { diff --git a/core-java/src/main/java/com/baeldung/designpatterns/bridge/Color.java b/patterns/design-patterns/src/main/java/com/baeldung/bridge/Color.java similarity index 51% rename from core-java/src/main/java/com/baeldung/designpatterns/bridge/Color.java rename to patterns/design-patterns/src/main/java/com/baeldung/bridge/Color.java index 05618e6d6e..9d38f407ba 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/bridge/Color.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/bridge/Color.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.bridge; +package com.baeldung.bridge; public interface Color { String fill(); diff --git a/core-java/src/main/java/com/baeldung/designpatterns/bridge/Red.java b/patterns/design-patterns/src/main/java/com/baeldung/bridge/Red.java similarity index 73% rename from core-java/src/main/java/com/baeldung/designpatterns/bridge/Red.java rename to patterns/design-patterns/src/main/java/com/baeldung/bridge/Red.java index bc83199591..e7011096ce 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/bridge/Red.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/bridge/Red.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.bridge; +package com.baeldung.bridge; public class Red implements Color { diff --git a/core-java/src/main/java/com/baeldung/designpatterns/bridge/Shape.java b/patterns/design-patterns/src/main/java/com/baeldung/bridge/Shape.java similarity index 79% rename from core-java/src/main/java/com/baeldung/designpatterns/bridge/Shape.java rename to patterns/design-patterns/src/main/java/com/baeldung/bridge/Shape.java index 75cd43dbc8..20085cf112 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/bridge/Shape.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/bridge/Shape.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.bridge; +package com.baeldung.bridge; public abstract class Shape { protected Color color; diff --git a/core-java/src/main/java/com/baeldung/designpatterns/bridge/Square.java b/patterns/design-patterns/src/main/java/com/baeldung/bridge/Square.java similarity index 81% rename from core-java/src/main/java/com/baeldung/designpatterns/bridge/Square.java rename to patterns/design-patterns/src/main/java/com/baeldung/bridge/Square.java index 7397f4bd47..21a59247d5 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/bridge/Square.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/bridge/Square.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.bridge; +package com.baeldung.bridge; public class Square extends Shape { diff --git a/core-java/src/main/java/com/baeldung/designpatterns/bridge/Triangle.java b/patterns/design-patterns/src/main/java/com/baeldung/bridge/Triangle.java similarity index 82% rename from core-java/src/main/java/com/baeldung/designpatterns/bridge/Triangle.java rename to patterns/design-patterns/src/main/java/com/baeldung/bridge/Triangle.java index 46db66ee42..1647e7106d 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/bridge/Triangle.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/bridge/Triangle.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.bridge; +package com.baeldung.bridge; public class Triangle extends Shape { diff --git a/patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/chainofresponsibility/AuthenticationProcessor.java b/patterns/design-patterns/src/main/java/com/baeldung/chainofresponsibility/AuthenticationProcessor.java similarity index 100% rename from patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/chainofresponsibility/AuthenticationProcessor.java rename to patterns/design-patterns/src/main/java/com/baeldung/chainofresponsibility/AuthenticationProcessor.java diff --git a/patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/chainofresponsibility/AuthenticationProvider.java b/patterns/design-patterns/src/main/java/com/baeldung/chainofresponsibility/AuthenticationProvider.java similarity index 100% rename from patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/chainofresponsibility/AuthenticationProvider.java rename to patterns/design-patterns/src/main/java/com/baeldung/chainofresponsibility/AuthenticationProvider.java diff --git a/patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/chainofresponsibility/OAuthAuthenticationProcessor.java b/patterns/design-patterns/src/main/java/com/baeldung/chainofresponsibility/OAuthAuthenticationProcessor.java similarity index 100% rename from patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/chainofresponsibility/OAuthAuthenticationProcessor.java rename to patterns/design-patterns/src/main/java/com/baeldung/chainofresponsibility/OAuthAuthenticationProcessor.java diff --git a/patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/chainofresponsibility/OAuthTokenProvider.java b/patterns/design-patterns/src/main/java/com/baeldung/chainofresponsibility/OAuthTokenProvider.java similarity index 100% rename from patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/chainofresponsibility/OAuthTokenProvider.java rename to patterns/design-patterns/src/main/java/com/baeldung/chainofresponsibility/OAuthTokenProvider.java diff --git a/patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/chainofresponsibility/SamlAuthenticationProvider.java b/patterns/design-patterns/src/main/java/com/baeldung/chainofresponsibility/SamlAuthenticationProvider.java similarity index 100% rename from patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/chainofresponsibility/SamlAuthenticationProvider.java rename to patterns/design-patterns/src/main/java/com/baeldung/chainofresponsibility/SamlAuthenticationProvider.java diff --git a/patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/chainofresponsibility/UsernamePasswordAuthenticationProcessor.java b/patterns/design-patterns/src/main/java/com/baeldung/chainofresponsibility/UsernamePasswordAuthenticationProcessor.java similarity index 100% rename from patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/chainofresponsibility/UsernamePasswordAuthenticationProcessor.java rename to patterns/design-patterns/src/main/java/com/baeldung/chainofresponsibility/UsernamePasswordAuthenticationProcessor.java diff --git a/patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/chainofresponsibility/UsernamePasswordProvider.java b/patterns/design-patterns/src/main/java/com/baeldung/chainofresponsibility/UsernamePasswordProvider.java similarity index 100% rename from patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/chainofresponsibility/UsernamePasswordProvider.java rename to patterns/design-patterns/src/main/java/com/baeldung/chainofresponsibility/UsernamePasswordProvider.java diff --git a/patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/command/client/TextFileApplication.java b/patterns/design-patterns/src/main/java/com/baeldung/command/client/TextFileApplication.java similarity index 100% rename from patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/command/client/TextFileApplication.java rename to patterns/design-patterns/src/main/java/com/baeldung/command/client/TextFileApplication.java diff --git a/patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/command/command/OpenTextFileOperation.java b/patterns/design-patterns/src/main/java/com/baeldung/command/command/OpenTextFileOperation.java similarity index 100% rename from patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/command/command/OpenTextFileOperation.java rename to patterns/design-patterns/src/main/java/com/baeldung/command/command/OpenTextFileOperation.java diff --git a/patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/command/command/SaveTextFileOperation.java b/patterns/design-patterns/src/main/java/com/baeldung/command/command/SaveTextFileOperation.java similarity index 100% rename from patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/command/command/SaveTextFileOperation.java rename to patterns/design-patterns/src/main/java/com/baeldung/command/command/SaveTextFileOperation.java diff --git a/patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/command/command/TextFileOperation.java b/patterns/design-patterns/src/main/java/com/baeldung/command/command/TextFileOperation.java similarity index 100% rename from patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/command/command/TextFileOperation.java rename to patterns/design-patterns/src/main/java/com/baeldung/command/command/TextFileOperation.java diff --git a/patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/command/invoker/TextFileOperationExecutor.java b/patterns/design-patterns/src/main/java/com/baeldung/command/invoker/TextFileOperationExecutor.java similarity index 100% rename from patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/command/invoker/TextFileOperationExecutor.java rename to patterns/design-patterns/src/main/java/com/baeldung/command/invoker/TextFileOperationExecutor.java diff --git a/patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/command/receiver/TextFile.java b/patterns/design-patterns/src/main/java/com/baeldung/command/receiver/TextFile.java similarity index 100% rename from patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/command/receiver/TextFile.java rename to patterns/design-patterns/src/main/java/com/baeldung/command/receiver/TextFile.java diff --git a/patterns/design-patterns/src/main/java/com/baeldung/composite/CompositeDemo.java b/patterns/design-patterns/src/main/java/com/baeldung/composite/CompositeDemo.java new file mode 100644 index 0000000000..2296912c76 --- /dev/null +++ b/patterns/design-patterns/src/main/java/com/baeldung/composite/CompositeDemo.java @@ -0,0 +1,19 @@ +package com.baeldung.composite; + +/** + * Created by Gebruiker on 5/3/2018. + */ +public class CompositeDemo { + + public static void main(String args[]) { + Department salesDepartment = new SalesDepartment(1, "Sales department"); + Department financialDepartment = new FinancialDepartment(2, "Financial department"); + + HeadDepartment headDepartment = new HeadDepartment(3, "Head department"); + + headDepartment.addDepartMent(salesDepartment); + headDepartment.addDepartMent(financialDepartment); + + headDepartment.printDepartmentName(); + } +} diff --git a/patterns/design-patterns/src/main/java/com/baeldung/composite/Department.java b/patterns/design-patterns/src/main/java/com/baeldung/composite/Department.java new file mode 100644 index 0000000000..7e623a9337 --- /dev/null +++ b/patterns/design-patterns/src/main/java/com/baeldung/composite/Department.java @@ -0,0 +1,9 @@ +package com.baeldung.composite; + +/** + * Created by Gebruiker on 5/1/2018. + */ +public interface Department { + + void printDepartmentName(); +} diff --git a/patterns/design-patterns/src/main/java/com/baeldung/composite/FinancialDepartment.java b/patterns/design-patterns/src/main/java/com/baeldung/composite/FinancialDepartment.java new file mode 100644 index 0000000000..173281f833 --- /dev/null +++ b/patterns/design-patterns/src/main/java/com/baeldung/composite/FinancialDepartment.java @@ -0,0 +1,35 @@ +package com.baeldung.composite; + +/** + * Created by Gebruiker on 5/1/2018. + */ +public class FinancialDepartment implements Department { + + private Integer id; + private String name; + + public FinancialDepartment(Integer id, String name) { + this.id = id; + this.name = name; + } + + public void printDepartmentName() { + System.out.println(getClass().getSimpleName()); + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/patterns/design-patterns/src/main/java/com/baeldung/composite/HeadDepartment.java b/patterns/design-patterns/src/main/java/com/baeldung/composite/HeadDepartment.java new file mode 100644 index 0000000000..f54bcf303b --- /dev/null +++ b/patterns/design-patterns/src/main/java/com/baeldung/composite/HeadDepartment.java @@ -0,0 +1,33 @@ +package com.baeldung.composite; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by Gebruiker on 5/1/2018. + */ +public class HeadDepartment implements Department { + + private Integer id; + private String name; + + private List childDepartments; + + public HeadDepartment(Integer id, String name) { + this.id = id; + this.name = name; + this.childDepartments = new ArrayList(); + } + + public void printDepartmentName() { + childDepartments.forEach(Department::printDepartmentName); + } + + public void addDepartMent(Department department) { + childDepartments.add(department); + } + + public void removeDepartment(Department department) { + childDepartments.remove(department); + } +} diff --git a/patterns/design-patterns/src/main/java/com/baeldung/composite/SalesDepartment.java b/patterns/design-patterns/src/main/java/com/baeldung/composite/SalesDepartment.java new file mode 100644 index 0000000000..7f5e903100 --- /dev/null +++ b/patterns/design-patterns/src/main/java/com/baeldung/composite/SalesDepartment.java @@ -0,0 +1,35 @@ +package com.baeldung.composite; + +/** + * Created by Gebruiker on 5/1/2018. + */ +public class SalesDepartment implements Department { + + private Integer id; + private String name; + + public SalesDepartment(Integer id, String name) { + this.id = id; + this.name = name; + } + + public void printDepartmentName() { + System.out.println(getClass().getSimpleName()); + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/core-java/src/main/java/com/baeldung/designpatterns/creational/abstractfactory/AbstractFactory.java b/patterns/design-patterns/src/main/java/com/baeldung/creational/abstractfactory/AbstractFactory.java similarity index 63% rename from core-java/src/main/java/com/baeldung/designpatterns/creational/abstractfactory/AbstractFactory.java rename to patterns/design-patterns/src/main/java/com/baeldung/creational/abstractfactory/AbstractFactory.java index 46d97d1a15..5b4bf08006 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/creational/abstractfactory/AbstractFactory.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/creational/abstractfactory/AbstractFactory.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.creational.abstractfactory; +package com.baeldung.creational.abstractfactory; public interface AbstractFactory { Animal getAnimal(String toyType) ; diff --git a/core-java/src/main/java/com/baeldung/designpatterns/creational/abstractfactory/AbstractPatternDriver.java b/patterns/design-patterns/src/main/java/com/baeldung/creational/abstractfactory/AbstractPatternDriver.java similarity index 90% rename from core-java/src/main/java/com/baeldung/designpatterns/creational/abstractfactory/AbstractPatternDriver.java rename to patterns/design-patterns/src/main/java/com/baeldung/creational/abstractfactory/AbstractPatternDriver.java index 7ab166e16a..68759d5aff 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/creational/abstractfactory/AbstractPatternDriver.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/creational/abstractfactory/AbstractPatternDriver.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.creational.abstractfactory; +package com.baeldung.creational.abstractfactory; public class AbstractPatternDriver { public static void main(String[] args) { diff --git a/core-java/src/main/java/com/baeldung/designpatterns/creational/abstractfactory/Animal.java b/patterns/design-patterns/src/main/java/com/baeldung/creational/abstractfactory/Animal.java similarity index 52% rename from core-java/src/main/java/com/baeldung/designpatterns/creational/abstractfactory/Animal.java rename to patterns/design-patterns/src/main/java/com/baeldung/creational/abstractfactory/Animal.java index 59c1336053..52a8c83752 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/creational/abstractfactory/Animal.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/creational/abstractfactory/Animal.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.creational.abstractfactory; +package com.baeldung.creational.abstractfactory; public interface Animal { String getType(); diff --git a/core-java/src/main/java/com/baeldung/designpatterns/creational/abstractfactory/AnimalFactory.java b/patterns/design-patterns/src/main/java/com/baeldung/creational/abstractfactory/AnimalFactory.java similarity index 87% rename from core-java/src/main/java/com/baeldung/designpatterns/creational/abstractfactory/AnimalFactory.java rename to patterns/design-patterns/src/main/java/com/baeldung/creational/abstractfactory/AnimalFactory.java index 49583c3a98..bbc3eb7a82 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/creational/abstractfactory/AnimalFactory.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/creational/abstractfactory/AnimalFactory.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.creational.abstractfactory; +package com.baeldung.creational.abstractfactory; public class AnimalFactory implements AbstractFactory { diff --git a/core-java/src/main/java/com/baeldung/designpatterns/creational/abstractfactory/Brown.java b/patterns/design-patterns/src/main/java/com/baeldung/creational/abstractfactory/Brown.java similarity index 64% rename from core-java/src/main/java/com/baeldung/designpatterns/creational/abstractfactory/Brown.java rename to patterns/design-patterns/src/main/java/com/baeldung/creational/abstractfactory/Brown.java index f251285ebf..d395d9de33 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/creational/abstractfactory/Brown.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/creational/abstractfactory/Brown.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.creational.abstractfactory; +package com.baeldung.creational.abstractfactory; public class Brown implements Color { diff --git a/patterns/design-patterns/src/main/java/com/baeldung/creational/abstractfactory/Color.java b/patterns/design-patterns/src/main/java/com/baeldung/creational/abstractfactory/Color.java new file mode 100644 index 0000000000..337760fa4d --- /dev/null +++ b/patterns/design-patterns/src/main/java/com/baeldung/creational/abstractfactory/Color.java @@ -0,0 +1,5 @@ +package com.baeldung.creational.abstractfactory; + +public interface Color { + String getColor(); +} diff --git a/core-java/src/main/java/com/baeldung/designpatterns/creational/abstractfactory/ColorFactory.java b/patterns/design-patterns/src/main/java/com/baeldung/creational/abstractfactory/ColorFactory.java similarity index 87% rename from core-java/src/main/java/com/baeldung/designpatterns/creational/abstractfactory/ColorFactory.java rename to patterns/design-patterns/src/main/java/com/baeldung/creational/abstractfactory/ColorFactory.java index 8f7559ff27..8b7e4f8086 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/creational/abstractfactory/ColorFactory.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/creational/abstractfactory/ColorFactory.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.creational.abstractfactory; +package com.baeldung.creational.abstractfactory; public class ColorFactory implements AbstractFactory { diff --git a/core-java/src/main/java/com/baeldung/designpatterns/creational/abstractfactory/Dog.java b/patterns/design-patterns/src/main/java/com/baeldung/creational/abstractfactory/Dog.java similarity index 74% rename from core-java/src/main/java/com/baeldung/designpatterns/creational/abstractfactory/Dog.java rename to patterns/design-patterns/src/main/java/com/baeldung/creational/abstractfactory/Dog.java index 002b5665d3..38e90f34dc 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/creational/abstractfactory/Dog.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/creational/abstractfactory/Dog.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.creational.abstractfactory; +package com.baeldung.creational.abstractfactory; public class Dog implements Animal { diff --git a/core-java/src/main/java/com/baeldung/designpatterns/creational/abstractfactory/Duck.java b/patterns/design-patterns/src/main/java/com/baeldung/creational/abstractfactory/Duck.java similarity index 75% rename from core-java/src/main/java/com/baeldung/designpatterns/creational/abstractfactory/Duck.java rename to patterns/design-patterns/src/main/java/com/baeldung/creational/abstractfactory/Duck.java index 5603ad6eee..678ae5ca0c 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/creational/abstractfactory/Duck.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/creational/abstractfactory/Duck.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.creational.abstractfactory; +package com.baeldung.creational.abstractfactory; public class Duck implements Animal { diff --git a/core-java/src/main/java/com/baeldung/designpatterns/creational/abstractfactory/FactoryProvider.java b/patterns/design-patterns/src/main/java/com/baeldung/creational/abstractfactory/FactoryProvider.java similarity index 83% rename from core-java/src/main/java/com/baeldung/designpatterns/creational/abstractfactory/FactoryProvider.java rename to patterns/design-patterns/src/main/java/com/baeldung/creational/abstractfactory/FactoryProvider.java index fcbee1e6de..34ddbea545 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/creational/abstractfactory/FactoryProvider.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/creational/abstractfactory/FactoryProvider.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.creational.abstractfactory; +package com.baeldung.creational.abstractfactory; public class FactoryProvider { public static AbstractFactory getFactory(String choice){ diff --git a/core-java/src/main/java/com/baeldung/designpatterns/creational/abstractfactory/White.java b/patterns/design-patterns/src/main/java/com/baeldung/creational/abstractfactory/White.java similarity index 64% rename from core-java/src/main/java/com/baeldung/designpatterns/creational/abstractfactory/White.java rename to patterns/design-patterns/src/main/java/com/baeldung/creational/abstractfactory/White.java index 62ef8048ea..6cb1e4cdd4 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/creational/abstractfactory/White.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/creational/abstractfactory/White.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.creational.abstractfactory; +package com.baeldung.creational.abstractfactory; public class White implements Color { diff --git a/core-java/src/main/java/com/baeldung/designpatterns/creational/builder/BankAccount.java b/patterns/design-patterns/src/main/java/com/baeldung/creational/builder/BankAccount.java similarity index 96% rename from core-java/src/main/java/com/baeldung/designpatterns/creational/builder/BankAccount.java rename to patterns/design-patterns/src/main/java/com/baeldung/creational/builder/BankAccount.java index 355fa74895..1c6b0cc78e 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/creational/builder/BankAccount.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/creational/builder/BankAccount.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.creational.builder; +package com.baeldung.creational.builder; public class BankAccount { private String name; diff --git a/core-java/src/main/java/com/baeldung/designpatterns/creational/builder/BuilderPatternDriver.java b/patterns/design-patterns/src/main/java/com/baeldung/creational/builder/BuilderPatternDriver.java similarity index 90% rename from core-java/src/main/java/com/baeldung/designpatterns/creational/builder/BuilderPatternDriver.java rename to patterns/design-patterns/src/main/java/com/baeldung/creational/builder/BuilderPatternDriver.java index d92a70e664..2d3a88a86b 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/creational/builder/BuilderPatternDriver.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/creational/builder/BuilderPatternDriver.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.creational.builder; +package com.baeldung.creational.builder; public class BuilderPatternDriver { public static void main(String[] args) { diff --git a/core-java/src/main/java/com/baeldung/designpatterns/creational/factory/FactoryDriver.java b/patterns/design-patterns/src/main/java/com/baeldung/creational/factory/FactoryDriver.java similarity index 89% rename from core-java/src/main/java/com/baeldung/designpatterns/creational/factory/FactoryDriver.java rename to patterns/design-patterns/src/main/java/com/baeldung/creational/factory/FactoryDriver.java index 64ee307bb8..9261a5c0cb 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/creational/factory/FactoryDriver.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/creational/factory/FactoryDriver.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.creational.factory; +package com.baeldung.creational.factory; public class FactoryDriver { public static void main(String[] args) { diff --git a/core-java/src/main/java/com/baeldung/designpatterns/creational/factory/Heptagon.java b/patterns/design-patterns/src/main/java/com/baeldung/creational/factory/Heptagon.java similarity index 69% rename from core-java/src/main/java/com/baeldung/designpatterns/creational/factory/Heptagon.java rename to patterns/design-patterns/src/main/java/com/baeldung/creational/factory/Heptagon.java index 935fc2f04c..9e6f04b951 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/creational/factory/Heptagon.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/creational/factory/Heptagon.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.creational.factory; +package com.baeldung.creational.factory; public class Heptagon implements Polygon { diff --git a/core-java/src/main/java/com/baeldung/designpatterns/creational/factory/Octagon.java b/patterns/design-patterns/src/main/java/com/baeldung/creational/factory/Octagon.java similarity index 68% rename from core-java/src/main/java/com/baeldung/designpatterns/creational/factory/Octagon.java rename to patterns/design-patterns/src/main/java/com/baeldung/creational/factory/Octagon.java index fc62302dc8..b5c3be8a87 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/creational/factory/Octagon.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/creational/factory/Octagon.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.creational.factory; +package com.baeldung.creational.factory; public class Octagon implements Polygon { diff --git a/core-java/src/main/java/com/baeldung/designpatterns/creational/factory/Pentagon.java b/patterns/design-patterns/src/main/java/com/baeldung/creational/factory/Pentagon.java similarity index 69% rename from core-java/src/main/java/com/baeldung/designpatterns/creational/factory/Pentagon.java rename to patterns/design-patterns/src/main/java/com/baeldung/creational/factory/Pentagon.java index 65d109b10b..0866de4f25 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/creational/factory/Pentagon.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/creational/factory/Pentagon.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.creational.factory; +package com.baeldung.creational.factory; public class Pentagon implements Polygon { diff --git a/patterns/design-patterns/src/main/java/com/baeldung/creational/factory/Polygon.java b/patterns/design-patterns/src/main/java/com/baeldung/creational/factory/Polygon.java new file mode 100644 index 0000000000..ed3f13eed6 --- /dev/null +++ b/patterns/design-patterns/src/main/java/com/baeldung/creational/factory/Polygon.java @@ -0,0 +1,5 @@ +package com.baeldung.creational.factory; + +public interface Polygon { + String getType(); +} diff --git a/core-java/src/main/java/com/baeldung/designpatterns/creational/factory/PolygonFactory.java b/patterns/design-patterns/src/main/java/com/baeldung/creational/factory/PolygonFactory.java similarity index 89% rename from core-java/src/main/java/com/baeldung/designpatterns/creational/factory/PolygonFactory.java rename to patterns/design-patterns/src/main/java/com/baeldung/creational/factory/PolygonFactory.java index 9f34fe77b9..c9af0952da 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/creational/factory/PolygonFactory.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/creational/factory/PolygonFactory.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.creational.factory; +package com.baeldung.creational.factory; public class PolygonFactory { public Polygon getPolygon(int numberOfSides) { diff --git a/core-java/src/main/java/com/baeldung/designpatterns/creational/factory/Square.java b/patterns/design-patterns/src/main/java/com/baeldung/creational/factory/Square.java similarity index 68% rename from core-java/src/main/java/com/baeldung/designpatterns/creational/factory/Square.java rename to patterns/design-patterns/src/main/java/com/baeldung/creational/factory/Square.java index 805c1c9ae3..5c19873f00 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/creational/factory/Square.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/creational/factory/Square.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.creational.factory; +package com.baeldung.creational.factory; public class Square implements Polygon { diff --git a/core-java/src/main/java/com/baeldung/designpatterns/creational/factory/Triangle.java b/patterns/design-patterns/src/main/java/com/baeldung/creational/factory/Triangle.java similarity index 69% rename from core-java/src/main/java/com/baeldung/designpatterns/creational/factory/Triangle.java rename to patterns/design-patterns/src/main/java/com/baeldung/creational/factory/Triangle.java index 8a8832d8a1..2f84674ae5 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/creational/factory/Triangle.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/creational/factory/Triangle.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.creational.factory; +package com.baeldung.creational.factory; public class Triangle implements Polygon { diff --git a/core-java/src/main/java/com/baeldung/designpatterns/creational/singleton/Singleton.java b/patterns/design-patterns/src/main/java/com/baeldung/creational/singleton/Singleton.java similarity index 83% rename from core-java/src/main/java/com/baeldung/designpatterns/creational/singleton/Singleton.java rename to patterns/design-patterns/src/main/java/com/baeldung/creational/singleton/Singleton.java index 1a5ac82c89..e914fbd4af 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/creational/singleton/Singleton.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/creational/singleton/Singleton.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.creational.singleton; +package com.baeldung.creational.singleton; public class Singleton { private Singleton() {} diff --git a/core-java/src/main/java/com/baeldung/designpatterns/creational/singleton/SingletonDriver.java b/patterns/design-patterns/src/main/java/com/baeldung/creational/singleton/SingletonDriver.java similarity index 76% rename from core-java/src/main/java/com/baeldung/designpatterns/creational/singleton/SingletonDriver.java rename to patterns/design-patterns/src/main/java/com/baeldung/creational/singleton/SingletonDriver.java index 1955008d3e..555e751acb 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/creational/singleton/SingletonDriver.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/creational/singleton/SingletonDriver.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.creational.singleton; +package com.baeldung.creational.singleton; public class SingletonDriver { public static void main(String[] args) { diff --git a/core-java/src/main/java/com/baeldung/designpatterns/decorator/BubbleLights.java b/patterns/design-patterns/src/main/java/com/baeldung/decorator/BubbleLights.java similarity index 87% rename from core-java/src/main/java/com/baeldung/designpatterns/decorator/BubbleLights.java rename to patterns/design-patterns/src/main/java/com/baeldung/decorator/BubbleLights.java index 881add8b21..fff5a95b4b 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/decorator/BubbleLights.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/decorator/BubbleLights.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.decorator; +package com.baeldung.decorator; public class BubbleLights extends TreeDecorator { diff --git a/core-java/src/main/java/com/baeldung/designpatterns/decorator/ChristmasTree.java b/patterns/design-patterns/src/main/java/com/baeldung/decorator/ChristmasTree.java similarity index 54% rename from core-java/src/main/java/com/baeldung/designpatterns/decorator/ChristmasTree.java rename to patterns/design-patterns/src/main/java/com/baeldung/decorator/ChristmasTree.java index e5dca41dd8..be07f4faf2 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/decorator/ChristmasTree.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/decorator/ChristmasTree.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.decorator; +package com.baeldung.decorator; public interface ChristmasTree { String decorate(); diff --git a/core-java/src/main/java/com/baeldung/designpatterns/decorator/ChristmasTreeImpl.java b/patterns/design-patterns/src/main/java/com/baeldung/decorator/ChristmasTreeImpl.java similarity index 75% rename from core-java/src/main/java/com/baeldung/designpatterns/decorator/ChristmasTreeImpl.java rename to patterns/design-patterns/src/main/java/com/baeldung/decorator/ChristmasTreeImpl.java index 9241fd59db..2b9e210eab 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/decorator/ChristmasTreeImpl.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/decorator/ChristmasTreeImpl.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.decorator; +package com.baeldung.decorator; public class ChristmasTreeImpl implements ChristmasTree { diff --git a/core-java/src/main/java/com/baeldung/designpatterns/decorator/DecoratorPatternDriver.java b/patterns/design-patterns/src/main/java/com/baeldung/decorator/DecoratorPatternDriver.java similarity index 80% rename from core-java/src/main/java/com/baeldung/designpatterns/decorator/DecoratorPatternDriver.java rename to patterns/design-patterns/src/main/java/com/baeldung/decorator/DecoratorPatternDriver.java index 70b4f801cd..c20c23ff6e 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/decorator/DecoratorPatternDriver.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/decorator/DecoratorPatternDriver.java @@ -1,6 +1,6 @@ -package com.baeldung.designpatterns.decorator; +package com.baeldung.decorator; -import static com.baeldung.designpatterns.util.LogerUtil.LOG; +import static com.baeldung.util.LogerUtil.LOG; public class DecoratorPatternDriver { diff --git a/core-java/src/main/java/com/baeldung/designpatterns/decorator/Garland.java b/patterns/design-patterns/src/main/java/com/baeldung/decorator/Garland.java similarity index 86% rename from core-java/src/main/java/com/baeldung/designpatterns/decorator/Garland.java rename to patterns/design-patterns/src/main/java/com/baeldung/decorator/Garland.java index d2efd6e451..d3cb28a9e9 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/decorator/Garland.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/decorator/Garland.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.decorator; +package com.baeldung.decorator; public class Garland extends TreeDecorator { diff --git a/core-java/src/main/java/com/baeldung/designpatterns/decorator/TreeDecorator.java b/patterns/design-patterns/src/main/java/com/baeldung/decorator/TreeDecorator.java similarity index 85% rename from core-java/src/main/java/com/baeldung/designpatterns/decorator/TreeDecorator.java rename to patterns/design-patterns/src/main/java/com/baeldung/decorator/TreeDecorator.java index 5427d2ac7e..47385a1967 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/decorator/TreeDecorator.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/decorator/TreeDecorator.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.decorator; +package com.baeldung.decorator; public abstract class TreeDecorator implements ChristmasTree { private ChristmasTree tree; diff --git a/patterns/facade/src/main/java/com/baeldung/pattern/facade/CarEngineFacade.java b/patterns/design-patterns/src/main/java/com/baeldung/facade/CarEngineFacade.java similarity index 92% rename from patterns/facade/src/main/java/com/baeldung/pattern/facade/CarEngineFacade.java rename to patterns/design-patterns/src/main/java/com/baeldung/facade/CarEngineFacade.java index 91f9b79738..27a1eb2729 100644 --- a/patterns/facade/src/main/java/com/baeldung/pattern/facade/CarEngineFacade.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/facade/CarEngineFacade.java @@ -1,6 +1,6 @@ -package com.baeldung.pattern.facade; +package com.baeldung.facade; -import com.baeldung.pattern.facade.carsystem.*; +import com.baeldung.facade.carsystem.*; public class CarEngineFacade { private static final Integer DEFAULT_COOLING_TEMP = 90; diff --git a/patterns/facade/src/main/java/com/baeldung/pattern/facade/carsystem/AirFlowController.java b/patterns/design-patterns/src/main/java/com/baeldung/facade/carsystem/AirFlowController.java similarity index 90% rename from patterns/facade/src/main/java/com/baeldung/pattern/facade/carsystem/AirFlowController.java rename to patterns/design-patterns/src/main/java/com/baeldung/facade/carsystem/AirFlowController.java index 5ee846ea31..c9cf130e20 100644 --- a/patterns/facade/src/main/java/com/baeldung/pattern/facade/carsystem/AirFlowController.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/facade/carsystem/AirFlowController.java @@ -1,4 +1,4 @@ -package com.baeldung.pattern.facade.carsystem; +package com.baeldung.facade.carsystem; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/patterns/facade/src/main/java/com/baeldung/pattern/facade/carsystem/AirFlowMeter.java b/patterns/design-patterns/src/main/java/com/baeldung/facade/carsystem/AirFlowMeter.java similarity index 68% rename from patterns/facade/src/main/java/com/baeldung/pattern/facade/carsystem/AirFlowMeter.java rename to patterns/design-patterns/src/main/java/com/baeldung/facade/carsystem/AirFlowMeter.java index b47f9cfc4a..4eb7ac3c44 100644 --- a/patterns/facade/src/main/java/com/baeldung/pattern/facade/carsystem/AirFlowMeter.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/facade/carsystem/AirFlowMeter.java @@ -1,4 +1,4 @@ -package com.baeldung.pattern.facade.carsystem; +package com.baeldung.facade.carsystem; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -8,6 +8,6 @@ public class AirFlowMeter { private static final Logger LOGGER = LoggerFactory.getLogger(AirFlowMeter.class); public void getMeasurements() { - LOGGER.info("Getting air measurements..."); + LOGGER.info("Getting air measurements.."); } } diff --git a/patterns/facade/src/main/java/com/baeldung/pattern/facade/carsystem/CatalyticConverter.java b/patterns/design-patterns/src/main/java/com/baeldung/facade/carsystem/CatalyticConverter.java similarity index 88% rename from patterns/facade/src/main/java/com/baeldung/pattern/facade/carsystem/CatalyticConverter.java rename to patterns/design-patterns/src/main/java/com/baeldung/facade/carsystem/CatalyticConverter.java index 7d637cd444..0abc8c58ce 100644 --- a/patterns/facade/src/main/java/com/baeldung/pattern/facade/carsystem/CatalyticConverter.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/facade/carsystem/CatalyticConverter.java @@ -1,4 +1,4 @@ -package com.baeldung.pattern.facade.carsystem; +package com.baeldung.facade.carsystem; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/patterns/facade/src/main/java/com/baeldung/pattern/facade/carsystem/CoolingController.java b/patterns/design-patterns/src/main/java/com/baeldung/facade/carsystem/CoolingController.java similarity index 91% rename from patterns/facade/src/main/java/com/baeldung/pattern/facade/carsystem/CoolingController.java rename to patterns/design-patterns/src/main/java/com/baeldung/facade/carsystem/CoolingController.java index ae556e685c..c13850d166 100644 --- a/patterns/facade/src/main/java/com/baeldung/pattern/facade/carsystem/CoolingController.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/facade/carsystem/CoolingController.java @@ -1,4 +1,4 @@ -package com.baeldung.pattern.facade.carsystem; +package com.baeldung.facade.carsystem; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -28,7 +28,7 @@ public class CoolingController { } public void stop() { - LOGGER.info("Stopping Cooling Controller..."); + LOGGER.info("Stopping Cooling Controller.."); radiator.off(); } } diff --git a/patterns/facade/src/main/java/com/baeldung/pattern/facade/carsystem/FuelInjector.java b/patterns/design-patterns/src/main/java/com/baeldung/facade/carsystem/FuelInjector.java similarity index 82% rename from patterns/facade/src/main/java/com/baeldung/pattern/facade/carsystem/FuelInjector.java rename to patterns/design-patterns/src/main/java/com/baeldung/facade/carsystem/FuelInjector.java index c7905745e4..a619508e7a 100644 --- a/patterns/facade/src/main/java/com/baeldung/pattern/facade/carsystem/FuelInjector.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/facade/carsystem/FuelInjector.java @@ -1,4 +1,4 @@ -package com.baeldung.pattern.facade.carsystem; +package com.baeldung.facade.carsystem; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -18,6 +18,6 @@ public class FuelInjector { } public void off() { - LOGGER.info("Stopping Fuel injector..."); + LOGGER.info("Stopping Fuel injector.."); } } diff --git a/patterns/facade/src/main/java/com/baeldung/pattern/facade/carsystem/FuelPump.java b/patterns/design-patterns/src/main/java/com/baeldung/facade/carsystem/FuelPump.java similarity index 66% rename from patterns/facade/src/main/java/com/baeldung/pattern/facade/carsystem/FuelPump.java rename to patterns/design-patterns/src/main/java/com/baeldung/facade/carsystem/FuelPump.java index 900358f8ff..0cd193558d 100644 --- a/patterns/facade/src/main/java/com/baeldung/pattern/facade/carsystem/FuelPump.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/facade/carsystem/FuelPump.java @@ -1,4 +1,4 @@ -package com.baeldung.pattern.facade.carsystem; +package com.baeldung.facade.carsystem; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -8,6 +8,6 @@ public class FuelPump { private static final Logger LOGGER = LoggerFactory.getLogger(FuelPump.class); public void pump() { - LOGGER.info("Fuel Pump is pumping fuel..."); + LOGGER.info("Fuel Pump is pumping fuel.."); } } diff --git a/patterns/facade/src/main/java/com/baeldung/pattern/facade/carsystem/Radiator.java b/patterns/design-patterns/src/main/java/com/baeldung/facade/carsystem/Radiator.java similarity index 90% rename from patterns/facade/src/main/java/com/baeldung/pattern/facade/carsystem/Radiator.java rename to patterns/design-patterns/src/main/java/com/baeldung/facade/carsystem/Radiator.java index 6ca6cef9d9..c1004f561f 100644 --- a/patterns/facade/src/main/java/com/baeldung/pattern/facade/carsystem/Radiator.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/facade/carsystem/Radiator.java @@ -1,4 +1,4 @@ -package com.baeldung.pattern.facade.carsystem; +package com.baeldung.facade.carsystem; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/patterns/facade/src/main/java/com/baeldung/pattern/facade/carsystem/Starter.java b/patterns/design-patterns/src/main/java/com/baeldung/facade/carsystem/Starter.java similarity index 70% rename from patterns/facade/src/main/java/com/baeldung/pattern/facade/carsystem/Starter.java rename to patterns/design-patterns/src/main/java/com/baeldung/facade/carsystem/Starter.java index b1f45a0be8..5f13d5726a 100644 --- a/patterns/facade/src/main/java/com/baeldung/pattern/facade/carsystem/Starter.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/facade/carsystem/Starter.java @@ -1,4 +1,4 @@ -package com.baeldung.pattern.facade.carsystem; +package com.baeldung.facade.carsystem; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -8,6 +8,6 @@ public class Starter { private static final Logger LOGGER = LoggerFactory.getLogger(Starter.class); public void start() { - LOGGER.info("Starting..."); + LOGGER.info("Starting.."); } } diff --git a/patterns/facade/src/main/java/com/baeldung/pattern/facade/carsystem/TemperatureSensor.java b/patterns/design-patterns/src/main/java/com/baeldung/facade/carsystem/TemperatureSensor.java similarity index 67% rename from patterns/facade/src/main/java/com/baeldung/pattern/facade/carsystem/TemperatureSensor.java rename to patterns/design-patterns/src/main/java/com/baeldung/facade/carsystem/TemperatureSensor.java index d6a94858b4..5850a8a3be 100644 --- a/patterns/facade/src/main/java/com/baeldung/pattern/facade/carsystem/TemperatureSensor.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/facade/carsystem/TemperatureSensor.java @@ -1,4 +1,4 @@ -package com.baeldung.pattern.facade.carsystem; +package com.baeldung.facade.carsystem; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -7,7 +7,7 @@ public class TemperatureSensor { private static final Logger LOGGER = LoggerFactory.getLogger(TemperatureSensor.class); public void getTemperature(){ - LOGGER.info("Getting temperature from the sensor..."); + LOGGER.info("Getting temperature from the sensor.."); } } diff --git a/core-java/src/main/java/com/baeldung/designpatterns/flyweight/Car.java b/patterns/design-patterns/src/main/java/com/baeldung/flyweight/Car.java similarity index 83% rename from core-java/src/main/java/com/baeldung/designpatterns/flyweight/Car.java rename to patterns/design-patterns/src/main/java/com/baeldung/flyweight/Car.java index 50f62cafaa..a0b1a7cdf5 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/flyweight/Car.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/flyweight/Car.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.flyweight; +package com.baeldung.flyweight; import java.awt.Color; @@ -53,7 +53,7 @@ public class Car implements Vehicle { /* * (non-Javadoc) * - * @see com.baeldung.designpatterns.flyweight.Vehicle#start() + * @see com.baeldung.flyweight.Vehicle#start() */ @Override public void start() { @@ -64,7 +64,7 @@ public class Car implements Vehicle { /* * (non-Javadoc) * - * @see com.baeldung.designpatterns.flyweight.Vehicle#stop() + * @see com.baeldung.flyweight.Vehicle#stop() */ @Override public void stop() { @@ -75,7 +75,7 @@ public class Car implements Vehicle { /* * (non-Javadoc) * - * @see com.baeldung.designpatterns.flyweight.Vehicle#getColor() + * @see com.baeldung.flyweight.Vehicle#getColor() */ @Override public Color getColor() { diff --git a/core-java/src/main/java/com/baeldung/designpatterns/flyweight/Engine.java b/patterns/design-patterns/src/main/java/com/baeldung/flyweight/Engine.java similarity index 90% rename from core-java/src/main/java/com/baeldung/designpatterns/flyweight/Engine.java rename to patterns/design-patterns/src/main/java/com/baeldung/flyweight/Engine.java index 05d9ca98b8..2319f61a74 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/flyweight/Engine.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/flyweight/Engine.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.flyweight; +package com.baeldung.flyweight; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/core-java/src/main/java/com/baeldung/designpatterns/flyweight/Vehicle.java b/patterns/design-patterns/src/main/java/com/baeldung/flyweight/Vehicle.java similarity index 87% rename from core-java/src/main/java/com/baeldung/designpatterns/flyweight/Vehicle.java rename to patterns/design-patterns/src/main/java/com/baeldung/flyweight/Vehicle.java index c285f9fcff..8cbb8e2896 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/flyweight/Vehicle.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/flyweight/Vehicle.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.flyweight; +package com.baeldung.flyweight; import java.awt.Color; diff --git a/core-java/src/main/java/com/baeldung/designpatterns/flyweight/VehicleFactory.java b/patterns/design-patterns/src/main/java/com/baeldung/flyweight/VehicleFactory.java similarity index 96% rename from core-java/src/main/java/com/baeldung/designpatterns/flyweight/VehicleFactory.java rename to patterns/design-patterns/src/main/java/com/baeldung/flyweight/VehicleFactory.java index 2854b7dab1..ff0dbbdada 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/flyweight/VehicleFactory.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/flyweight/VehicleFactory.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.flyweight; +package com.baeldung.flyweight; import java.awt.Color; import java.util.HashMap; diff --git a/core-java/src/main/java/com/baeldung/designpatterns/observer/Channel.java b/patterns/design-patterns/src/main/java/com/baeldung/observer/Channel.java similarity index 58% rename from core-java/src/main/java/com/baeldung/designpatterns/observer/Channel.java rename to patterns/design-patterns/src/main/java/com/baeldung/observer/Channel.java index 9ca2edac38..dcffe1a37d 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/observer/Channel.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/observer/Channel.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.observer; +package com.baeldung.observer; public interface Channel { public void update(Object o); diff --git a/core-java/src/main/java/com/baeldung/designpatterns/observer/NewsAgency.java b/patterns/design-patterns/src/main/java/com/baeldung/observer/NewsAgency.java similarity index 91% rename from core-java/src/main/java/com/baeldung/designpatterns/observer/NewsAgency.java rename to patterns/design-patterns/src/main/java/com/baeldung/observer/NewsAgency.java index 0330fbdcdc..02e2872417 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/observer/NewsAgency.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/observer/NewsAgency.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.observer; +package com.baeldung.observer; import java.util.ArrayList; import java.util.List; diff --git a/core-java/src/main/java/com/baeldung/designpatterns/observer/NewsChannel.java b/patterns/design-patterns/src/main/java/com/baeldung/observer/NewsChannel.java similarity index 86% rename from core-java/src/main/java/com/baeldung/designpatterns/observer/NewsChannel.java rename to patterns/design-patterns/src/main/java/com/baeldung/observer/NewsChannel.java index 09c22e0ad8..fd0178ca45 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/observer/NewsChannel.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/observer/NewsChannel.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.observer; +package com.baeldung.observer; public class NewsChannel implements Channel { diff --git a/core-java/src/main/java/com/baeldung/designpatterns/observer/ONewsAgency.java b/patterns/design-patterns/src/main/java/com/baeldung/observer/ONewsAgency.java similarity index 83% rename from core-java/src/main/java/com/baeldung/designpatterns/observer/ONewsAgency.java rename to patterns/design-patterns/src/main/java/com/baeldung/observer/ONewsAgency.java index 2849820663..b567ad295a 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/observer/ONewsAgency.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/observer/ONewsAgency.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.observer; +package com.baeldung.observer; import java.util.Observable; diff --git a/core-java/src/main/java/com/baeldung/designpatterns/observer/ONewsChannel.java b/patterns/design-patterns/src/main/java/com/baeldung/observer/ONewsChannel.java similarity index 89% rename from core-java/src/main/java/com/baeldung/designpatterns/observer/ONewsChannel.java rename to patterns/design-patterns/src/main/java/com/baeldung/observer/ONewsChannel.java index 3989fe0286..20cc1811bf 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/observer/ONewsChannel.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/observer/ONewsChannel.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.observer; +package com.baeldung.observer; import java.util.Observable; import java.util.Observer; diff --git a/core-java/src/main/java/com/baeldung/designpatterns/observer/PCLNewsAgency.java b/patterns/design-patterns/src/main/java/com/baeldung/observer/PCLNewsAgency.java similarity index 93% rename from core-java/src/main/java/com/baeldung/designpatterns/observer/PCLNewsAgency.java rename to patterns/design-patterns/src/main/java/com/baeldung/observer/PCLNewsAgency.java index b05b97ab0b..df46731a85 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/observer/PCLNewsAgency.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/observer/PCLNewsAgency.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.observer; +package com.baeldung.observer; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; diff --git a/core-java/src/main/java/com/baeldung/designpatterns/observer/PCLNewsChannel.java b/patterns/design-patterns/src/main/java/com/baeldung/observer/PCLNewsChannel.java similarity index 90% rename from core-java/src/main/java/com/baeldung/designpatterns/observer/PCLNewsChannel.java rename to patterns/design-patterns/src/main/java/com/baeldung/observer/PCLNewsChannel.java index ff8d35463c..d3e096f7e8 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/observer/PCLNewsChannel.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/observer/PCLNewsChannel.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.observer; +package com.baeldung.observer; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; diff --git a/core-java/src/main/java/com/baeldung/designpatterns/proxy/ExpensiveObject.java b/patterns/design-patterns/src/main/java/com/baeldung/proxy/ExpensiveObject.java similarity index 57% rename from core-java/src/main/java/com/baeldung/designpatterns/proxy/ExpensiveObject.java rename to patterns/design-patterns/src/main/java/com/baeldung/proxy/ExpensiveObject.java index 256b31bc84..ae7820024c 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/proxy/ExpensiveObject.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/proxy/ExpensiveObject.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.proxy; +package com.baeldung.proxy; public interface ExpensiveObject { void process(); diff --git a/core-java/src/main/java/com/baeldung/designpatterns/proxy/ExpensiveObjectImpl.java b/patterns/design-patterns/src/main/java/com/baeldung/proxy/ExpensiveObjectImpl.java similarity index 64% rename from core-java/src/main/java/com/baeldung/designpatterns/proxy/ExpensiveObjectImpl.java rename to patterns/design-patterns/src/main/java/com/baeldung/proxy/ExpensiveObjectImpl.java index de31e22b30..7ade31da88 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/proxy/ExpensiveObjectImpl.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/proxy/ExpensiveObjectImpl.java @@ -1,6 +1,6 @@ -package com.baeldung.designpatterns.proxy; +package com.baeldung.proxy; -import static com.baeldung.designpatterns.util.LogerUtil.LOG;; +import static com.baeldung.util.LogerUtil.LOG;; public class ExpensiveObjectImpl implements ExpensiveObject { @@ -14,7 +14,7 @@ public class ExpensiveObjectImpl implements ExpensiveObject { } private void heavyInitialConfiguration() { - LOG.info("Loading initial configuration..."); + LOG.info("Loading initial configuration.."); } } \ No newline at end of file diff --git a/core-java/src/main/java/com/baeldung/designpatterns/proxy/ExpensiveObjectProxy.java b/patterns/design-patterns/src/main/java/com/baeldung/proxy/ExpensiveObjectProxy.java similarity index 86% rename from core-java/src/main/java/com/baeldung/designpatterns/proxy/ExpensiveObjectProxy.java rename to patterns/design-patterns/src/main/java/com/baeldung/proxy/ExpensiveObjectProxy.java index f36e688c90..f7985f331e 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/proxy/ExpensiveObjectProxy.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/proxy/ExpensiveObjectProxy.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.proxy; +package com.baeldung.proxy; public class ExpensiveObjectProxy implements ExpensiveObject{ private static ExpensiveObject object; diff --git a/core-java/src/main/java/com/baeldung/designpatterns/proxy/ProxyPatternDriver.java b/patterns/design-patterns/src/main/java/com/baeldung/proxy/ProxyPatternDriver.java similarity index 82% rename from core-java/src/main/java/com/baeldung/designpatterns/proxy/ProxyPatternDriver.java rename to patterns/design-patterns/src/main/java/com/baeldung/proxy/ProxyPatternDriver.java index 088b069e28..02e4de96ea 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/proxy/ProxyPatternDriver.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/proxy/ProxyPatternDriver.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.proxy; +package com.baeldung.proxy; public class ProxyPatternDriver { public static void main(String[] args) { diff --git a/core-java/src/main/java/com/baeldung/designpatterns/service/locator/Cache.java b/patterns/design-patterns/src/main/java/com/baeldung/service/locator/Cache.java similarity index 94% rename from core-java/src/main/java/com/baeldung/designpatterns/service/locator/Cache.java rename to patterns/design-patterns/src/main/java/com/baeldung/service/locator/Cache.java index 847d8a71e0..c215dda91f 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/service/locator/Cache.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/service/locator/Cache.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.service.locator; +package com.baeldung.service.locator; import java.util.ArrayList; import java.util.List; diff --git a/core-java/src/main/java/com/baeldung/designpatterns/service/locator/EmailService.java b/patterns/design-patterns/src/main/java/com/baeldung/service/locator/EmailService.java similarity index 82% rename from core-java/src/main/java/com/baeldung/designpatterns/service/locator/EmailService.java rename to patterns/design-patterns/src/main/java/com/baeldung/service/locator/EmailService.java index 7ac7e05790..930312aecd 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/service/locator/EmailService.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/service/locator/EmailService.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.service.locator; +package com.baeldung.service.locator; /** * Created by Gebruiker on 4/20/2018. diff --git a/core-java/src/main/java/com/baeldung/designpatterns/service/locator/InitialContext.java b/patterns/design-patterns/src/main/java/com/baeldung/service/locator/InitialContext.java similarity index 87% rename from core-java/src/main/java/com/baeldung/designpatterns/service/locator/InitialContext.java rename to patterns/design-patterns/src/main/java/com/baeldung/service/locator/InitialContext.java index d5234b39cd..3614b212f5 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/service/locator/InitialContext.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/service/locator/InitialContext.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.service.locator; +package com.baeldung.service.locator; /** * Created by Gebruiker on 4/20/2018. diff --git a/core-java/src/main/java/com/baeldung/designpatterns/service/locator/Main.java b/patterns/design-patterns/src/main/java/com/baeldung/service/locator/Main.java similarity index 91% rename from core-java/src/main/java/com/baeldung/designpatterns/service/locator/Main.java rename to patterns/design-patterns/src/main/java/com/baeldung/service/locator/Main.java index 787f7e708c..984410a991 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/service/locator/Main.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/service/locator/Main.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.service.locator; +package com.baeldung.service.locator; /** * Created by Gebruiker on 4/20/2018. diff --git a/core-java/src/main/java/com/baeldung/designpatterns/service/locator/MessagingService.java b/patterns/design-patterns/src/main/java/com/baeldung/service/locator/MessagingService.java similarity index 65% rename from core-java/src/main/java/com/baeldung/designpatterns/service/locator/MessagingService.java rename to patterns/design-patterns/src/main/java/com/baeldung/service/locator/MessagingService.java index 5853dfd7f7..0b48d9ea5e 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/service/locator/MessagingService.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/service/locator/MessagingService.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.service.locator; +package com.baeldung.service.locator; public interface MessagingService { diff --git a/core-java/src/main/java/com/baeldung/designpatterns/service/locator/SMSService.java b/patterns/design-patterns/src/main/java/com/baeldung/service/locator/SMSService.java similarity index 82% rename from core-java/src/main/java/com/baeldung/designpatterns/service/locator/SMSService.java rename to patterns/design-patterns/src/main/java/com/baeldung/service/locator/SMSService.java index 87255ef658..d0bc13b847 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/service/locator/SMSService.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/service/locator/SMSService.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.service.locator; +package com.baeldung.service.locator; /** * Created by Gebruiker on 4/20/2018. diff --git a/core-java/src/main/java/com/baeldung/designpatterns/service/locator/ServiceLocator.java b/patterns/design-patterns/src/main/java/com/baeldung/service/locator/ServiceLocator.java similarity index 91% rename from core-java/src/main/java/com/baeldung/designpatterns/service/locator/ServiceLocator.java rename to patterns/design-patterns/src/main/java/com/baeldung/service/locator/ServiceLocator.java index 7e1a2349a1..6da441d0aa 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/service/locator/ServiceLocator.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/service/locator/ServiceLocator.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.service.locator; +package com.baeldung.service.locator; /** * Created by Gebruiker on 4/20/2018. diff --git a/core-java/src/main/java/com/baeldung/designpatterns/singleton/ClassSingleton.java b/patterns/design-patterns/src/main/java/com/baeldung/singleton/ClassSingleton.java similarity index 91% rename from core-java/src/main/java/com/baeldung/designpatterns/singleton/ClassSingleton.java rename to patterns/design-patterns/src/main/java/com/baeldung/singleton/ClassSingleton.java index 0fc86e30a7..d538e6dda3 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/singleton/ClassSingleton.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/singleton/ClassSingleton.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.singleton; +package com.baeldung.singleton; public class ClassSingleton { diff --git a/core-java/src/main/java/com/baeldung/designpatterns/singleton/EnumSingleton.java b/patterns/design-patterns/src/main/java/com/baeldung/singleton/EnumSingleton.java similarity index 90% rename from core-java/src/main/java/com/baeldung/designpatterns/singleton/EnumSingleton.java rename to patterns/design-patterns/src/main/java/com/baeldung/singleton/EnumSingleton.java index f75484477b..89321a6b3f 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/singleton/EnumSingleton.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/singleton/EnumSingleton.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.singleton; +package com.baeldung.singleton; public enum EnumSingleton { diff --git a/core-java/src/main/java/com/baeldung/designpatterns/singleton/Sandbox.java b/patterns/design-patterns/src/main/java/com/baeldung/singleton/Sandbox.java similarity index 96% rename from core-java/src/main/java/com/baeldung/designpatterns/singleton/Sandbox.java rename to patterns/design-patterns/src/main/java/com/baeldung/singleton/Sandbox.java index f8ca2ffa78..c7fb363336 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/singleton/Sandbox.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/singleton/Sandbox.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.singleton; +package com.baeldung.singleton; public class Sandbox { diff --git a/core-java/src/main/java/com/baeldung/designpatterns/singleton/synchronization/DclSingleton.java b/patterns/design-patterns/src/main/java/com/baeldung/singleton/synchronization/DclSingleton.java similarity index 91% rename from core-java/src/main/java/com/baeldung/designpatterns/singleton/synchronization/DclSingleton.java rename to patterns/design-patterns/src/main/java/com/baeldung/singleton/synchronization/DclSingleton.java index e10f111a56..26cd9927b4 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/singleton/synchronization/DclSingleton.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/singleton/synchronization/DclSingleton.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.singleton.synchronization; +package com.baeldung.singleton.synchronization; /** * Double-checked locking design pattern applied to a singleton. diff --git a/core-java/src/main/java/com/baeldung/designpatterns/singleton/synchronization/DraconianSingleton.java b/patterns/design-patterns/src/main/java/com/baeldung/singleton/synchronization/DraconianSingleton.java similarity index 90% rename from core-java/src/main/java/com/baeldung/designpatterns/singleton/synchronization/DraconianSingleton.java rename to patterns/design-patterns/src/main/java/com/baeldung/singleton/synchronization/DraconianSingleton.java index 1d01c49b13..9c51b4044b 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/singleton/synchronization/DraconianSingleton.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/singleton/synchronization/DraconianSingleton.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.singleton.synchronization; +package com.baeldung.singleton.synchronization; /** * Draconian singleton. The method to get the instance is synchronized. diff --git a/core-java/src/main/java/com/baeldung/designpatterns/singleton/synchronization/EarlyInitSingleton.java b/patterns/design-patterns/src/main/java/com/baeldung/singleton/synchronization/EarlyInitSingleton.java similarity index 90% rename from core-java/src/main/java/com/baeldung/designpatterns/singleton/synchronization/EarlyInitSingleton.java rename to patterns/design-patterns/src/main/java/com/baeldung/singleton/synchronization/EarlyInitSingleton.java index 18c4b7cdce..22e1d3edab 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/singleton/synchronization/EarlyInitSingleton.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/singleton/synchronization/EarlyInitSingleton.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.singleton.synchronization; +package com.baeldung.singleton.synchronization; /** * Singleton with early initialization. Inlines the singleton instance diff --git a/core-java/src/main/java/com/baeldung/designpatterns/singleton/synchronization/EnumSingleton.java b/patterns/design-patterns/src/main/java/com/baeldung/singleton/synchronization/EnumSingleton.java similarity index 77% rename from core-java/src/main/java/com/baeldung/designpatterns/singleton/synchronization/EnumSingleton.java rename to patterns/design-patterns/src/main/java/com/baeldung/singleton/synchronization/EnumSingleton.java index b7ff7f50b1..afa6911910 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/singleton/synchronization/EnumSingleton.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/singleton/synchronization/EnumSingleton.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.singleton.synchronization; +package com.baeldung.singleton.synchronization; /** * Enum singleton pattern. Uses an enum to hold a reference to the singleton diff --git a/core-java/src/main/java/com/baeldung/designpatterns/singleton/synchronization/InitOnDemandSingleton.java b/patterns/design-patterns/src/main/java/com/baeldung/singleton/synchronization/InitOnDemandSingleton.java similarity index 92% rename from core-java/src/main/java/com/baeldung/designpatterns/singleton/synchronization/InitOnDemandSingleton.java rename to patterns/design-patterns/src/main/java/com/baeldung/singleton/synchronization/InitOnDemandSingleton.java index d76bada786..46feab6208 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/singleton/synchronization/InitOnDemandSingleton.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/singleton/synchronization/InitOnDemandSingleton.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.singleton.synchronization; +package com.baeldung.singleton.synchronization; /** * Initialization on demand singleton pattern. Uses a nested static class to diff --git a/patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod/application/Application.java b/patterns/design-patterns/src/main/java/com/baeldung/templatemethod/application/Application.java similarity index 100% rename from patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod/application/Application.java rename to patterns/design-patterns/src/main/java/com/baeldung/templatemethod/application/Application.java diff --git a/patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod/model/Computer.java b/patterns/design-patterns/src/main/java/com/baeldung/templatemethod/model/Computer.java similarity index 100% rename from patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod/model/Computer.java rename to patterns/design-patterns/src/main/java/com/baeldung/templatemethod/model/Computer.java diff --git a/patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod/model/ComputerBuilder.java b/patterns/design-patterns/src/main/java/com/baeldung/templatemethod/model/ComputerBuilder.java similarity index 100% rename from patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod/model/ComputerBuilder.java rename to patterns/design-patterns/src/main/java/com/baeldung/templatemethod/model/ComputerBuilder.java diff --git a/patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod/model/HighEndComputer.java b/patterns/design-patterns/src/main/java/com/baeldung/templatemethod/model/HighEndComputer.java similarity index 100% rename from patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod/model/HighEndComputer.java rename to patterns/design-patterns/src/main/java/com/baeldung/templatemethod/model/HighEndComputer.java diff --git a/patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod/model/HighEndComputerBuilder.java b/patterns/design-patterns/src/main/java/com/baeldung/templatemethod/model/HighEndComputerBuilder.java similarity index 100% rename from patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod/model/HighEndComputerBuilder.java rename to patterns/design-patterns/src/main/java/com/baeldung/templatemethod/model/HighEndComputerBuilder.java diff --git a/patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod/model/StandardComputer.java b/patterns/design-patterns/src/main/java/com/baeldung/templatemethod/model/StandardComputer.java similarity index 100% rename from patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod/model/StandardComputer.java rename to patterns/design-patterns/src/main/java/com/baeldung/templatemethod/model/StandardComputer.java diff --git a/patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod/model/StandardComputerBuilder.java b/patterns/design-patterns/src/main/java/com/baeldung/templatemethod/model/StandardComputerBuilder.java similarity index 100% rename from patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod/model/StandardComputerBuilder.java rename to patterns/design-patterns/src/main/java/com/baeldung/templatemethod/model/StandardComputerBuilder.java diff --git a/core-java/src/main/java/com/baeldung/designpatterns/util/LogerUtil.java b/patterns/design-patterns/src/main/java/com/baeldung/util/LogerUtil.java similarity index 94% rename from core-java/src/main/java/com/baeldung/designpatterns/util/LogerUtil.java rename to patterns/design-patterns/src/main/java/com/baeldung/util/LogerUtil.java index f7b6e4f3e9..7217a4bc40 100644 --- a/core-java/src/main/java/com/baeldung/designpatterns/util/LogerUtil.java +++ b/patterns/design-patterns/src/main/java/com/baeldung/util/LogerUtil.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.util; +package com.baeldung.util; import java.io.BufferedReader; import java.io.IOException; diff --git a/core-java/src/test/java/com/baeldung/designpatterns/AdapterPatternIntegrationTest.java b/patterns/design-patterns/src/test/java/com/baeldung/AdapterPatternIntegrationTest.java similarity index 68% rename from core-java/src/test/java/com/baeldung/designpatterns/AdapterPatternIntegrationTest.java rename to patterns/design-patterns/src/test/java/com/baeldung/AdapterPatternIntegrationTest.java index 8cad1290d9..78a1492d83 100644 --- a/core-java/src/test/java/com/baeldung/designpatterns/AdapterPatternIntegrationTest.java +++ b/patterns/design-patterns/src/test/java/com/baeldung/AdapterPatternIntegrationTest.java @@ -1,15 +1,15 @@ -package com.baeldung.designpatterns; +package com.baeldung; import static org.junit.Assert.assertEquals; import org.junit.Test; -import com.baeldung.designpatterns.adapter.AstonMartin; -import com.baeldung.designpatterns.adapter.BugattiVeyron; -import com.baeldung.designpatterns.adapter.McLaren; -import com.baeldung.designpatterns.adapter.Movable; -import com.baeldung.designpatterns.adapter.MovableAdapter; -import com.baeldung.designpatterns.adapter.MovableAdapterImpl; +import com.baeldung.adapter.AstonMartin; +import com.baeldung.adapter.BugattiVeyron; +import com.baeldung.adapter.McLaren; +import com.baeldung.adapter.Movable; +import com.baeldung.adapter.MovableAdapter; +import com.baeldung.adapter.MovableAdapterImpl; public class AdapterPatternIntegrationTest { @Test diff --git a/core-java/src/test/java/com/baeldung/designpatterns/BridgePatternIntegrationTest.java b/patterns/design-patterns/src/test/java/com/baeldung/BridgePatternIntegrationTest.java similarity index 64% rename from core-java/src/test/java/com/baeldung/designpatterns/BridgePatternIntegrationTest.java rename to patterns/design-patterns/src/test/java/com/baeldung/BridgePatternIntegrationTest.java index ed7eb0c453..adcb5cdd2c 100644 --- a/core-java/src/test/java/com/baeldung/designpatterns/BridgePatternIntegrationTest.java +++ b/patterns/design-patterns/src/test/java/com/baeldung/BridgePatternIntegrationTest.java @@ -1,14 +1,14 @@ -package com.baeldung.designpatterns; +package com.baeldung; import static org.junit.Assert.*; import org.junit.Test; -import com.baeldung.designpatterns.bridge.Blue; -import com.baeldung.designpatterns.bridge.Red; -import com.baeldung.designpatterns.bridge.Shape; -import com.baeldung.designpatterns.bridge.Square; -import com.baeldung.designpatterns.bridge.Triangle; +import com.baeldung.bridge.Blue; +import com.baeldung.bridge.Red; +import com.baeldung.bridge.Shape; +import com.baeldung.bridge.Square; +import com.baeldung.bridge.Triangle; public class BridgePatternIntegrationTest { diff --git a/core-java/src/test/java/com/baeldung/designpatterns/DecoratorPatternIntegrationTest.java b/patterns/design-patterns/src/test/java/com/baeldung/DecoratorPatternIntegrationTest.java similarity index 69% rename from core-java/src/test/java/com/baeldung/designpatterns/DecoratorPatternIntegrationTest.java rename to patterns/design-patterns/src/test/java/com/baeldung/DecoratorPatternIntegrationTest.java index de0ca8a135..23a717ae2e 100644 --- a/core-java/src/test/java/com/baeldung/designpatterns/DecoratorPatternIntegrationTest.java +++ b/patterns/design-patterns/src/test/java/com/baeldung/DecoratorPatternIntegrationTest.java @@ -1,13 +1,13 @@ -package com.baeldung.designpatterns; +package com.baeldung; import static org.junit.Assert.assertEquals; import org.junit.Test; -import com.baeldung.designpatterns.decorator.BubbleLights; -import com.baeldung.designpatterns.decorator.ChristmasTree; -import com.baeldung.designpatterns.decorator.ChristmasTreeImpl; -import com.baeldung.designpatterns.decorator.Garland; +import com.baeldung.decorator.BubbleLights; +import com.baeldung.decorator.ChristmasTree; +import com.baeldung.decorator.ChristmasTreeImpl; +import com.baeldung.decorator.Garland; public class DecoratorPatternIntegrationTest { @Test diff --git a/core-java/src/test/java/com/baeldung/designpatterns/ProxyPatternIntegrationTest.java b/patterns/design-patterns/src/test/java/com/baeldung/ProxyPatternIntegrationTest.java similarity index 80% rename from core-java/src/test/java/com/baeldung/designpatterns/ProxyPatternIntegrationTest.java rename to patterns/design-patterns/src/test/java/com/baeldung/ProxyPatternIntegrationTest.java index 7fa95b31d7..c035793b64 100644 --- a/core-java/src/test/java/com/baeldung/designpatterns/ProxyPatternIntegrationTest.java +++ b/patterns/design-patterns/src/test/java/com/baeldung/ProxyPatternIntegrationTest.java @@ -1,6 +1,6 @@ -package com.baeldung.designpatterns; +package com.baeldung; -import static com.baeldung.designpatterns.util.LogerUtil.LOG; +import static com.baeldung.util.LogerUtil.LOG; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; @@ -11,8 +11,8 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; -import com.baeldung.designpatterns.proxy.ExpensiveObject; -import com.baeldung.designpatterns.proxy.ExpensiveObjectProxy; +import com.baeldung.proxy.ExpensiveObject; +import com.baeldung.proxy.ExpensiveObjectProxy; public class ProxyPatternIntegrationTest { public static TestAppenderDP appender; @@ -31,7 +31,7 @@ public class ProxyPatternIntegrationTest { final List log = appender.getLog(); - assertThat((String) log.get(0).getMessage(), is("Loading initial configuration...")); + assertThat((String) log.get(0).getMessage(), is("Loading initial configuration..")); assertThat((String) log.get(1).getMessage(), is("processing complete.")); assertThat((String) log.get(2).getMessage(), is("processing complete.")); } diff --git a/core-java/src/test/java/com/baeldung/designpatterns/TestAppenderDP.java b/patterns/design-patterns/src/test/java/com/baeldung/TestAppenderDP.java similarity index 94% rename from core-java/src/test/java/com/baeldung/designpatterns/TestAppenderDP.java rename to patterns/design-patterns/src/test/java/com/baeldung/TestAppenderDP.java index 613c26fa13..2b3bc47292 100644 --- a/core-java/src/test/java/com/baeldung/designpatterns/TestAppenderDP.java +++ b/patterns/design-patterns/src/test/java/com/baeldung/TestAppenderDP.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns; +package com.baeldung; import java.util.ArrayList; import java.util.List; diff --git a/patterns/behavioral-patterns/src/test/java/com/baeldung/pattern/chainofresponsibility/ChainOfResponsibilityTest.java b/patterns/design-patterns/src/test/java/com/baeldung/chainofresponsibility/ChainOfResponsibilityTest.java similarity index 100% rename from patterns/behavioral-patterns/src/test/java/com/baeldung/pattern/chainofresponsibility/ChainOfResponsibilityTest.java rename to patterns/design-patterns/src/test/java/com/baeldung/chainofresponsibility/ChainOfResponsibilityTest.java diff --git a/patterns/behavioral-patterns/src/test/java/com/baeldung/pattern/command/test/OpenTextFileOperationUnitTest.java b/patterns/design-patterns/src/test/java/com/baeldung/command/test/OpenTextFileOperationUnitTest.java similarity index 100% rename from patterns/behavioral-patterns/src/test/java/com/baeldung/pattern/command/test/OpenTextFileOperationUnitTest.java rename to patterns/design-patterns/src/test/java/com/baeldung/command/test/OpenTextFileOperationUnitTest.java diff --git a/patterns/behavioral-patterns/src/test/java/com/baeldung/pattern/command/test/SaveTextFileOperationUnitTest.java b/patterns/design-patterns/src/test/java/com/baeldung/command/test/SaveTextFileOperationUnitTest.java similarity index 100% rename from patterns/behavioral-patterns/src/test/java/com/baeldung/pattern/command/test/SaveTextFileOperationUnitTest.java rename to patterns/design-patterns/src/test/java/com/baeldung/command/test/SaveTextFileOperationUnitTest.java diff --git a/patterns/behavioral-patterns/src/test/java/com/baeldung/pattern/command/test/TextFileOperationExecutorUnitTest.java b/patterns/design-patterns/src/test/java/com/baeldung/command/test/TextFileOperationExecutorUnitTest.java similarity index 100% rename from patterns/behavioral-patterns/src/test/java/com/baeldung/pattern/command/test/TextFileOperationExecutorUnitTest.java rename to patterns/design-patterns/src/test/java/com/baeldung/command/test/TextFileOperationExecutorUnitTest.java diff --git a/patterns/behavioral-patterns/src/test/java/com/baeldung/pattern/command/test/TextFileUnitTest.java b/patterns/design-patterns/src/test/java/com/baeldung/command/test/TextFileUnitTest.java similarity index 100% rename from patterns/behavioral-patterns/src/test/java/com/baeldung/pattern/command/test/TextFileUnitTest.java rename to patterns/design-patterns/src/test/java/com/baeldung/command/test/TextFileUnitTest.java diff --git a/core-java/src/test/java/com/baeldung/designpatterns/creational/abstractfactory/AbstractPatternIntegrationTest.java b/patterns/design-patterns/src/test/java/com/baeldung/creational/abstractfactory/AbstractPatternIntegrationTest.java similarity index 91% rename from core-java/src/test/java/com/baeldung/designpatterns/creational/abstractfactory/AbstractPatternIntegrationTest.java rename to patterns/design-patterns/src/test/java/com/baeldung/creational/abstractfactory/AbstractPatternIntegrationTest.java index dc02b976a0..6d1a4ad8fd 100644 --- a/core-java/src/test/java/com/baeldung/designpatterns/creational/abstractfactory/AbstractPatternIntegrationTest.java +++ b/patterns/design-patterns/src/test/java/com/baeldung/creational/abstractfactory/AbstractPatternIntegrationTest.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.creational.abstractfactory; +package com.baeldung.creational.abstractfactory; import static org.junit.Assert.*; diff --git a/core-java/src/test/java/com/baeldung/designpatterns/creational/builder/BuilderPatternIntegrationTest.java b/patterns/design-patterns/src/test/java/com/baeldung/creational/builder/BuilderPatternIntegrationTest.java similarity index 95% rename from core-java/src/test/java/com/baeldung/designpatterns/creational/builder/BuilderPatternIntegrationTest.java rename to patterns/design-patterns/src/test/java/com/baeldung/creational/builder/BuilderPatternIntegrationTest.java index 898330b26e..03b0b3db90 100644 --- a/core-java/src/test/java/com/baeldung/designpatterns/creational/builder/BuilderPatternIntegrationTest.java +++ b/patterns/design-patterns/src/test/java/com/baeldung/creational/builder/BuilderPatternIntegrationTest.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.creational.builder; +package com.baeldung.creational.builder; import static org.junit.Assert.assertEquals; diff --git a/core-java/src/test/java/com/baeldung/designpatterns/creational/factory/FactoryIntegrationTest.java b/patterns/design-patterns/src/test/java/com/baeldung/creational/factory/FactoryIntegrationTest.java similarity index 94% rename from core-java/src/test/java/com/baeldung/designpatterns/creational/factory/FactoryIntegrationTest.java rename to patterns/design-patterns/src/test/java/com/baeldung/creational/factory/FactoryIntegrationTest.java index ed0419c16d..61cf83c1e7 100644 --- a/core-java/src/test/java/com/baeldung/designpatterns/creational/factory/FactoryIntegrationTest.java +++ b/patterns/design-patterns/src/test/java/com/baeldung/creational/factory/FactoryIntegrationTest.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.creational.factory; +package com.baeldung.creational.factory; import static org.junit.Assert.*; diff --git a/core-java/src/test/java/com/baeldung/designpatterns/creational/singleton/SingletonIntegrationTest.java b/patterns/design-patterns/src/test/java/com/baeldung/creational/singleton/SingletonIntegrationTest.java similarity index 92% rename from core-java/src/test/java/com/baeldung/designpatterns/creational/singleton/SingletonIntegrationTest.java rename to patterns/design-patterns/src/test/java/com/baeldung/creational/singleton/SingletonIntegrationTest.java index a3d5b7a14d..7c3d134ae6 100644 --- a/core-java/src/test/java/com/baeldung/designpatterns/creational/singleton/SingletonIntegrationTest.java +++ b/patterns/design-patterns/src/test/java/com/baeldung/creational/singleton/SingletonIntegrationTest.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.creational.singleton; +package com.baeldung.creational.singleton; import org.junit.Test; import static org.junit.Assert.*; diff --git a/patterns/facade/src/test/java/com/baeldung/pattern/facade/CarEngineFacadeTest.java b/patterns/design-patterns/src/test/java/com/baeldung/facade/CarEngineFacadeTest.java similarity index 94% rename from patterns/facade/src/test/java/com/baeldung/pattern/facade/CarEngineFacadeTest.java rename to patterns/design-patterns/src/test/java/com/baeldung/facade/CarEngineFacadeTest.java index 79c159319d..88c5d3c9bc 100644 --- a/patterns/facade/src/test/java/com/baeldung/pattern/facade/CarEngineFacadeTest.java +++ b/patterns/design-patterns/src/test/java/com/baeldung/facade/CarEngineFacadeTest.java @@ -1,4 +1,4 @@ -package com.baeldung.pattern.facade; +package com.baeldung.facade; import ch.qos.logback.classic.Logger; import ch.qos.logback.classic.spi.ILoggingEvent; @@ -35,12 +35,12 @@ public class CarEngineFacadeTest { CarEngineFacade carEngineFacade = new CarEngineFacade(); carEngineFacade.startEngine(); assertTrue(appender.logContains("Fuel injector ready to inject fuel.")); - assertTrue(appender.logContains("Getting air measurements...")); + assertTrue(appender.logContains("Getting air measurements..")); assertTrue(appender.logContains("Air provided!")); assertTrue(appender.logContains("Fuel injector ready to inject fuel.")); - assertTrue(appender.logContains("Fuel Pump is pumping fuel...")); + assertTrue(appender.logContains("Fuel Pump is pumping fuel..")); assertTrue(appender.logContains("Fuel injected.")); - assertTrue(appender.logContains("Starting...")); + assertTrue(appender.logContains("Starting..")); assertTrue(appender.logContains("Setting temperature upper limit to 90")); assertTrue(appender.logContains("Cooling Controller ready!")); assertTrue(appender.logContains("Setting radiator speed to 10")); @@ -52,12 +52,12 @@ public class CarEngineFacadeTest { public void whenStopEngine_thenAllNecessaryActionsPerformed() { CarEngineFacade carEngineFacade = new CarEngineFacade(); carEngineFacade.stopEngine(); - assertTrue(appender.logContains("Stopping Fuel injector...")); + assertTrue(appender.logContains("Stopping Fuel injector..")); assertTrue(appender.logContains("Catalytic Converter switched off!")); assertTrue(appender.logContains("Scheduled cooling with maximum allowed temperature 50")); - assertTrue(appender.logContains("Getting temperature from the sensor...")); + assertTrue(appender.logContains("Getting temperature from the sensor..")); assertTrue(appender.logContains("Radiator switched on!")); - assertTrue(appender.logContains("Stopping Cooling Controller...")); + assertTrue(appender.logContains("Stopping Cooling Controller..")); assertTrue(appender.logContains("Radiator switched off!")); assertTrue(appender.logContains("Air controller switched off.")); } diff --git a/core-java/src/test/java/com/baeldung/designpatterns/flyweight/FlyweightUnitTest.java b/patterns/design-patterns/src/test/java/com/baeldung/flyweight/FlyweightUnitTest.java similarity index 96% rename from core-java/src/test/java/com/baeldung/designpatterns/flyweight/FlyweightUnitTest.java rename to patterns/design-patterns/src/test/java/com/baeldung/flyweight/FlyweightUnitTest.java index 645e2fd459..ab8ed32b4e 100644 --- a/core-java/src/test/java/com/baeldung/designpatterns/flyweight/FlyweightUnitTest.java +++ b/patterns/design-patterns/src/test/java/com/baeldung/flyweight/FlyweightUnitTest.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.flyweight; +package com.baeldung.flyweight; import java.awt.Color; diff --git a/core-java/src/test/java/com/baeldung/designpatterns/observer/ObserverIntegrationTest.java b/patterns/design-patterns/src/test/java/com/baeldung/observer/ObserverIntegrationTest.java similarity index 87% rename from core-java/src/test/java/com/baeldung/designpatterns/observer/ObserverIntegrationTest.java rename to patterns/design-patterns/src/test/java/com/baeldung/observer/ObserverIntegrationTest.java index a8a0e29990..5590ecd717 100644 --- a/core-java/src/test/java/com/baeldung/designpatterns/observer/ObserverIntegrationTest.java +++ b/patterns/design-patterns/src/test/java/com/baeldung/observer/ObserverIntegrationTest.java @@ -1,11 +1,11 @@ -package com.baeldung.designpatterns.observer; +package com.baeldung.observer; import static org.junit.Assert.assertEquals; import org.junit.Test; -import com.baeldung.designpatterns.observer.NewsAgency; -import com.baeldung.designpatterns.observer.NewsChannel; +import com.baeldung.observer.NewsAgency; +import com.baeldung.observer.NewsChannel; public class ObserverIntegrationTest { diff --git a/core-java/src/test/java/com/baeldung/designpatterns/singleton/synchronization/SingletonSynchronizationUnitTest.java b/patterns/design-patterns/src/test/java/com/baeldung/singleton/synchronization/SingletonSynchronizationUnitTest.java similarity index 98% rename from core-java/src/test/java/com/baeldung/designpatterns/singleton/synchronization/SingletonSynchronizationUnitTest.java rename to patterns/design-patterns/src/test/java/com/baeldung/singleton/synchronization/SingletonSynchronizationUnitTest.java index 2c1a3fe093..08a70f6056 100644 --- a/core-java/src/test/java/com/baeldung/designpatterns/singleton/synchronization/SingletonSynchronizationUnitTest.java +++ b/patterns/design-patterns/src/test/java/com/baeldung/singleton/synchronization/SingletonSynchronizationUnitTest.java @@ -1,4 +1,4 @@ -package com.baeldung.designpatterns.singleton.synchronization; +package com.baeldung.singleton.synchronization; import java.util.Collections; import java.util.HashSet; diff --git a/patterns/behavioral-patterns/src/test/java/com/baeldung/pattern/templatemethod/test/TemplateMethodPatternTest.java b/patterns/design-patterns/src/test/java/com/baeldung/templatemethod/test/TemplateMethodPatternTest.java similarity index 100% rename from patterns/behavioral-patterns/src/test/java/com/baeldung/pattern/templatemethod/test/TemplateMethodPatternTest.java rename to patterns/design-patterns/src/test/java/com/baeldung/templatemethod/test/TemplateMethodPatternTest.java diff --git a/patterns/facade/README.md b/patterns/facade/README.md deleted file mode 100644 index cb44bf4bc4..0000000000 --- a/patterns/facade/README.md +++ /dev/null @@ -1,2 +0,0 @@ -### Relevant Articles: -- [Facade Design Pattern in Java](http://www.baeldung.com/java-facade-pattern) diff --git a/patterns/facade/pom.xml b/patterns/facade/pom.xml deleted file mode 100644 index 573e557eb6..0000000000 --- a/patterns/facade/pom.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - 4.0.0 - com.baeldung.pattern.facade - pattern.facade - 1.0 - jar - - com.baeldung.patterns - patterns-parent - 1.0.0-SNAPSHOT - .. - - - - - junit - junit - 4.12 - test - - - - UTF-8 - 1.8 - 1.8 - - \ No newline at end of file diff --git a/patterns/front-controller/pom.xml b/patterns/front-controller/pom.xml index 877277a062..a12d606165 100644 --- a/patterns/front-controller/pom.xml +++ b/patterns/front-controller/pom.xml @@ -7,7 +7,7 @@ patterns-parent - com.baeldung.patterns + com.baeldung 1.0.0-SNAPSHOT .. diff --git a/patterns/intercepting-filter/pom.xml b/patterns/intercepting-filter/pom.xml index b9916d9157..8c68302315 100644 --- a/patterns/intercepting-filter/pom.xml +++ b/patterns/intercepting-filter/pom.xml @@ -7,7 +7,7 @@ war - com.baeldung.patterns + com.baeldung patterns-parent 1.0.0-SNAPSHOT .. diff --git a/patterns/pom.xml b/patterns/pom.xml index 7ee2c749be..a811664b86 100644 --- a/patterns/pom.xml +++ b/patterns/pom.xml @@ -2,7 +2,7 @@ 4.0.0 - com.baeldung.patterns + com.baeldung patterns-parent pom @@ -16,7 +16,7 @@ front-controller intercepting-filter - behavioral-patterns + design-patterns diff --git a/persistence-modules/spring-data-eclipselink/src/main/java/com/baeldung/eclipselink/springdata/pessimisticlocking/Address.java b/persistence-modules/spring-data-eclipselink/src/main/java/com/baeldung/eclipselink/springdata/pessimisticlocking/Address.java new file mode 100644 index 0000000000..b62889208c --- /dev/null +++ b/persistence-modules/spring-data-eclipselink/src/main/java/com/baeldung/eclipselink/springdata/pessimisticlocking/Address.java @@ -0,0 +1,34 @@ +package com.baeldung.eclipselink.springdata.pessimisticlocking; + +import javax.persistence.Embeddable; + +@Embeddable +public class Address { + + private String country; + private String city; + + public Address(String country, String city) { + this.country = country; + this.city = city; + } + + public Address() { + } + + public String getCountry() { + return country; + } + + public void setCountry(String country) { + this.country = country; + } + + public String getCity() { + return city; + } + + public void setCity(String city) { + this.city = city; + } +} diff --git a/persistence-modules/spring-data-eclipselink/src/main/java/com/baeldung/eclipselink/springdata/pessimisticlocking/Course.java b/persistence-modules/spring-data-eclipselink/src/main/java/com/baeldung/eclipselink/springdata/pessimisticlocking/Course.java new file mode 100644 index 0000000000..8d90659f3e --- /dev/null +++ b/persistence-modules/spring-data-eclipselink/src/main/java/com/baeldung/eclipselink/springdata/pessimisticlocking/Course.java @@ -0,0 +1,50 @@ +package com.baeldung.eclipselink.springdata.pessimisticlocking; + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.JoinTable; +import javax.persistence.ManyToOne; + +@Entity +public class Course { + + @Id + private Long courseId; + private String name; + @ManyToOne + @JoinTable(name = "student_course") + private Student student; + + public Course(Long courseId, String name, Student student) { + this.courseId = courseId; + this.name = name; + this.student = student; + } + + public Course() { + } + + public Long getCourseId() { + return courseId; + } + + public void setCourseId(Long courseId) { + this.courseId = courseId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Student getStudent() { + return student; + } + + public void setStudent(Student students) { + this.student = students; + } +} diff --git a/persistence-modules/spring-data-eclipselink/src/main/java/com/baeldung/eclipselink/springdata/pessimisticlocking/Customer.java b/persistence-modules/spring-data-eclipselink/src/main/java/com/baeldung/eclipselink/springdata/pessimisticlocking/Customer.java new file mode 100644 index 0000000000..f06a676de8 --- /dev/null +++ b/persistence-modules/spring-data-eclipselink/src/main/java/com/baeldung/eclipselink/springdata/pessimisticlocking/Customer.java @@ -0,0 +1,61 @@ +package com.baeldung.eclipselink.springdata.pessimisticlocking; + +import javax.persistence.CollectionTable; +import javax.persistence.ElementCollection; +import javax.persistence.Entity; +import javax.persistence.Id; +import java.util.List; + +@Entity +public class Customer { + + @Id + private Long customerId; + private String name; + private String lastName; + @ElementCollection + @CollectionTable(name = "customer_address") + private List
addressList; + + public Customer() { + } + + public Customer(Long customerId, String name, String lastName, List
addressList) { + this.customerId = customerId; + this.name = name; + this.lastName = lastName; + this.addressList = addressList; + } + + public Long getCustomerId() { + return customerId; + } + + public void setCustomerId(Long customerId) { + this.customerId = customerId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public List
getAddressList() { + return addressList; + } + + public void setAddressList(List
addressList) { + this.addressList = addressList; + } +} diff --git a/persistence-modules/spring-data-eclipselink/src/main/java/com/baeldung/eclipselink/springdata/pessimisticlocking/Employee.java b/persistence-modules/spring-data-eclipselink/src/main/java/com/baeldung/eclipselink/springdata/pessimisticlocking/Employee.java new file mode 100644 index 0000000000..d09b123225 --- /dev/null +++ b/persistence-modules/spring-data-eclipselink/src/main/java/com/baeldung/eclipselink/springdata/pessimisticlocking/Employee.java @@ -0,0 +1,27 @@ +package com.baeldung.eclipselink.springdata.pessimisticlocking; + +import javax.persistence.Entity; +import java.math.BigDecimal; + +@Entity +public class Employee extends Individual { + + private BigDecimal salary; + + public Employee(Long id, String name, String lastName, BigDecimal salary) { + super(id, name, lastName); + this.salary = salary; + } + + public Employee() { + super(); + } + + public BigDecimal getSalary() { + return salary; + } + + public void setSalary(BigDecimal average) { + this.salary = average; + } +} diff --git a/persistence-modules/spring-data-eclipselink/src/main/java/com/baeldung/eclipselink/springdata/pessimisticlocking/Individual.java b/persistence-modules/spring-data-eclipselink/src/main/java/com/baeldung/eclipselink/springdata/pessimisticlocking/Individual.java new file mode 100644 index 0000000000..7edaaace54 --- /dev/null +++ b/persistence-modules/spring-data-eclipselink/src/main/java/com/baeldung/eclipselink/springdata/pessimisticlocking/Individual.java @@ -0,0 +1,49 @@ +package com.baeldung.eclipselink.springdata.pessimisticlocking; + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Inheritance; +import javax.persistence.InheritanceType; + +@Entity +@Inheritance(strategy = InheritanceType.JOINED) +public class Individual { + + @Id + private Long id; + private String name; + private String lastName; + + public Individual(Long id, String name, String lastName) { + this.id = id; + this.name = name; + this.lastName = lastName; + } + + public Individual() { + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } +} diff --git a/persistence-modules/spring-data-eclipselink/src/main/java/com/baeldung/eclipselink/springdata/pessimisticlocking/Student.java b/persistence-modules/spring-data-eclipselink/src/main/java/com/baeldung/eclipselink/springdata/pessimisticlocking/Student.java new file mode 100644 index 0000000000..f613aab0f6 --- /dev/null +++ b/persistence-modules/spring-data-eclipselink/src/main/java/com/baeldung/eclipselink/springdata/pessimisticlocking/Student.java @@ -0,0 +1,48 @@ +package com.baeldung.eclipselink.springdata.pessimisticlocking; + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.OneToMany; +import java.util.List; + +@Entity +public class Student { + + @Id + private Long id; + private String name; + @OneToMany(mappedBy = "student") + private List courses; + + public Student(Long id, String name) { + this.id = id; + this.name = name; + } + + public Student() { + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public List getCourses() { + return courses; + } + + public void setCourses(List courses) { + this.courses = courses; + } +} diff --git a/persistence-modules/spring-data-eclipselink/src/main/resources/application.properties b/persistence-modules/spring-data-eclipselink/src/main/resources/application.properties index 549c0b4ada..5874482e7a 100644 --- a/persistence-modules/spring-data-eclipselink/src/main/resources/application.properties +++ b/persistence-modules/spring-data-eclipselink/src/main/resources/application.properties @@ -1,2 +1,2 @@ -spring.datasource.url=jdbc:h2:mem:test +spring.datasource.url=jdbc:h2:mem:test;MVCC=FALSE;LOCK_TIMEOUT=100; spring.jpa.show-sql=true \ No newline at end of file diff --git a/persistence-modules/spring-data-eclipselink/src/test/java/com/baeldung/eclipselink/springdata/pessimisticlocking/PessimisticLockScopesIntegrationTest.java b/persistence-modules/spring-data-eclipselink/src/test/java/com/baeldung/eclipselink/springdata/pessimisticlocking/PessimisticLockScopesIntegrationTest.java new file mode 100644 index 0000000000..6ee40fac9a --- /dev/null +++ b/persistence-modules/spring-data-eclipselink/src/test/java/com/baeldung/eclipselink/springdata/pessimisticlocking/PessimisticLockScopesIntegrationTest.java @@ -0,0 +1,118 @@ +package com.baeldung.eclipselink.springdata.pessimisticlocking; + +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +import javax.persistence.*; +import java.math.BigDecimal; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class PessimisticLockScopesIntegrationTest { + + @Autowired + EntityManagerFactory entityManagerFactory; + + @Test + public void givenEntityWithJoinInheritance_whenLock_thenNormalAndExtendScopesLockParentAndChildEntity() { + EntityManager em = getEntityManagerWithOpenTransaction(); + Employee employee = new Employee(1L, "JOE", "DOE", new BigDecimal(4.5)); + em.persist(employee); + em.getTransaction() + .commit(); + em.close(); + + // NORMAL SCOPE + EntityManager em2 = getEntityManagerWithOpenTransaction(); + Employee foundEmployee = em2.find(Employee.class, 1L, LockModeType.PESSIMISTIC_WRITE); + em2.getTransaction() + .rollback(); + + // EXTENDED SCOPE + Map map = new HashMap<>(); + map.put("javax.persistence.lock.scope", PessimisticLockScope.EXTENDED); + + EntityManager em3 = getEntityManagerWithOpenTransaction(); + foundEmployee = em3.find(Employee.class, 1L, LockModeType.PESSIMISTIC_WRITE, map); + em3.getTransaction() + .rollback(); + + em2.close(); + em3.close(); + } + + @Test + public void givenEntityWithElementCollection_whenLock_thenExtendScopeLocksAlsoCollectionTable() { + EntityManager em = getEntityManagerWithOpenTransaction(); + Address address = new Address("Poland", "Warsaw"); + Customer customer = new Customer(1L, "JOHN", "SMITH", Arrays.asList(address)); + em.persist(customer); + em.getTransaction() + .commit(); + em.close(); + + // NORMAL SCOPE + EntityManager em2 = getEntityManagerWithOpenTransaction(); + Customer foundCustomer = em2.find(Customer.class, 1L, LockModeType.PESSIMISTIC_WRITE); + em2.getTransaction() + .rollback(); + + // EXTENDED SCOPE + Map map = new HashMap<>(); + map.put("javax.persistence.lock.scope", PessimisticLockScope.EXTENDED); + + EntityManager em3 = getEntityManagerWithOpenTransaction(); + foundCustomer = em3.find(Customer.class, 1L, LockModeType.PESSIMISTIC_WRITE, map); + em3.getTransaction() + .rollback(); + + em2.close(); + em3.close(); + } + + @Test + public void givenEclipseEntityWithOneToMany_whenLock_thenExtendedLockAlsoJoinTable() { + EntityManager em = getEntityManagerWithOpenTransaction(); + Student student = new Student(1L, "JOE"); + Course course = new Course(1L, "COURSE", student); + student.setCourses(Arrays.asList(course)); + em.persist(course); + em.persist(student); + em.getTransaction() + .commit(); + em.close(); + + // NORMAL SCOPE + EntityManager em2 = getEntityManagerWithOpenTransaction(); + Course foundCourse = em2.find(Course.class, 1L, LockModeType.PESSIMISTIC_WRITE); + em2.getTransaction() + .rollback(); + + // EXTENDED SCOPE + Map map = new HashMap<>(); + map.put("javax.persistence.lock.scope", PessimisticLockScope.EXTENDED); + + EntityManager em3 = getEntityManagerWithOpenTransaction(); + foundCourse = em3.find(Course.class, 1L, LockModeType.PESSIMISTIC_WRITE, map); + em3.getTransaction() + .rollback(); + + em2.close(); + em3.close(); + } + + protected EntityManager getEntityManagerWithOpenTransaction() { + EntityManager entityManager = entityManagerFactory.createEntityManager(); + entityManager.getTransaction() + .begin(); + return entityManager; + } +} diff --git a/pom.xml b/pom.xml index 78e0fa925e..9dea3dc79d 100644 --- a/pom.xml +++ b/pom.xml @@ -141,6 +141,7 @@ spring-boot-keycloak spring-boot-bootstrap spring-boot-admin + spring-boot-ops spring-boot-security spring-cloud-data-flow spring-cloud @@ -152,6 +153,7 @@ spring-data-couchbase-2 persistence-modules/spring-data-dynamodb spring-data-elasticsearch + spring-data-keyvalue spring-data-mongodb persistence-modules/spring-data-neo4j persistence-modules/spring-data-redis @@ -529,4 +531,4 @@ 5.0.2 - \ No newline at end of file + diff --git a/spring-activiti/src/main/java/com/example/activitiwithspring/ActivitiWithSpringApplication.java b/spring-activiti/src/main/java/com/example/activitiwithspring/ActivitiWithSpringApplication.java index 2cfacdcf0d..a9cd1301eb 100644 --- a/spring-activiti/src/main/java/com/example/activitiwithspring/ActivitiWithSpringApplication.java +++ b/spring-activiti/src/main/java/com/example/activitiwithspring/ActivitiWithSpringApplication.java @@ -2,8 +2,9 @@ package com.example.activitiwithspring; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration; -@SpringBootApplication +@SpringBootApplication(exclude = {SecurityAutoConfiguration.class}) public class ActivitiWithSpringApplication { public static void main(String[] args) { SpringApplication.run(ActivitiWithSpringApplication.class, args); diff --git a/spring-all/README.md b/spring-all/README.md index a3e1ca5464..173f410620 100644 --- a/spring-all/README.md +++ b/spring-all/README.md @@ -27,3 +27,4 @@ The "REST With Spring" Classes: http://bit.ly/restwithspring - [A Guide To Caching in Spring](http://www.baeldung.com/spring-cache-tutorial) - [How To Do @Async in Spring](http://www.baeldung.com/spring-async) - [Quick Guide to the Spring @Order Annotation](http://www.baeldung.com/spring-order) +- [Spring Web Contexts](http://www.baeldung.com/spring-web-contexts) diff --git a/spring-all/src/main/java/com/baeldung/contexts/config/AnnotationsBasedApplicationAndServletInitializer.java b/spring-all/src/main/java/com/baeldung/contexts/config/AnnotationsBasedApplicationAndServletInitializer.java index 8ec35515a3..4df1e2e73b 100644 --- a/spring-all/src/main/java/com/baeldung/contexts/config/AnnotationsBasedApplicationAndServletInitializer.java +++ b/spring-all/src/main/java/com/baeldung/contexts/config/AnnotationsBasedApplicationAndServletInitializer.java @@ -1,6 +1,5 @@ package com.baeldung.contexts.config; -import org.springframework.web.context.AbstractContextLoaderInitializer; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; import org.springframework.web.servlet.support.AbstractDispatcherServletInitializer; @@ -9,20 +8,29 @@ public class AnnotationsBasedApplicationAndServletInitializer extends AbstractDi @Override protected WebApplicationContext createRootApplicationContext() { - AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext(); - rootContext.register(RootApplicationConfig.class); - return rootContext; + //If this is not the only class declaring a root context, we return null because it would clash + //with other classes, as there can only be a single root context. + + //AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext(); + //rootContext.register(RootApplicationConfig.class); + //return rootContext; + return null; } @Override protected WebApplicationContext createServletApplicationContext() { - AnnotationConfigWebApplicationContext secureWebAppContext = new AnnotationConfigWebApplicationContext(); - secureWebAppContext.register(SecureWebAppConfig.class); - return secureWebAppContext; + AnnotationConfigWebApplicationContext normalWebAppContext = new AnnotationConfigWebApplicationContext(); + normalWebAppContext.register(NormalWebAppConfig.class); + return normalWebAppContext; } @Override protected String[] getServletMappings() { - return new String[] { "/s/api/*" }; + return new String[] { "/api/*" }; + } + + @Override + protected String getServletName() { + return "normal-dispatcher"; } } diff --git a/spring-all/src/main/java/com/baeldung/contexts/config/ApplicationInitializer.java b/spring-all/src/main/java/com/baeldung/contexts/config/ApplicationInitializer.java index babad90598..09e0742394 100644 --- a/spring-all/src/main/java/com/baeldung/contexts/config/ApplicationInitializer.java +++ b/spring-all/src/main/java/com/baeldung/contexts/config/ApplicationInitializer.java @@ -16,7 +16,11 @@ public class ApplicationInitializer implements WebApplicationInitializer { @Override public void onStartup(ServletContext servletContext) throws ServletException { - //XML Context + //Here, we can define a root context and register servlets, among other things. + //However, since we've later defined other classes to do the same and they would clash, + //we leave this commented out. + + //Root XML Context //XmlWebApplicationContext rootContext = new XmlWebApplicationContext(); //rootContext.setConfigLocations("/WEB-INF/rootApplicationContext.xml"); //Annotations Context @@ -24,12 +28,13 @@ public class ApplicationInitializer implements WebApplicationInitializer { //rootContext.register(RootApplicationConfig.class); //Registration //servletContext.addListener(new ContextLoaderListener(rootContext)); - - XmlWebApplicationContext normalWebAppContext = new XmlWebApplicationContext(); - normalWebAppContext.setConfigLocation("/WEB-INF/normal-webapp-servlet.xml"); - ServletRegistration.Dynamic normal = servletContext.addServlet("normal-webapp", new DispatcherServlet(normalWebAppContext)); - normal.setLoadOnStartup(1); - normal.addMapping("/api/*"); + + //Dispatcher Servlet + //XmlWebApplicationContext normalWebAppContext = new XmlWebApplicationContext(); + //normalWebAppContext.setConfigLocation("/WEB-INF/normal-webapp-servlet.xml"); + //ServletRegistration.Dynamic normal = servletContext.addServlet("normal-webapp", new DispatcherServlet(normalWebAppContext)); + //normal.setLoadOnStartup(1); + //normal.addMapping("/api/*"); } } diff --git a/spring-all/src/main/java/com/baeldung/contexts/config/SecureAnnotationsBasedApplicationAndServletInitializer.java b/spring-all/src/main/java/com/baeldung/contexts/config/SecureAnnotationsBasedApplicationAndServletInitializer.java new file mode 100644 index 0000000000..89ce0153f5 --- /dev/null +++ b/spring-all/src/main/java/com/baeldung/contexts/config/SecureAnnotationsBasedApplicationAndServletInitializer.java @@ -0,0 +1,32 @@ +package com.baeldung.contexts.config; + +import org.springframework.web.context.WebApplicationContext; +import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; +import org.springframework.web.servlet.support.AbstractDispatcherServletInitializer; + +public class SecureAnnotationsBasedApplicationAndServletInitializer extends AbstractDispatcherServletInitializer { + + @Override + protected WebApplicationContext createRootApplicationContext() { + return null; + } + + @Override + protected WebApplicationContext createServletApplicationContext() { + AnnotationConfigWebApplicationContext secureWebAppContext = new AnnotationConfigWebApplicationContext(); + secureWebAppContext.register(SecureWebAppConfig.class); + return secureWebAppContext; + } + + @Override + protected String[] getServletMappings() { + return new String[] { "/s/api/*" }; + } + + + @Override + protected String getServletName() { + return "secure-dispatcher"; + } + +} diff --git a/spring-all/src/main/java/com/baeldung/contexts/normal/HelloWorldController.java b/spring-all/src/main/java/com/baeldung/contexts/normal/HelloWorldController.java index dd70ce8e97..fbe3dfb398 100644 --- a/spring-all/src/main/java/com/baeldung/contexts/normal/HelloWorldController.java +++ b/spring-all/src/main/java/com/baeldung/contexts/normal/HelloWorldController.java @@ -35,7 +35,7 @@ public class HelloWorldController { @RequestMapping(path = "/welcome") public ModelAndView helloWorld() { processContext(); - String message = "
" + "

" + greeterService.greet() + "

"; + String message = "
" + "

Normal " + greeterService.greet() + "

"; return new ModelAndView("welcome", "message", message); } } diff --git a/spring-all/src/main/java/com/baeldung/contexts/secure/HelloWorldSecureController.java b/spring-all/src/main/java/com/baeldung/contexts/secure/HelloWorldSecureController.java index b46ace91ae..4ebf2d55e0 100644 --- a/spring-all/src/main/java/com/baeldung/contexts/secure/HelloWorldSecureController.java +++ b/spring-all/src/main/java/com/baeldung/contexts/secure/HelloWorldSecureController.java @@ -43,7 +43,7 @@ public class HelloWorldSecureController { @RequestMapping(path = "/welcome") public ModelAndView helloWorld() { processContext(); - String message = "
" + "

" + greeterService.greet() + "

"; + String message = "
" + "

Secure " + greeterService.greet() + "

"; return new ModelAndView("welcome", "message", message); } } diff --git a/spring-all/src/main/java/org/baeldung/controller/config/StudentControllerConfig.java b/spring-all/src/main/java/org/baeldung/controller/config/StudentControllerConfig.java index ec6cf19785..3dc4db53c0 100644 --- a/spring-all/src/main/java/org/baeldung/controller/config/StudentControllerConfig.java +++ b/spring-all/src/main/java/org/baeldung/controller/config/StudentControllerConfig.java @@ -19,10 +19,13 @@ public class StudentControllerConfig implements WebApplicationInitializer { root.setServletContext(sc); - // Manages the lifecycle of the root application context - sc.addListener(new ContextLoaderListener(root)); + //Manages the lifecycle of the root application context. + //Conflicts with other root contexts in the application, so we've manually set the parent below. + //sc.addListener(new ContextLoaderListener(root)); - DispatcherServlet dv = new DispatcherServlet(new GenericWebApplicationContext()); + GenericWebApplicationContext webApplicationContext = new GenericWebApplicationContext(); + webApplicationContext.setParent(root); + DispatcherServlet dv = new DispatcherServlet(webApplicationContext); ServletRegistration.Dynamic appServlet = sc.addServlet("test-mvc", dv); appServlet.setLoadOnStartup(1); diff --git a/spring-all/src/main/java/org/baeldung/spring/config/MainWebAppInitializer.java b/spring-all/src/main/java/org/baeldung/spring/config/MainWebAppInitializer.java index 5ef83b8afd..a857783c60 100644 --- a/spring-all/src/main/java/org/baeldung/spring/config/MainWebAppInitializer.java +++ b/spring-all/src/main/java/org/baeldung/spring/config/MainWebAppInitializer.java @@ -26,11 +26,14 @@ public class MainWebAppInitializer implements WebApplicationInitializer { root.scan("org.baeldung.spring.config"); // root.getEnvironment().setDefaultProfiles("embedded"); - // Manages the lifecycle of the root application context - sc.addListener(new ContextLoaderListener(root)); + //Manages the lifecycle of the root application context. + //Conflicts with other root contexts in the application, so we've manually set the parent below. + //sc.addListener(new ContextLoaderListener(root)); // Handles requests into the application - final ServletRegistration.Dynamic appServlet = sc.addServlet("mvc", new DispatcherServlet(new GenericWebApplicationContext())); + GenericWebApplicationContext webApplicationContext = new GenericWebApplicationContext(); + webApplicationContext.setParent(root); + final ServletRegistration.Dynamic appServlet = sc.addServlet("mvc", new DispatcherServlet(webApplicationContext)); appServlet.setLoadOnStartup(1); final Set mappingConflicts = appServlet.addMapping("/"); if (!mappingConflicts.isEmpty()) { diff --git a/spring-all/src/main/webapp/WEB-INF/normal-webapp-servlet.xml b/spring-all/src/main/webapp/WEB-INF/normal-webapp-servlet.xml index d358e2d62b..0a7a0919a8 100644 --- a/spring-all/src/main/webapp/WEB-INF/normal-webapp-servlet.xml +++ b/spring-all/src/main/webapp/WEB-INF/normal-webapp-servlet.xml @@ -1,12 +1,9 @@ diff --git a/spring-all/src/main/webapp/WEB-INF/secure-webapp-servlet.xml b/spring-all/src/main/webapp/WEB-INF/secure-webapp-servlet.xml index 5bca724670..6cdd3971bf 100644 --- a/spring-all/src/main/webapp/WEB-INF/secure-webapp-servlet.xml +++ b/spring-all/src/main/webapp/WEB-INF/secure-webapp-servlet.xml @@ -1,12 +1,9 @@ diff --git a/spring-all/src/main/webapp/WEB-INF/web.xml b/spring-all/src/main/webapp/WEB-INF/web.xml index 55c2ccd62a..42020e75c4 100644 --- a/spring-all/src/main/webapp/WEB-INF/web.xml +++ b/spring-all/src/main/webapp/WEB-INF/web.xml @@ -8,8 +8,8 @@ application initializers. --> - - + + - - contextClass - - org.springframework.web.context.support.AnnotationConfigWebApplicationContext - - - - contextConfigLocation - org.baeldung.spring.web.config - - - - org.springframework.web.context.ContextLoaderListener - - - - - mvc - org.springframework.web.servlet.DispatcherServlet - 1 - - - mvc - / - - - - index.html - - - \ No newline at end of file diff --git a/spring-boot-autoconfiguration/src/main/resources/application.properties b/spring-boot-autoconfiguration/src/main/resources/application.properties index 09df3b8f02..4456c78e5d 100644 --- a/spring-boot-autoconfiguration/src/main/resources/application.properties +++ b/spring-boot-autoconfiguration/src/main/resources/application.properties @@ -1,4 +1,2 @@ -server.port=9090 - spring.jpa.show-sql=true spring.jpa.hibernate.ddl-auto = update diff --git a/spring-boot-bootstrap/pom.xml b/spring-boot-bootstrap/pom.xml index 1ec9af8189..03ce9b6906 100644 --- a/spring-boot-bootstrap/pom.xml +++ b/spring-boot-bootstrap/pom.xml @@ -9,10 +9,10 @@ Demo project for Spring Boot - parent-boot-5 + parent-boot-2 com.baeldung 0.0.1-SNAPSHOT - ../parent-boot-5 + ../parent-boot-2 + + + + UTF-8 + UTF-8 + 1.8 + + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-tomcat + provided + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + ${artifactId} + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + diff --git a/spring-boot-ops/src/main/java/com/baeldung/springbootsimple/SpringBootTomcatApplication.java b/spring-boot-ops/src/main/java/com/baeldung/springbootsimple/SpringBootTomcatApplication.java new file mode 100644 index 0000000000..c9f90683ec --- /dev/null +++ b/spring-boot-ops/src/main/java/com/baeldung/springbootsimple/SpringBootTomcatApplication.java @@ -0,0 +1,13 @@ +package com.baeldung.springbootsimple; + +import org.springframework.boot.*; +import org.springframework.boot.autoconfigure.*; +import org.springframework.boot.web.servlet.support.*; + +@SpringBootApplication +public class SpringBootTomcatApplication extends SpringBootServletInitializer { + + public static void main(String[] args) { + SpringApplication.run(SpringBootTomcatApplication.class, args); + } +} diff --git a/spring-boot-ops/src/main/java/com/baeldung/springbootsimple/TomcatController.java b/spring-boot-ops/src/main/java/com/baeldung/springbootsimple/TomcatController.java new file mode 100644 index 0000000000..fcf7ecd6c0 --- /dev/null +++ b/spring-boot-ops/src/main/java/com/baeldung/springbootsimple/TomcatController.java @@ -0,0 +1,18 @@ +package com.baeldung.springbootsimple; + +import org.springframework.web.bind.annotation.*; + +import java.util.*; +import java.util.stream.*; + +@RestController +public class TomcatController { + + @GetMapping(value = "/hello") + public Collection sayHello() { + return IntStream.range(0, 10) + .mapToObj(i -> "Hello number " + i) + .collect(Collectors.toList()); + } + +} diff --git a/spring-boot-ops/src/main/resources/application.properties b/spring-boot-ops/src/main/resources/application.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/spring-boot-ops/src/test/java/com/baeldung/springbootsimple/SpringBootTomcatApplicationTests.java b/spring-boot-ops/src/test/java/com/baeldung/springbootsimple/SpringBootTomcatApplicationTests.java new file mode 100644 index 0000000000..4c0d4d577a --- /dev/null +++ b/spring-boot-ops/src/test/java/com/baeldung/springbootsimple/SpringBootTomcatApplicationTests.java @@ -0,0 +1,16 @@ +package com.baeldung.springbootsimple; + +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 +public class SpringBootTomcatApplicationTests { + + @Test + public void contextLoads() { + } + +} diff --git a/spring-boot/README.MD b/spring-boot/README.MD index 7e68e30a47..72da255b95 100644 --- a/spring-boot/README.MD +++ b/spring-boot/README.MD @@ -20,7 +20,6 @@ The "REST With Spring" Classes: http://bit.ly/restwithspring - [Dynamic DTO Validation Config Retrieved from DB](http://www.baeldung.com/spring-dynamic-dto-validation) - [Custom Information in Spring Boot Info Endpoint](http://www.baeldung.com/spring-boot-info-actuator-custom) - [Using @JsonComponent in Spring Boot](http://www.baeldung.com/spring-boot-jsoncomponent) -- [Create a Custom Auto-Configuration with Spring Boot](http://www.baeldung.com/spring-boot-custom-auto-configuration) - [Testing in Spring Boot](http://www.baeldung.com/spring-boot-testing) - [Guide to @ConfigurationProperties in Spring Boot](http://www.baeldung.com/configuration-properties-in-spring-boot) - [How to Get All Spring-Managed Beans?](http://www.baeldung.com/spring-show-all-beans) diff --git a/spring-boot/src/main/java/com/baeldung/bootcustomfilters/controller/UserController.java b/spring-boot/src/main/java/com/baeldung/bootcustomfilters/controller/UserController.java index 9dfab1192d..97165f2cf3 100644 --- a/spring-boot/src/main/java/com/baeldung/bootcustomfilters/controller/UserController.java +++ b/spring-boot/src/main/java/com/baeldung/bootcustomfilters/controller/UserController.java @@ -6,6 +6,7 @@ import java.util.UUID; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -22,7 +23,7 @@ public class UserController { private static final Logger LOG = LoggerFactory.getLogger(UserController.class); - @RequestMapping("") + @GetMapping("") public List getAllUsers() { LOG.info("Fetching all the users"); return Arrays.asList( diff --git a/spring-boot/src/main/java/com/baeldung/displayallbeans/controller/FooController.java b/spring-boot/src/main/java/com/baeldung/displayallbeans/controller/FooController.java index 26f0a60bff..c4a83cc2d9 100644 --- a/spring-boot/src/main/java/com/baeldung/displayallbeans/controller/FooController.java +++ b/spring-boot/src/main/java/com/baeldung/displayallbeans/controller/FooController.java @@ -4,7 +4,7 @@ import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.GetMapping; import com.baeldung.displayallbeans.service.FooService; @@ -13,7 +13,7 @@ public class FooController { @Autowired private FooService fooService; - @RequestMapping(value = "/displayallbeans") + @GetMapping(value = "/displayallbeans") public String getHeaderAndBody(Map model) { model.put("header", fooService.getHeader()); model.put("message", fooService.getBody()); diff --git a/spring-boot/src/main/java/com/baeldung/errorhandling/controllers/MyErrorController.java b/spring-boot/src/main/java/com/baeldung/errorhandling/controllers/MyErrorController.java index 8bdfea74cd..e002ac045d 100644 --- a/spring-boot/src/main/java/com/baeldung/errorhandling/controllers/MyErrorController.java +++ b/spring-boot/src/main/java/com/baeldung/errorhandling/controllers/MyErrorController.java @@ -3,7 +3,7 @@ package com.baeldung.errorhandling.controllers; import org.springframework.boot.web.servlet.error.ErrorController; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.GetMapping; import javax.servlet.RequestDispatcher; import javax.servlet.http.HttpServletRequest; @@ -13,7 +13,7 @@ public class MyErrorController implements ErrorController { public MyErrorController() {} - @RequestMapping(value = "/error") + @GetMapping(value = "/error") public String handleError(HttpServletRequest request) { Object status = request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE); diff --git a/spring-boot/src/main/java/com/baeldung/git/CommitInfoController.java b/spring-boot/src/main/java/com/baeldung/git/CommitInfoController.java index 6d44e02ec2..9dca749319 100644 --- a/spring-boot/src/main/java/com/baeldung/git/CommitInfoController.java +++ b/spring-boot/src/main/java/com/baeldung/git/CommitInfoController.java @@ -1,7 +1,7 @@ package com.baeldung.git; import org.springframework.beans.factory.annotation.Value; -import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import java.util.HashMap; @@ -19,7 +19,7 @@ public class CommitInfoController { @Value("${git.commit.id}") private String commitId; - @RequestMapping("/commitId") + @GetMapping("/commitId") public Map getCommitId() { Map result = new HashMap<>(); result.put("Commit message", commitMessage); diff --git a/spring-boot/src/main/java/com/baeldung/intro/controller/HomeController.java b/spring-boot/src/main/java/com/baeldung/intro/controller/HomeController.java index 2a82e58829..32f22f2cae 100644 --- a/spring-boot/src/main/java/com/baeldung/intro/controller/HomeController.java +++ b/spring-boot/src/main/java/com/baeldung/intro/controller/HomeController.java @@ -1,17 +1,17 @@ package com.baeldung.intro.controller; -import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class HomeController { - @RequestMapping("/") + @GetMapping("/") public String root() { return "Index Page"; } - @RequestMapping("/local") + @GetMapping("/local") public String local() { return "/local"; } diff --git a/spring-boot/src/main/java/com/baeldung/rss/ArticleRssController.java b/spring-boot/src/main/java/com/baeldung/rss/ArticleRssController.java index a3fbc4a37e..daaeb8159b 100644 --- a/spring-boot/src/main/java/com/baeldung/rss/ArticleRssController.java +++ b/spring-boot/src/main/java/com/baeldung/rss/ArticleRssController.java @@ -1,14 +1,14 @@ package com.baeldung.rss; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; @Controller @RequestMapping(value = "/rss", produces = "application/*") public class ArticleRssController { - @RequestMapping(method = RequestMethod.GET) + @GetMapping public String articleFeed() { return "articleFeedView"; } diff --git a/spring-boot/src/main/java/com/baeldung/servletinitializer/WarInitializerApplication.java b/spring-boot/src/main/java/com/baeldung/servletinitializer/WarInitializerApplication.java index 1faee5c488..5b9ce1271e 100644 --- a/spring-boot/src/main/java/com/baeldung/servletinitializer/WarInitializerApplication.java +++ b/spring-boot/src/main/java/com/baeldung/servletinitializer/WarInitializerApplication.java @@ -7,7 +7,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; import org.springframework.ui.Model; -import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @SpringBootApplication @@ -27,7 +27,7 @@ public class WarInitializerApplication extends SpringBootServletInitializer { @RestController public static class WarInitializerController { - @RequestMapping("/") + @GetMapping("/") public String handler(Model model) { model.addAttribute("date", LocalDateTime.now()); return "WarInitializerApplication is up and running!"; diff --git a/spring-boot/src/main/java/com/baeldung/webjar/TestController.java b/spring-boot/src/main/java/com/baeldung/webjar/TestController.java index e8e7fd5ce9..e5404c7c7c 100644 --- a/spring-boot/src/main/java/com/baeldung/webjar/TestController.java +++ b/spring-boot/src/main/java/com/baeldung/webjar/TestController.java @@ -2,12 +2,12 @@ package com.baeldung.webjar; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; -import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.GetMapping; @Controller public class TestController { - @RequestMapping(value = "/") + @GetMapping(value = "/") public String welcome(Model model) { return "index"; } diff --git a/spring-boot/src/main/java/org/baeldung/boot/controller/GenericEntityController.java b/spring-boot/src/main/java/org/baeldung/boot/controller/GenericEntityController.java index 817bae8d01..17457f4c20 100644 --- a/spring-boot/src/main/java/org/baeldung/boot/controller/GenericEntityController.java +++ b/spring-boot/src/main/java/org/baeldung/boot/controller/GenericEntityController.java @@ -7,8 +7,7 @@ import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RestController; import java.time.LocalDateTime; @@ -26,18 +25,18 @@ public class GenericEntityController { entityList.add(new GenericEntity(4l, "entity_4")); } - @RequestMapping("/entity/all") + @GetMapping("/entity/all") public List findAll() { return entityList; } - @RequestMapping(value = "/entity", method = RequestMethod.POST) + @PostMapping("/entity") public GenericEntity addEntity(GenericEntity entity) { entityList.add(entity); return entity; } - @RequestMapping("/entity/findby/{id}") + @GetMapping("/entity/findby/{id}") public GenericEntity findById(@PathVariable Long id) { return entityList.stream().filter(entity -> entity.getId().equals(id)).findFirst().get(); } diff --git a/spring-boot/src/main/java/org/baeldung/boot/monitor/jmx/MonitoringConfig.java b/spring-boot/src/main/java/org/baeldung/boot/monitor/jmx/MonitoringConfig.java deleted file mode 100644 index 28c6ac5953..0000000000 --- a/spring-boot/src/main/java/org/baeldung/boot/monitor/jmx/MonitoringConfig.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.baeldung.boot.monitor.jmx; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import com.codahale.metrics.JmxReporter; -import com.codahale.metrics.MetricRegistry; - -@Configuration -public class MonitoringConfig { - @Autowired - private MetricRegistry registry; - - @Bean - public JmxReporter jmxReporter() { - JmxReporter reporter = JmxReporter.forRegistry(registry).build(); - reporter.start(); - return reporter; - } -} diff --git a/spring-boot/src/main/java/org/baeldung/common/error/MyCustomErrorController.java b/spring-boot/src/main/java/org/baeldung/common/error/MyCustomErrorController.java index a826a604d3..e4e20de671 100644 --- a/spring-boot/src/main/java/org/baeldung/common/error/MyCustomErrorController.java +++ b/spring-boot/src/main/java/org/baeldung/common/error/MyCustomErrorController.java @@ -1,7 +1,7 @@ package org.baeldung.common.error; import org.springframework.boot.web.servlet.error.ErrorController; -import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.GetMapping; public class MyCustomErrorController implements ErrorController { @@ -11,7 +11,7 @@ public class MyCustomErrorController implements ErrorController { // TODO Auto-generated constructor stub } - @RequestMapping(value = PATH) + @GetMapping(value = PATH) public String error() { return "Error heaven"; } diff --git a/spring-boot/src/main/java/org/baeldung/common/error/controller/ErrorController.java b/spring-boot/src/main/java/org/baeldung/common/error/controller/ErrorController.java index ecabde7d9d..d503f5da6d 100644 --- a/spring-boot/src/main/java/org/baeldung/common/error/controller/ErrorController.java +++ b/spring-boot/src/main/java/org/baeldung/common/error/controller/ErrorController.java @@ -1,6 +1,6 @@ package org.baeldung.common.error.controller; -import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController @@ -9,12 +9,12 @@ public class ErrorController { public ErrorController() { } - @RequestMapping("/400") + @GetMapping("/400") String error400() { return "Error Code: 400 occured."; } - @RequestMapping("/errorHeaven") + @GetMapping("/errorHeaven") String errorHeaven() { return "You have reached the heaven of errors!!!"; } diff --git a/spring-boot/src/main/java/org/baeldung/main/SpringBootApplication.java b/spring-boot/src/main/java/org/baeldung/main/SpringBootApplication.java index 7d13173be0..30ac94221b 100644 --- a/spring-boot/src/main/java/org/baeldung/main/SpringBootApplication.java +++ b/spring-boot/src/main/java/org/baeldung/main/SpringBootApplication.java @@ -10,7 +10,7 @@ import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; -import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import java.util.concurrent.ExecutorService; @@ -23,7 +23,7 @@ public class SpringBootApplication { private static ApplicationContext applicationContext; - @RequestMapping("/") + @GetMapping("/") String home() { return "TADA!!! You are in Spring Boot Actuator test application."; } diff --git a/spring-boot/src/main/java/org/baeldung/repository/UserRepository.java b/spring-boot/src/main/java/org/baeldung/repository/UserRepository.java index a5cf6a0c24..cba504b6c6 100644 --- a/spring-boot/src/main/java/org/baeldung/repository/UserRepository.java +++ b/spring-boot/src/main/java/org/baeldung/repository/UserRepository.java @@ -10,8 +10,6 @@ import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Repository; -import org.springframework.transaction.annotation.Propagation; -import org.springframework.transaction.annotation.Transactional; import java.util.Collection; import java.util.List; diff --git a/spring-boot/src/main/resources/application.properties b/spring-boot/src/main/resources/application.properties index 203f0ee3c5..04a4fbf9de 100644 --- a/spring-boot/src/main/resources/application.properties +++ b/spring-boot/src/main/resources/application.properties @@ -1,21 +1,22 @@ server.port=9090 -server.contextPath=/springbootapp -management.port=8081 -management.address=127.0.0.1 +server.servlet.contextPath=/springbootapp +management.server.port=8081 +management.server.address=127.0.0.1 #debug=true spring.jpa.show-sql=true spring.jpa.hibernate.ddl-auto = update -endpoints.shutdown.enabled=true -endpoints.jmx.domain=Spring Sample Application -endpoints.jmx.uniqueNames=true +management.endpoints.jmx.domain=Spring Sample Application +management.endpoints.jmx.uniqueNames=true + +management.endpoint.shutdown.enabled=true ##jolokia.config.debug=true ##endpoints.jolokia.enabled=true ##endpoints.jolokia.path=jolokia spring.jmx.enabled=true -endpoints.jmx.enabled=true +management.endpoints.jmx.enabled=true ## for pretty printing of json when endpoints accessed over HTTP http.mappers.jsonPrettyPrint=true @@ -26,11 +27,7 @@ info.app.description=This is my first spring boot application G1 info.app.version=1.0.0 info.java-vendor = ${java.specification.vendor} -## Spring Security Configurations -security.user.name=admin1 -security.user.password=secret1 management.security.role=SUPERUSER -management.endpoint.shutdown.enabled=true logging.level.org.springframework=INFO @@ -38,15 +35,12 @@ logging.level.org.springframework=INFO servlet.name=dispatcherExample servlet.mapping=/dispatcherExampleURL -#banner.charset=UTF-8 -#banner.location=classpath:banner.txt -#banner.image.location=classpath:banner.gif -#banner.image.width= //TODO -#banner.image.height= //TODO -#banner.image.margin= //TODO -#banner.image.invert= //TODO +#spring.banner.charset=UTF-8 +#spring.banner.location=classpath:banner.txt +#spring.banner.image.location=classpath:banner.gif +#spring.banner.image.width= //TODO +#spring.banner.image.height= //TODO +#spring.banner.image.margin= //TODO +#spring.banner.image.invert= //TODO contactInfoType=email - -endpoints.beans.id=springbeans -endpoints.beans.sensitive=false diff --git a/spring-boot/src/test/java/com/baeldung/shutdown/ShutdownApplicationTest.java b/spring-boot/src/test/java/com/baeldung/shutdown/ShutdownApplicationTest.java index 7896b9dc09..ae70276b9f 100644 --- a/spring-boot/src/test/java/com/baeldung/shutdown/ShutdownApplicationTest.java +++ b/spring-boot/src/test/java/com/baeldung/shutdown/ShutdownApplicationTest.java @@ -1,5 +1,8 @@ package com.baeldung.shutdown; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + import org.junit.Before; import org.junit.Ignore; import org.junit.Test; @@ -12,10 +15,6 @@ import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.setup.MockMvcBuilders; import org.springframework.web.context.WebApplicationContext; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; - - @RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = Application.class) @AutoConfigureMockMvc @@ -36,8 +35,6 @@ public class ShutdownApplicationTest { @Ignore public void givenBootApp_whenShutdownEndpoint_thenExit() throws Exception { - mockMvc.perform( - post("/shutdown")) - .andExpect(status().isOk()); + mockMvc.perform(post("/shutdown")).andExpect(status().isOk()); } } diff --git a/spring-boot/src/test/java/com/baeldung/toggle/ToggleIntegrationTest.java b/spring-boot/src/test/java/com/baeldung/toggle/ToggleIntegrationTest.java index 471565b1c6..3213a10df9 100644 --- a/spring-boot/src/test/java/com/baeldung/toggle/ToggleIntegrationTest.java +++ b/spring-boot/src/test/java/com/baeldung/toggle/ToggleIntegrationTest.java @@ -1,31 +1,27 @@ package com.baeldung.toggle; +import static org.junit.Assert.assertEquals; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.setup.MockMvcBuilders; import org.springframework.web.context.WebApplicationContext; -import static org.junit.Assert.assertEquals; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; - @RunWith(SpringJUnit4ClassRunner.class) -@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT, classes = ToggleApplication.class) +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.MOCK, classes = ToggleApplication.class) @AutoConfigureMockMvc public class ToggleIntegrationTest { @Autowired - SalaryService salaryService; - - @Autowired - EmployeeRepository employeeRepository; + private EmployeeRepository employeeRepository; @Autowired private MockMvc mockMvc; diff --git a/spring-boot/src/test/java/org/baeldung/converter/controller/StringToEmployeeConverterControllerIntegrationTest.java b/spring-boot/src/test/java/org/baeldung/converter/controller/StringToEmployeeConverterControllerIntegrationTest.java index 466d81e658..2afda7565a 100644 --- a/spring-boot/src/test/java/org/baeldung/converter/controller/StringToEmployeeConverterControllerIntegrationTest.java +++ b/spring-boot/src/test/java/org/baeldung/converter/controller/StringToEmployeeConverterControllerIntegrationTest.java @@ -17,7 +17,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. import org.baeldung.boot.Application; @RunWith(SpringRunner.class) -@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = Application.class) +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.MOCK, classes = Application.class) @AutoConfigureMockMvc public class StringToEmployeeConverterControllerIntegrationTest { diff --git a/spring-boot/src/test/java/org/baeldung/demo/boottest/EmployeeRestControllerIntegrationTest.java b/spring-boot/src/test/java/org/baeldung/demo/boottest/EmployeeRestControllerIntegrationTest.java index da9df4db7d..d76dbfc803 100644 --- a/spring-boot/src/test/java/org/baeldung/demo/boottest/EmployeeRestControllerIntegrationTest.java +++ b/spring-boot/src/test/java/org/baeldung/demo/boottest/EmployeeRestControllerIntegrationTest.java @@ -1,23 +1,5 @@ package org.baeldung.demo.boottest; -import org.baeldung.demo.DemoApplication; -import org.baeldung.demo.boottest.Employee; -import org.baeldung.demo.boottest.EmployeeRepository; -import org.junit.After; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.http.MediaType; -import org.springframework.test.context.junit4.SpringRunner; -import org.springframework.test.web.servlet.MockMvc; - -import java.io.IOException; -import java.util.List; - import static org.assertj.core.api.Assertions.assertThat; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.Matchers.greaterThanOrEqualTo; @@ -29,8 +11,23 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import java.io.IOException; +import java.util.List; + +import org.baeldung.demo.DemoApplication; +import org.junit.After; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.http.MediaType; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; + @RunWith(SpringRunner.class) -@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT, classes = DemoApplication.class) +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.MOCK, classes = DemoApplication.class) @AutoConfigureMockMvc // @TestPropertySource(locations = "classpath:application-integrationtest.properties") @AutoConfigureTestDatabase @@ -58,14 +55,22 @@ public class EmployeeRestControllerIntegrationTest { @Test public void givenEmployees_whenGetEmployees_thenStatus200() throws Exception { - createTestEmployee("bob"); createTestEmployee("alex"); - mvc.perform(get("/api/employees").contentType(MediaType.APPLICATION_JSON)).andDo(print()).andExpect(status().isOk()).andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON)).andExpect(jsonPath("$", hasSize(greaterThanOrEqualTo(2)))) - .andExpect(jsonPath("$[0].name", is("bob"))).andExpect(jsonPath("$[1].name", is("alex"))); + // @formatter:off + mvc.perform(get("/api/employees").contentType(MediaType.APPLICATION_JSON)) + .andDo(print()) + .andExpect(status().isOk()) + .andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON)) + .andExpect(jsonPath("$", hasSize(greaterThanOrEqualTo(2)))) + .andExpect(jsonPath("$[0].name", is("bob"))) + .andExpect(jsonPath("$[1].name", is("alex"))); + // @formatter:on } + // + private void createTestEmployee(String name) { Employee emp = new Employee(name); repository.saveAndFlush(emp); diff --git a/spring-boot/src/test/resources/data.sql b/spring-boot/src/test/resources/data.sql deleted file mode 100644 index f36e034ce1..0000000000 --- a/spring-boot/src/test/resources/data.sql +++ /dev/null @@ -1,5 +0,0 @@ -INSERT INTO country (name) VALUES ('India'); -INSERT INTO country (name) VALUES ('Brazil'); -INSERT INTO country (name) VALUES ('USA'); -INSERT INTO country (name) VALUES ('Italy'); -COMMIT; diff --git a/spring-boot/src/test/resources/schema.sql b/spring-boot/src/test/resources/schema.sql deleted file mode 100644 index 15d7788cd7..0000000000 --- a/spring-boot/src/test/resources/schema.sql +++ /dev/null @@ -1,5 +0,0 @@ -CREATE TABLE country ( - id INTEGER NOT NULL AUTO_INCREMENT, - name VARCHAR(128) NOT NULL, - PRIMARY KEY (id) -); diff --git a/spring-custom-aop/spring-custom-aop/src/main/java/com/baeldung/annotation/servletcomponentscan/components/AttrListener.java b/spring-custom-aop/spring-custom-aop/src/main/java/com/baeldung/annotation/servletcomponentscan/components/AttrListener.java index bad39c52c4..b1bdc7d781 100644 --- a/spring-custom-aop/spring-custom-aop/src/main/java/com/baeldung/annotation/servletcomponentscan/components/AttrListener.java +++ b/spring-custom-aop/spring-custom-aop/src/main/java/com/baeldung/annotation/servletcomponentscan/components/AttrListener.java @@ -9,9 +9,7 @@ public class AttrListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent servletContextEvent) { - servletContextEvent - .getServletContext() - .setAttribute("servlet-context-attr", "test"); + servletContextEvent.getServletContext().setAttribute("servlet-context-attr", "test"); System.out.println("context init"); } diff --git a/spring-custom-aop/spring-custom-aop/src/main/java/com/baeldung/annotation/servletcomponentscan/components/EchoServlet.java b/spring-custom-aop/spring-custom-aop/src/main/java/com/baeldung/annotation/servletcomponentscan/components/EchoServlet.java index 3419cd0eaf..d8192c2cb1 100644 --- a/spring-custom-aop/spring-custom-aop/src/main/java/com/baeldung/annotation/servletcomponentscan/components/EchoServlet.java +++ b/spring-custom-aop/spring-custom-aop/src/main/java/com/baeldung/annotation/servletcomponentscan/components/EchoServlet.java @@ -16,9 +16,7 @@ public class EchoServlet extends HttpServlet { @Override public void doPost(HttpServletRequest request, HttpServletResponse response) { try { - Path path = File - .createTempFile("echo", "tmp") - .toPath(); + Path path = File.createTempFile("echo", "tmp").toPath(); Files.copy(request.getInputStream(), path, StandardCopyOption.REPLACE_EXISTING); Files.copy(path, response.getOutputStream()); Files.delete(path); diff --git a/spring-custom-aop/spring-custom-aop/src/main/java/com/baeldung/annotation/servletcomponentscan/components/HelloFilter.java b/spring-custom-aop/spring-custom-aop/src/main/java/com/baeldung/annotation/servletcomponentscan/components/HelloFilter.java index dc2368c5b2..146e5ae386 100644 --- a/spring-custom-aop/spring-custom-aop/src/main/java/com/baeldung/annotation/servletcomponentscan/components/HelloFilter.java +++ b/spring-custom-aop/spring-custom-aop/src/main/java/com/baeldung/annotation/servletcomponentscan/components/HelloFilter.java @@ -18,9 +18,7 @@ public class HelloFilter implements Filter { @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { - servletResponse - .getOutputStream() - .print(filterConfig.getInitParameter("msg")); + servletResponse.getOutputStream().print(filterConfig.getInitParameter("msg")); filterChain.doFilter(servletRequest, servletResponse); } diff --git a/spring-custom-aop/spring-custom-aop/src/main/java/com/baeldung/annotation/servletcomponentscan/components/HelloServlet.java b/spring-custom-aop/spring-custom-aop/src/main/java/com/baeldung/annotation/servletcomponentscan/components/HelloServlet.java index aeae7aecc9..5269c1bf29 100644 --- a/spring-custom-aop/spring-custom-aop/src/main/java/com/baeldung/annotation/servletcomponentscan/components/HelloServlet.java +++ b/spring-custom-aop/spring-custom-aop/src/main/java/com/baeldung/annotation/servletcomponentscan/components/HelloServlet.java @@ -8,22 +8,20 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; -@WebServlet(urlPatterns = "/hello", initParams = { @WebInitParam(name = "msg", value = "hello")}) +@WebServlet(urlPatterns = "/hello", initParams = { @WebInitParam(name = "msg", value = "hello") }) public class HelloServlet extends HttpServlet { private ServletConfig servletConfig; @Override - public void init(ServletConfig servletConfig){ + public void init(ServletConfig servletConfig) { this.servletConfig = servletConfig; } @Override public void doGet(HttpServletRequest request, HttpServletResponse response) { try { - response - .getOutputStream() - .write(servletConfig.getInitParameter("msg").getBytes()); + response.getOutputStream().write(servletConfig.getInitParameter("msg").getBytes()); } catch (IOException e) { e.printStackTrace(); } diff --git a/spring-custom-aop/spring-custom-aop/src/main/java/com/baeldung/intro/App.java b/spring-custom-aop/spring-custom-aop/src/main/java/com/baeldung/intro/App.java index 3db5d3256e..77cdf4ddb9 100644 --- a/spring-custom-aop/spring-custom-aop/src/main/java/com/baeldung/intro/App.java +++ b/spring-custom-aop/spring-custom-aop/src/main/java/com/baeldung/intro/App.java @@ -4,10 +4,8 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication -public class App -{ - public static void main( String[] args ) - { +public class App { + public static void main(String[] args) { SpringApplication.run(App.class, args); } } diff --git a/spring-custom-aop/spring-custom-aop/src/main/java/com/baeldung/intro/controller/HomeController.java b/spring-custom-aop/spring-custom-aop/src/main/java/com/baeldung/intro/controller/HomeController.java index 2a7111135c..5c0cb2d2de 100644 --- a/spring-custom-aop/spring-custom-aop/src/main/java/com/baeldung/intro/controller/HomeController.java +++ b/spring-custom-aop/spring-custom-aop/src/main/java/com/baeldung/intro/controller/HomeController.java @@ -7,12 +7,12 @@ import org.springframework.web.bind.annotation.RestController; public class HomeController { @RequestMapping("/") - public String root(){ + public String root() { return "Index Page"; } - + @RequestMapping("/local") - public String local(){ + public String local() { return "/local"; } } diff --git a/spring-custom-aop/spring-custom-aop/src/main/java/com/baeldung/servlets/configuration/WebMvcConfigure.java b/spring-custom-aop/spring-custom-aop/src/main/java/com/baeldung/servlets/configuration/WebMvcConfigure.java index 3d6a10c2ac..8dea814bc7 100644 --- a/spring-custom-aop/spring-custom-aop/src/main/java/com/baeldung/servlets/configuration/WebMvcConfigure.java +++ b/spring-custom-aop/spring-custom-aop/src/main/java/com/baeldung/servlets/configuration/WebMvcConfigure.java @@ -26,7 +26,6 @@ public class WebMvcConfigure extends WebMvcConfigurerAdapter { configurer.enable(); } - @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/resources/**").addResourceLocations("/resources/").setCachePeriod(3600).resourceChain(true).addResolver(new PathResourceResolver()); diff --git a/spring-custom-aop/spring-custom-aop/src/main/java/com/baeldung/servlets/props/PropertySourcesLoader.java b/spring-custom-aop/spring-custom-aop/src/main/java/com/baeldung/servlets/props/PropertySourcesLoader.java index 56a6751326..21e8949653 100644 --- a/spring-custom-aop/spring-custom-aop/src/main/java/com/baeldung/servlets/props/PropertySourcesLoader.java +++ b/spring-custom-aop/spring-custom-aop/src/main/java/com/baeldung/servlets/props/PropertySourcesLoader.java @@ -10,7 +10,8 @@ import org.springframework.core.env.ConfigurableEnvironment; @Configuration @ComponentScan(basePackages = { "com.baeldung.*" }) -@PropertySource("classpath:custom.properties") public class PropertySourcesLoader { +@PropertySource("classpath:custom.properties") +public class PropertySourcesLoader { private static final Logger log = LoggerFactory.getLogger(PropertySourcesLoader.class); diff --git a/spring-custom-aop/spring-custom-aop/src/main/java/com/baeldung/servlets/servlets/javaee/AnnotationServlet.java b/spring-custom-aop/spring-custom-aop/src/main/java/com/baeldung/servlets/servlets/javaee/AnnotationServlet.java index b50a7d5454..992976ca0e 100644 --- a/spring-custom-aop/spring-custom-aop/src/main/java/com/baeldung/servlets/servlets/javaee/AnnotationServlet.java +++ b/spring-custom-aop/spring-custom-aop/src/main/java/com/baeldung/servlets/servlets/javaee/AnnotationServlet.java @@ -7,9 +7,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; -@WebServlet(name = "AnnotationServlet", - description = "Example Servlet Using Annotations", - urlPatterns = { "/annotationservlet" }) +@WebServlet(name = "AnnotationServlet", description = "Example Servlet Using Annotations", urlPatterns = { "/annotationservlet" }) public class AnnotationServlet extends HttpServlet { private static final long serialVersionUID = 1L; diff --git a/spring-custom-aop/spring-custom-aop/src/main/java/com/baeldung/utils/Application.java b/spring-custom-aop/spring-custom-aop/src/main/java/com/baeldung/utils/Application.java index a3d9f9130c..46cf3fb4aa 100644 --- a/spring-custom-aop/spring-custom-aop/src/main/java/com/baeldung/utils/Application.java +++ b/spring-custom-aop/spring-custom-aop/src/main/java/com/baeldung/utils/Application.java @@ -7,12 +7,12 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.ComponentScan; @SpringBootApplication -@ComponentScan(basePackages="com.baeldung.utils") +@ComponentScan(basePackages = "com.baeldung.utils") public class Application { - @RolesAllowed("*") - public static void main(String[] args) { - SpringApplication.run(Application.class, args); - } + @RolesAllowed("*") + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } } diff --git a/spring-custom-aop/spring-custom-aop/src/main/java/com/baeldung/utils/controller/UtilsController.java b/spring-custom-aop/spring-custom-aop/src/main/java/com/baeldung/utils/controller/UtilsController.java index 7b4827cdf2..8c7f2f932a 100644 --- a/spring-custom-aop/spring-custom-aop/src/main/java/com/baeldung/utils/controller/UtilsController.java +++ b/spring-custom-aop/spring-custom-aop/src/main/java/com/baeldung/utils/controller/UtilsController.java @@ -4,7 +4,6 @@ import javax.servlet.http.HttpServletRequest; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; -import org.springframework.web.bind.ServletRequestBindingException; import org.springframework.web.bind.ServletRequestUtils; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; @@ -13,37 +12,37 @@ import org.springframework.web.util.WebUtils; @Controller public class UtilsController { - @GetMapping("/utils") - public String webUtils(Model model) { - return "utils"; - } - - @PostMapping("/setParam") - public String post(HttpServletRequest request, Model model) { - String param = ServletRequestUtils.getStringParameter(request, "param", "DEFAULT"); - -// Long param = ServletRequestUtils.getLongParameter(request, "param",1L); -// boolean param = ServletRequestUtils.getBooleanParameter(request, "param", true); -// double param = ServletRequestUtils.getDoubleParameter(request, "param", 1000); -// float param = ServletRequestUtils.getFloatParameter(request, "param", (float) 1.00); -// int param = ServletRequestUtils.getIntParameter(request, "param", 100); - -// try { -// ServletRequestUtils.getRequiredStringParameter(request, "param"); -// } catch (ServletRequestBindingException e) { -// e.printStackTrace(); -// } - - WebUtils.setSessionAttribute(request, "parameter", param); - model.addAttribute("parameter", "You set: "+(String) WebUtils.getSessionAttribute(request, "parameter")); - return "utils"; - } - - @GetMapping("/other") - public String other(HttpServletRequest request, Model model) { - String param = (String) WebUtils.getSessionAttribute(request, "parameter"); - model.addAttribute("parameter", param); - return "other"; - } - + @GetMapping("/utils") + public String webUtils(Model model) { + return "utils"; + } + + @PostMapping("/setParam") + public String post(HttpServletRequest request, Model model) { + String param = ServletRequestUtils.getStringParameter(request, "param", "DEFAULT"); + + // Long param = ServletRequestUtils.getLongParameter(request, "param",1L); + // boolean param = ServletRequestUtils.getBooleanParameter(request, "param", true); + // double param = ServletRequestUtils.getDoubleParameter(request, "param", 1000); + // float param = ServletRequestUtils.getFloatParameter(request, "param", (float) 1.00); + // int param = ServletRequestUtils.getIntParameter(request, "param", 100); + + // try { + // ServletRequestUtils.getRequiredStringParameter(request, "param"); + // } catch (ServletRequestBindingException e) { + // e.printStackTrace(); + // } + + WebUtils.setSessionAttribute(request, "parameter", param); + model.addAttribute("parameter", "You set: " + (String) WebUtils.getSessionAttribute(request, "parameter")); + return "utils"; + } + + @GetMapping("/other") + public String other(HttpServletRequest request, Model model) { + String param = (String) WebUtils.getSessionAttribute(request, "parameter"); + model.addAttribute("parameter", param); + return "other"; + } + } diff --git a/spring-custom-aop/spring-custom-aop/src/main/java/com/baeldung/webjar/WebjarsdemoApplication.java b/spring-custom-aop/spring-custom-aop/src/main/java/com/baeldung/webjar/WebjarsdemoApplication.java index d2135754c9..2397861f1d 100644 --- a/spring-custom-aop/spring-custom-aop/src/main/java/com/baeldung/webjar/WebjarsdemoApplication.java +++ b/spring-custom-aop/spring-custom-aop/src/main/java/com/baeldung/webjar/WebjarsdemoApplication.java @@ -2,7 +2,6 @@ package com.baeldung.webjar; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.context.annotation.ComponentScan; @SpringBootApplication public class WebjarsdemoApplication { diff --git a/spring-custom-aop/spring-custom-aop/src/main/java/org/baeldung/boot/components/FooService.java b/spring-custom-aop/spring-custom-aop/src/main/java/org/baeldung/boot/components/FooService.java index 235fd43299..4ff8e9fdd4 100644 --- a/spring-custom-aop/spring-custom-aop/src/main/java/org/baeldung/boot/components/FooService.java +++ b/spring-custom-aop/spring-custom-aop/src/main/java/org/baeldung/boot/components/FooService.java @@ -10,11 +10,11 @@ public class FooService { @Autowired private FooRepository fooRepository; - + public Foo getFooWithId(Integer id) throws Exception { return fooRepository.findOne(id); } - + public Foo getFooWithName(String name) { return fooRepository.findByName(name); } diff --git a/spring-custom-aop/spring-custom-aop/src/main/java/org/baeldung/boot/exceptions/CommonException.java b/spring-custom-aop/spring-custom-aop/src/main/java/org/baeldung/boot/exceptions/CommonException.java index 1f008440e6..e03b859eab 100644 --- a/spring-custom-aop/spring-custom-aop/src/main/java/org/baeldung/boot/exceptions/CommonException.java +++ b/spring-custom-aop/spring-custom-aop/src/main/java/org/baeldung/boot/exceptions/CommonException.java @@ -1,13 +1,13 @@ package org.baeldung.boot.exceptions; -public class CommonException extends RuntimeException{ +public class CommonException extends RuntimeException { /** * */ private static final long serialVersionUID = 3080004140659213332L; - public CommonException(String message){ + public CommonException(String message) { super(message); } } diff --git a/spring-custom-aop/spring-custom-aop/src/main/java/org/baeldung/boot/exceptions/FooNotFoundException.java b/spring-custom-aop/spring-custom-aop/src/main/java/org/baeldung/boot/exceptions/FooNotFoundException.java index 68ef3fa389..0b04bd2759 100644 --- a/spring-custom-aop/spring-custom-aop/src/main/java/org/baeldung/boot/exceptions/FooNotFoundException.java +++ b/spring-custom-aop/spring-custom-aop/src/main/java/org/baeldung/boot/exceptions/FooNotFoundException.java @@ -1,13 +1,13 @@ package org.baeldung.boot.exceptions; -public class FooNotFoundException extends RuntimeException{ +public class FooNotFoundException extends RuntimeException { /** * */ private static final long serialVersionUID = 9042200028456133589L; - public FooNotFoundException(String message){ + public FooNotFoundException(String message) { super(message); } } diff --git a/spring-custom-aop/spring-custom-aop/src/main/java/org/baeldung/boot/model/Foo.java b/spring-custom-aop/spring-custom-aop/src/main/java/org/baeldung/boot/model/Foo.java index ac8a8fe429..d373e25b85 100644 --- a/spring-custom-aop/spring-custom-aop/src/main/java/org/baeldung/boot/model/Foo.java +++ b/spring-custom-aop/spring-custom-aop/src/main/java/org/baeldung/boot/model/Foo.java @@ -21,7 +21,6 @@ public class Foo implements Serializable { this.name = name; } - public Foo(Integer id, String name) { super(); this.id = id; diff --git a/spring-custom-aop/spring-custom-aop/src/main/java/org/baeldung/boot/service/FooController.java b/spring-custom-aop/spring-custom-aop/src/main/java/org/baeldung/boot/service/FooController.java index 834fa342e2..d400c3bf9e 100644 --- a/spring-custom-aop/spring-custom-aop/src/main/java/org/baeldung/boot/service/FooController.java +++ b/spring-custom-aop/spring-custom-aop/src/main/java/org/baeldung/boot/service/FooController.java @@ -18,7 +18,7 @@ public class FooController { public Foo getFooWithId(@PathVariable Integer id) throws Exception { return fooService.getFooWithId(id); } - + @GetMapping("/") public Foo getFooWithName(@RequestParam String name) throws Exception { return fooService.getFooWithName(name); diff --git a/spring-custom-aop/spring-custom-aop/src/test/java/com/baeldung/annotation/servletcomponentscan/SpringBootWithServletComponentIntegrationTest.java b/spring-custom-aop/spring-custom-aop/src/test/java/com/baeldung/annotation/servletcomponentscan/SpringBootWithServletComponentIntegrationTest.java index 8d5eb56bf4..81774b6b8a 100644 --- a/spring-custom-aop/spring-custom-aop/src/test/java/com/baeldung/annotation/servletcomponentscan/SpringBootWithServletComponentIntegrationTest.java +++ b/spring-custom-aop/spring-custom-aop/src/test/java/com/baeldung/annotation/servletcomponentscan/SpringBootWithServletComponentIntegrationTest.java @@ -22,7 +22,8 @@ import static org.junit.Assert.*; @TestPropertySource(properties = { "security.basic.enabled=false" }) public class SpringBootWithServletComponentIntegrationTest { - @Autowired private ServletContext servletContext; + @Autowired + private ServletContext servletContext; @Test public void givenServletContext_whenAccessAttrs_thenFoundAttrsPutInServletListner() { @@ -37,12 +38,11 @@ public class SpringBootWithServletComponentIntegrationTest { FilterRegistration filterRegistration = servletContext.getFilterRegistration("hello filter"); assertNotNull(filterRegistration); - assertTrue(filterRegistration - .getServletNameMappings() - .contains("echo servlet")); + assertTrue(filterRegistration.getServletNameMappings().contains("echo servlet")); } - @Autowired private TestRestTemplate restTemplate; + @Autowired + private TestRestTemplate restTemplate; @Test public void givenServletFilter_whenGetHello_thenRequestFiltered() { @@ -58,8 +58,4 @@ public class SpringBootWithServletComponentIntegrationTest { assertEquals("filtering echo", responseEntity.getBody()); } - - } - - diff --git a/spring-custom-aop/spring-custom-aop/src/test/java/com/baeldung/annotation/servletcomponentscan/SpringBootWithoutServletComponentIntegrationTest.java b/spring-custom-aop/spring-custom-aop/src/test/java/com/baeldung/annotation/servletcomponentscan/SpringBootWithoutServletComponentIntegrationTest.java index 64507ad02c..e7e1d5486c 100644 --- a/spring-custom-aop/spring-custom-aop/src/test/java/com/baeldung/annotation/servletcomponentscan/SpringBootWithoutServletComponentIntegrationTest.java +++ b/spring-custom-aop/spring-custom-aop/src/test/java/com/baeldung/annotation/servletcomponentscan/SpringBootWithoutServletComponentIntegrationTest.java @@ -1,5 +1,12 @@ package com.baeldung.annotation.servletcomponentscan; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; + +import javax.servlet.FilterRegistration; +import javax.servlet.ServletContext; + import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; @@ -11,20 +18,17 @@ import org.springframework.http.ResponseEntity; import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit4.SpringRunner; -import javax.servlet.FilterRegistration; -import javax.servlet.ServletContext; - -import static org.junit.Assert.*; - @RunWith(SpringRunner.class) -@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = SpringBootPlainApp.class) +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.MOCK, classes = SpringBootPlainApp.class) @AutoConfigureMockMvc @TestPropertySource(properties = { "security.basic.enabled=false" }) public class SpringBootWithoutServletComponentIntegrationTest { - @Autowired private ServletContext servletContext; + @Autowired + private ServletContext servletContext; - @Autowired private TestRestTemplate restTemplate; + @Autowired + private TestRestTemplate restTemplate; @Test public void givenServletContext_whenAccessAttrs_thenNotFound() { @@ -46,5 +50,3 @@ public class SpringBootWithoutServletComponentIntegrationTest { } } - - diff --git a/spring-custom-aop/spring-custom-aop/src/test/java/com/baeldung/intro/AppLiveTest.java b/spring-custom-aop/spring-custom-aop/src/test/java/com/baeldung/intro/AppLiveTest.java index af46fe0423..2c0152b97f 100644 --- a/spring-custom-aop/spring-custom-aop/src/test/java/com/baeldung/intro/AppLiveTest.java +++ b/spring-custom-aop/spring-custom-aop/src/test/java/com/baeldung/intro/AppLiveTest.java @@ -26,16 +26,12 @@ public class AppLiveTest { @Test public void getIndex() throws Exception { - mvc.perform(MockMvcRequestBuilders.get("/").accept(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()) - .andExpect(content().string(equalTo("Index Page"))); + mvc.perform(MockMvcRequestBuilders.get("/").accept(MediaType.APPLICATION_JSON)).andExpect(status().isOk()).andExpect(content().string(equalTo("Index Page"))); } @Test public void getLocal() throws Exception { - mvc.perform(MockMvcRequestBuilders.get("/local").accept(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()) - .andExpect(content().string(equalTo("/local"))); + mvc.perform(MockMvcRequestBuilders.get("/local").accept(MediaType.APPLICATION_JSON)).andExpect(status().isOk()).andExpect(content().string(equalTo("/local"))); } } \ No newline at end of file diff --git a/spring-custom-aop/spring-custom-aop/src/test/java/com/baeldung/utils/UtilsControllerIntegrationTest.java b/spring-custom-aop/spring-custom-aop/src/test/java/com/baeldung/utils/UtilsControllerIntegrationTest.java index 829c0a6ac4..99e719d7e9 100644 --- a/spring-custom-aop/spring-custom-aop/src/test/java/com/baeldung/utils/UtilsControllerIntegrationTest.java +++ b/spring-custom-aop/spring-custom-aop/src/test/java/com/baeldung/utils/UtilsControllerIntegrationTest.java @@ -10,32 +10,26 @@ import org.springframework.test.web.servlet.setup.MockMvcBuilders; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; - import com.baeldung.utils.controller.UtilsController; public class UtilsControllerIntegrationTest { - @InjectMocks + @InjectMocks private UtilsController utilsController; - + private MockMvc mockMvc; - + @Before public void setup() { MockitoAnnotations.initMocks(this); - this.mockMvc = MockMvcBuilders.standaloneSetup(utilsController) - .build(); + this.mockMvc = MockMvcBuilders.standaloneSetup(utilsController).build(); } - + @Test public void givenParameter_setRequestParam_andSetSessionAttribute() throws Exception { - String param = "testparam"; - this.mockMvc.perform( - post("/setParam") - .param("param", param) - .sessionAttr("parameter", param)) - .andExpect(status().isOk()); + String param = "testparam"; + this.mockMvc.perform(post("/setParam").param("param", param).sessionAttr("parameter", param)).andExpect(status().isOk()); } - + } diff --git a/spring-custom-aop/spring-custom-aop/src/test/java/org/baeldung/SpringBootMailIntegrationTest.java b/spring-custom-aop/spring-custom-aop/src/test/java/org/baeldung/SpringBootMailIntegrationTest.java index 10e3d6d60b..14386d73c1 100644 --- a/spring-custom-aop/spring-custom-aop/src/test/java/org/baeldung/SpringBootMailIntegrationTest.java +++ b/spring-custom-aop/spring-custom-aop/src/test/java/org/baeldung/SpringBootMailIntegrationTest.java @@ -9,8 +9,6 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.web.WebAppConfiguration; -import org.springframework.web.context.WebApplicationContext; import org.subethamail.wiser.Wiser; import org.subethamail.wiser.WiserMessage; diff --git a/spring-custom-aop/spring-custom-aop/src/test/java/org/baeldung/boot/FooComponentIntegrationTest.java b/spring-custom-aop/spring-custom-aop/src/test/java/org/baeldung/boot/FooComponentIntegrationTest.java index df975df0c1..07a5495e8a 100644 --- a/spring-custom-aop/spring-custom-aop/src/test/java/org/baeldung/boot/FooComponentIntegrationTest.java +++ b/spring-custom-aop/spring-custom-aop/src/test/java/org/baeldung/boot/FooComponentIntegrationTest.java @@ -23,9 +23,7 @@ import static org.mockito.Matchers.anyInt; import static org.mockito.Mockito.doReturn; @RunWith(SpringRunner.class) -@SpringBootTest( - classes = DemoApplication.class, - webEnvironment = WebEnvironment.RANDOM_PORT) +@SpringBootTest(classes = DemoApplication.class, webEnvironment = WebEnvironment.RANDOM_PORT) public class FooComponentIntegrationTest { @Autowired diff --git a/spring-custom-aop/spring-custom-aop/src/test/java/org/baeldung/boot/FooIntegrationTest.java b/spring-custom-aop/spring-custom-aop/src/test/java/org/baeldung/boot/FooIntegrationTest.java index 932cce26d5..52728fbb5b 100644 --- a/spring-custom-aop/spring-custom-aop/src/test/java/org/baeldung/boot/FooIntegrationTest.java +++ b/spring-custom-aop/spring-custom-aop/src/test/java/org/baeldung/boot/FooIntegrationTest.java @@ -1,4 +1,5 @@ package org.baeldung.boot; + import java.util.HashMap; import java.util.Map; @@ -16,28 +17,27 @@ import org.springframework.http.ResponseEntity; import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class) -@SpringBootTest(classes=DemoApplication.class,webEnvironment = WebEnvironment.RANDOM_PORT) +@SpringBootTest(classes = DemoApplication.class, webEnvironment = WebEnvironment.RANDOM_PORT) public class FooIntegrationTest { @Autowired private TestRestTemplate testRestTemplate; - - + @Test - public void givenInquiryingFooWithId_whenIdIsValid_thenHttpStatusOK(){ - Map pathVariables = new HashMap(); + public void givenInquiryingFooWithId_whenIdIsValid_thenHttpStatusOK() { + Map pathVariables = new HashMap(); pathVariables.put("id", "1"); ResponseEntity fooResponse = testRestTemplate.getForEntity("/{id}", Foo.class, pathVariables); Assert.assertNotNull(fooResponse); - Assert.assertEquals(HttpStatus.OK,fooResponse.getStatusCode()); + Assert.assertEquals(HttpStatus.OK, fooResponse.getStatusCode()); } - + @Test - public void givenInquiryingFooWithName_whenNameIsValid_thenHttpStatusOK(){ - Map pathVariables = new HashMap(); + public void givenInquiryingFooWithName_whenNameIsValid_thenHttpStatusOK() { + Map pathVariables = new HashMap(); pathVariables.put("name", "Foo_Name"); ResponseEntity fooResponse = testRestTemplate.getForEntity("/?name={name}", Foo.class, pathVariables); Assert.assertNotNull(fooResponse); - Assert.assertEquals(HttpStatus.OK,fooResponse.getStatusCode()); + Assert.assertEquals(HttpStatus.OK, fooResponse.getStatusCode()); } } \ No newline at end of file diff --git a/spring-custom-aop/spring-custom-aop/src/test/java/org/baeldung/boot/FooJPAIntegrationTest.java b/spring-custom-aop/spring-custom-aop/src/test/java/org/baeldung/boot/FooJPAIntegrationTest.java index 87afe565ee..40f1892be8 100644 --- a/spring-custom-aop/spring-custom-aop/src/test/java/org/baeldung/boot/FooJPAIntegrationTest.java +++ b/spring-custom-aop/spring-custom-aop/src/test/java/org/baeldung/boot/FooJPAIntegrationTest.java @@ -27,8 +27,8 @@ public class FooJPAIntegrationTest { this.entityManager.persist(new Foo("Foo_Name_2")); Foo foo = this.repository.findByName("Foo_Name_2"); assertNotNull(foo); - assertEquals("Foo_Name_2",foo.getName()); - // Due to having Insert query for Foo with Id 1, so TestEntityManager generates new Id of 2 - assertEquals(2l,foo.getId().longValue()); + assertEquals("Foo_Name_2", foo.getName()); + // Due to having Insert query for Foo with Id 1, so TestEntityManager generates new Id of 2 + assertEquals(2l, foo.getId().longValue()); } } \ No newline at end of file diff --git a/spring-custom-aop/spring-custom-aop/src/test/java/org/baeldung/boot/FooJsonIntegrationTest.java b/spring-custom-aop/spring-custom-aop/src/test/java/org/baeldung/boot/FooJsonIntegrationTest.java index c74fd83e89..939e66f356 100644 --- a/spring-custom-aop/spring-custom-aop/src/test/java/org/baeldung/boot/FooJsonIntegrationTest.java +++ b/spring-custom-aop/spring-custom-aop/src/test/java/org/baeldung/boot/FooJsonIntegrationTest.java @@ -16,7 +16,6 @@ public class FooJsonIntegrationTest { @Autowired private JacksonTester json; - @Test public void testSerialize() throws Exception { @@ -30,6 +29,6 @@ public class FooJsonIntegrationTest { public void testDeserialize() throws Exception { String content = "{\"id\":4,\"name\":\"Foo_Name_4\"}"; assertThat(this.json.parseObject(content).getName()).isEqualTo("Foo_Name_4"); - assertThat(this.json.parseObject(content).getId()==4); + assertThat(this.json.parseObject(content).getId() == 4); } } \ No newline at end of file diff --git a/spring-data-keyvalue/pom.xml b/spring-data-keyvalue/pom.xml new file mode 100644 index 0000000000..e90f18948f --- /dev/null +++ b/spring-data-keyvalue/pom.xml @@ -0,0 +1,37 @@ + + 4.0.0 + com.baeldung + spring-data-keyvalue + 1.0 + + + org.springframework.boot + spring-boot-starter-parent + 2.0.1.RELEASE + + + + + 2.0.3.RELEASE + + + + + + org.springframework.boot + spring-boot-starter + + + + org.springframework.data + spring-data-keyvalue + + + + org.springframework.boot + spring-boot-starter-test + + + + \ No newline at end of file diff --git a/spring-data-keyvalue/src/main/java/com/baeldung/spring/data/keyvalue/Configurations.java b/spring-data-keyvalue/src/main/java/com/baeldung/spring/data/keyvalue/Configurations.java new file mode 100644 index 0000000000..c762c00333 --- /dev/null +++ b/spring-data-keyvalue/src/main/java/com/baeldung/spring/data/keyvalue/Configurations.java @@ -0,0 +1,28 @@ +package com.baeldung.spring.data.keyvalue; + +import java.util.concurrent.ConcurrentHashMap; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.keyvalue.core.KeyValueAdapter; +import org.springframework.data.keyvalue.core.KeyValueOperations; +import org.springframework.data.keyvalue.core.KeyValueTemplate; +import org.springframework.data.map.MapKeyValueAdapter; + +@Configuration +public class Configurations { + + //To be used only if @EnableMapRepositories is not used. + //Else @EnableMapRepositories gives us a template as well. + @Bean("keyValueTemplate") + public KeyValueOperations keyValueTemplate() { + return new KeyValueTemplate(keyValueAdapter()); + + } + + @Bean + public KeyValueAdapter keyValueAdapter() { + return new MapKeyValueAdapter(ConcurrentHashMap.class); + } + +} diff --git a/spring-data-keyvalue/src/main/java/com/baeldung/spring/data/keyvalue/SpringDataKeyValueApplication.java b/spring-data-keyvalue/src/main/java/com/baeldung/spring/data/keyvalue/SpringDataKeyValueApplication.java new file mode 100644 index 0000000000..6a5b5264df --- /dev/null +++ b/spring-data-keyvalue/src/main/java/com/baeldung/spring/data/keyvalue/SpringDataKeyValueApplication.java @@ -0,0 +1,15 @@ +package com.baeldung.spring.data.keyvalue; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.data.map.repository.config.EnableMapRepositories; + +@SpringBootApplication +@EnableMapRepositories +public class SpringDataKeyValueApplication { + + public static void main(String[] args) { + SpringApplication.run(SpringDataKeyValueApplication.class, args); + } + +} diff --git a/spring-data-keyvalue/src/main/java/com/baeldung/spring/data/keyvalue/repositories/EmployeeRepository.java b/spring-data-keyvalue/src/main/java/com/baeldung/spring/data/keyvalue/repositories/EmployeeRepository.java new file mode 100644 index 0000000000..5b7545d5b6 --- /dev/null +++ b/spring-data-keyvalue/src/main/java/com/baeldung/spring/data/keyvalue/repositories/EmployeeRepository.java @@ -0,0 +1,10 @@ +package com.baeldung.spring.data.keyvalue.repositories; + +import org.springframework.data.repository.CrudRepository; +import org.springframework.stereotype.Repository; + +import com.baeldung.spring.data.keyvalue.vo.Employee; + +@Repository("employeeRepository") +public interface EmployeeRepository extends CrudRepository { +} \ No newline at end of file diff --git a/spring-data-keyvalue/src/main/java/com/baeldung/spring/data/keyvalue/services/EmployeeService.java b/spring-data-keyvalue/src/main/java/com/baeldung/spring/data/keyvalue/services/EmployeeService.java new file mode 100644 index 0000000000..dd89609be7 --- /dev/null +++ b/spring-data-keyvalue/src/main/java/com/baeldung/spring/data/keyvalue/services/EmployeeService.java @@ -0,0 +1,19 @@ +package com.baeldung.spring.data.keyvalue.services; + +import com.baeldung.spring.data.keyvalue.vo.Employee; + +public interface EmployeeService { + + void save(Employee employee); + + Employee get(Integer id); + + Iterable fetchAll(); + + void update(Employee employee); + + void delete(Integer id); + + Iterable getSortedListOfEmployeesBySalary(); + +} diff --git a/spring-data-keyvalue/src/main/java/com/baeldung/spring/data/keyvalue/services/impl/EmployeeServicesWithKeyValueTemplate.java b/spring-data-keyvalue/src/main/java/com/baeldung/spring/data/keyvalue/services/impl/EmployeeServicesWithKeyValueTemplate.java new file mode 100644 index 0000000000..26f1756add --- /dev/null +++ b/spring-data-keyvalue/src/main/java/com/baeldung/spring/data/keyvalue/services/impl/EmployeeServicesWithKeyValueTemplate.java @@ -0,0 +1,57 @@ +package com.baeldung.spring.data.keyvalue.services.impl; + +import java.util.Optional; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.context.annotation.DependsOn; +import org.springframework.data.domain.Sort; +import org.springframework.data.keyvalue.core.KeyValueTemplate; +import org.springframework.data.keyvalue.core.query.KeyValueQuery; +import org.springframework.stereotype.Service; + +import com.baeldung.spring.data.keyvalue.services.EmployeeService; +import com.baeldung.spring.data.keyvalue.vo.Employee; + +@Service("employeeServicesWithKeyValueTemplate") +@DependsOn("keyValueTemplate") +public class EmployeeServicesWithKeyValueTemplate implements EmployeeService { + + @Autowired + @Qualifier("keyValueTemplate") + KeyValueTemplate keyValueTemplate; + + @Override + public void save(Employee employee) { + keyValueTemplate.insert(employee); + } + + @Override + public Employee get(Integer id) { + Optional employee = keyValueTemplate.findById(id, Employee.class); + return employee.isPresent() ? employee.get() : null; + } + + @Override + public Iterable fetchAll() { + return keyValueTemplate.findAll(Employee.class); + } + + @Override + public void update(Employee employee) { + keyValueTemplate.update(employee); + } + + @Override + public void delete(Integer id) { + keyValueTemplate.delete(id, Employee.class); + } + + @Override + public Iterable getSortedListOfEmployeesBySalary() { + KeyValueQuery query = new KeyValueQuery(); + query.setSort(new Sort(Sort.Direction.DESC, "salary")); + return keyValueTemplate.find(query, Employee.class); + } + +} diff --git a/spring-data-keyvalue/src/main/java/com/baeldung/spring/data/keyvalue/services/impl/EmployeeServicesWithRepository.java b/spring-data-keyvalue/src/main/java/com/baeldung/spring/data/keyvalue/services/impl/EmployeeServicesWithRepository.java new file mode 100644 index 0000000000..73f3493a6b --- /dev/null +++ b/spring-data-keyvalue/src/main/java/com/baeldung/spring/data/keyvalue/services/impl/EmployeeServicesWithRepository.java @@ -0,0 +1,48 @@ +package com.baeldung.spring.data.keyvalue.services.impl; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.baeldung.spring.data.keyvalue.repositories.EmployeeRepository; +import com.baeldung.spring.data.keyvalue.services.EmployeeService; +import com.baeldung.spring.data.keyvalue.vo.Employee; + +@Service("employeeServicesWithRepository") +public class EmployeeServicesWithRepository implements EmployeeService { + + @Autowired + EmployeeRepository employeeRepository; + + + @Override + public void save(Employee employee) { + employeeRepository.save(employee); + } + + @Override + public Iterable fetchAll() { + return employeeRepository.findAll(); + + } + + @Override + public Employee get(Integer id) { + return employeeRepository.findById(id).get(); + } + + @Override + public void update(Employee employee) { + employeeRepository.save(employee); + + } + + @Override + public void delete(Integer id) { + employeeRepository.deleteById(id); + } + + public Iterable getSortedListOfEmployeesBySalary() { + throw new RuntimeException("Method not supported by CRUDRepository"); + } + +} diff --git a/spring-data-keyvalue/src/main/java/com/baeldung/spring/data/keyvalue/vo/Employee.java b/spring-data-keyvalue/src/main/java/com/baeldung/spring/data/keyvalue/vo/Employee.java new file mode 100644 index 0000000000..208e6e1735 --- /dev/null +++ b/spring-data-keyvalue/src/main/java/com/baeldung/spring/data/keyvalue/vo/Employee.java @@ -0,0 +1,68 @@ +package com.baeldung.spring.data.keyvalue.vo; + +import java.io.Serializable; + +import org.springframework.data.annotation.Id; +import org.springframework.data.keyvalue.annotation.KeySpace; + +@KeySpace("employees") +public class Employee implements Serializable { + + @Id + private Integer id; + + private String name; + + private String department; + + private String salary; + + public Employee(Integer id, String name, String department, String salary) { + this.id = id; + this.name = name; + this.department = department; + this.salary = salary; + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getDepartment() { + return department; + } + + public void setDepartment(String department) { + this.department = department; + } + + public String getSalary() { + return salary; + } + + public void setSalary(String salary) { + this.salary = salary; + } + + @Override + public String toString() { + return "Employee{" + + "id=" + id + + ", name='" + name + '\'' + + ", department='" + department + '\'' + + ", salary='" + salary + '\'' + + '}'; + } +} diff --git a/spring-data-keyvalue/src/test/java/com/baeldung/spring/data/keyvalue/services/test/EmployeeServicesWithKeyValueTemplateTest.java b/spring-data-keyvalue/src/test/java/com/baeldung/spring/data/keyvalue/services/test/EmployeeServicesWithKeyValueTemplateTest.java new file mode 100644 index 0000000000..78e985fe4b --- /dev/null +++ b/spring-data-keyvalue/src/test/java/com/baeldung/spring/data/keyvalue/services/test/EmployeeServicesWithKeyValueTemplateTest.java @@ -0,0 +1,88 @@ +package com.baeldung.spring.data.keyvalue.services.test; + +import static org.junit.Assert.assertEquals; + +import java.util.List; + +import org.junit.BeforeClass; +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.beans.factory.annotation.Qualifier; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.data.keyvalue.core.KeyValueTemplate; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import com.baeldung.spring.data.keyvalue.SpringDataKeyValueApplication; +import com.baeldung.spring.data.keyvalue.services.EmployeeService; +import com.baeldung.spring.data.keyvalue.vo.Employee; + +@RunWith(SpringJUnit4ClassRunner.class) +@SpringBootTest(classes = SpringDataKeyValueApplication.class) +@FixMethodOrder(MethodSorters.NAME_ASCENDING) +public class EmployeeServicesWithKeyValueTemplateTest { + + @Autowired + @Qualifier("employeeServicesWithKeyValueTemplate") + EmployeeService employeeService; + + @Autowired + @Qualifier("keyValueTemplate") + KeyValueTemplate keyValueTemplate; + + static Employee employee1; + + static Employee employee2; + + @BeforeClass + public static void setUp() { + employee1 = new Employee(1, "Karan", "IT", "5000"); + employee2 = new Employee(2, "Jack", "HR", "2000"); + } + + @Test + public void test1_whenEmployeeSaved_thenEmployeeIsAddedToMap() { + employeeService.save(employee1); + assertEquals(keyValueTemplate.findById(1, Employee.class).get(), employee1); + } + + @Test + public void test2_whenEmployeeGet_thenEmployeeIsReturnedFromMap() { + Employee employeeFetched = employeeService.get(1); + assertEquals(employeeFetched, employee1); + } + + @Test + public void test3_whenEmployeesFetched_thenEmployeesAreReturnedFromMap() { + List employees = (List)employeeService.fetchAll(); + assertEquals(employees.size(), 1); + assertEquals(employees.get(0), employee1); + } + + @Test + public void test4_whenEmployeeUpdated_thenEmployeeIsUpdatedToMap() { + employee1.setName("Pawan"); + employeeService.update(employee1); + assertEquals(keyValueTemplate.findById(1, Employee.class).get().getName(),"Pawan"); + } + + @Test + public void test5_whenSortedEmployeesFetched_thenEmployeesAreReturnedFromMapInOrder() { + employeeService.save(employee2); + List employees = (List)employeeService.getSortedListOfEmployeesBySalary(); + assertEquals(employees.size(), 2); + assertEquals(employees.get(0), employee1); + assertEquals(employees.get(1), employee2); + } + + @Test + public void test6_whenEmployeeDeleted_thenEmployeeIsRemovedMap() { + employeeService.delete(1); + assertEquals(keyValueTemplate.findById(1, Employee.class).isPresent(), false); + } + + + +} diff --git a/spring-data-keyvalue/src/test/java/com/baeldung/spring/data/keyvalue/services/test/EmployeeServicesWithRepositoryTest.java b/spring-data-keyvalue/src/test/java/com/baeldung/spring/data/keyvalue/services/test/EmployeeServicesWithRepositoryTest.java new file mode 100644 index 0000000000..5b32728893 --- /dev/null +++ b/spring-data-keyvalue/src/test/java/com/baeldung/spring/data/keyvalue/services/test/EmployeeServicesWithRepositoryTest.java @@ -0,0 +1,73 @@ +package com.baeldung.spring.data.keyvalue.services.test; + +import static org.junit.Assert.assertEquals; + +import java.util.List; + +import org.junit.BeforeClass; +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.beans.factory.annotation.Qualifier; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import com.baeldung.spring.data.keyvalue.SpringDataKeyValueApplication; +import com.baeldung.spring.data.keyvalue.repositories.EmployeeRepository; +import com.baeldung.spring.data.keyvalue.services.EmployeeService; +import com.baeldung.spring.data.keyvalue.vo.Employee; + +@RunWith(SpringJUnit4ClassRunner.class) +@SpringBootTest(classes = SpringDataKeyValueApplication.class) +@FixMethodOrder(MethodSorters.NAME_ASCENDING) +public class EmployeeServicesWithRepositoryTest { + + @Autowired + @Qualifier("employeeServicesWithRepository") + EmployeeService employeeService; + + @Autowired + EmployeeRepository employeeRepository; + + static Employee employee1; + + @BeforeClass + public static void setUp() { + employee1 = new Employee(1, "Karan", "IT", "5000"); + } + + @Test + public void test1_whenEmployeeSaved_thenEmployeeIsAddedToMap() { + employeeService.save(employee1); + assertEquals(employeeRepository.findById(1).get(), employee1); + } + + @Test + public void test2_whenEmployeeGet_thenEmployeeIsReturnedFromMap() { + Employee employeeFetched = employeeService.get(1); + assertEquals(employeeFetched, employee1); + } + + @Test + public void test3_whenEmployeesFetched_thenEmployeesAreReturnedFromMap() { + List employees = (List)employeeService.fetchAll(); + assertEquals(employees.size(), 1); + assertEquals(employees.get(0), employee1); + } + + @Test + public void test4_whenEmployeeUpdated_thenEmployeeIsUpdatedToMap() { + employee1.setName("Pawan"); + employeeService.update(employee1); + assertEquals(employeeRepository.findById(1).get().getName(),"Pawan"); + } + + @Test + public void test5_whenEmployeeDeleted_thenEmployeeIsRemovedMap() { + employeeService.delete(1); + assertEquals(employeeRepository.findById(1).isPresent(), false); + } + +} diff --git a/spring-mvc-java/src/main/java/com/baeldung/annotations/Bike.java b/spring-mvc-java/src/main/java/com/baeldung/annotations/Bike.java new file mode 100644 index 0000000000..2a893e7903 --- /dev/null +++ b/spring-mvc-java/src/main/java/com/baeldung/annotations/Bike.java @@ -0,0 +1,20 @@ +package com.baeldung.annotations; + +import org.springframework.beans.factory.annotation.Required; +import org.springframework.context.annotation.DependsOn; + +@DependsOn +public class Bike implements Vehicle { + + private String color; + + @Required + public void setColor(String color) { + this.color = color; + } + + public String getColor() { + return color; + } + +} diff --git a/spring-mvc-java/src/main/java/com/baeldung/annotations/Biker.java b/spring-mvc-java/src/main/java/com/baeldung/annotations/Biker.java new file mode 100644 index 0000000000..dcbe534a90 --- /dev/null +++ b/spring-mvc-java/src/main/java/com/baeldung/annotations/Biker.java @@ -0,0 +1,24 @@ +package com.baeldung.annotations; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Component; + +@Component +public class Biker { + + @Autowired + @Qualifier("bike") + private Vehicle vehicle; + + @Autowired + public Biker(@Qualifier("bike") Vehicle vehicle) { + this.vehicle = vehicle; + } + + @Autowired + public void setVehicle(@Qualifier("bike") Vehicle vehicle) { + this.vehicle = vehicle; + } + +} diff --git a/spring-mvc-java/src/main/java/com/baeldung/annotations/Car.java b/spring-mvc-java/src/main/java/com/baeldung/annotations/Car.java new file mode 100644 index 0000000000..cb252b60c9 --- /dev/null +++ b/spring-mvc-java/src/main/java/com/baeldung/annotations/Car.java @@ -0,0 +1,30 @@ +package com.baeldung.annotations; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.DependsOn; +import org.springframework.context.annotation.Primary; +import org.springframework.stereotype.Component; + +@Component +@Primary +@DependsOn("engine") +public class Car implements Vehicle { + + @Autowired + private Engine engine; + + @Autowired + public Car(Engine engine) { + this.engine = engine; + } + + @Autowired + public void setEngine(Engine engine) { + this.engine = engine; + } + + public Engine getEngine() { + return engine; + } + +} diff --git a/spring-mvc-java/src/main/java/com/baeldung/annotations/CarMechanic.java b/spring-mvc-java/src/main/java/com/baeldung/annotations/CarMechanic.java new file mode 100644 index 0000000000..fc933dcd61 --- /dev/null +++ b/spring-mvc-java/src/main/java/com/baeldung/annotations/CarMechanic.java @@ -0,0 +1,10 @@ +package com.baeldung.annotations; + +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Component; + +@Component +@Lazy +public class CarMechanic { + +} diff --git a/spring-mvc-java/src/main/java/com/baeldung/annotations/CarUtility.java b/spring-mvc-java/src/main/java/com/baeldung/annotations/CarUtility.java new file mode 100644 index 0000000000..e66ab02b01 --- /dev/null +++ b/spring-mvc-java/src/main/java/com/baeldung/annotations/CarUtility.java @@ -0,0 +1,7 @@ +package com.baeldung.annotations; + +import org.springframework.stereotype.Component; + +@Component +public class CarUtility { +} diff --git a/spring-mvc-java/src/main/java/com/baeldung/annotations/Driver.java b/spring-mvc-java/src/main/java/com/baeldung/annotations/Driver.java new file mode 100644 index 0000000000..5a2d86e99e --- /dev/null +++ b/spring-mvc-java/src/main/java/com/baeldung/annotations/Driver.java @@ -0,0 +1,32 @@ +package com.baeldung.annotations; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +@Component +public class Driver { + + @Autowired + private Vehicle vehicle; + + @Autowired + public Driver(Vehicle vehicle) { + this.vehicle = vehicle; + } + + @Autowired + public void setVehicle(Vehicle vehicle) { + this.vehicle = vehicle; + } + + public Vehicle getVehicle() { + return vehicle; + } + + @Scheduled(fixedRate = 10000) + @Scheduled(cron = "0 * * * * MON-FRI") + public void checkVehicle() { + } + +} diff --git a/spring-mvc-java/src/main/java/com/baeldung/annotations/Engine.java b/spring-mvc-java/src/main/java/com/baeldung/annotations/Engine.java new file mode 100644 index 0000000000..f8c0154639 --- /dev/null +++ b/spring-mvc-java/src/main/java/com/baeldung/annotations/Engine.java @@ -0,0 +1,26 @@ +package com.baeldung.annotations; + +import org.springframework.beans.factory.annotation.Value; + +public class Engine { + + @Value("8") + private int cylinderCount; + + @Value("${engine.fuelType}") + private String fuelType; + + public Engine() { + this(8); + } + + public Engine(@Value("8") int cylinderCount) { + this.cylinderCount = cylinderCount; + } + + @Value("8") + public void setCylinderCount(int cylinderCount) { + this.cylinderCount = cylinderCount; + } + +} diff --git a/spring-mvc-java/src/main/java/com/baeldung/annotations/Vehicle.java b/spring-mvc-java/src/main/java/com/baeldung/annotations/Vehicle.java new file mode 100644 index 0000000000..7176c3cc8a --- /dev/null +++ b/spring-mvc-java/src/main/java/com/baeldung/annotations/Vehicle.java @@ -0,0 +1,4 @@ +package com.baeldung.annotations; + +public interface Vehicle { +} diff --git a/spring-mvc-java/src/main/java/com/baeldung/annotations/VehicleController.java b/spring-mvc-java/src/main/java/com/baeldung/annotations/VehicleController.java new file mode 100644 index 0000000000..a979dff708 --- /dev/null +++ b/spring-mvc-java/src/main/java/com/baeldung/annotations/VehicleController.java @@ -0,0 +1,66 @@ +package com.baeldung.annotations; + +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.ResponseStatus; + +@Controller +@RequestMapping(value = "/vehicles", method = RequestMethod.GET) +public class VehicleController { + + @CrossOrigin + @ResponseBody + @RequestMapping("/hello") + public String hello() { + return "Hello World!"; + } + + @RequestMapping("/home") + public String home() { + return "home"; + } + + @PostMapping("/save") + public void saveVehicle(@RequestBody Vehicle vehicle) { + } + + @RequestMapping("/{id}") + public Vehicle getVehicle(@PathVariable("id") long id) { + return null; + } + + @RequestMapping + public Vehicle getVehicleByParam(@RequestParam("id") long id) { + return null; + } + + @RequestMapping("/buy") + public Car buyCar(@RequestParam(defaultValue = "5") int seatCount) { + return null; + } + + @ExceptionHandler(IllegalArgumentException.class) + @ResponseStatus(HttpStatus.BAD_REQUEST) + public void onIllegalArgumentException(IllegalArgumentException exception) { + } + + @PostMapping("/assemble") + public void assembleVehicle(@ModelAttribute("vehicle") Vehicle vehicle) { + } + + @ModelAttribute("vehicle") + public Vehicle getVehicle() { + return null; + } + +} diff --git a/spring-mvc-java/src/main/java/com/baeldung/annotations/VehicleFactoryApplication.java b/spring-mvc-java/src/main/java/com/baeldung/annotations/VehicleFactoryApplication.java new file mode 100644 index 0000000000..ab90d8cef2 --- /dev/null +++ b/spring-mvc-java/src/main/java/com/baeldung/annotations/VehicleFactoryApplication.java @@ -0,0 +1,13 @@ +package com.baeldung.annotations; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +// @SpringBootApplication +public class VehicleFactoryApplication { + +// public static void main(String[] args) { +// SpringApplication.run(VehicleFactoryApplication.class, args); +// } + +} diff --git a/spring-mvc-java/src/main/java/com/baeldung/annotations/VehicleFactoryConfig.java b/spring-mvc-java/src/main/java/com/baeldung/annotations/VehicleFactoryConfig.java new file mode 100644 index 0000000000..ad43a19b66 --- /dev/null +++ b/spring-mvc-java/src/main/java/com/baeldung/annotations/VehicleFactoryConfig.java @@ -0,0 +1,30 @@ +package com.baeldung.annotations; + +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.ImportResource; +import org.springframework.context.annotation.Lazy; +import org.springframework.context.annotation.PropertySource; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.EnableScheduling; + +@Configuration +@ComponentScan(basePackages = "com.baeldung.annotations") +@ComponentScan(basePackageClasses = VehicleFactoryConfig.class) +@ImportResource("classpath:/annotations.xml") +@PropertySource("classpath:/annotations.properties") +@Lazy +@EnableAutoConfiguration +@EnableAsync +@EnableScheduling +public class VehicleFactoryConfig { + + @Bean + @Lazy(false) + public Engine engine() { + return new Engine(); + } + +} diff --git a/spring-mvc-java/src/main/java/com/baeldung/annotations/VehicleRepository.java b/spring-mvc-java/src/main/java/com/baeldung/annotations/VehicleRepository.java new file mode 100644 index 0000000000..4dfd2dd771 --- /dev/null +++ b/spring-mvc-java/src/main/java/com/baeldung/annotations/VehicleRepository.java @@ -0,0 +1,8 @@ +package com.baeldung.annotations; + +import org.springframework.stereotype.Repository; + +@Repository +public class VehicleRepository { + +} diff --git a/spring-mvc-java/src/main/java/com/baeldung/annotations/VehicleRestController.java b/spring-mvc-java/src/main/java/com/baeldung/annotations/VehicleRestController.java new file mode 100644 index 0000000000..9dd98e688f --- /dev/null +++ b/spring-mvc-java/src/main/java/com/baeldung/annotations/VehicleRestController.java @@ -0,0 +1,8 @@ +package com.baeldung.annotations; + +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class VehicleRestController { + +} diff --git a/spring-mvc-java/src/main/java/com/baeldung/annotations/VehicleService.java b/spring-mvc-java/src/main/java/com/baeldung/annotations/VehicleService.java new file mode 100644 index 0000000000..19e5a3b4a4 --- /dev/null +++ b/spring-mvc-java/src/main/java/com/baeldung/annotations/VehicleService.java @@ -0,0 +1,13 @@ +package com.baeldung.annotations; + +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Service; + +@Service +public class VehicleService { + + @Async + public void repairCar() { + } + +} diff --git a/spring-mvc-java/src/main/resources/annotations.properties b/spring-mvc-java/src/main/resources/annotations.properties new file mode 100644 index 0000000000..ac2f50b39b --- /dev/null +++ b/spring-mvc-java/src/main/resources/annotations.properties @@ -0,0 +1 @@ +engine.fuelType=petrol \ No newline at end of file diff --git a/spring-mvc-java/src/main/resources/annotations.xml b/spring-mvc-java/src/main/resources/annotations.xml new file mode 100644 index 0000000000..b477b68ef6 --- /dev/null +++ b/spring-mvc-java/src/main/resources/annotations.xml @@ -0,0 +1,9 @@ + + + + + + + + diff --git a/spring-boot/src/main/java/com/baeldung/servlets/DeferredResultController.java b/spring-rest/src/main/java/com/baeldung/controllers/DeferredResultController.java similarity index 76% rename from spring-boot/src/main/java/com/baeldung/servlets/DeferredResultController.java rename to spring-rest/src/main/java/com/baeldung/controllers/DeferredResultController.java index c43b0e6dc0..c61d51e1af 100644 --- a/spring-boot/src/main/java/com/baeldung/servlets/DeferredResultController.java +++ b/spring-rest/src/main/java/com/baeldung/controllers/DeferredResultController.java @@ -1,4 +1,4 @@ -package com.baeldung.servlets; +package com.baeldung.controllers; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -9,6 +9,8 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.context.request.async.DeferredResult; +import java.util.concurrent.ForkJoinPool; + @RestController public class DeferredResultController { @@ -16,14 +18,18 @@ public class DeferredResultController { @GetMapping("/async-deferredresult") public DeferredResult> handleReqDefResult(Model model) { - LOG.info("Received async-deferredresult request"); - DeferredResult> output = new DeferredResult<>(); - new Thread(() -> { - LOG.info("Processing in separate thread"); - output.setResult(ResponseEntity.ok("ok")); - }).start(); - LOG.info("servlet thread freed"); - return output; + LOG.info("Received async-deferredresult request"); + DeferredResult> output = new DeferredResult<>(); + ForkJoinPool.commonPool().submit(() -> { + LOG.info("Processing in separate thread"); + try { + Thread.sleep(6000); + } catch (InterruptedException e) { + } + output.setResult(ResponseEntity.ok("ok")); + }); + LOG.info("servlet thread freed"); + return output; } public DeferredResult> handleReqWithTimeouts(Model model) { @@ -36,8 +42,7 @@ public class DeferredResultController { ResponseEntity.status(HttpStatus.REQUEST_TIMEOUT).body("Request timeout occurred.")); } }); - - new Thread(() -> { + ForkJoinPool.commonPool().submit(() -> { LOG.info("Processing in separate thread"); try { Thread.sleep(600l); @@ -48,14 +53,14 @@ public class DeferredResultController { .body("INTERNAL_SERVER_ERROR occurred.")); } - }).start(); + }); LOG.info("servlet thread freed"); return deferredResult; } public DeferredResult> handleAsyncFailedRequest(Model model) { DeferredResult> deferredResult = new DeferredResult<>(); - new Thread(() -> { + ForkJoinPool.commonPool().submit(() -> { try { // Exception occurred in processing throw new Exception(); @@ -64,7 +69,7 @@ public class DeferredResultController { deferredResult.setErrorResult(ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) .body("INTERNAL_SERVER_ERROR occurred.")); } - }).start(); + }); return deferredResult; } diff --git a/spring-rest/src/main/java/com/baeldung/propertyeditor/PropertyEditorApplication.java b/spring-rest/src/main/java/com/baeldung/propertyeditor/PropertyEditorApplication.java new file mode 100644 index 0000000000..f98648c6b2 --- /dev/null +++ b/spring-rest/src/main/java/com/baeldung/propertyeditor/PropertyEditorApplication.java @@ -0,0 +1,12 @@ +package com.baeldung.propertyeditor; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class PropertyEditorApplication { + + public static void main(String[] args) { + SpringApplication.run(PropertyEditorApplication.class, args); + } +} diff --git a/spring-rest/src/main/java/com/baeldung/propertyeditor/PropertyEditorRestController.java b/spring-rest/src/main/java/com/baeldung/propertyeditor/PropertyEditorRestController.java new file mode 100644 index 0000000000..02edc96cf6 --- /dev/null +++ b/spring-rest/src/main/java/com/baeldung/propertyeditor/PropertyEditorRestController.java @@ -0,0 +1,36 @@ +package com.baeldung.propertyeditor; + +import org.springframework.http.MediaType; +import org.springframework.web.bind.WebDataBinder; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.InitBinder; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.baeldung.propertyeditor.creditcard.CreditCard; +import com.baeldung.propertyeditor.exotictype.editor.CustomExoticTypeEditor; +import com.baeldung.propertyeditor.exotictype.model.ExoticType; + +@RestController +@RequestMapping(value = "/property-editor") +public class PropertyEditorRestController { + + @GetMapping(value = "/credit-card/{card-no}", + produces = MediaType.APPLICATION_JSON_UTF8_VALUE) + public CreditCard parseCreditCardNumber(@PathVariable("card-no") CreditCard creditCard) { + return creditCard; + } + + @GetMapping(value = "/exotic-type/{value}", + produces = MediaType.APPLICATION_JSON_UTF8_VALUE) + public ExoticType parseExoticType(@PathVariable("value") ExoticType exoticType) { + return exoticType; + } + + @InitBinder + public void initBinder(WebDataBinder binder) { + binder.registerCustomEditor(ExoticType.class, new CustomExoticTypeEditor()); + } + +} diff --git a/spring-rest/src/main/java/com/baeldung/propertyeditor/creditcard/CreditCard.java b/spring-rest/src/main/java/com/baeldung/propertyeditor/creditcard/CreditCard.java new file mode 100644 index 0000000000..f3adfb5d9f --- /dev/null +++ b/spring-rest/src/main/java/com/baeldung/propertyeditor/creditcard/CreditCard.java @@ -0,0 +1,41 @@ +package com.baeldung.propertyeditor.creditcard; + +public class CreditCard { + + private String rawCardNumber; + + private Integer bankIdNo; + + private Integer accountNo; + + private Integer checkCode; + + public String getRawCardNumber() { + return rawCardNumber; + } + public void setRawCardNumber(String rawCardNumber) { + this.rawCardNumber = rawCardNumber; + } + + public Integer getBankIdNo() { + return bankIdNo; + } + public void setBankIdNo(Integer bankIdNo) { + this.bankIdNo = bankIdNo; + } + + public Integer getAccountNo() { + return accountNo; + } + public void setAccountNo(Integer accountNo) { + this.accountNo = accountNo; + } + + public Integer getCheckCode() { + return checkCode; + } + public void setCheckCode(Integer checkCode) { + this.checkCode = checkCode; + } + +} diff --git a/spring-rest/src/main/java/com/baeldung/propertyeditor/creditcard/CreditCardEditor.java b/spring-rest/src/main/java/com/baeldung/propertyeditor/creditcard/CreditCardEditor.java new file mode 100644 index 0000000000..d413afee85 --- /dev/null +++ b/spring-rest/src/main/java/com/baeldung/propertyeditor/creditcard/CreditCardEditor.java @@ -0,0 +1,39 @@ +package com.baeldung.propertyeditor.creditcard; + +import java.beans.PropertyEditorSupport; + +import org.springframework.util.StringUtils; + +public class CreditCardEditor extends PropertyEditorSupport { + + @Override + public String getAsText() { + CreditCard creditCard = (CreditCard) getValue(); + + return creditCard == null ? "" : creditCard.getRawCardNumber(); + } + + @Override + public void setAsText(String text) throws IllegalArgumentException { + if (StringUtils.isEmpty(text)) { + setValue(null); + } else { + CreditCard creditCard = new CreditCard(); + creditCard.setRawCardNumber(text); + + String cardNo = text.replaceAll("-", ""); + if (cardNo.length() != 16) + throw new IllegalArgumentException("Credit card format should be xxxx-xxxx-xxxx-xxxx"); + + try { + creditCard.setBankIdNo( Integer.valueOf(cardNo.substring(0, 6)) ); + creditCard.setAccountNo( Integer.valueOf(cardNo.substring(6, cardNo.length() - 1)) ); + creditCard.setCheckCode( Integer.valueOf(cardNo.substring(cardNo.length() - 1)) ); + } catch (NumberFormatException nfe) { + throw new IllegalArgumentException(nfe); + } + + setValue(creditCard); + } + } +} diff --git a/spring-rest/src/main/java/com/baeldung/propertyeditor/exotictype/editor/CustomExoticTypeEditor.java b/spring-rest/src/main/java/com/baeldung/propertyeditor/exotictype/editor/CustomExoticTypeEditor.java new file mode 100644 index 0000000000..08dbceae3d --- /dev/null +++ b/spring-rest/src/main/java/com/baeldung/propertyeditor/exotictype/editor/CustomExoticTypeEditor.java @@ -0,0 +1,23 @@ +package com.baeldung.propertyeditor.exotictype.editor; + +import java.beans.PropertyEditorSupport; + +import com.baeldung.propertyeditor.exotictype.model.ExoticType; + +public class CustomExoticTypeEditor extends PropertyEditorSupport { + + @Override + public String getAsText() { + ExoticType exoticType = (ExoticType) getValue(); + + return exoticType == null ? "" : exoticType.getName(); + } + + @Override + public void setAsText(String text) throws IllegalArgumentException { + ExoticType exoticType = new ExoticType(); + exoticType.setName(text.toUpperCase()); + + setValue(exoticType); + } +} diff --git a/spring-rest/src/main/java/com/baeldung/propertyeditor/exotictype/model/ExoticType.java b/spring-rest/src/main/java/com/baeldung/propertyeditor/exotictype/model/ExoticType.java new file mode 100644 index 0000000000..95ba95643d --- /dev/null +++ b/spring-rest/src/main/java/com/baeldung/propertyeditor/exotictype/model/ExoticType.java @@ -0,0 +1,14 @@ +package com.baeldung.propertyeditor.exotictype.model; + +public class ExoticType { + + private String name; + + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + +} diff --git a/spring-rest/src/main/java/com/baeldung/transfer/LoginForm.java b/spring-rest/src/main/java/com/baeldung/transfer/LoginForm.java index 19c9b0a349..caafcdb500 100644 --- a/spring-rest/src/main/java/com/baeldung/transfer/LoginForm.java +++ b/spring-rest/src/main/java/com/baeldung/transfer/LoginForm.java @@ -7,6 +7,12 @@ public class LoginForm { public LoginForm() { } + public LoginForm(String username, String password) { + super(); + this.username = username; + this.password = password; + } + public String getUsername() { return username; } diff --git a/spring-rest/src/main/java/org/baeldung/config/FaviconConfiguration.java b/spring-rest/src/main/java/org/baeldung/config/FaviconConfiguration.java new file mode 100644 index 0000000000..78a2a3eb2c --- /dev/null +++ b/spring-rest/src/main/java/org/baeldung/config/FaviconConfiguration.java @@ -0,0 +1,44 @@ +package org.baeldung.config; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.ClassPathResource; +import org.springframework.core.io.Resource; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.servlet.handler.SimpleUrlHandlerMapping; +import org.springframework.web.servlet.resource.ResourceHttpRequestHandler; + +@Configuration +public class FaviconConfiguration { + @Bean + public SimpleUrlHandlerMapping myFaviconHandlerMapping() { + SimpleUrlHandlerMapping mapping = new SimpleUrlHandlerMapping(); + mapping.setOrder(Integer.MIN_VALUE); + mapping.setUrlMap(Collections.singletonMap("/favicon.ico", faviconRequestHandler())); + return mapping; + } + + @Bean + protected ResourceHttpRequestHandler faviconRequestHandler() { + ResourceHttpRequestHandler requestHandler = new ResourceHttpRequestHandler(); + ClassPathResource classPathResource = new ClassPathResource("com/baeldung/produceimage/images"); + List locations = Arrays.asList(classPathResource); + requestHandler.setLocations(locations); + return requestHandler; + } + + //@Controller + static class FaviconController { + + @RequestMapping(value="favicon.ico", method=RequestMethod.GET) + @ResponseBody + void favicon() {} + } +} diff --git a/spring-rest/src/main/java/org/baeldung/config/RestClientConfig.java b/spring-rest/src/main/java/org/baeldung/config/RestClientConfig.java new file mode 100644 index 0000000000..3619f43f8a --- /dev/null +++ b/spring-rest/src/main/java/org/baeldung/config/RestClientConfig.java @@ -0,0 +1,30 @@ +package org.baeldung.config; + +import java.util.ArrayList; +import java.util.List; + +import org.baeldung.interceptors.RestTemplateLoggingInterceptor; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.client.BufferingClientHttpRequestFactory; +import org.springframework.http.client.ClientHttpRequestInterceptor; +import org.springframework.http.client.SimpleClientHttpRequestFactory; +import org.springframework.util.CollectionUtils; +import org.springframework.web.client.RestTemplate; + +@Configuration +public class RestClientConfig { + + @Bean + public RestTemplate restTemplate() { + RestTemplate restTemplate = new RestTemplate(new BufferingClientHttpRequestFactory(new SimpleClientHttpRequestFactory())); + + List interceptors = restTemplate.getInterceptors(); + if (CollectionUtils.isEmpty(interceptors)) { + interceptors = new ArrayList(); + } + interceptors.add(new RestTemplateLoggingInterceptor()); + restTemplate.setInterceptors(interceptors); + return restTemplate; + } +} diff --git a/spring-rest/src/main/java/org/baeldung/interceptors/RestTemplateLoggingInterceptor.java b/spring-rest/src/main/java/org/baeldung/interceptors/RestTemplateLoggingInterceptor.java new file mode 100644 index 0000000000..56de3d04b8 --- /dev/null +++ b/spring-rest/src/main/java/org/baeldung/interceptors/RestTemplateLoggingInterceptor.java @@ -0,0 +1,41 @@ +package org.baeldung.interceptors; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.http.HttpRequest; +import org.springframework.http.client.ClientHttpRequestExecution; +import org.springframework.http.client.ClientHttpRequestInterceptor; +import org.springframework.http.client.ClientHttpResponse; +import org.springframework.util.StreamUtils; + +public class RestTemplateLoggingInterceptor implements ClientHttpRequestInterceptor { + + @Override + public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException { + logRequest(body); + ClientHttpResponse response = execution.execute(request, body); + logResponse(response); + response.getHeaders().add("Foo", "bar"); + return response; + } + + private void logRequest(byte[] body) { + String payLoad = StringUtils.EMPTY; + if (body.length > 0) { + payLoad = new String(body, StandardCharsets.UTF_8); + } + System.out.println("Request Body > " + payLoad); + } + + private void logResponse(ClientHttpResponse response) throws IOException { + String payLoad = StringUtils.EMPTY; + long contentLength = response.getHeaders() + .getContentLength(); + if (contentLength != 0) { + payLoad = StreamUtils.copyToString(response.getBody(), StandardCharsets.UTF_8); + } + System.out.println("Response Body > " + payLoad); + } +} diff --git a/spring-rest/src/main/java/org/baeldung/web/controller/DeferredResultController.java b/spring-rest/src/main/java/org/baeldung/web/controller/DeferredResultController.java new file mode 100644 index 0000000000..5d039d2d02 --- /dev/null +++ b/spring-rest/src/main/java/org/baeldung/web/controller/DeferredResultController.java @@ -0,0 +1,85 @@ +package org.baeldung.web.controller; + +import java.util.concurrent.CompletableFuture; +import java.util.function.Consumer; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.context.request.async.DeferredResult; + +@RestController +public class DeferredResultController { + + private final static Logger LOG = LoggerFactory.getLogger(DeferredResultController.class); + + @GetMapping("/async-deferredresult") + public DeferredResult> handleReqDefResult(Model model) { + LOG.info("Received request"); + DeferredResult> deferredResult = new DeferredResult<>(); + + deferredResult.onCompletion(() -> LOG.info("Processing complete")); + + CompletableFuture.supplyAsync(() -> { + LOG.info("Processing in separate thread"); + try { + Thread.sleep(6000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + return "OK"; + }) + .whenCompleteAsync((result, exc) -> deferredResult.setResult(ResponseEntity.ok(result))); + + LOG.info("Servlet thread freed"); + return deferredResult; + } + + @GetMapping("/process-blocking") + public ResponseEntity handleReqSync(Model model) { + // ... + return ResponseEntity.ok("ok"); + } + + @GetMapping("/async-deferredresult-timeout") + public DeferredResult> handleReqWithTimeouts(Model model) { + LOG.info("Received async request with a configured timeout"); + DeferredResult> deferredResult = new DeferredResult<>(500l); + deferredResult.onTimeout(() -> deferredResult.setErrorResult(ResponseEntity.status(HttpStatus.REQUEST_TIMEOUT) + .body("Request timeout occurred."))); + + CompletableFuture.supplyAsync(() -> { + LOG.info("Processing in separate thread"); + try { + Thread.sleep(6000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + return "error"; + }) + .whenCompleteAsync((result, exc) -> deferredResult.setResult(ResponseEntity.ok(result))); + LOG.info("servlet thread freed"); + return deferredResult; + } + + @GetMapping("/async-deferredresult-error") + public DeferredResult> handleAsyncFailedRequest(Model model) { + LOG.info("Received async request with a configured error handler"); + DeferredResult> deferredResult = new DeferredResult<>(); + deferredResult.onError(new Consumer() { + @Override + public void accept(Throwable t) { + deferredResult.setErrorResult(ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .body("An error occurred.")); + } + + }); + LOG.info("servlet thread freed"); + return deferredResult; + } + +} diff --git a/spring-rest/src/main/resources/application.properties b/spring-rest/src/main/resources/application.properties index dd7e4e2f2d..5ea345c395 100644 --- a/spring-rest/src/main/resources/application.properties +++ b/spring-rest/src/main/resources/application.properties @@ -1,2 +1,3 @@ server.port= 8082 -server.servlet.context-path=/spring-rest \ No newline at end of file +server.servlet.context-path=/spring-rest +spring.mvc.favicon.enabled=false \ No newline at end of file diff --git a/spring-rest/src/main/resources/com/baeldung/produceimage/images/favicon.ico b/spring-rest/src/main/resources/com/baeldung/produceimage/images/favicon.ico new file mode 100644 index 0000000000..64105ac11c Binary files /dev/null and b/spring-rest/src/main/resources/com/baeldung/produceimage/images/favicon.ico differ diff --git a/spring-rest/src/main/resources/static/favicon.ico b/spring-rest/src/main/resources/static/favicon.ico new file mode 100644 index 0000000000..64105ac11c Binary files /dev/null and b/spring-rest/src/main/resources/static/favicon.ico differ diff --git a/spring-rest/src/test/java/com/baeldung/propertyeditor/creditcard/CreditCardEditorTest.java b/spring-rest/src/test/java/com/baeldung/propertyeditor/creditcard/CreditCardEditorTest.java new file mode 100644 index 0000000000..e87adbc712 --- /dev/null +++ b/spring-rest/src/test/java/com/baeldung/propertyeditor/creditcard/CreditCardEditorTest.java @@ -0,0 +1,44 @@ +package com.baeldung.propertyeditor.creditcard; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.runners.MockitoJUnitRunner; + +import com.baeldung.propertyeditor.creditcard.CreditCard; +import com.baeldung.propertyeditor.creditcard.CreditCardEditor; + +@RunWith(MockitoJUnitRunner.class) +public class CreditCardEditorTest { + + private CreditCardEditor creditCardEditor; + + @Before + public void setup() { + creditCardEditor = new CreditCardEditor(); + } + + @Test(expected=IllegalArgumentException.class) + public void whenInvalidCardNoWithLessDigits_thenThrowsException() { + creditCardEditor.setAsText("123-123-123-123"); + } + + @Test(expected=IllegalArgumentException.class) + public void whenInvalidCardNoWithNonDigits_thenThrowsException() { + creditCardEditor.setAsText("1234-1234-xxxx-yyyy"); + } + + @Test + public void whenCardNoWithNonDigits_parseCreditCard() { + creditCardEditor.setAsText("1234-5678-9123-4560"); + + CreditCard creditCard = (CreditCard) creditCardEditor.getValue(); + Assert.assertNotNull(creditCard); + + Assert.assertEquals(123456, creditCard.getBankIdNo().intValue()); + Assert.assertEquals(789123456, creditCard.getAccountNo().intValue()); + Assert.assertEquals(0, creditCard.getCheckCode().intValue()); + } + +} diff --git a/spring-rest/src/test/java/org/baeldung/resttemplate/RestTemplateIntegrationTest.java b/spring-rest/src/test/java/org/baeldung/resttemplate/RestTemplateIntegrationTest.java new file mode 100644 index 0000000000..e0c24c32b1 --- /dev/null +++ b/spring-rest/src/test/java/org/baeldung/resttemplate/RestTemplateIntegrationTest.java @@ -0,0 +1,43 @@ +package org.baeldung.resttemplate; + +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertThat; + +import org.baeldung.config.RestClientConfig; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.web.client.RestTemplate; + +import com.baeldung.transfer.LoginForm; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = RestClientConfig.class) +public class RestTemplateIntegrationTest { + + @Autowired + RestTemplate restTemplate; + + @Test + public void givenRestTemplate_whenRequested_thenLogAndModifyResponse() { + LoginForm loginForm = new LoginForm("userName", "password"); + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + HttpEntity requestEntity = new HttpEntity(loginForm, headers); + + ResponseEntity responseEntity = restTemplate.postForEntity("http://httpbin.org/post", requestEntity, String.class); + + assertThat(responseEntity.getStatusCode(), is(equalTo(HttpStatus.OK))); + assertThat(responseEntity.getHeaders() + .get("Foo") + .get(0), is(equalTo("bar"))); + } +} diff --git a/spring-webflux-event-stream/src/main/java/com/baeldung/demo/eventstreamwebfluxdemo/EventStreamServer.java b/spring-webflux-event-stream/src/main/java/com/baeldung/demo/eventstreamwebfluxdemo/EventStreamServer.java new file mode 100644 index 0000000000..48548bd8d5 --- /dev/null +++ b/spring-webflux-event-stream/src/main/java/com/baeldung/demo/eventstreamwebfluxdemo/EventStreamServer.java @@ -0,0 +1,12 @@ +package com.baeldung.demo.eventstreamwebfluxdemo; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class EventStreamServer { + + public static void main(String[] args) { + SpringApplication.run(EventStreamServer.class, args); + } +} diff --git a/spring-webflux-event-stream/src/main/java/com/baeldung/demo/eventstreamwebfluxdemo/client/EventStreamClient.java b/spring-webflux-event-stream/src/main/java/com/baeldung/demo/eventstreamwebfluxdemo/client/EventStreamClient.java new file mode 100644 index 0000000000..73ca753136 --- /dev/null +++ b/spring-webflux-event-stream/src/main/java/com/baeldung/demo/eventstreamwebfluxdemo/client/EventStreamClient.java @@ -0,0 +1,18 @@ +package com.baeldung.demo.eventstreamwebfluxdemo.client; + +import org.springframework.http.MediaType; +import org.springframework.web.reactive.function.client.WebClient; + +public class EventStreamClient { + public static void main(String[] args) + { + WebClient.create("http://127.0.0.1:8080") + .get() + .uri("/events") + .accept(MediaType.APPLICATION_STREAM_JSON) + .retrieve() + .bodyToFlux(Long.class) + .toStream() + .forEach(item -> System.out.println("New event : " + item)); + } +} diff --git a/spring-webflux-event-stream/src/main/java/com/baeldung/demo/eventstreamwebfluxdemo/controller/EventStreamController.java b/spring-webflux-event-stream/src/main/java/com/baeldung/demo/eventstreamwebfluxdemo/controller/EventStreamController.java new file mode 100644 index 0000000000..d28d402316 --- /dev/null +++ b/spring-webflux-event-stream/src/main/java/com/baeldung/demo/eventstreamwebfluxdemo/controller/EventStreamController.java @@ -0,0 +1,17 @@ +package com.baeldung.demo.eventstreamwebfluxdemo.controller; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import reactor.core.publisher.Flux; + +import java.time.Duration; + +@RestController +public class EventStreamController +{ + @RequestMapping("/events") + public Flux getServerEvents() + { + return Flux.interval(Duration.ofMillis(1000)); + } +} diff --git a/spring-webflux-event-stream/src/main/resources/application.properties b/spring-webflux-event-stream/src/main/resources/application.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/spring-webflux-event-stream/src/test/java/com/baeldung/demo/eventstreamwebfluxdemo/EventStreamServerTests.java b/spring-webflux-event-stream/src/test/java/com/baeldung/demo/eventstreamwebfluxdemo/EventStreamServerTests.java new file mode 100644 index 0000000000..d4dfcce4b3 --- /dev/null +++ b/spring-webflux-event-stream/src/test/java/com/baeldung/demo/eventstreamwebfluxdemo/EventStreamServerTests.java @@ -0,0 +1,16 @@ +package com.baeldung.demo.eventstreamwebfluxdemo; + +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 +public class EventStreamServerTests { + + @Test + public void contextLoads() { + } + +} diff --git a/testing-modules/gatling/pom.xml b/testing-modules/gatling/pom.xml index 10df52835a..c4aec4d61a 100644 --- a/testing-modules/gatling/pom.xml +++ b/testing-modules/gatling/pom.xml @@ -13,10 +13,11 @@ 1.8 1.8 - 2.11.7 UTF-8 - 2.2.0 - 3.2.2 + 2.11.12 + 2.2.5 + 3.2.2 + 2.2.1 @@ -85,7 +86,7 @@ - -Ybackend:GenBCode + -Ydelambdafy:method -target:jvm-1.8 -deprecation @@ -101,7 +102,7 @@ io.gatling gatling-maven-plugin - ${gatling.version} + ${gatling-maven-plugin.version} test diff --git a/testing-modules/gatling/src/test/scala/org/baeldung/RecordedSimulation.scala b/testing-modules/gatling/src/test/scala/org/baeldung/RecordedSimulation.scala index cdbef1bf3c..dece393478 100644 --- a/testing-modules/gatling/src/test/scala/org/baeldung/RecordedSimulation.scala +++ b/testing-modules/gatling/src/test/scala/org/baeldung/RecordedSimulation.scala @@ -9,17 +9,16 @@ import io.gatling.jdbc.Predef._ class RecordedSimulation extends Simulation { val httpProtocol = http - .baseURL("http://computer-database.gatling.io") - .inferHtmlResources(BlackList(""".*\.css""", """.*\.js""", """.*\.ico"""), WhiteList()) - .acceptHeader("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8") - .acceptEncodingHeader("gzip, deflate") - .acceptLanguageHeader("it-IT,it;q=0.8,en-US;q=0.5,en;q=0.3") + .baseURL("http://computer-database.gatling.io") + .inferHtmlResources(BlackList(""".*\.css""", """.*\.js""", """.*\.ico"""), WhiteList()) + .acceptHeader("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8") + .acceptEncodingHeader("gzip, deflate") + .acceptLanguageHeader("it-IT,it;q=0.8,en-US;q=0.5,en;q=0.3") .userAgentHeader("Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0") - val scn = scenario("RecordedSimulation") .exec(http("request_0") .get("/")) @@ -43,4 +42,4 @@ class RecordedSimulation extends Simulation { .get("/computers?p=3")) setUp(scn.inject(atOnceUsers(1))).protocols(httpProtocol) -} +} diff --git a/guava/src/test/java/org/baeldung/hamcrest/HamcrestCommonCoreMatchersTest.java b/testing-modules/mockito/src/test/java/org/baeldung/hamcrest/HamcrestCoreMatchersTest.java similarity index 67% rename from guava/src/test/java/org/baeldung/hamcrest/HamcrestCommonCoreMatchersTest.java rename to testing-modules/mockito/src/test/java/org/baeldung/hamcrest/HamcrestCoreMatchersTest.java index 2c85067c9b..8f3e96c956 100644 --- a/guava/src/test/java/org/baeldung/hamcrest/HamcrestCommonCoreMatchersTest.java +++ b/testing-modules/mockito/src/test/java/org/baeldung/hamcrest/HamcrestCoreMatchersTest.java @@ -1,6 +1,7 @@ package org.baeldung.hamcrest; -import org.assertj.core.util.Lists; + +import com.google.common.collect.Lists; import org.junit.Test; import java.util.List; @@ -10,7 +11,7 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.core.StringEndsWith.endsWith; import static org.hamcrest.core.StringStartsWith.startsWith; -public class HamcrestCommonCoreMatchersTest { +public class HamcrestCoreMatchersTest { @Test public void givenTestInput_WhenUsingIsForMatch() { @@ -24,19 +25,29 @@ public class HamcrestCommonCoreMatchersTest { } @Test - public void givenTestInput_WhenUsingInstanceOfForClassTypeCheck(){ + public void givenDifferentStaticTypeTestInput_WhenUsingEqualToObject_ThenCorrect() { + + // GIVEN + Object original = 100; + + // ASSERT + assertThat(original, equalToObject(100)); + } + + @Test + public void givenTestInput_WhenUsingInstanceOfForClassTypeCheck() { assertThat("hamcrest", is(instanceOf(String.class))); } @Test - public void givenTestInput_WhenUsingIsA_ThenAssertType(){ + public void givenTestInput_WhenUsingIsA_ThenAssertType() { assertThat("hamcrest core", isA(String.class)); } @Test - public void givenTestInput_WhenUsingEqualToMatcherForEquality(){ + public void givenTestInput_WhenUsingEqualToMatcherForEquality() { // GIVEN String actualString = "Hamcrest Core"; @@ -48,7 +59,7 @@ public class HamcrestCommonCoreMatchersTest { } @Test - public void givenTestInput_WhenUsingNotForMatch(){ + public void givenTestInput_WhenUsingNotForMatch() { // GIVEN String testString = "hamcrest"; @@ -60,7 +71,7 @@ public class HamcrestCommonCoreMatchersTest { } @Test - public void givenTestInput_WhenUsingNullValueForNullCheck(){ + public void givenTestInput_WhenUsingNullValueForNullCheck() { // GIVEN Integer nullObject = null; @@ -71,7 +82,7 @@ public class HamcrestCommonCoreMatchersTest { } @Test - public void givenTestInput_WhenUsingNotNullValueForNotNullCheck(){ + public void givenTestInput_WhenUsingNotNullValueForNotNullCheck() { // GIVEN Integer testNumber = 123; @@ -82,7 +93,7 @@ public class HamcrestCommonCoreMatchersTest { } @Test - public void givenString_WhenStartsWith_ThenCorrect(){ + public void givenString_WhenStartsWith_ThenCorrect() { // GIVEN String testString = "hamcrest core"; @@ -92,7 +103,17 @@ public class HamcrestCommonCoreMatchersTest { } @Test - public void givenString_WhenEndsWith_ThenCorrect(){ + public void giveString_WhenStartsWithIgnoringCase_ThenCorrect() { + + // GIVEN + String testString = "hamcrest core"; + + // ASSERT + assertThat(testString, startsWithIgnoringCase("HAMCREST")); + } + + @Test + public void givenString_WhenEndsWith_ThenCorrect() { // GIVEN String testString = "hamcrest core"; @@ -102,7 +123,17 @@ public class HamcrestCommonCoreMatchersTest { } @Test - public void givenString_WhenContainsString_ThenCorrect(){ + public void givenString_WhenEndsWithIgnoringCase_ThenCorrect() { + + // GIVEN + String testString = "hamcrest core"; + + // ASSERT + assertThat(testString, endsWithIgnoringCase("CORE")); + } + + @Test + public void givenString_WhenContainsString_ThenCorrect() { // GIVEN String testString = "hamcrest core"; @@ -112,7 +143,18 @@ public class HamcrestCommonCoreMatchersTest { } @Test - public void givenTestInput_WhenUsingHasItemInCollection(){ + public void givenString_WhenContainsStringIgnoringCase_ThenCorrect() { + + + // GIVEN + String testString = "hamcrest core"; + + // ASSERT + assertThat(testString, containsStringIgnoringCase("CO")); + } + + @Test + public void givenTestInput_WhenUsingHasItemInCollection() { // GIVEN List list = Lists.newArrayList("java", "spring", "baeldung"); @@ -124,7 +166,7 @@ public class HamcrestCommonCoreMatchersTest { @Test - public void givenTestInput_WhenUsingHasItemsInCollection(){ + public void givenTestInput_WhenUsingHasItemsInCollection() { // GIVEN List list = Lists.newArrayList("java", "spring", "baeldung"); @@ -135,14 +177,14 @@ public class HamcrestCommonCoreMatchersTest { } @Test - public void givenTestInput_WhenUsingAnyForClassType(){ + public void givenTestInput_WhenUsingAnyForClassType() { assertThat("hamcrest", is(any(String.class))); assertThat("hamcrest", is(any(Object.class))); } @Test - public void givenTestInput_WhenUsingAllOfForAllMatchers(){ + public void givenTestInput_WhenUsingAllOfForAllMatchers() { // GIVEN String testString = "Hamcrest Core"; @@ -152,7 +194,7 @@ public class HamcrestCommonCoreMatchersTest { } @Test - public void givenTestInput_WhenUsingAnyOfForAnyMatcher(){ + public void givenTestInput_WhenUsingAnyOfForAnyMatcher() { // GIVEN String testString = "Hamcrest Core"; @@ -162,7 +204,7 @@ public class HamcrestCommonCoreMatchersTest { } @Test - public void givenTestInput_WhenUsingBothForMatcher(){ + public void givenTestInput_WhenUsingBothForMatcher() { // GIVEN String testString = "Hamcrest Core Matchers"; @@ -172,7 +214,7 @@ public class HamcrestCommonCoreMatchersTest { } @Test - public void givenTestInput_WhenUsingEitherForMatcher(){ + public void givenTestInput_WhenUsingEitherForMatcher() { // GIVEN String testString = "Hamcrest Core Matchers"; @@ -183,7 +225,7 @@ public class HamcrestCommonCoreMatchersTest { @Test - public void givenTestInput_WhenUsingEveryItemForMatchInCollection(){ + public void givenTestInput_WhenUsingEveryItemForMatchInCollection() { // GIVEN List testItems = Lists.newArrayList("Common", "Core", "Combinable"); @@ -193,7 +235,7 @@ public class HamcrestCommonCoreMatchersTest { } @Test - public void givenTwoTestInputs_WhenUsingSameInstanceForMatch(){ + public void givenTwoTestInputs_WhenUsingSameInstanceForMatch() { // GIVEN String string1 = "hamcrest"; @@ -203,4 +245,15 @@ public class HamcrestCommonCoreMatchersTest { assertThat(string1, is(sameInstance(string2))); } -} \ No newline at end of file + @Test + public void givenTwoTestInputs_WhenUsingTheInstanceForMatch() { + // GIVEN + String string1 = "hamcrest"; + String string2 = string1; + + // ASSERT + assertThat(string1, is(theInstance(string2))); + } + +} + diff --git a/twilio/sms/pom.xml b/twilio/sms/pom.xml new file mode 100644 index 0000000000..58ac33a7f3 --- /dev/null +++ b/twilio/sms/pom.xml @@ -0,0 +1,24 @@ + + + 4.0.0 + + com.baeldung.twilio + sms + 1.0-SNAPSHOT + + + 1.8 + 1.8 + + + + + com.twilio.sdk + twilio + 7.20.0 + + + + diff --git a/twilio/sms/src/main/java/TwilioSmsExample.java b/twilio/sms/src/main/java/TwilioSmsExample.java new file mode 100644 index 0000000000..442546027b --- /dev/null +++ b/twilio/sms/src/main/java/TwilioSmsExample.java @@ -0,0 +1,22 @@ +import com.twilio.Twilio; +import com.twilio.rest.api.v2010.account.Message; +import com.twilio.type.PhoneNumber; + +public class TwilioSmsExample { + // Find your Account Sid and Token at twilio.com/console + public static final String ACCOUNT_SID = "YOUR_ACCOUNT_SID"; + public static final String AUTH_TOKEN = "YOUR_ACCOUNT_TOKEN"; + + // Create a phone number in the Twilio console + public static final String TWILIO_NUMBER = "+13334445555"; + + public static void main(String[] args) { + Twilio.init(ACCOUNT_SID, AUTH_TOKEN); + Message message = Message.creator( + new PhoneNumber("+12227779999"), + new PhoneNumber(TWILIO_NUMBER), + "Sample Twilio SMS using Java") + .create(); + + } +} diff --git a/twilio/sms/src/main/java/TwilioSmsMediaExample.java b/twilio/sms/src/main/java/TwilioSmsMediaExample.java new file mode 100644 index 0000000000..09a2f9fd63 --- /dev/null +++ b/twilio/sms/src/main/java/TwilioSmsMediaExample.java @@ -0,0 +1,27 @@ +import com.twilio.Twilio; +import com.twilio.converter.Promoter; +import com.twilio.rest.api.v2010.account.Message; +import com.twilio.type.PhoneNumber; + +import java.net.URI; + +public class TwilioSmsMediaExample { + // Find your Account Sid and Token at twilio.com/console + public static final String ACCOUNT_SID = "YOUR_ACCOUNT_SID"; + public static final String AUTH_TOKEN = "YOUR_ACCOUNT_TOKEN"; + + // Create a phone number in the Twilio console + public static final String TWILIO_NUMBER = "+13334445555"; + + public static void main(String[] args) { + Twilio.init(ACCOUNT_SID, AUTH_TOKEN); + Message message = Message.creator( + new PhoneNumber("+12227779999"), + new PhoneNumber(TWILIO_NUMBER), + "Sample Twilio MMS using Java") + .setMediaUrl( + Promoter.listOfOne( + URI.create("http://www.baeldung.com/wp-content/uploads/2017/10/icon-javaseries-home.png"))) + .create(); + } +} diff --git a/twilio/sms/src/main/java/TwilioSmsStatusAsyncExample.java b/twilio/sms/src/main/java/TwilioSmsStatusAsyncExample.java new file mode 100644 index 0000000000..d75788a6a6 --- /dev/null +++ b/twilio/sms/src/main/java/TwilioSmsStatusAsyncExample.java @@ -0,0 +1,34 @@ +import com.google.common.util.concurrent.FutureCallback; +import com.google.common.util.concurrent.Futures; +import com.google.common.util.concurrent.ListenableFuture; +import com.twilio.Twilio; +import com.twilio.base.ResourceSet; +import com.twilio.rest.api.v2010.account.Message; + +public class TwilioSmsStatusAsyncExample { + // Find your Account Sid and Token at twilio.com/console + public static final String ACCOUNT_SID = "YOUR_ACCOUNT_SID"; + public static final String AUTH_TOKEN = "YOUR_AUTH_TOKEN"; + + // Create a phone number in the Twilio console + public static final String TWILIO_NUMBER = "+13334445555"; + + public static void main(String[] args) { + + Twilio.init(ACCOUNT_SID, AUTH_TOKEN); + ListenableFuture> future = Message.reader().readAsync(); + Futures.addCallback( + future, + new FutureCallback>() { + public void onSuccess(ResourceSet messages) { + for (Message message : messages) { + System.out.println(message.getSid() + " : " + message.getStatus()); + } + } + + public void onFailure(Throwable t) { + System.out.println("Failed to get message status: " + t.getMessage()); + } + }); + } +} diff --git a/twilio/sms/src/main/java/TwilioSmsStatusExample.java b/twilio/sms/src/main/java/TwilioSmsStatusExample.java new file mode 100644 index 0000000000..9ed2ac5bcc --- /dev/null +++ b/twilio/sms/src/main/java/TwilioSmsStatusExample.java @@ -0,0 +1,22 @@ +import com.twilio.Twilio; +import com.twilio.base.ResourceSet; +import com.twilio.rest.api.v2010.account.Message; +import com.twilio.type.PhoneNumber; + +public class TwilioSmsStatusExample { + // Find your Account Sid and Token at twilio.com/console + public static final String ACCOUNT_SID = "YOUR_ACCOUNT_SID"; + public static final String AUTH_TOKEN = "YOUR_ACCOUNT_TOKEN"; + + // Create a phone number in the Twilio console + public static final String TWILIO_NUMBER = "+13334445555"; + + public static void main(String[] args) { + + Twilio.init(ACCOUNT_SID, AUTH_TOKEN); + ResourceSet messages = Message.reader().read(); + for (Message message : messages) { + System.out.println(message.getSid() + " : " + message.getStatus()); + } + } +} diff --git a/vavr/src/test/java/com/baeldung/vavr/interoperability/CollectionsInteroperabilityUnitTest.java b/vavr/src/test/java/com/baeldung/vavr/interoperability/CollectionsInteroperabilityUnitTest.java new file mode 100644 index 0000000000..8256c2369a --- /dev/null +++ b/vavr/src/test/java/com/baeldung/vavr/interoperability/CollectionsInteroperabilityUnitTest.java @@ -0,0 +1,91 @@ +package com.baeldung.vavr.interoperability; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import java.util.Arrays; +import java.util.Optional; + +import org.junit.Test; + +import io.vavr.collection.HashMap; +import io.vavr.collection.LinkedHashSet; +import io.vavr.collection.List; +import io.vavr.collection.Map; +import io.vavr.collection.Stream; + +public class CollectionsInteroperabilityUnitTest { + + @Test + public void givenParams_whenVavrList_thenReturnJavaList() { + List vavrStringList = List.of("JAVA", "Javascript", "Scala"); + + java.util.List javaStringList = vavrStringList.toJavaList(); + assertTrue(javaStringList instanceof java.util.List); + } + + @Test + public void givenParams_whenVavrStream_thenReturnJavaStream() { + Stream vavrStream = Stream.of("JAVA", "Javascript", "Scala"); + + java.util.stream.Stream javaParallelStream = vavrStream.toJavaParallelStream(); + assertTrue(javaParallelStream instanceof java.util.stream.Stream); + + java.util.List javaStringList = vavrStream.toJavaList(); + assertTrue(javaStringList instanceof java.util.List); + } + + @Test + public void givenParams_whenVavrMap_thenReturnJavaMap() { + Map vavrMap = HashMap.of("1", "a", "2", "b", "3", "c"); + + java.util.Map javaMap = vavrMap.toJavaMap(); + assertTrue(javaMap instanceof java.util.Map); + } + + @Test + public void givenParams_whenJavaList_thenReturnVavrListUsingOfAll() { + java.util.List javaList = Arrays.asList("Java", "Haskell", "Scala"); + List vavrList = List.ofAll(javaList); + assertTrue(vavrList instanceof io.vavr.collection.List); + } + + @Test + public void givenParams_whenJavaStream_thenReturnVavrListUsingOfAll() { + java.util.stream.Stream javaStream = Arrays.asList("Java", "Haskell", "Scala") + .stream(); + Stream vavrStream = Stream.ofAll(javaStream); + assertTrue(vavrStream instanceof io.vavr.collection.Stream); + } + + @Test(expected = UnsupportedOperationException.class) + public void givenParams_whenVavrListConverted_thenException() { + java.util.List javaList = List.of("Java", "Haskell", "Scala") + .asJava(); + javaList.add("Python"); + assertEquals(4, javaList.size()); + } + + @Test + public void givenParams_whenVavrListConvertedToMutable_thenRetunMutableList() { + java.util.List javaList = List.of("Java", "Haskell", "Scala") + .asJavaMutable(); + javaList.add("Python"); + assertEquals(4, javaList.size()); + } + + @Test + public void givenParams_WhenVavarListConvertedToLinkedSet_thenReturnLinkedSet() { + List vavrList = List.of("Java", "Haskell", "Scala", "Java"); + LinkedHashSet linkedSet = (LinkedHashSet) vavrList.toLinkedSet(); + assertEquals(3, linkedSet.size()); + } + + @Test + public void givenParams_WhenVavrList_thenReturnJavaOptional() { + List vavrList = List.of("Java"); + Optional optional = vavrList.toJavaOptional(); + assertEquals("Java", optional.get()); + } + +}