From 0706cd84532d324f6556a19ad259fbae882ba919 Mon Sep 17 00:00:00 2001 From: maverick Date: Thu, 28 Jul 2016 16:38:17 +0530 Subject: [PATCH 001/265] First Commit for Sorting Examples. --- .../java/com/baeldung/beans/Employee.java | 49 +++++++++ .../org/baeldung/java/sorting/ArraySort.java | 88 +++++++++++++++ .../baeldung/java/sorting/ComparingTest.java | 38 +++++++ .../org/baeldung/java/sorting/Employee.java | 54 +++++++++ .../org/baeldung/java/sorting/ListSort.java | 59 ++++++++++ .../org/baeldung/java/sorting/MapSort.java | 104 ++++++++++++++++++ .../java/sorting/NaturalOrderExample.java | 34 ++++++ .../org/baeldung/java/sorting/SetSort.java | 54 +++++++++ 8 files changed, 480 insertions(+) create mode 100644 core-java/src/main/java/com/baeldung/beans/Employee.java create mode 100644 core-java/src/test/java/org/baeldung/java/sorting/ArraySort.java create mode 100644 core-java/src/test/java/org/baeldung/java/sorting/ComparingTest.java create mode 100644 core-java/src/test/java/org/baeldung/java/sorting/Employee.java create mode 100644 core-java/src/test/java/org/baeldung/java/sorting/ListSort.java create mode 100644 core-java/src/test/java/org/baeldung/java/sorting/MapSort.java create mode 100644 core-java/src/test/java/org/baeldung/java/sorting/NaturalOrderExample.java create mode 100644 core-java/src/test/java/org/baeldung/java/sorting/SetSort.java diff --git a/core-java/src/main/java/com/baeldung/beans/Employee.java b/core-java/src/main/java/com/baeldung/beans/Employee.java new file mode 100644 index 0000000000..78d65e18fe --- /dev/null +++ b/core-java/src/main/java/com/baeldung/beans/Employee.java @@ -0,0 +1,49 @@ +package com.baeldung.beans; + +public class Employee implements Comparable{ + private String name; + private int age; + private double salary; + + public Employee() { + + } + + public Employee(String name, int age, double salary) { + super(); + this.name = name; + this.age = age; + this.salary = salary; + } + + public int getAge() { + return age; + } + public void setAge(int age) { + this.age = age; + } + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + public double getSalary() { + return salary; + } + public void setSalary(double salary) { + this.salary = salary; + } + + @Override + public String toString() { + return "("+name+","+age+","+salary+")"; + + } + + @Override + public int compareTo(Object o) { + Employee e = (Employee) o; + return getAge() - e.getAge() ; + } +} diff --git a/core-java/src/test/java/org/baeldung/java/sorting/ArraySort.java b/core-java/src/test/java/org/baeldung/java/sorting/ArraySort.java new file mode 100644 index 0000000000..3e55ab7f6a --- /dev/null +++ b/core-java/src/test/java/org/baeldung/java/sorting/ArraySort.java @@ -0,0 +1,88 @@ +package org.baeldung.java.sorting; + +import static org.junit.Assert.*; + +import java.sql.Array; +import java.util.Arrays; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; + +import org.junit.Before; +import org.junit.Test; + +public class ArraySort { + + private int[] numbers; + private Integer[] integers; + private String[] names; + private Employee[] employees; + + @Before + public void initData() { + numbers = new int[] { 5, 1, 89, 255, 7, 88, 200, 123, 66 }; + integers = new Integer[] { 5, 1, 89, 255, 7, 88, 200, 123, 66 }; + + names = new String[] { "John", "Apple", "Steve", "Frank", "Earl", "Jessica", "Jake", "Pearl" }; + + employees = new Employee[] { new Employee("John", 23, 5000), new Employee("Steve", 26, 6000), new Employee("Frank", 33, 7000), + new Employee("Earl", 43, 10000), new Employee("Jessica", 23, 4000), new Employee("Pearl", 33, 6000) }; + + } + + @Test + public void naturalSortIntArray() { + + Arrays.sort(numbers); + + } + + @Test + public void comparatorSortIntArray() { + + Arrays.sort(integers, new Comparator() { + + @Override + public int compare(Integer a, Integer b) { + return a - b; + } + }); + + } + + @Test + public void comparatorSortIntArray_Java8Lambda() { + Arrays.sort(integers, (a, b) -> { + return a - b; + }); + + } + + @Test + public void comparableSortEmployeeArrayByAge_NaturalOrder() { + + Arrays.sort(employees); + + } + + @Test + public void comparatorSortEmployeeArrayByName() { + Arrays.sort(employees, new Comparator() { + + @Override + public int compare(Employee o1, Employee o2) { + + return o1.getName().compareTo(o2.getName()); + } + }); + } + + @Test + public void comparatorSortEmployeeArrayByName_Java8Lambda() { + Arrays.sort(employees, (o1, o2) -> { + return o1.getName().compareTo(o2.getName()); + + }); + } + +} diff --git a/core-java/src/test/java/org/baeldung/java/sorting/ComparingTest.java b/core-java/src/test/java/org/baeldung/java/sorting/ComparingTest.java new file mode 100644 index 0000000000..02cdede7db --- /dev/null +++ b/core-java/src/test/java/org/baeldung/java/sorting/ComparingTest.java @@ -0,0 +1,38 @@ +package org.baeldung.java.sorting; + +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; + +import org.junit.Before; +import org.junit.Test; + +public class ComparingTest { + + private List employees; + + @Before + public void initData() { + + // employees = Arrays.asList(new Employee[] { + // new Employee("John", 23, 5000), + // new Employee("Steve", 26, 6000), + // new Employee("Frank", 33, 7000), + // new Employee("Earl", 43, 10000), + // new Employee("Jessica", 23, 4000), + // new Employee("Pearl", 33, 6000) }); + + } + + @Test + public void testComparing() { + employees = Arrays.asList(new Employee[] { new Employee("John", 23, 5000), new Employee("Steve", 26, 6000), new Employee("Frank", 33, 7000), + new Employee("Earl", 43, 10000), new Employee("Jessica", 23, 4000), new Employee("Pearl", 33, 6000) }); + + employees.sort(Comparator.comparing(Employee::getAge).thenComparing(Employee::getName)); + + } + +} diff --git a/core-java/src/test/java/org/baeldung/java/sorting/Employee.java b/core-java/src/test/java/org/baeldung/java/sorting/Employee.java new file mode 100644 index 0000000000..f36e552daf --- /dev/null +++ b/core-java/src/test/java/org/baeldung/java/sorting/Employee.java @@ -0,0 +1,54 @@ +package org.baeldung.java.sorting; + +public class Employee implements Comparable { + private String name; + private int age; + private double salary; + + public Employee() { + + } + + public Employee(String name, int age, double salary) { + super(); + this.name = name; + this.age = age; + this.salary = salary; + } + + public int getAge() { + return age; + } + + public void setAge(int age) { + this.age = age; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public double getSalary() { + return salary; + } + + public void setSalary(double salary) { + this.salary = salary; + } + + @Override + public String toString() { + return "(" + name + "," + age + "," + salary + ")"; + + } + + @Override + public int compareTo(Object o) { + Employee e = (Employee) o; + return getAge() - e.getAge(); + } +} diff --git a/core-java/src/test/java/org/baeldung/java/sorting/ListSort.java b/core-java/src/test/java/org/baeldung/java/sorting/ListSort.java new file mode 100644 index 0000000000..91e1c40607 --- /dev/null +++ b/core-java/src/test/java/org/baeldung/java/sorting/ListSort.java @@ -0,0 +1,59 @@ +package org.baeldung.java.sorting; + +import java.util.Arrays; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; + +import org.junit.Before; +import org.junit.Test; + +public class ListSort { + + private List integers; + private List employees; + + @Before + public void initData() { + integers = Arrays.asList(new Integer[] { 5, 1, 89, 255, 7, 88, 200, 123, 66 }); + + employees = Arrays.asList(new Employee[] { new Employee("John", 23, 5000), new Employee("Steve", 26, 6000), new Employee("Frank", 33, 7000), + new Employee("Earl", 43, 10000), new Employee("Jessica", 23, 4000), new Employee("Pearl", 33, 6000) }); + } + + @Test + public void naturalOrderIntegerListSort() { + + Collections.sort(integers); + + } + + @Test + public void comparableEmployeeSortByAge() { + + Collections.sort(employees); + + } + + @Test + public void comparatorEmployeeSortByName() { + + Collections.sort(employees, new Comparator() { + @Override + public int compare(Employee e1, Employee e2) { + return e1.getName().compareTo(e2.getName()); + } + }); + + } + + @Test + public void comparatorEmployeeSortByNameJava8() { + + Collections.sort(employees, (e1, e2) -> { + return e1.getName().compareTo(e1.getName()); + }); + + } + +} diff --git a/core-java/src/test/java/org/baeldung/java/sorting/MapSort.java b/core-java/src/test/java/org/baeldung/java/sorting/MapSort.java new file mode 100644 index 0000000000..1a9fd30437 --- /dev/null +++ b/core-java/src/test/java/org/baeldung/java/sorting/MapSort.java @@ -0,0 +1,104 @@ +package org.baeldung.java.sorting; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.TreeMap; + +import org.junit.Before; +import org.junit.Test; + +public class MapSort { + + HashMap map; + + @Before + public void initData() { + map = new HashMap<>(); + + map.put(55, "John"); + map.put(22, "Apple"); + map.put(66, "Earl"); + map.put(77, "Pearl"); + map.put(12, "George"); + map.put(6, "Rocky"); + + } + + @Test + public void sortMapByKeys() { + + + List> entries = new ArrayList<>(map.entrySet()); + + Collections.sort(entries, new Comparator>() { + + @Override + public int compare(Entry o1, Entry o2) { + + return o1.getKey().compareTo(o2.getKey()); + } + }); + + HashMap sortedMap = new LinkedHashMap<>(); + + for (Map.Entry entry : entries) { + sortedMap.put(entry.getKey(), entry.getValue()); + } + + + } + + @Test + public void sortMapByValues() { + + //showMap(map); + + List> entries = new ArrayList<>(map.entrySet()); + + Collections.sort(entries, new Comparator>() { + + @Override + public int compare(Entry o1, Entry o2) { + return o1.getValue().compareTo(o2.getValue()); + } + }); + + HashMap sortedMap = new LinkedHashMap<>(); + for (Map.Entry entry : entries) { + sortedMap.put(entry.getKey(), entry.getValue()); + } + +/// showMap(sortedMap); + } + + @Test + public void sortMapViaTreeMap() { + +// showMap(map); + Map treeMap = new TreeMap<>(new Comparator() { + @Override + public int compare(Integer o1, Integer o2) { + return o1 - o2; + } + }); + + treeMap.putAll(map); +// showMap(treeMap); + + } + + public void showMap(Map map1) { + for (Map.Entry entry : map1.entrySet()) { + System.out.println("[Key: " + entry.getKey() + " , " + "Value: " + entry.getValue() + "] "); + + } + + } + +} diff --git a/core-java/src/test/java/org/baeldung/java/sorting/NaturalOrderExample.java b/core-java/src/test/java/org/baeldung/java/sorting/NaturalOrderExample.java new file mode 100644 index 0000000000..bb35557561 --- /dev/null +++ b/core-java/src/test/java/org/baeldung/java/sorting/NaturalOrderExample.java @@ -0,0 +1,34 @@ +package org.baeldung.java.sorting; + +import java.util.Arrays; +import java.util.Comparator; + +import org.junit.Test; + +public class NaturalOrderExample { + + @Test + public void sortArray() { + int[] numbers = new int[] { 5, 1, 89, 255, 7, 88, 200, 123, 66 }; + + Arrays.sort(numbers); + + } + + @Test + public void sortEmployees() { + Employee[] employees = new Employee[] { new Employee("John", 23, 5000), new Employee("Steve", 26, 6000), new Employee("Frank", 33, 7000), + new Employee("Earl", 43, 10000), new Employee("Jessica", 23, 4000), new Employee("Pearl", 33, 6000) }; + + Arrays.sort(employees, new Comparator() { + + @Override + public int compare(Employee o1, Employee o2) { + return -(int) (o1.getSalary() - o2.getSalary()); + } + }); + + + } + +} diff --git a/core-java/src/test/java/org/baeldung/java/sorting/SetSort.java b/core-java/src/test/java/org/baeldung/java/sorting/SetSort.java new file mode 100644 index 0000000000..d892223862 --- /dev/null +++ b/core-java/src/test/java/org/baeldung/java/sorting/SetSort.java @@ -0,0 +1,54 @@ +package org.baeldung.java.sorting; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.TreeSet; + +import org.junit.Before; +import org.junit.Test; + +public class SetSort { + + private HashSet integers; + private TreeSet employees; + + @Before + public void initData() { + + integers = new HashSet<>(); + integers.addAll(Arrays.asList(new Integer[] { 5, 1, 89, 255, 7, 88, 200, 123, 66 })); + + employees = new TreeSet<>(); + + employees.addAll(Arrays.asList(new Employee[] { new Employee("John", 23, 5000), new Employee("Steve", 26, 6000), + new Employee("Frank", 33, 7000), new Employee("Earl", 43, 10000), new Employee("Jessica", 23, 4000), new Employee("Pearl", 33, 6000) })); + + } + + @Test + public void hashSetSortIntegers() { + + + + ArrayList list = new ArrayList(integers); + Collections.sort(list, (i1, i2) -> { + return i2 - i1; + }); + + + } + + @Test + public void treeSetEmployeeSorting() { + + ArrayList list = new ArrayList(employees); + Collections.sort(list, (e1, e2) -> { + return e2.getName().compareTo(e1.getName()); + }); + + } + +} From bf1c98fd1679b3d0b6f6ff6cd766aa98042f2b8f Mon Sep 17 00:00:00 2001 From: maverick Date: Thu, 28 Jul 2016 16:38:17 +0530 Subject: [PATCH 002/265] First Commit for Sorting Examples. --- .../java/com/baeldung/beans/Employee.java | 49 +++++++++ .../org/baeldung/java/sorting/ArraySort.java | 88 +++++++++++++++ .../baeldung/java/sorting/ComparingTest.java | 38 +++++++ .../org/baeldung/java/sorting/Employee.java | 54 +++++++++ .../org/baeldung/java/sorting/ListSort.java | 59 ++++++++++ .../org/baeldung/java/sorting/MapSort.java | 104 ++++++++++++++++++ .../java/sorting/NaturalOrderExample.java | 34 ++++++ .../org/baeldung/java/sorting/SetSort.java | 54 +++++++++ 8 files changed, 480 insertions(+) create mode 100644 core-java/src/main/java/com/baeldung/beans/Employee.java create mode 100644 core-java/src/test/java/org/baeldung/java/sorting/ArraySort.java create mode 100644 core-java/src/test/java/org/baeldung/java/sorting/ComparingTest.java create mode 100644 core-java/src/test/java/org/baeldung/java/sorting/Employee.java create mode 100644 core-java/src/test/java/org/baeldung/java/sorting/ListSort.java create mode 100644 core-java/src/test/java/org/baeldung/java/sorting/MapSort.java create mode 100644 core-java/src/test/java/org/baeldung/java/sorting/NaturalOrderExample.java create mode 100644 core-java/src/test/java/org/baeldung/java/sorting/SetSort.java diff --git a/core-java/src/main/java/com/baeldung/beans/Employee.java b/core-java/src/main/java/com/baeldung/beans/Employee.java new file mode 100644 index 0000000000..78d65e18fe --- /dev/null +++ b/core-java/src/main/java/com/baeldung/beans/Employee.java @@ -0,0 +1,49 @@ +package com.baeldung.beans; + +public class Employee implements Comparable{ + private String name; + private int age; + private double salary; + + public Employee() { + + } + + public Employee(String name, int age, double salary) { + super(); + this.name = name; + this.age = age; + this.salary = salary; + } + + public int getAge() { + return age; + } + public void setAge(int age) { + this.age = age; + } + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + public double getSalary() { + return salary; + } + public void setSalary(double salary) { + this.salary = salary; + } + + @Override + public String toString() { + return "("+name+","+age+","+salary+")"; + + } + + @Override + public int compareTo(Object o) { + Employee e = (Employee) o; + return getAge() - e.getAge() ; + } +} diff --git a/core-java/src/test/java/org/baeldung/java/sorting/ArraySort.java b/core-java/src/test/java/org/baeldung/java/sorting/ArraySort.java new file mode 100644 index 0000000000..3e55ab7f6a --- /dev/null +++ b/core-java/src/test/java/org/baeldung/java/sorting/ArraySort.java @@ -0,0 +1,88 @@ +package org.baeldung.java.sorting; + +import static org.junit.Assert.*; + +import java.sql.Array; +import java.util.Arrays; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; + +import org.junit.Before; +import org.junit.Test; + +public class ArraySort { + + private int[] numbers; + private Integer[] integers; + private String[] names; + private Employee[] employees; + + @Before + public void initData() { + numbers = new int[] { 5, 1, 89, 255, 7, 88, 200, 123, 66 }; + integers = new Integer[] { 5, 1, 89, 255, 7, 88, 200, 123, 66 }; + + names = new String[] { "John", "Apple", "Steve", "Frank", "Earl", "Jessica", "Jake", "Pearl" }; + + employees = new Employee[] { new Employee("John", 23, 5000), new Employee("Steve", 26, 6000), new Employee("Frank", 33, 7000), + new Employee("Earl", 43, 10000), new Employee("Jessica", 23, 4000), new Employee("Pearl", 33, 6000) }; + + } + + @Test + public void naturalSortIntArray() { + + Arrays.sort(numbers); + + } + + @Test + public void comparatorSortIntArray() { + + Arrays.sort(integers, new Comparator() { + + @Override + public int compare(Integer a, Integer b) { + return a - b; + } + }); + + } + + @Test + public void comparatorSortIntArray_Java8Lambda() { + Arrays.sort(integers, (a, b) -> { + return a - b; + }); + + } + + @Test + public void comparableSortEmployeeArrayByAge_NaturalOrder() { + + Arrays.sort(employees); + + } + + @Test + public void comparatorSortEmployeeArrayByName() { + Arrays.sort(employees, new Comparator() { + + @Override + public int compare(Employee o1, Employee o2) { + + return o1.getName().compareTo(o2.getName()); + } + }); + } + + @Test + public void comparatorSortEmployeeArrayByName_Java8Lambda() { + Arrays.sort(employees, (o1, o2) -> { + return o1.getName().compareTo(o2.getName()); + + }); + } + +} diff --git a/core-java/src/test/java/org/baeldung/java/sorting/ComparingTest.java b/core-java/src/test/java/org/baeldung/java/sorting/ComparingTest.java new file mode 100644 index 0000000000..02cdede7db --- /dev/null +++ b/core-java/src/test/java/org/baeldung/java/sorting/ComparingTest.java @@ -0,0 +1,38 @@ +package org.baeldung.java.sorting; + +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; + +import org.junit.Before; +import org.junit.Test; + +public class ComparingTest { + + private List employees; + + @Before + public void initData() { + + // employees = Arrays.asList(new Employee[] { + // new Employee("John", 23, 5000), + // new Employee("Steve", 26, 6000), + // new Employee("Frank", 33, 7000), + // new Employee("Earl", 43, 10000), + // new Employee("Jessica", 23, 4000), + // new Employee("Pearl", 33, 6000) }); + + } + + @Test + public void testComparing() { + employees = Arrays.asList(new Employee[] { new Employee("John", 23, 5000), new Employee("Steve", 26, 6000), new Employee("Frank", 33, 7000), + new Employee("Earl", 43, 10000), new Employee("Jessica", 23, 4000), new Employee("Pearl", 33, 6000) }); + + employees.sort(Comparator.comparing(Employee::getAge).thenComparing(Employee::getName)); + + } + +} diff --git a/core-java/src/test/java/org/baeldung/java/sorting/Employee.java b/core-java/src/test/java/org/baeldung/java/sorting/Employee.java new file mode 100644 index 0000000000..f36e552daf --- /dev/null +++ b/core-java/src/test/java/org/baeldung/java/sorting/Employee.java @@ -0,0 +1,54 @@ +package org.baeldung.java.sorting; + +public class Employee implements Comparable { + private String name; + private int age; + private double salary; + + public Employee() { + + } + + public Employee(String name, int age, double salary) { + super(); + this.name = name; + this.age = age; + this.salary = salary; + } + + public int getAge() { + return age; + } + + public void setAge(int age) { + this.age = age; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public double getSalary() { + return salary; + } + + public void setSalary(double salary) { + this.salary = salary; + } + + @Override + public String toString() { + return "(" + name + "," + age + "," + salary + ")"; + + } + + @Override + public int compareTo(Object o) { + Employee e = (Employee) o; + return getAge() - e.getAge(); + } +} diff --git a/core-java/src/test/java/org/baeldung/java/sorting/ListSort.java b/core-java/src/test/java/org/baeldung/java/sorting/ListSort.java new file mode 100644 index 0000000000..91e1c40607 --- /dev/null +++ b/core-java/src/test/java/org/baeldung/java/sorting/ListSort.java @@ -0,0 +1,59 @@ +package org.baeldung.java.sorting; + +import java.util.Arrays; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; + +import org.junit.Before; +import org.junit.Test; + +public class ListSort { + + private List integers; + private List employees; + + @Before + public void initData() { + integers = Arrays.asList(new Integer[] { 5, 1, 89, 255, 7, 88, 200, 123, 66 }); + + employees = Arrays.asList(new Employee[] { new Employee("John", 23, 5000), new Employee("Steve", 26, 6000), new Employee("Frank", 33, 7000), + new Employee("Earl", 43, 10000), new Employee("Jessica", 23, 4000), new Employee("Pearl", 33, 6000) }); + } + + @Test + public void naturalOrderIntegerListSort() { + + Collections.sort(integers); + + } + + @Test + public void comparableEmployeeSortByAge() { + + Collections.sort(employees); + + } + + @Test + public void comparatorEmployeeSortByName() { + + Collections.sort(employees, new Comparator() { + @Override + public int compare(Employee e1, Employee e2) { + return e1.getName().compareTo(e2.getName()); + } + }); + + } + + @Test + public void comparatorEmployeeSortByNameJava8() { + + Collections.sort(employees, (e1, e2) -> { + return e1.getName().compareTo(e1.getName()); + }); + + } + +} diff --git a/core-java/src/test/java/org/baeldung/java/sorting/MapSort.java b/core-java/src/test/java/org/baeldung/java/sorting/MapSort.java new file mode 100644 index 0000000000..1a9fd30437 --- /dev/null +++ b/core-java/src/test/java/org/baeldung/java/sorting/MapSort.java @@ -0,0 +1,104 @@ +package org.baeldung.java.sorting; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.TreeMap; + +import org.junit.Before; +import org.junit.Test; + +public class MapSort { + + HashMap map; + + @Before + public void initData() { + map = new HashMap<>(); + + map.put(55, "John"); + map.put(22, "Apple"); + map.put(66, "Earl"); + map.put(77, "Pearl"); + map.put(12, "George"); + map.put(6, "Rocky"); + + } + + @Test + public void sortMapByKeys() { + + + List> entries = new ArrayList<>(map.entrySet()); + + Collections.sort(entries, new Comparator>() { + + @Override + public int compare(Entry o1, Entry o2) { + + return o1.getKey().compareTo(o2.getKey()); + } + }); + + HashMap sortedMap = new LinkedHashMap<>(); + + for (Map.Entry entry : entries) { + sortedMap.put(entry.getKey(), entry.getValue()); + } + + + } + + @Test + public void sortMapByValues() { + + //showMap(map); + + List> entries = new ArrayList<>(map.entrySet()); + + Collections.sort(entries, new Comparator>() { + + @Override + public int compare(Entry o1, Entry o2) { + return o1.getValue().compareTo(o2.getValue()); + } + }); + + HashMap sortedMap = new LinkedHashMap<>(); + for (Map.Entry entry : entries) { + sortedMap.put(entry.getKey(), entry.getValue()); + } + +/// showMap(sortedMap); + } + + @Test + public void sortMapViaTreeMap() { + +// showMap(map); + Map treeMap = new TreeMap<>(new Comparator() { + @Override + public int compare(Integer o1, Integer o2) { + return o1 - o2; + } + }); + + treeMap.putAll(map); +// showMap(treeMap); + + } + + public void showMap(Map map1) { + for (Map.Entry entry : map1.entrySet()) { + System.out.println("[Key: " + entry.getKey() + " , " + "Value: " + entry.getValue() + "] "); + + } + + } + +} diff --git a/core-java/src/test/java/org/baeldung/java/sorting/NaturalOrderExample.java b/core-java/src/test/java/org/baeldung/java/sorting/NaturalOrderExample.java new file mode 100644 index 0000000000..bb35557561 --- /dev/null +++ b/core-java/src/test/java/org/baeldung/java/sorting/NaturalOrderExample.java @@ -0,0 +1,34 @@ +package org.baeldung.java.sorting; + +import java.util.Arrays; +import java.util.Comparator; + +import org.junit.Test; + +public class NaturalOrderExample { + + @Test + public void sortArray() { + int[] numbers = new int[] { 5, 1, 89, 255, 7, 88, 200, 123, 66 }; + + Arrays.sort(numbers); + + } + + @Test + public void sortEmployees() { + Employee[] employees = new Employee[] { new Employee("John", 23, 5000), new Employee("Steve", 26, 6000), new Employee("Frank", 33, 7000), + new Employee("Earl", 43, 10000), new Employee("Jessica", 23, 4000), new Employee("Pearl", 33, 6000) }; + + Arrays.sort(employees, new Comparator() { + + @Override + public int compare(Employee o1, Employee o2) { + return -(int) (o1.getSalary() - o2.getSalary()); + } + }); + + + } + +} diff --git a/core-java/src/test/java/org/baeldung/java/sorting/SetSort.java b/core-java/src/test/java/org/baeldung/java/sorting/SetSort.java new file mode 100644 index 0000000000..d892223862 --- /dev/null +++ b/core-java/src/test/java/org/baeldung/java/sorting/SetSort.java @@ -0,0 +1,54 @@ +package org.baeldung.java.sorting; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.TreeSet; + +import org.junit.Before; +import org.junit.Test; + +public class SetSort { + + private HashSet integers; + private TreeSet employees; + + @Before + public void initData() { + + integers = new HashSet<>(); + integers.addAll(Arrays.asList(new Integer[] { 5, 1, 89, 255, 7, 88, 200, 123, 66 })); + + employees = new TreeSet<>(); + + employees.addAll(Arrays.asList(new Employee[] { new Employee("John", 23, 5000), new Employee("Steve", 26, 6000), + new Employee("Frank", 33, 7000), new Employee("Earl", 43, 10000), new Employee("Jessica", 23, 4000), new Employee("Pearl", 33, 6000) })); + + } + + @Test + public void hashSetSortIntegers() { + + + + ArrayList list = new ArrayList(integers); + Collections.sort(list, (i1, i2) -> { + return i2 - i1; + }); + + + } + + @Test + public void treeSetEmployeeSorting() { + + ArrayList list = new ArrayList(employees); + Collections.sort(list, (e1, e2) -> { + return e2.getName().compareTo(e1.getName()); + }); + + } + +} From 7c0af736049d5c57a6fe4c6b04ce45a67dab47de Mon Sep 17 00:00:00 2001 From: i032048 Date: Thu, 28 Jul 2016 18:03:48 +0300 Subject: [PATCH 003/265] initial push for core-java-9 tutorials --- core-java-9/.gitignore | 13 ++ core-java-9/README.md | 5 + core-java-9/pom.xml | 138 +++++++++++++++++ core-java-9/src/main/java/.gitignore | 13 ++ .../baeldung/java9/process/ProcessUtils.java | 48 ++++++ .../baeldung/java9/process/ServiceMain.java | 22 +++ core-java-9/src/main/resources/logback.xml | 16 ++ core-java-9/src/test/build.bat | 10 ++ .../test/java/com/baeldung/java9/Main.java | 22 +++ .../java9/MultiResultionImageTest.java | 48 ++++++ .../com/baeldung/java9/httpclient/Main.java | 14 ++ .../java9/httpclient/SimpleHttpRequests.java | 146 ++++++++++++++++++ .../baeldung/java9/language/DiamondTest.java | 36 +++++ .../java9/language/PrivateInterface.java | 23 +++ .../java9/language/TryWithResourcesTest.java | 70 +++++++++ .../java/com/baeldung/java9/process/Main.java | 18 +++ .../baeldung/java9/process/ProcessApi.java | 112 ++++++++++++++ core-java-9/src/test/resources/.gitignore | 13 ++ 18 files changed, 767 insertions(+) create mode 100644 core-java-9/.gitignore create mode 100644 core-java-9/README.md create mode 100644 core-java-9/pom.xml create mode 100644 core-java-9/src/main/java/.gitignore create mode 100644 core-java-9/src/main/java/com/baeldung/java9/process/ProcessUtils.java create mode 100644 core-java-9/src/main/java/com/baeldung/java9/process/ServiceMain.java create mode 100644 core-java-9/src/main/resources/logback.xml create mode 100644 core-java-9/src/test/build.bat create mode 100644 core-java-9/src/test/java/com/baeldung/java9/Main.java create mode 100644 core-java-9/src/test/java/com/baeldung/java9/MultiResultionImageTest.java create mode 100644 core-java-9/src/test/java/com/baeldung/java9/httpclient/Main.java create mode 100644 core-java-9/src/test/java/com/baeldung/java9/httpclient/SimpleHttpRequests.java create mode 100644 core-java-9/src/test/java/com/baeldung/java9/language/DiamondTest.java create mode 100644 core-java-9/src/test/java/com/baeldung/java9/language/PrivateInterface.java create mode 100644 core-java-9/src/test/java/com/baeldung/java9/language/TryWithResourcesTest.java create mode 100644 core-java-9/src/test/java/com/baeldung/java9/process/Main.java create mode 100644 core-java-9/src/test/java/com/baeldung/java9/process/ProcessApi.java create mode 100644 core-java-9/src/test/resources/.gitignore diff --git a/core-java-9/.gitignore b/core-java-9/.gitignore new file mode 100644 index 0000000000..83c05e60c8 --- /dev/null +++ b/core-java-9/.gitignore @@ -0,0 +1,13 @@ +*.class + +#folders# +/target +/neoDb* +/data +/src/main/webapp/WEB-INF/classes +*/META-INF/* + +# Packaged files # +*.jar +*.war +*.ear \ No newline at end of file diff --git a/core-java-9/README.md b/core-java-9/README.md new file mode 100644 index 0000000000..b5d4dbef95 --- /dev/null +++ b/core-java-9/README.md @@ -0,0 +1,5 @@ +========= + +## Core Java 9 Examples + +http://inprogress.baeldung.com/java-9-new-features/ \ No newline at end of file diff --git a/core-java-9/pom.xml b/core-java-9/pom.xml new file mode 100644 index 0000000000..06421915a3 --- /dev/null +++ b/core-java-9/pom.xml @@ -0,0 +1,138 @@ + + 4.0.0 + com.baeldung + core-java9 + 0.1-SNAPSHOT + + core-java9 + + + + + + org.slf4j + slf4j-api + ${org.slf4j.version} + + + + + + org.hamcrest + hamcrest-library + ${org.hamcrest.version} + test + + + + junit + junit + ${junit.version} + test + + + + org.mockito + mockito-core + ${mockito.version} + test + + + + + + core-java-9 + + + src/main/resources + true + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + 1.8 + 1.8 + + true + C:\develop\jdks\jdk-9_ea122\bin\javac + 1.9 + + + + + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + + + + + + + + 1.7.13 + 1.0.13 + + + 5.1.3.Final + + + 19.0 + 3.4 + + + 1.3 + 4.12 + 1.10.19 + + + 3.5.1 + + + 2.6 + 2.19.1 + 2.7 + + + + diff --git a/core-java-9/src/main/java/.gitignore b/core-java-9/src/main/java/.gitignore new file mode 100644 index 0000000000..83c05e60c8 --- /dev/null +++ b/core-java-9/src/main/java/.gitignore @@ -0,0 +1,13 @@ +*.class + +#folders# +/target +/neoDb* +/data +/src/main/webapp/WEB-INF/classes +*/META-INF/* + +# Packaged files # +*.jar +*.war +*.ear \ No newline at end of file diff --git a/core-java-9/src/main/java/com/baeldung/java9/process/ProcessUtils.java b/core-java-9/src/main/java/com/baeldung/java9/process/ProcessUtils.java new file mode 100644 index 0000000000..b9c1cf1880 --- /dev/null +++ b/core-java-9/src/main/java/com/baeldung/java9/process/ProcessUtils.java @@ -0,0 +1,48 @@ +package com.baeldung.java9.process; + +import java.io.File; +import java.io.IOException; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; +import java.time.Duration; +import java.time.Instant; +import java.util.stream.Stream; + +import org.junit.Before; +import org.junit.Test; + +import junit.framework.Assert; + +public class ProcessUtils { + + public static String getClassPath(){ + String cp = System.getProperty("java.class.path"); + System.out.println("ClassPath is "+cp); + return cp; + } + + public static File getJavaCmd() throws IOException{ + String javaHome = System.getProperty("java.home"); + File javaCmd; + if(System.getProperty("os.name").startsWith("Win")){ + javaCmd = new File(javaHome, "bin/java.exe"); + }else{ + javaCmd = new File(javaHome, "bin/java"); + } + if(javaCmd.canExecute()){ + return javaCmd; + }else{ + throw new UnsupportedOperationException(javaCmd.getCanonicalPath() + " is not executable"); + } + } + + public static String getMainClass(){ + return System.getProperty("sun.java.command"); + } + + public static String getSystemProperties(){ + StringBuilder sb = new StringBuilder(); + System.getProperties().forEach((s1, s2) -> sb.append(s1 +" - "+ s2) ); + return sb.toString(); + } +} diff --git a/core-java-9/src/main/java/com/baeldung/java9/process/ServiceMain.java b/core-java-9/src/main/java/com/baeldung/java9/process/ServiceMain.java new file mode 100644 index 0000000000..458f746496 --- /dev/null +++ b/core-java-9/src/main/java/com/baeldung/java9/process/ServiceMain.java @@ -0,0 +1,22 @@ +package com.baeldung.java9.process; + +import java.util.Optional; + +public class ServiceMain { + + public static void main(String[] args) throws InterruptedException { + ProcessHandle thisProcess = ProcessHandle.current(); + long pid = thisProcess.getPid(); + + + Optional opArgs = Optional.ofNullable(args); + String procName = opArgs.map(str -> str.length > 0 ? str[0] : null).orElse(System.getProperty("sun.java.command")); + + for (int i = 0; i < 10000; i++) { + System.out.println("Process " + procName + " with ID " + pid + " is running!"); + Thread.sleep(10000); + } + + } + +} diff --git a/core-java-9/src/main/resources/logback.xml b/core-java-9/src/main/resources/logback.xml new file mode 100644 index 0000000000..eefdc7a337 --- /dev/null +++ b/core-java-9/src/main/resources/logback.xml @@ -0,0 +1,16 @@ + + + + + web - %date [%thread] %-5level %logger{36} - %message%n + + + + + + + + + + + \ No newline at end of file diff --git a/core-java-9/src/test/build.bat b/core-java-9/src/test/build.bat new file mode 100644 index 0000000000..c6208b89d2 --- /dev/null +++ b/core-java-9/src/test/build.bat @@ -0,0 +1,10 @@ +@echo off +REM C:\develop\jdks\jdk-9_ea123\bin\javac +REM +REM C:\develop\jdks\jdk1.8.0_45\bin\javac +@echo on +C:\develop\jdks\jdk-9_ea123\bin\javac -Werror -cp C:\Users\i032048\.m2\repository\org\hamcrest\hamcrest-library\1.3\hamcrest-library-1.3.jar;C:\Users\i032048\.m2\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;C:\Users\i032048\.m2\repository\junit\junit\4.4\junit-4.4.jar;C:\develop\git-repos\baeldung-tutorials\core-java-9\target\test-classes;C:\develop\git-repos\baeldung-tutorials\core-java-9\src\test %1 + + +@echo off +REM com\baeldung\java9\language\TryWithResourcesTest.java diff --git a/core-java-9/src/test/java/com/baeldung/java9/Main.java b/core-java-9/src/test/java/com/baeldung/java9/Main.java new file mode 100644 index 0000000000..a41541f000 --- /dev/null +++ b/core-java-9/src/test/java/com/baeldung/java9/Main.java @@ -0,0 +1,22 @@ +package com.baeldung.java9; + +import com.baeldung.java9.language.PrivateInterface; +import com.baeldung.java9.language.TryWithResourcesTest; + +public class Main { + + public static void main(String args[]){ + PrivateInterface pi =new PrivateInterface() { + }; + pi.check(); + } + +// public static void main(String[] args) throws Exception { +// MultiResultionImageTest mri = new MultiResultionImageTest(); +// mri.baseMultiResImageTest(); +// +// TryWithResourcesTest tt = new TryWithResourcesTest(); +// // tt.test1(); +// } + +} diff --git a/core-java-9/src/test/java/com/baeldung/java9/MultiResultionImageTest.java b/core-java-9/src/test/java/com/baeldung/java9/MultiResultionImageTest.java new file mode 100644 index 0000000000..d6c16b91bc --- /dev/null +++ b/core-java-9/src/test/java/com/baeldung/java9/MultiResultionImageTest.java @@ -0,0 +1,48 @@ +package com.baeldung.java9; + +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertSame; + +import java.awt.Image; +import java.awt.image.BaseMultiResolutionImage; +import java.awt.image.BufferedImage; +import java.awt.image.MultiResolutionImage; +import java.util.List; + +import org.junit.Test; + +public class MultiResultionImageTest { + + + @Test + public void baseMultiResImageTest() { + int baseIndex = 1; + int length = 4; + BufferedImage[] resolutionVariants = new BufferedImage[length]; + for (int i = 0; i < length; i++) { + resolutionVariants[i] = createImage(i); + } + MultiResolutionImage bmrImage = new BaseMultiResolutionImage(baseIndex, resolutionVariants); + List rvImageList = bmrImage.getResolutionVariants(); + assertEquals("MultiResoltion Image shoudl contain the same number of resolution variants!", rvImageList.size(), length); + + for (int i = 0; i < length; i++) { + int imageSize = getSize(i); + Image testRVImage = bmrImage.getResolutionVariant(imageSize, imageSize); + assertSame("Images should be the same", testRVImage, resolutionVariants[i]); + } + + } + + private static int getSize(int i) { + return 8 * (i + 1); + } + + + private static BufferedImage createImage(int i) { + return new BufferedImage(getSize(i), getSize(i), + BufferedImage.TYPE_INT_RGB); + } + +} diff --git a/core-java-9/src/test/java/com/baeldung/java9/httpclient/Main.java b/core-java-9/src/test/java/com/baeldung/java9/httpclient/Main.java new file mode 100644 index 0000000000..c7d2f43800 --- /dev/null +++ b/core-java-9/src/test/java/com/baeldung/java9/httpclient/Main.java @@ -0,0 +1,14 @@ +package com.baeldung.java9.httpclient; + +public class Main { + + public static void main(String[] args) throws Exception { + SimpleHttpRequests shr = new SimpleHttpRequests(); + shr.quickGet(); + shr.PostMehtod(); + + shr.configureHttpClient(); + shr.asyncGet(); + } + +} diff --git a/core-java-9/src/test/java/com/baeldung/java9/httpclient/SimpleHttpRequests.java b/core-java-9/src/test/java/com/baeldung/java9/httpclient/SimpleHttpRequests.java new file mode 100644 index 0000000000..78a38f3357 --- /dev/null +++ b/core-java-9/src/test/java/com/baeldung/java9/httpclient/SimpleHttpRequests.java @@ -0,0 +1,146 @@ +package com.baeldung.java9.httpclient; + +import static java.net.HttpURLConnection.HTTP_OK; +import static org.junit.Assert.assertTrue; + +import java.io.IOException; +import java.net.CookieManager; +import java.net.CookiePolicy; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.http.HttpClient; +import java.net.http.HttpHeaders; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.security.NoSuchAlgorithmException; +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; + +import javax.net.ssl.SSLContext; +import javax.net.ssl.SSLParameters; + +import org.junit.Before; +import org.junit.Test; + +public class SimpleHttpRequests { + + // private URI httpURI = + + @Before + public void init() { + + } + + @Test + public void quickGet() throws IOException, InterruptedException, URISyntaxException { + HttpRequest request = HttpRequest.create(new URI("http://localhost:8080")).GET(); + HttpResponse response = request.response(); + System.out.println(printHeaders(response.headers())); + String responseBody = response.body(HttpResponse.asString()); + assertTrue("Get response body size", responseBody.length() > 10); + } + + @Test + public void asyncGet() throws URISyntaxException, IOException, InterruptedException, ExecutionException{ + HttpRequest request = HttpRequest.create(new URI("http://localhost:8080")).GET(); + long before = System.currentTimeMillis(); + CompletableFuture futureResponse = request.responseAsync(); + futureResponse.thenAccept( response -> { + HttpHeaders hs = response.headers(); + System.out.println(Thread.currentThread()+"\nHeaders:----------------------\n"+ printHeaders(hs)); + String responseBody = response.body(HttpResponse.asString()); + + + //System.out.println(responseBody); + }); + + + + + long after = System.currentTimeMillis(); + System.out.println(Thread.currentThread()+" waits "+ (after - before)); + assertTrue("Thread waits", (after - before) < 1500); + + futureResponse.join(); + + // Calculate some other thing in this Thread + //HttpResponse response = futureResponse.get(); + long afterAfter = System.currentTimeMillis(); + System.out.println(Thread.currentThread()+ "(afterAfter - before)"+ (afterAfter - before)); + + //String responseBody = response.body(HttpResponse.asString()); + //HttpHeaders hs = response.headers(); + //System.out.println(responseBody); + // assertTrue("Get response body size", responseBody.length() > 10); + } + + @Test + public void PostMehtod() throws URISyntaxException, IOException, InterruptedException { + HttpRequest.Builder requestBuilder = HttpRequest.create(new URI("http://localhost:8080")); + requestBuilder.body(HttpRequest.fromString("param1=foo,param2=bar")).followRedirects(HttpClient.Redirect.SECURE); + HttpRequest request = requestBuilder.POST(); + HttpResponse response = request.response(); + int statusCode = response.statusCode(); + assertTrue("HTTP return code", statusCode == HTTP_OK); + } + + @Test + public void configureHttpClient() throws NoSuchAlgorithmException, URISyntaxException, IOException, InterruptedException{ + CookieManager cManager = new CookieManager(); + cManager.setCookiePolicy(CookiePolicy.ACCEPT_ORIGINAL_SERVER); + + SSLParameters sslParam = new SSLParameters (new String[] { "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256" }, new String[] { "TLSv1.2" }); + + HttpClient.Builder hcBuilder = HttpClient.create(); + hcBuilder.cookieManager(cManager).sslContext(SSLContext.getDefault()).sslParameters(sslParam); + HttpClient httpClient = hcBuilder.build(); + HttpRequest.Builder reqBuilder = httpClient.request(new URI("https://localhost:8443")); + + HttpRequest request = reqBuilder.followRedirects(HttpClient.Redirect.ALWAYS).GET(); + HttpResponse response = request.response(); + int statusCode = response.statusCode(); + System.out.println(response.body(HttpResponse.asString())); + assertTrue("HTTP return code", statusCode == HTTP_OK); + } + + SSLParameters getDefaultSSLParameters() throws NoSuchAlgorithmException{ + SSLParameters sslP1 = SSLContext.getDefault().getSupportedSSLParameters(); + String [] proto = sslP1.getApplicationProtocols(); + String [] cifers = sslP1.getCipherSuites(); + System.out.println(printStringArr(proto)); + System.out.println(printStringArr(cifers)); + return sslP1; + } + + String printStringArr(String ... args ){ + if(args == null){ + return null; + } + StringBuilder sb = new StringBuilder(); + for (String s : args){ + sb.append(s); + sb.append("\n"); + } + return sb.toString(); + } + + String printHeaders(HttpHeaders h){ + if(h == null){ + return null; + } + + StringBuilder sb = new StringBuilder(); + Map> hMap = h.map(); + for(String k : hMap.keySet()){ + sb.append(k).append(":"); + List l = hMap.get(k); + if( l != null ){ + l.forEach( s -> { sb.append(s).append(","); } ); + } + sb.append("\n"); + } + return sb.toString(); + } +} diff --git a/core-java-9/src/test/java/com/baeldung/java9/language/DiamondTest.java b/core-java-9/src/test/java/com/baeldung/java9/language/DiamondTest.java new file mode 100644 index 0000000000..33da6486f4 --- /dev/null +++ b/core-java-9/src/test/java/com/baeldung/java9/language/DiamondTest.java @@ -0,0 +1,36 @@ +package com.baeldung.java9.language; + +import org.junit.Test; + +public class DiamondTest { + + static class FooClass { + FooClass(X x) { + } + + FooClass(X x, Z z) { + } + } + + @Test + public void diamondTest() { + FooClass fc = new FooClass<>(1) { + }; + FooClass fc0 = new FooClass<>(1) { + }; + FooClass fc1 = new FooClass<>(1) { + }; + FooClass fc2 = new FooClass<>(1) { + }; + + FooClass fc3 = new FooClass<>(1, "") { + }; + FooClass fc4 = new FooClass<>(1, "") { + }; + FooClass fc5 = new FooClass<>(1, "") { + }; + FooClass fc6 = new FooClass<>(1, "") { + }; + + } +} diff --git a/core-java-9/src/test/java/com/baeldung/java9/language/PrivateInterface.java b/core-java-9/src/test/java/com/baeldung/java9/language/PrivateInterface.java new file mode 100644 index 0000000000..fd6a496b18 --- /dev/null +++ b/core-java-9/src/test/java/com/baeldung/java9/language/PrivateInterface.java @@ -0,0 +1,23 @@ +package com.baeldung.java9.language; + +public interface PrivateInterface { + + private static String staticPrivate() { + return "static private"; + } + + private String instancePrivate() { + return "instance private"; + } + + public default void check(){ + String result = staticPrivate(); + if (!result.equals("static private")) + throw new AssertionError("Incorrect result for static private interface method"); + PrivateInterface pvt = new PrivateInterface() { + }; + result = pvt.instancePrivate(); + if (!result.equals("instance private")) + throw new AssertionError("Incorrect result for instance private interface method"); + } +} diff --git a/core-java-9/src/test/java/com/baeldung/java9/language/TryWithResourcesTest.java b/core-java-9/src/test/java/com/baeldung/java9/language/TryWithResourcesTest.java new file mode 100644 index 0000000000..687dfbc390 --- /dev/null +++ b/core-java-9/src/test/java/com/baeldung/java9/language/TryWithResourcesTest.java @@ -0,0 +1,70 @@ +package com.baeldung.java9.language; + +import static org.junit.Assert.assertEquals; +import org.junit.Test; + +public class TryWithResourcesTest { + + static int closeCount = 0; + + static class MyAutoCloseable implements AutoCloseable{ + final FinalWrapper finalWrapper = new FinalWrapper(); + + public void close() { + closeCount++; + } + + static class FinalWrapper { + public final AutoCloseable finalCloseable = new AutoCloseable() { + @Override + public void close() throws Exception { + closeCount++; + } + }; + } + } + + @Test + public void tryWithResourcesTest() { + MyAutoCloseable mac = new MyAutoCloseable(); + + try (mac) { + assertEquals("Expected and Actual does not match", 0, closeCount); + } + + try (mac.finalWrapper.finalCloseable) { + assertEquals("Expected and Actual does not match", 1, closeCount); + } catch (Exception ex) { + } + + try (new MyAutoCloseable() { }.finalWrapper.finalCloseable) { + assertEquals("Expected and Actual does not match", 2, closeCount); + } catch (Exception ex) { + } + + try ((closeCount > 0 ? mac : new MyAutoCloseable()).finalWrapper.finalCloseable) { + assertEquals("Expected and Actual does not match", 3, closeCount); + } catch (Exception ex) { + } + + try { + throw new CloseableException(); + } catch (CloseableException ex) { + try (ex) { + assertEquals("Expected and Actual does not match", 4, closeCount); + } + } + assertEquals("Expected and Actual does not match", 5, closeCount); + } + + + static class CloseableException extends Exception implements AutoCloseable { + @Override + public void close() { + closeCount++; + } + } + +} + + diff --git a/core-java-9/src/test/java/com/baeldung/java9/process/Main.java b/core-java-9/src/test/java/com/baeldung/java9/process/Main.java new file mode 100644 index 0000000000..b16baf4676 --- /dev/null +++ b/core-java-9/src/test/java/com/baeldung/java9/process/Main.java @@ -0,0 +1,18 @@ +package com.baeldung.java9.process; + +import java.security.NoSuchAlgorithmException; + +public class Main { + + public static void main(String[] args) throws Exception { + ProcessApi procApi = new ProcessApi(); + procApi.createAndDestroyProcess(); + + procApi.processInfoExample(); + + Thread.sleep(40200); + System.out.println("_______END!___________"); + + } + +} diff --git a/core-java-9/src/test/java/com/baeldung/java9/process/ProcessApi.java b/core-java-9/src/test/java/com/baeldung/java9/process/ProcessApi.java new file mode 100644 index 0000000000..419516cb64 --- /dev/null +++ b/core-java-9/src/test/java/com/baeldung/java9/process/ProcessApi.java @@ -0,0 +1,112 @@ +package com.baeldung.java9.process; + +import java.io.IOException; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; +import java.time.Duration; +import java.time.Instant; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import java.util.concurrent.CompletableFuture; +import java.util.stream.Stream; + +import org.junit.Before; +import org.junit.Test; + +import junit.framework.Assert; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +public class ProcessApi { + + + @Before + public void init() { + + } + + @Test + public void processInfoExample()throws NoSuchAlgorithmException{ + ProcessHandle self = ProcessHandle.current(); + long PID = self.getPid(); + ProcessHandle.Info procInfo = self.info(); + Optional args = procInfo.arguments(); + Optional cmd = procInfo.commandLine(); + Optional startTime = procInfo.startInstant(); + Optional cpuUsage = procInfo.totalCpuDuration(); + + waistCPU(); + System.out.println("Args "+ args); + System.out.println("Command " +cmd.orElse("EmptyCmd")); + System.out.println("Start time: "+ startTime.get().toString()); + System.out.println(cpuUsage.get().toMillis()); + + Stream allProc = ProcessHandle.current().children(); + allProc.forEach(p -> { + System.out.println("Proc "+ p.getPid()); + }); + + } + + @Test + public void createAndDestroyProcess() throws IOException, InterruptedException{ + int numberOfChildProcesses = 5; + for(int i=0; i < numberOfChildProcesses; i++){ + createNewJVM(ServiceMain.class, i).getPid(); + } + + Stream childProc = ProcessHandle.current().children(); + assertEquals( childProc.count(), numberOfChildProcesses); + + childProc = ProcessHandle.current().children(); + childProc.forEach(processHandle -> { + assertTrue("Process "+ processHandle.getPid() +" should be alive!", processHandle.isAlive()); + CompletableFuture onProcExit = processHandle.onExit(); + onProcExit.thenAccept(procHandle -> { + System.out.println("Process with PID "+ procHandle.getPid() + " has stopped"); + }); + }); + + Thread.sleep(10000); + + childProc = ProcessHandle.current().children(); + childProc.forEach(procHandle -> { + assertTrue("Could not kill process "+procHandle.getPid(), procHandle.destroy()); + }); + + Thread.sleep(5000); + + childProc = ProcessHandle.current().children(); + childProc.forEach(procHandle -> { + assertFalse("Process "+ procHandle.getPid() +" should not be alive!", procHandle.isAlive()); + }); + + } + + private Process createNewJVM(Class mainClass, int number) throws IOException{ + ArrayList cmdParams = new ArrayList(5); + cmdParams.add(ProcessUtils.getJavaCmd().getAbsolutePath()); + cmdParams.add("-cp"); + cmdParams.add(ProcessUtils.getClassPath()); + cmdParams.add(mainClass.getName()); + cmdParams.add("Service "+ number); + ProcessBuilder myService = new ProcessBuilder(cmdParams); + myService.inheritIO(); + return myService.start(); + } + + private void waistCPU() throws NoSuchAlgorithmException{ + ArrayList randArr = new ArrayList(4096); + SecureRandom sr = SecureRandom.getInstanceStrong(); + Duration somecpu = Duration.ofMillis(4200L); + Instant end = Instant.now().plus(somecpu); + while (Instant.now().isBefore(end)) { + //System.out.println(sr.nextInt()); + randArr.add( sr.nextInt() ); + } + } + +} diff --git a/core-java-9/src/test/resources/.gitignore b/core-java-9/src/test/resources/.gitignore new file mode 100644 index 0000000000..83c05e60c8 --- /dev/null +++ b/core-java-9/src/test/resources/.gitignore @@ -0,0 +1,13 @@ +*.class + +#folders# +/target +/neoDb* +/data +/src/main/webapp/WEB-INF/classes +*/META-INF/* + +# Packaged files # +*.jar +*.war +*.ear \ No newline at end of file From 067d99aaa50322c59ca59bdfcdbb68a03ce4d958 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Garc=C3=ADa=20Heredero?= Date: Mon, 1 Aug 2016 10:39:12 +0200 Subject: [PATCH 004/265] Added HtmlUnit dependency --- spring-mvc-java/pom.xml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/spring-mvc-java/pom.xml b/spring-mvc-java/pom.xml index 33d6306c5a..4faea93caa 100644 --- a/spring-mvc-java/pom.xml +++ b/spring-mvc-java/pom.xml @@ -117,6 +117,12 @@ ${org.springframework.version} test + + net.sourceforge.htmlunit + htmlunit + ${net.sourceforge.htmlunit} + test + org.thymeleaf @@ -234,6 +240,7 @@ 4.4.1 4.5 2.9.0 + 2.23 3.5.1 2.6 @@ -245,4 +252,4 @@ 1.8.7 - \ No newline at end of file + From 17166a539467d0e2ce51497cae1f2a9823244d2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Garc=C3=ADa=20Heredero?= Date: Mon, 1 Aug 2016 10:42:00 +0200 Subject: [PATCH 005/265] Create MessageController.java --- .../web/controller/MessageController.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 spring-mvc-java/src/main/java/com/baeldung/web/controller/MessageController.java diff --git a/spring-mvc-java/src/main/java/com/baeldung/web/controller/MessageController.java b/spring-mvc-java/src/main/java/com/baeldung/web/controller/MessageController.java new file mode 100644 index 0000000000..cfc73aeabe --- /dev/null +++ b/spring-mvc-java/src/main/java/com/baeldung/web/controller/MessageController.java @@ -0,0 +1,24 @@ +package com.baeldung.web.controller; + +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; + +@Controller +@RequestMapping("/message") +public class MessageController { + + @RequestMapping(value = "/showForm", method = RequestMethod.GET) + public String showForm() { + return "message"; + } + + @RequestMapping(value = "/processForm", method = RequestMethod.POST) + public String processForm(@RequestParam("message") final String message, final Model model) { + model.addAttribute("message", message); + return "message"; + } + +} From 70ed3059549646774f68fcb1d7e36a0268f5be1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Garc=C3=ADa=20Heredero?= Date: Mon, 1 Aug 2016 10:43:53 +0200 Subject: [PATCH 006/265] Create TestConfig.java --- .../com/baeldung/htmlunit/TestConfig.java | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 spring-mvc-java/src/test/java/com/baeldung/htmlunit/TestConfig.java diff --git a/spring-mvc-java/src/test/java/com/baeldung/htmlunit/TestConfig.java b/spring-mvc-java/src/test/java/com/baeldung/htmlunit/TestConfig.java new file mode 100644 index 0000000000..1357310b1f --- /dev/null +++ b/spring-mvc-java/src/test/java/com/baeldung/htmlunit/TestConfig.java @@ -0,0 +1,42 @@ +package com.baeldung.htmlunit; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.ViewResolver; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; +import org.thymeleaf.spring4.SpringTemplateEngine; +import org.thymeleaf.spring4.view.ThymeleafViewResolver; +import org.thymeleaf.templateresolver.ServletContextTemplateResolver; + +@Configuration +@EnableWebMvc +@ComponentScan(basePackages = { "com.baeldung.web.controller" }) +public class TestConfig extends WebMvcConfigurerAdapter { + + @Bean + public ViewResolver thymeleafViewResolver() { + final ThymeleafViewResolver viewResolver = new ThymeleafViewResolver(); + viewResolver.setTemplateEngine(templateEngine()); + viewResolver.setOrder(1); + return viewResolver; + } + + @Bean + public ServletContextTemplateResolver templateResolver() { + final ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver(); + templateResolver.setPrefix("/WEB-INF/templates/"); + templateResolver.setSuffix(".html"); + templateResolver.setTemplateMode("HTML5"); + return templateResolver; + } + + @Bean + public SpringTemplateEngine templateEngine() { + final SpringTemplateEngine templateEngine = new SpringTemplateEngine(); + templateEngine.setTemplateResolver(templateResolver()); + return templateEngine; + } + +} From b882a23ab60be998a673e16b074a85c9922973e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Garc=C3=ADa=20Heredero?= Date: Mon, 1 Aug 2016 10:44:21 +0200 Subject: [PATCH 007/265] Create HtmlUnitAndSpringTest.java --- .../htmlunit/HtmlUnitAndSpringTest.java | 79 +++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitAndSpringTest.java diff --git a/spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitAndSpringTest.java b/spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitAndSpringTest.java new file mode 100644 index 0000000000..dcc7555ae2 --- /dev/null +++ b/spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitAndSpringTest.java @@ -0,0 +1,79 @@ +package com.baeldung.htmlunit; + +import java.io.IOException; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Ignore; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.web.WebAppConfiguration; +import org.springframework.test.web.servlet.htmlunit.MockMvcWebClientBuilder; +import org.springframework.web.context.WebApplicationContext; + +import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException; +import com.gargoylesoftware.htmlunit.WebClient; +import com.gargoylesoftware.htmlunit.html.HtmlForm; +import com.gargoylesoftware.htmlunit.html.HtmlPage; +import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput; +import com.gargoylesoftware.htmlunit.html.HtmlTextInput; + +@RunWith(SpringJUnit4ClassRunner.class) +@WebAppConfiguration +@ContextConfiguration(classes = { TestConfig.class }) +public class HtmlUnitAndSpringTest { + + @Autowired + private WebApplicationContext wac; + + private WebClient webClient; + + @Before + public void setup() { + webClient = MockMvcWebClientBuilder.webAppContextSetup(wac).build(); + } + + @Test + @Ignore + public void givenAMessage_whenSent_thenItShows() { + final String text = "Hello world!"; + HtmlPage page; + + try { + + page = webClient.getPage("http://localhost/message/showForm"); + System.out.println(page.asXml()); + + final HtmlTextInput messageText = page.getHtmlElementById("message"); + messageText.setValueAttribute(text); + + final HtmlForm form = page.getForms().get(0); + final HtmlSubmitInput submit = form.getOneHtmlElementByAttribute("input", "type", "submit"); + final HtmlPage newPage = submit.click(); + + final String receivedText = newPage.getHtmlElementById("received").getTextContent(); + + Assert.assertEquals(receivedText, text); + System.out.println(newPage.asXml()); + + } catch (FailingHttpStatusCodeException | IOException e) { + e.printStackTrace(); + } + + } + + @Test + public void givenAClient_whenEnteringBaeldung_thenPageTitleIsCorrect() throws Exception { + try (final WebClient client = new WebClient()) { + + webClient.getOptions().setThrowExceptionOnScriptError(false); + + final HtmlPage page = webClient.getPage("http://www.baeldung.com/"); + Assert.assertEquals("Baeldung | Java, Spring and Web Development tutorials", page.getTitleText()); + } + } + +} From 12faa318ae4c5c5f645ef4f5559ac9fda954e287 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Garc=C3=ADa=20Heredero?= Date: Mon, 1 Aug 2016 10:44:45 +0200 Subject: [PATCH 008/265] Create HtmlUnitAndJUnitTest.java --- .../htmlunit/HtmlUnitAndJUnitTest.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitAndJUnitTest.java diff --git a/spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitAndJUnitTest.java b/spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitAndJUnitTest.java new file mode 100644 index 0000000000..58e5f9829b --- /dev/null +++ b/spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitAndJUnitTest.java @@ -0,0 +1,22 @@ +package com.baeldung.htmlunit; + +import org.junit.Assert; +import org.junit.Test; + +import com.gargoylesoftware.htmlunit.WebClient; +import com.gargoylesoftware.htmlunit.html.HtmlPage; + +public class HtmlUnitAndJUnitTest { + + @Test + public void givenAClient_whenEnteringBaeldung_thenPageTitleIsCorrect() throws Exception { + try (final WebClient webClient = new WebClient()) { + + webClient.getOptions().setThrowExceptionOnScriptError(false); + + final HtmlPage page = webClient.getPage("http://www.baeldung.com/"); + Assert.assertEquals("Baeldung | Java, Spring and Web Development tutorials", page.getTitleText()); + } + } + +} From 76617960be056f8364f6482b2bb204be44c2cd55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Garc=C3=ADa=20Heredero?= Date: Mon, 1 Aug 2016 10:45:10 +0200 Subject: [PATCH 009/265] Create HtmlUnitWebScraping.java --- .../htmlunit/HtmlUnitWebScraping.java | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitWebScraping.java diff --git a/spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitWebScraping.java b/spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitWebScraping.java new file mode 100644 index 0000000000..16d18717e6 --- /dev/null +++ b/spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitWebScraping.java @@ -0,0 +1,40 @@ +package com.baeldung.htmlunit; + +import java.util.List; + +import com.gargoylesoftware.htmlunit.WebClient; +import com.gargoylesoftware.htmlunit.html.HtmlAnchor; +import com.gargoylesoftware.htmlunit.html.HtmlHeading1; +import com.gargoylesoftware.htmlunit.html.HtmlHeading2; +import com.gargoylesoftware.htmlunit.html.HtmlPage; + +public class HtmlUnitWebScraping { + + public static void main(final String[] args) throws Exception { + try (final WebClient webClient = new WebClient()) { + + webClient.getOptions().setCssEnabled(false); + webClient.getOptions().setJavaScriptEnabled(false); + + final HtmlPage page = webClient.getPage("http://www.baeldung.com/full_archive"); + final HtmlAnchor latestPostLink = (HtmlAnchor) page.getByXPath("(//ul[@class='car-monthlisting']/li)[1]/a").get(0); + + System.out.println("Entering: " + latestPostLink.getHrefAttribute()); + + final HtmlPage postPage = latestPostLink.click(); + + final HtmlHeading1 heading1 = (HtmlHeading1) postPage.getByXPath("//h1").get(0); + System.out.println("Title: " + heading1.getTextContent()); + + final List headings2 = (List) postPage.getByXPath("//h2"); + + final StringBuilder sb = new StringBuilder(heading1.getTextContent()); + for (final HtmlHeading2 h2 : headings2) { + sb.append("\n").append(h2.getTextContent()); + } + + System.out.println(sb.toString()); + } + } + +} From 01b75f259b1259b299700543e58ea24d9ef1b579 Mon Sep 17 00:00:00 2001 From: diego Date: Mon, 1 Aug 2016 18:53:03 +0200 Subject: [PATCH 010/265] Wicket Hello World application --- pom.xml | 1 + wicket-intro/pom.xml | 26 +++++++++++++++++++ .../baeldung/wicket/examples/HelloWorld.html | 5 ++++ .../baeldung/wicket/examples/HelloWorld.java | 10 +++++++ .../examples/HelloWorldApplication.java | 11 ++++++++ wicket-intro/src/main/webapp/WEB-INF/web.xml | 20 ++++++++++++++ 6 files changed, 73 insertions(+) create mode 100644 wicket-intro/pom.xml create mode 100644 wicket-intro/src/main/java/com/baeldung/wicket/examples/HelloWorld.html create mode 100644 wicket-intro/src/main/java/com/baeldung/wicket/examples/HelloWorld.java create mode 100644 wicket-intro/src/main/java/com/baeldung/wicket/examples/HelloWorldApplication.java create mode 100644 wicket-intro/src/main/webapp/WEB-INF/web.xml diff --git a/pom.xml b/pom.xml index d2f5d83b46..8533a0d976 100644 --- a/pom.xml +++ b/pom.xml @@ -101,6 +101,7 @@ lombok redis webjars + wicket-intro mutation-testing spring-mvc-velocity diff --git a/wicket-intro/pom.xml b/wicket-intro/pom.xml new file mode 100644 index 0000000000..119dee8bf6 --- /dev/null +++ b/wicket-intro/pom.xml @@ -0,0 +1,26 @@ + + 4.0.0 + com.baeldung.wicket.examples + HelloWorld + war + 1.0-SNAPSHOT + HelloWorld Maven Webapp + http://maven.apache.org + + + junit + junit + 3.8.1 + test + + + org.apache.wicket + wicket-core + 8.0.0-M1 + + + + HelloWorld + + diff --git a/wicket-intro/src/main/java/com/baeldung/wicket/examples/HelloWorld.html b/wicket-intro/src/main/java/com/baeldung/wicket/examples/HelloWorld.html new file mode 100644 index 0000000000..36afa6bf19 --- /dev/null +++ b/wicket-intro/src/main/java/com/baeldung/wicket/examples/HelloWorld.html @@ -0,0 +1,5 @@ + + + + + diff --git a/wicket-intro/src/main/java/com/baeldung/wicket/examples/HelloWorld.java b/wicket-intro/src/main/java/com/baeldung/wicket/examples/HelloWorld.java new file mode 100644 index 0000000000..bb11a8cb6d --- /dev/null +++ b/wicket-intro/src/main/java/com/baeldung/wicket/examples/HelloWorld.java @@ -0,0 +1,10 @@ +import org.apache.wicket.markup.html.WebPage; +import org.apache.wicket.markup.html.basic.Label; + +package com.baeldung.wicket.examples; + +public class HelloWorld extends WebPage { + public HelloWorld() { + add(new Label("hello", "Hello World!")); + } +} diff --git a/wicket-intro/src/main/java/com/baeldung/wicket/examples/HelloWorldApplication.java b/wicket-intro/src/main/java/com/baeldung/wicket/examples/HelloWorldApplication.java new file mode 100644 index 0000000000..3b50ece908 --- /dev/null +++ b/wicket-intro/src/main/java/com/baeldung/wicket/examples/HelloWorldApplication.java @@ -0,0 +1,11 @@ +import org.apache.wicket.Page; +import org.apache.wicket.protocol.http.WebApplication; + +package com.baeldung.wicket.examples; + +public class HelloWorldApplication extends WebApplication { + @Override + public Class getHomePage() { + return HelloWorld.class; + } +} diff --git a/wicket-intro/src/main/webapp/WEB-INF/web.xml b/wicket-intro/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000000..37d1ebd24f --- /dev/null +++ b/wicket-intro/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,20 @@ + + + + Hello World + + HelloWorldApplication + org.apache.wicket.protocol.http.WicketFilter + + applicationClassName + com.baeldung.wicket.examples.HelloWorldApplication + + + + HelloWorldApplication + /* + + + From 05bef7c9a24320d0ac1d98a5b4f9db2cf41219b6 Mon Sep 17 00:00:00 2001 From: diego Date: Mon, 1 Aug 2016 19:22:54 +0200 Subject: [PATCH 011/265] fixed syntax error --- .../main/java/com/baeldung/wicket/examples/HelloWorld.java | 3 ++- .../com/baeldung/wicket/examples/HelloWorldApplication.java | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/wicket-intro/src/main/java/com/baeldung/wicket/examples/HelloWorld.java b/wicket-intro/src/main/java/com/baeldung/wicket/examples/HelloWorld.java index bb11a8cb6d..976136c70b 100644 --- a/wicket-intro/src/main/java/com/baeldung/wicket/examples/HelloWorld.java +++ b/wicket-intro/src/main/java/com/baeldung/wicket/examples/HelloWorld.java @@ -1,7 +1,8 @@ +package com.baeldung.wicket.examples; + import org.apache.wicket.markup.html.WebPage; import org.apache.wicket.markup.html.basic.Label; -package com.baeldung.wicket.examples; public class HelloWorld extends WebPage { public HelloWorld() { diff --git a/wicket-intro/src/main/java/com/baeldung/wicket/examples/HelloWorldApplication.java b/wicket-intro/src/main/java/com/baeldung/wicket/examples/HelloWorldApplication.java index 3b50ece908..51def5be32 100644 --- a/wicket-intro/src/main/java/com/baeldung/wicket/examples/HelloWorldApplication.java +++ b/wicket-intro/src/main/java/com/baeldung/wicket/examples/HelloWorldApplication.java @@ -1,8 +1,8 @@ +package com.baeldung.wicket.examples; + import org.apache.wicket.Page; import org.apache.wicket.protocol.http.WebApplication; -package com.baeldung.wicket.examples; - public class HelloWorldApplication extends WebApplication { @Override public Class getHomePage() { From d575b735ef1fff5cd9183f81d7b2ffce8a684725 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20R=C3=A4del?= Date: Mon, 8 Aug 2016 06:54:49 +0200 Subject: [PATCH 012/265] Removed context loading tests. --- .../config/client/ConfigClientLiveTest.java | 17 ----------------- .../config/server/ConfigServerListTest.java | 18 ------------------ 2 files changed, 35 deletions(-) delete mode 100644 spring-cloud-config/client/src/test/java/com/baeldung/spring/cloud/config/client/ConfigClientLiveTest.java delete mode 100644 spring-cloud-config/server/src/test/java/com/baeldung/spring/cloud/config/server/ConfigServerListTest.java diff --git a/spring-cloud-config/client/src/test/java/com/baeldung/spring/cloud/config/client/ConfigClientLiveTest.java b/spring-cloud-config/client/src/test/java/com/baeldung/spring/cloud/config/client/ConfigClientLiveTest.java deleted file mode 100644 index 058fd45f35..0000000000 --- a/spring-cloud-config/client/src/test/java/com/baeldung/spring/cloud/config/client/ConfigClientLiveTest.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.baeldung.spring.cloud.config.client; - -import org.junit.Ignore; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.SpringApplicationConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.web.WebAppConfiguration; - -@RunWith(SpringJUnit4ClassRunner.class) -@SpringApplicationConfiguration(classes = ConfigClient.class) -@WebAppConfiguration -public class ConfigClientLiveTest { - @Test - public void contextLoads() { - } -} diff --git a/spring-cloud-config/server/src/test/java/com/baeldung/spring/cloud/config/server/ConfigServerListTest.java b/spring-cloud-config/server/src/test/java/com/baeldung/spring/cloud/config/server/ConfigServerListTest.java deleted file mode 100644 index 306c120e43..0000000000 --- a/spring-cloud-config/server/src/test/java/com/baeldung/spring/cloud/config/server/ConfigServerListTest.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.baeldung.spring.cloud.config.server; - -import org.junit.Ignore; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.SpringApplicationConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.web.WebAppConfiguration; - -@RunWith(SpringJUnit4ClassRunner.class) -@SpringApplicationConfiguration(classes = ConfigServer.class) -@WebAppConfiguration -@Ignore -public class ConfigServerListTest { - @Test - public void contextLoads() { - } -} From fbff04cbc5799a2a1f3bad5be0106539e8156332 Mon Sep 17 00:00:00 2001 From: diego Date: Mon, 8 Aug 2016 23:50:08 +0200 Subject: [PATCH 013/265] deleted previous project to refactor the code --- wicket-intro/pom.xml | 26 ------------------- .../baeldung/wicket/examples/HelloWorld.html | 5 ---- .../baeldung/wicket/examples/HelloWorld.java | 11 -------- .../examples/HelloWorldApplication.java | 11 -------- wicket-intro/src/main/webapp/WEB-INF/web.xml | 20 -------------- 5 files changed, 73 deletions(-) delete mode 100644 wicket-intro/pom.xml delete mode 100644 wicket-intro/src/main/java/com/baeldung/wicket/examples/HelloWorld.html delete mode 100644 wicket-intro/src/main/java/com/baeldung/wicket/examples/HelloWorld.java delete mode 100644 wicket-intro/src/main/java/com/baeldung/wicket/examples/HelloWorldApplication.java delete mode 100644 wicket-intro/src/main/webapp/WEB-INF/web.xml diff --git a/wicket-intro/pom.xml b/wicket-intro/pom.xml deleted file mode 100644 index 119dee8bf6..0000000000 --- a/wicket-intro/pom.xml +++ /dev/null @@ -1,26 +0,0 @@ - - 4.0.0 - com.baeldung.wicket.examples - HelloWorld - war - 1.0-SNAPSHOT - HelloWorld Maven Webapp - http://maven.apache.org - - - junit - junit - 3.8.1 - test - - - org.apache.wicket - wicket-core - 8.0.0-M1 - - - - HelloWorld - - diff --git a/wicket-intro/src/main/java/com/baeldung/wicket/examples/HelloWorld.html b/wicket-intro/src/main/java/com/baeldung/wicket/examples/HelloWorld.html deleted file mode 100644 index 36afa6bf19..0000000000 --- a/wicket-intro/src/main/java/com/baeldung/wicket/examples/HelloWorld.html +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/wicket-intro/src/main/java/com/baeldung/wicket/examples/HelloWorld.java b/wicket-intro/src/main/java/com/baeldung/wicket/examples/HelloWorld.java deleted file mode 100644 index 976136c70b..0000000000 --- a/wicket-intro/src/main/java/com/baeldung/wicket/examples/HelloWorld.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.baeldung.wicket.examples; - -import org.apache.wicket.markup.html.WebPage; -import org.apache.wicket.markup.html.basic.Label; - - -public class HelloWorld extends WebPage { - public HelloWorld() { - add(new Label("hello", "Hello World!")); - } -} diff --git a/wicket-intro/src/main/java/com/baeldung/wicket/examples/HelloWorldApplication.java b/wicket-intro/src/main/java/com/baeldung/wicket/examples/HelloWorldApplication.java deleted file mode 100644 index 51def5be32..0000000000 --- a/wicket-intro/src/main/java/com/baeldung/wicket/examples/HelloWorldApplication.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.baeldung.wicket.examples; - -import org.apache.wicket.Page; -import org.apache.wicket.protocol.http.WebApplication; - -public class HelloWorldApplication extends WebApplication { - @Override - public Class getHomePage() { - return HelloWorld.class; - } -} diff --git a/wicket-intro/src/main/webapp/WEB-INF/web.xml b/wicket-intro/src/main/webapp/WEB-INF/web.xml deleted file mode 100644 index 37d1ebd24f..0000000000 --- a/wicket-intro/src/main/webapp/WEB-INF/web.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - Hello World - - HelloWorldApplication - org.apache.wicket.protocol.http.WicketFilter - - applicationClassName - com.baeldung.wicket.examples.HelloWorldApplication - - - - HelloWorldApplication - /* - - - From a47564a0c902df0d04d90e29e0fececd81988f61 Mon Sep 17 00:00:00 2001 From: diego Date: Mon, 8 Aug 2016 23:52:39 +0200 Subject: [PATCH 014/265] examples in the wicket intro article --- wicket-intro/CafeAddress/pom.xml | 180 ++++++++++++++++++ .../examples/cafeaddress/CafeAddress.html | 20 ++ .../examples/cafeaddress/CafeAddress.java | 72 +++++++ .../cafeaddress/CafeAddressApplication.java | 33 ++++ .../CafeAddress/src/main/resources/log4j2.xml | 16 ++ .../src/main/webapp/WEB-INF/web.xml | 32 ++++ .../CafeAddress/src/main/webapp/logo.png | Bin 0 -> 12244 bytes .../CafeAddress/src/main/webapp/style.css | 68 +++++++ .../wicket/examples/cafeaddress/Start.java | 108 +++++++++++ .../examples/cafeaddress/TestHomePage.java | 29 +++ .../CafeAddress/src/test/jetty/jetty-http.xml | 38 ++++ .../src/test/jetty/jetty-https.xml | 45 +++++ .../CafeAddress/src/test/jetty/jetty-ssl.xml | 36 ++++ .../CafeAddress/src/test/jetty/jetty.xml | 23 +++ .../CafeAddress/src/test/resources/keystore | Bin 0 -> 1481 bytes wicket-intro/HelloWorld/pom.xml | 26 +++ .../examples/helloworld/HelloWorld.html | 5 + .../examples/helloworld/HelloWorld.java | 10 + .../helloworld/HelloWorldApplication.java | 12 ++ .../src/main/webapp/WEB-INF/web.xml | 19 ++ 20 files changed, 772 insertions(+) create mode 100644 wicket-intro/CafeAddress/pom.xml create mode 100644 wicket-intro/CafeAddress/src/main/java/com/baeldung/wicket/examples/cafeaddress/CafeAddress.html create mode 100644 wicket-intro/CafeAddress/src/main/java/com/baeldung/wicket/examples/cafeaddress/CafeAddress.java create mode 100644 wicket-intro/CafeAddress/src/main/java/com/baeldung/wicket/examples/cafeaddress/CafeAddressApplication.java create mode 100644 wicket-intro/CafeAddress/src/main/resources/log4j2.xml create mode 100644 wicket-intro/CafeAddress/src/main/webapp/WEB-INF/web.xml create mode 100644 wicket-intro/CafeAddress/src/main/webapp/logo.png create mode 100644 wicket-intro/CafeAddress/src/main/webapp/style.css create mode 100644 wicket-intro/CafeAddress/src/test/java/com/baeldung/wicket/examples/cafeaddress/Start.java create mode 100644 wicket-intro/CafeAddress/src/test/java/com/baeldung/wicket/examples/cafeaddress/TestHomePage.java create mode 100644 wicket-intro/CafeAddress/src/test/jetty/jetty-http.xml create mode 100644 wicket-intro/CafeAddress/src/test/jetty/jetty-https.xml create mode 100644 wicket-intro/CafeAddress/src/test/jetty/jetty-ssl.xml create mode 100644 wicket-intro/CafeAddress/src/test/jetty/jetty.xml create mode 100644 wicket-intro/CafeAddress/src/test/resources/keystore create mode 100644 wicket-intro/HelloWorld/pom.xml create mode 100644 wicket-intro/HelloWorld/src/main/java/com/baeldung/wicket/examples/helloworld/HelloWorld.html create mode 100644 wicket-intro/HelloWorld/src/main/java/com/baeldung/wicket/examples/helloworld/HelloWorld.java create mode 100644 wicket-intro/HelloWorld/src/main/java/com/baeldung/wicket/examples/helloworld/HelloWorldApplication.java create mode 100644 wicket-intro/HelloWorld/src/main/webapp/WEB-INF/web.xml diff --git a/wicket-intro/CafeAddress/pom.xml b/wicket-intro/CafeAddress/pom.xml new file mode 100644 index 0000000000..2966105404 --- /dev/null +++ b/wicket-intro/CafeAddress/pom.xml @@ -0,0 +1,180 @@ + + + + + 4.0.0 + com.baeldung.wicket.examples.cafeaddress + CafeAddress + war + 1.0-SNAPSHOT + + quickstart + + + + + The Apache Software License, Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0.txt + repo + + + + 7.4.0 + 9.2.13.v20150730 + 2.5 + 4.12 + UTF-8 + + none + + + + + org.apache.wicket + wicket-core + ${wicket.version} + + + + + + org.apache.logging.log4j + log4j-slf4j-impl + ${log4j.version} + + + org.apache.logging.log4j + log4j-core + ${log4j.version} + + + + + junit + junit + ${junit.version} + test + + + + + org.eclipse.jetty.aggregate + jetty-all + ${jetty9.version} + test + + + + + + false + src/main/resources + + + false + src/main/java + + ** + + + **/*.java + + + + + + false + src/test/resources + + + false + src/test/java + + ** + + + **/*.java + + + + + + true + org.apache.maven.plugins + maven-compiler-plugin + 3.1 + + 1.7 + 1.7 + UTF-8 + true + true + + + + org.eclipse.jetty + jetty-maven-plugin + ${jetty9.version} + + + + maven.project.build.directory.test-classes + ${project.build.directory}/test-classes + + + ${project.basedir}/src/test/jetty/jetty.xml,${project.basedir}/src/test/jetty/jetty-ssl.xml,${project.basedir}/src/test/jetty/jetty-http.xml,${project.basedir}/src/test/jetty/jetty-https.xml + + + + org.apache.maven.plugins + maven-eclipse-plugin + 2.9 + + true + ${wtp.version} + + + + + + + + Apache Nexus + https://repository.apache.org/content/repositories/snapshots/ + + false + + + true + + + + diff --git a/wicket-intro/CafeAddress/src/main/java/com/baeldung/wicket/examples/cafeaddress/CafeAddress.html b/wicket-intro/CafeAddress/src/main/java/com/baeldung/wicket/examples/cafeaddress/CafeAddress.html new file mode 100644 index 0000000000..954ff551f1 --- /dev/null +++ b/wicket-intro/CafeAddress/src/main/java/com/baeldung/wicket/examples/cafeaddress/CafeAddress.html @@ -0,0 +1,20 @@ + + + + +Apache Wicket Quickstart + + + + +
+ +

+ Address: address +

+
+ + diff --git a/wicket-intro/CafeAddress/src/main/java/com/baeldung/wicket/examples/cafeaddress/CafeAddress.java b/wicket-intro/CafeAddress/src/main/java/com/baeldung/wicket/examples/cafeaddress/CafeAddress.java new file mode 100644 index 0000000000..ce26c5a1ad --- /dev/null +++ b/wicket-intro/CafeAddress/src/main/java/com/baeldung/wicket/examples/cafeaddress/CafeAddress.java @@ -0,0 +1,72 @@ +package com.baeldung.wicket.examples.cafeaddress; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior; +import org.apache.wicket.markup.html.WebPage; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.markup.html.form.DropDownChoice; +import org.apache.wicket.model.PropertyModel; +import org.apache.wicket.request.mapper.parameter.PageParameters; + +public class CafeAddress extends WebPage { + + private static final long serialVersionUID = 1L; + + String selectedCafe; + Address address; + Map cafeNamesAndAddresses = new HashMap<>(); + + public CafeAddress(final PageParameters parameters) { + super(parameters); + initCafes(); + + ArrayList cafeNames = new ArrayList<>(this.cafeNamesAndAddresses.keySet()); + this.selectedCafe = cafeNames.get(0); + this.address = new Address(this.cafeNamesAndAddresses.get(this.selectedCafe).getAddress()); + + final Label addressLabel = new Label("address", new PropertyModel(this.address, "address")); + addressLabel.setOutputMarkupId(true); + + final DropDownChoice cafeDropdown = new DropDownChoice<>("cafes", new PropertyModel(this, "selectedCafe"), cafeNames); + cafeDropdown.add(new AjaxFormComponentUpdatingBehavior("onchange") { + private static final long serialVersionUID = 1L; + + @Override + protected void onUpdate(AjaxRequestTarget target) { + String name = (String) cafeDropdown.getDefaultModel().getObject(); + address.setAddress(cafeNamesAndAddresses.get(name).getAddress()); + target.add(addressLabel); + } + }); + + add(addressLabel); + add(cafeDropdown); + + } + + private void initCafes() { + this.cafeNamesAndAddresses.put("Linda's Cafe", new Address("35 Bower St.")); + this.cafeNamesAndAddresses.put("Old Tree", new Address("2 Edgware Rd.")); + } + + class Address implements Serializable { + private String sAddress = ""; + + public Address(String address) { + this.sAddress = address; + } + + public String getAddress() { + return this.sAddress; + } + + public void setAddress(String address) { + this.sAddress = address; + } + } +} diff --git a/wicket-intro/CafeAddress/src/main/java/com/baeldung/wicket/examples/cafeaddress/CafeAddressApplication.java b/wicket-intro/CafeAddress/src/main/java/com/baeldung/wicket/examples/cafeaddress/CafeAddressApplication.java new file mode 100644 index 0000000000..189ef14558 --- /dev/null +++ b/wicket-intro/CafeAddress/src/main/java/com/baeldung/wicket/examples/cafeaddress/CafeAddressApplication.java @@ -0,0 +1,33 @@ +package com.baeldung.wicket.examples.cafeaddress; + +import org.apache.wicket.markup.html.WebPage; +import org.apache.wicket.protocol.http.WebApplication; + +/** + * Application object for your web application. + * If you want to run this application without deploying, run the Start class. + * + * @see com.baeldung.wicket.examples.Start#main(String[]) + */ +public class CafeAddressApplication extends WebApplication +{ + /** + * @see org.apache.wicket.Application#getHomePage() + */ + @Override + public Class getHomePage() + { + return CafeAddress.class; + } + + /** + * @see org.apache.wicket.Application#init() + */ + @Override + public void init() + { + super.init(); + + // add your configuration here + } +} diff --git a/wicket-intro/CafeAddress/src/main/resources/log4j2.xml b/wicket-intro/CafeAddress/src/main/resources/log4j2.xml new file mode 100644 index 0000000000..5596dd5f40 --- /dev/null +++ b/wicket-intro/CafeAddress/src/main/resources/log4j2.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/wicket-intro/CafeAddress/src/main/webapp/WEB-INF/web.xml b/wicket-intro/CafeAddress/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000000..03e600188b --- /dev/null +++ b/wicket-intro/CafeAddress/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,32 @@ + + + + CafeAddress + + + + + wicket.CafeAddress + org.apache.wicket.protocol.http.WicketFilter + + applicationClassName + com.baeldung.wicket.examples.cafeaddress.CafeAddressApplication + + + + + wicket.CafeAddress + /* + + diff --git a/wicket-intro/CafeAddress/src/main/webapp/logo.png b/wicket-intro/CafeAddress/src/main/webapp/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..39ec54854b748ab6aeb6b3965d88f452772d7d8e GIT binary patch literal 12244 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 i1O^!^0gjqN1OFf9qq%!F8)!QK0000`K literal 0 HcmV?d00001 diff --git a/wicket-intro/CafeAddress/src/main/webapp/style.css b/wicket-intro/CafeAddress/src/main/webapp/style.css new file mode 100644 index 0000000000..fc137cadb0 --- /dev/null +++ b/wicket-intro/CafeAddress/src/main/webapp/style.css @@ -0,0 +1,68 @@ +body, p, li, a { font-family: georgia, times, serif;font-size:13pt;} +h1, h2, h3 { font-family: 'Yanone Kaffeesatz', arial, serif; } +body { margin:0;padding:0;} +#hd { + width : 100%; + height : 87px; + background-color : #092E67; + margin-top : 0; + padding-top : 10px; + border-bottom : 1px solid #888; + z-index : 0; +} +#ft { + position : absolute; + bottom : 0; + width : 100%; + height : 99px; + background-color : #6493D2; + border-top : 1px solid #888; + z-index : 0; +} +#logo,#bd { + width : 650px; + margin: 0 auto; + padding: 25px 50px 0 50px; +} +#logo h1 { + color : white; + font-size:36pt; + display: inline; +} +#logo img { + display:inline; + vertical-align: bottom; + margin-left : 50px; + margin-right : 5px; +} +body { margin-top : 0; padding-top : 0;} +#logo, #logo h1 { margin-top : 0; padding-top : 0;} +#bd { + position : absolute; + top : 75px; + bottom : 75px; + left : 50%; + margin-left : -325px; + z-index : 1; + overflow: auto; + background-color : #fff; + -webkit-border-radius: 10px; + -moz-border-radius: 10px; + border-radius: 10px; + -moz-box-shadow: 0px 0px 10px #888; + -webkit-box-shadow: 0px 0px 10px #888; + box-shadow: 0px 0px 10px #888; +} +a, a:visited, a:hover, a:active { + color : #6493D2; +} +h2 { + padding : 0; margin:0; + font-size:36pt; + color:#FF5500; +} +h3 { + padding : 0; margin:0; + font-size:24pt; + color:#092E67; +} \ No newline at end of file diff --git a/wicket-intro/CafeAddress/src/test/java/com/baeldung/wicket/examples/cafeaddress/Start.java b/wicket-intro/CafeAddress/src/test/java/com/baeldung/wicket/examples/cafeaddress/Start.java new file mode 100644 index 0000000000..b2be405124 --- /dev/null +++ b/wicket-intro/CafeAddress/src/test/java/com/baeldung/wicket/examples/cafeaddress/Start.java @@ -0,0 +1,108 @@ +package com.baeldung.wicket.examples.cafeaddress; + +import java.lang.management.ManagementFactory; + +import javax.management.MBeanServer; + +import org.eclipse.jetty.jmx.MBeanContainer; +import org.eclipse.jetty.server.HttpConfiguration; +import org.eclipse.jetty.server.HttpConnectionFactory; +import org.eclipse.jetty.server.SecureRequestCustomizer; +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.server.ServerConnector; +import org.eclipse.jetty.server.SslConnectionFactory; +import org.eclipse.jetty.util.resource.Resource; +import org.eclipse.jetty.util.ssl.SslContextFactory; +import org.eclipse.jetty.webapp.WebAppContext; + +/** + * Separate startup class for people that want to run the examples directly. Use parameter + * -Dcom.sun.management.jmxremote to startup JMX (and e.g. connect with jconsole). + */ +public class Start +{ + /** + * Main function, starts the jetty server. + * + * @param args + */ + public static void main(String[] args) + { + System.setProperty("wicket.configuration", "development"); + + Server server = new Server(); + + HttpConfiguration http_config = new HttpConfiguration(); + http_config.setSecureScheme("https"); + http_config.setSecurePort(8443); + http_config.setOutputBufferSize(32768); + + ServerConnector http = new ServerConnector(server, new HttpConnectionFactory(http_config)); + http.setPort(8080); + http.setIdleTimeout(1000 * 60 * 60); + + server.addConnector(http); + + Resource keystore = Resource.newClassPathResource("/keystore"); + if (keystore != null && keystore.exists()) + { + // if a keystore for a SSL certificate is available, start a SSL + // connector on port 8443. + // By default, the quickstart comes with a Apache Wicket Quickstart + // Certificate that expires about half way september 2021. Do not + // use this certificate anywhere important as the passwords are + // available in the source. + + SslContextFactory sslContextFactory = new SslContextFactory(); + sslContextFactory.setKeyStoreResource(keystore); + sslContextFactory.setKeyStorePassword("wicket"); + sslContextFactory.setKeyManagerPassword("wicket"); + + HttpConfiguration https_config = new HttpConfiguration(http_config); + https_config.addCustomizer(new SecureRequestCustomizer()); + + ServerConnector https = new ServerConnector(server, new SslConnectionFactory( + sslContextFactory, "http/1.1"), new HttpConnectionFactory(https_config)); + https.setPort(8443); + https.setIdleTimeout(500000); + + server.addConnector(https); + System.out.println("SSL access to the examples has been enabled on port 8443"); + System.out + .println("You can access the application using SSL on https://localhost:8443"); + System.out.println(); + } + + WebAppContext bb = new WebAppContext(); + bb.setServer(server); + bb.setContextPath("/"); + bb.setWar("src/main/webapp"); + + // uncomment the next two lines if you want to start Jetty with WebSocket (JSR-356) support + // you need org.apache.wicket:wicket-native-websocket-javax in the classpath! + // ServerContainer serverContainer = WebSocketServerContainerInitializer.configureContext(bb); + // serverContainer.addEndpoint(new WicketServerEndpointConfig()); + + // uncomment next line if you want to test with JSESSIONID encoded in the urls + // ((AbstractSessionManager) + // bb.getSessionHandler().getSessionManager()).setUsingCookies(false); + + server.setHandler(bb); + + MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer(); + MBeanContainer mBeanContainer = new MBeanContainer(mBeanServer); + server.addEventListener(mBeanContainer); + server.addBean(mBeanContainer); + + try + { + server.start(); + server.join(); + } + catch (Exception e) + { + e.printStackTrace(); + System.exit(100); + } + } +} diff --git a/wicket-intro/CafeAddress/src/test/java/com/baeldung/wicket/examples/cafeaddress/TestHomePage.java b/wicket-intro/CafeAddress/src/test/java/com/baeldung/wicket/examples/cafeaddress/TestHomePage.java new file mode 100644 index 0000000000..9b186ce52b --- /dev/null +++ b/wicket-intro/CafeAddress/src/test/java/com/baeldung/wicket/examples/cafeaddress/TestHomePage.java @@ -0,0 +1,29 @@ +package com.baeldung.wicket.examples.cafeaddress; + +import org.apache.wicket.util.tester.WicketTester; +import org.junit.Before; +import org.junit.Test; + +/** + * Simple test using the WicketTester + */ +public class TestHomePage +{ + private WicketTester tester; + + @Before + public void setUp() + { + tester = new WicketTester(new CafeAddressApplication()); + } + + @Test + public void homepageRendersSuccessfully() + { + //start and render the test page + tester.startPage(CafeAddress.class); + + //assert rendered page class + tester.assertRenderedPage(CafeAddress.class); + } +} diff --git a/wicket-intro/CafeAddress/src/test/jetty/jetty-http.xml b/wicket-intro/CafeAddress/src/test/jetty/jetty-http.xml new file mode 100644 index 0000000000..9f3256b15c --- /dev/null +++ b/wicket-intro/CafeAddress/src/test/jetty/jetty-http.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/wicket-intro/CafeAddress/src/test/jetty/jetty-https.xml b/wicket-intro/CafeAddress/src/test/jetty/jetty-https.xml new file mode 100644 index 0000000000..58f7d53d2d --- /dev/null +++ b/wicket-intro/CafeAddress/src/test/jetty/jetty-https.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + http/1.1 + + + + + + + + + + + + + 30000 + + + + \ No newline at end of file diff --git a/wicket-intro/CafeAddress/src/test/jetty/jetty-ssl.xml b/wicket-intro/CafeAddress/src/test/jetty/jetty-ssl.xml new file mode 100644 index 0000000000..49e558bb47 --- /dev/null +++ b/wicket-intro/CafeAddress/src/test/jetty/jetty-ssl.xml @@ -0,0 +1,36 @@ + + + + + + + + + / + + + + + + SSL_RSA_WITH_DES_CBC_SHA + SSL_DHE_RSA_WITH_DES_CBC_SHA + SSL_DHE_DSS_WITH_DES_CBC_SHA + SSL_RSA_EXPORT_WITH_RC4_40_MD5 + SSL_RSA_EXPORT_WITH_DES40_CBC_SHA + SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA + SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/wicket-intro/CafeAddress/src/test/jetty/jetty.xml b/wicket-intro/CafeAddress/src/test/jetty/jetty.xml new file mode 100644 index 0000000000..1a6293b405 --- /dev/null +++ b/wicket-intro/CafeAddress/src/test/jetty/jetty.xml @@ -0,0 +1,23 @@ + + + + + + + + https + + + + 32768 + 8192 + 8192 + true + false + 512 + + + + + + \ No newline at end of file diff --git a/wicket-intro/CafeAddress/src/test/resources/keystore b/wicket-intro/CafeAddress/src/test/resources/keystore new file mode 100644 index 0000000000000000000000000000000000000000..30bbc90ccffcc2745adf09077df16fc3db9c0b47 GIT binary patch literal 1481 zcmezO_TO6u1_mY|W&~r_tkjZ{N+8cDIXV0qP-d4w6Vo;WJ~l3GHbxdkEha%mMpg!v zCZXF+L+yeb(_D>eh5NdK;{zR}$;>(o{ zE3dg|o8B)~5ILLXvtIl5>N#JOOd1Wnqs3o|CH&_3)%k6yk>9%q<*Th*+pP{h`8MfJ zi*YvUmF+Z?t0^x!WMEPBj(9H=gC$Rl(ii9d&)j3 zbTLZUo^$C9pTUfx#bzsWYP%dfFaJ7`%~pJY<=Y|t;J>bqocFORJ8`)y%bsft`MuQV z>{(ffqGR9Jv){6}VE@M8vig|blV9STFXpbA!u05_iEyhlhqkKZ;q9M!rpxs*tJ<*3 zhiWIa`fr}ezEJ&I{ND#6cX8iNm8;zH2RodQ=n#@cCCOr| zTXCYzlEX`7T5ANh+?d0qlI6dJ@sW+nZle@FF~#KRKmX0;w|%=dD0Q*hi_hY5Y{CW4 zrOJiNd#@bdbya1dHCyZRTmE&^ii4i-IJn9!!^(ZV)t=3cyTYEANN&*o!@WvnMVp(G z{s(U^qqZe`enoqQPhO)mduP*#-L_kTKzrv7mI-@Dg3P;OV0 z+>^?;+IITpTAR2zDn5LAd`IV(R$N{5^Homy`Hv1=mC|&FBxtu~Lg@4UcN&B|cVxXe%hnAVv?S=fZxL-Vrp^2_sJA{-bZ z>z> zKgGsI?`g4Czs|(W$iRr~JYW)G2D&RF+G&cYMyt~S#qC>9Yo8yjfwPfwA z__FOSvwctPaoU&=rO7Hf`?L)EoW48GpSg3HG`N>Wh@H&bQ>GZp6P=NEzJCF4QTtMF zyCu^XE;=4q;eAoe&u6Fp<&$m~Ic0x)r`Sfd8H?)QbE`9U3bGFi_@iY1?tkt>-^;Q{1ps`KMkD|L literal 0 HcmV?d00001 diff --git a/wicket-intro/HelloWorld/pom.xml b/wicket-intro/HelloWorld/pom.xml new file mode 100644 index 0000000000..08586375ce --- /dev/null +++ b/wicket-intro/HelloWorld/pom.xml @@ -0,0 +1,26 @@ + + 4.0.0 + com.baeldung.wicket.examples.helloworld + HelloWorld + war + 1.0-SNAPSHOT + HelloWorld Maven Webapp + http://maven.apache.org + + + junit + junit + 3.8.1 + test + + + org.apache.wicket + wicket-core + 8.0.0-M1 + + + + HelloWorld + + diff --git a/wicket-intro/HelloWorld/src/main/java/com/baeldung/wicket/examples/helloworld/HelloWorld.html b/wicket-intro/HelloWorld/src/main/java/com/baeldung/wicket/examples/helloworld/HelloWorld.html new file mode 100644 index 0000000000..c56d07fc10 --- /dev/null +++ b/wicket-intro/HelloWorld/src/main/java/com/baeldung/wicket/examples/helloworld/HelloWorld.html @@ -0,0 +1,5 @@ + + + + + diff --git a/wicket-intro/HelloWorld/src/main/java/com/baeldung/wicket/examples/helloworld/HelloWorld.java b/wicket-intro/HelloWorld/src/main/java/com/baeldung/wicket/examples/helloworld/HelloWorld.java new file mode 100644 index 0000000000..6dc7295798 --- /dev/null +++ b/wicket-intro/HelloWorld/src/main/java/com/baeldung/wicket/examples/helloworld/HelloWorld.java @@ -0,0 +1,10 @@ +package com.baeldung.wicket.examples.helloworld; + +import org.apache.wicket.markup.html.WebPage; +import org.apache.wicket.markup.html.basic.Label; + +public class HelloWorld extends WebPage { + public HelloWorld() { + add(new Label("hello", "Hello World!")); + } +} diff --git a/wicket-intro/HelloWorld/src/main/java/com/baeldung/wicket/examples/helloworld/HelloWorldApplication.java b/wicket-intro/HelloWorld/src/main/java/com/baeldung/wicket/examples/helloworld/HelloWorldApplication.java new file mode 100644 index 0000000000..618496e5f7 --- /dev/null +++ b/wicket-intro/HelloWorld/src/main/java/com/baeldung/wicket/examples/helloworld/HelloWorldApplication.java @@ -0,0 +1,12 @@ + +package com.baeldung.wicket.examples.helloworld; + +import org.apache.wicket.Page; +import org.apache.wicket.protocol.http.WebApplication; + +public class HelloWorldApplication extends WebApplication { + @Override + public Class getHomePage() { + return HelloWorld.class; + } +} diff --git a/wicket-intro/HelloWorld/src/main/webapp/WEB-INF/web.xml b/wicket-intro/HelloWorld/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000000..c68ca09241 --- /dev/null +++ b/wicket-intro/HelloWorld/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,19 @@ + + + + Hello World + + HelloWorldApplication + org.apache.wicket.protocol.http.WicketFilter + + applicationClassName + com.baeldung.wicket.examples.helloworld.HelloWorldApplication + + + + HelloWorldApplication + /* + + From 94f08d43af8890b2a53b76c26b9a468b8f00f1d3 Mon Sep 17 00:00:00 2001 From: maverick Date: Mon, 22 Aug 2016 13:21:24 +0530 Subject: [PATCH 015/265] sort variant and parallel sort added --- .../java/org/baeldung/java/sorting/ArraySort.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/core-java/src/test/java/org/baeldung/java/sorting/ArraySort.java b/core-java/src/test/java/org/baeldung/java/sorting/ArraySort.java index 3e55ab7f6a..cacbcdb727 100644 --- a/core-java/src/test/java/org/baeldung/java/sorting/ArraySort.java +++ b/core-java/src/test/java/org/baeldung/java/sorting/ArraySort.java @@ -84,5 +84,20 @@ public class ArraySort { }); } + + @Test + public void arraySortVariant() { + System.out.println(Arrays.toString(numbers)); + Arrays.sort(numbers, 3, 7); + System.out.println(Arrays.toString(numbers)); + + } + + @Test + public void arrayParallelSortVariant() { + + Arrays.parallelSort(numbers); + + } } From 13b91a9b040d5d41fdd92b1ba696b3e47e2db236 Mon Sep 17 00:00:00 2001 From: "anna.spanou" Date: Thu, 25 Aug 2016 04:30:27 +0300 Subject: [PATCH 016/265] java cassandra tutorial --- java-cassandra/pom.xml | 96 ++++++++++ .../java/client/CassandraClient.java | 44 +++++ .../java/client/CassandraConnector.java | 51 +++++ .../cassandra/java/client/domain/Book.java | 67 +++++++ .../client/repository/BookRepository.java | 177 ++++++++++++++++++ .../client/repository/KeyspaceRepository.java | 54 ++++++ .../BookRepositoryIntegrationTest.java | 174 +++++++++++++++++ .../KeyspaceRepositoryIntegrationTest.java | 77 ++++++++ pom.xml | 1 + 9 files changed, 741 insertions(+) create mode 100644 java-cassandra/pom.xml create mode 100644 java-cassandra/src/main/java/com/baeldung/cassandra/java/client/CassandraClient.java create mode 100644 java-cassandra/src/main/java/com/baeldung/cassandra/java/client/CassandraConnector.java create mode 100644 java-cassandra/src/main/java/com/baeldung/cassandra/java/client/domain/Book.java create mode 100644 java-cassandra/src/main/java/com/baeldung/cassandra/java/client/repository/BookRepository.java create mode 100644 java-cassandra/src/main/java/com/baeldung/cassandra/java/client/repository/KeyspaceRepository.java create mode 100644 java-cassandra/src/test/java/com/baeldung/cassandra/java/client/repository/BookRepositoryIntegrationTest.java create mode 100644 java-cassandra/src/test/java/com/baeldung/cassandra/java/client/repository/KeyspaceRepositoryIntegrationTest.java diff --git a/java-cassandra/pom.xml b/java-cassandra/pom.xml new file mode 100644 index 0000000000..3866f2a1d5 --- /dev/null +++ b/java-cassandra/pom.xml @@ -0,0 +1,96 @@ + + 4.0.0 + com.baeldung + cassandra-java-client + 1.0.0-SNAPSHOT + + cassandra-java-client + + + UTF-8 + + + 1.7.21 + 1.1.7 + + + 1.3 + 4.12 + 1.10.19 + 6.8 + 3.5.1 + + + 3.5.1 + + + 3.0.3 + + + + + + com.datastax.cassandra + cassandra-driver-core + ${cassandra-driver-core.version} + true + + + + + org.cassandraunit + cassandra-unit + 2.2.2.1 + + + + + + + org.slf4j + slf4j-api + ${org.slf4j.version} + + + ch.qos.logback + logback-classic + ${logback.version} + + + + org.slf4j + jcl-over-slf4j + ${org.slf4j.version} + + + + org.slf4j + log4j-over-slf4j + ${org.slf4j.version} + + + + junit + junit + ${junit.version} + test + + + + + java-cassandra + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + 1.8 + 1.8 + + + + + + diff --git a/java-cassandra/src/main/java/com/baeldung/cassandra/java/client/CassandraClient.java b/java-cassandra/src/main/java/com/baeldung/cassandra/java/client/CassandraClient.java new file mode 100644 index 0000000000..c67a2c2ddb --- /dev/null +++ b/java-cassandra/src/main/java/com/baeldung/cassandra/java/client/CassandraClient.java @@ -0,0 +1,44 @@ +package com.baeldung.cassandra.java.client; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.baeldung.cassandra.java.client.domain.Book; +import com.baeldung.cassandra.java.client.repository.BookRepository; +import com.baeldung.cassandra.java.client.repository.KeyspaceRepository; +import com.datastax.driver.core.Session; +import com.datastax.driver.core.utils.UUIDs; + +public class CassandraClient { + private static final Logger LOG = LoggerFactory.getLogger(CassandraClient.class); + + public static void main(String args[]) { + CassandraConnector connector = new CassandraConnector(); + connector.connect("127.0.0.1", null); + Session session = connector.getSession(); + + KeyspaceRepository sr = new KeyspaceRepository(session); + sr.createKeyspace("library", "SimpleStrategy", 1); + sr.useKeyspace("library"); + + BookRepository br = new BookRepository(session); + br.createTable(); + br.alterTablebooks("publisher", "text"); + + br.createTableBooksByTitle(); + + Book book = new Book(UUIDs.timeBased(), "Effective Java", "Joshua Bloch", "Programming"); + br.insertBookBatch(book); + + br.selectAll().forEach(o -> LOG.info("Title in books: " + o.getTitle())); + br.selectAllBookByTitle().forEach(o -> LOG.info("Title in booksByTitle: " + o.getTitle())); + + br.deletebookByTitle("Effective Java"); + br.deleteTable("books"); + br.deleteTable("booksByTitle"); + + sr.deleteKeyspace("library"); + + connector.close(); + } +} diff --git a/java-cassandra/src/main/java/com/baeldung/cassandra/java/client/CassandraConnector.java b/java-cassandra/src/main/java/com/baeldung/cassandra/java/client/CassandraConnector.java new file mode 100644 index 0000000000..e035335ca0 --- /dev/null +++ b/java-cassandra/src/main/java/com/baeldung/cassandra/java/client/CassandraConnector.java @@ -0,0 +1,51 @@ +package com.baeldung.cassandra.java.client; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.datastax.driver.core.Cluster; +import com.datastax.driver.core.Cluster.Builder; +import com.datastax.driver.core.Host; +import com.datastax.driver.core.Metadata; +import com.datastax.driver.core.Session; + +/** + * + * This is an implementation of a simple Java client. + * + */ +public class CassandraConnector { + private static final Logger LOG = LoggerFactory.getLogger(CassandraConnector.class); + + private Cluster cluster; + + private Session session; + + public void connect(final String node, final Integer port) { + + Builder b = Cluster.builder().addContactPoint(node); + + if (port != null) { + b.withPort(port); + } + cluster = b.build(); + + Metadata metadata = cluster.getMetadata(); + LOG.info("Cluster name: " + metadata.getClusterName()); + + for (Host host : metadata.getAllHosts()) { + LOG.info("Datacenter: " + host.getDatacenter() + " Host: " + host.getAddress() + " Rack: " + host.getRack()); + } + + session = cluster.connect(); + } + + public Session getSession() { + return this.session; + } + + public void close() { + session.close(); + cluster.close(); + } +} diff --git a/java-cassandra/src/main/java/com/baeldung/cassandra/java/client/domain/Book.java b/java-cassandra/src/main/java/com/baeldung/cassandra/java/client/domain/Book.java new file mode 100644 index 0000000000..25ff9e2f22 --- /dev/null +++ b/java-cassandra/src/main/java/com/baeldung/cassandra/java/client/domain/Book.java @@ -0,0 +1,67 @@ +package com.baeldung.cassandra.java.client.domain; + +import java.util.UUID; + +public class Book { + + private UUID id; + + private String title; + + private String author; + + private String subject; + + private String publisher; + + public Book() { + + } + + public Book(UUID id, String title, String author, String subject) { + this.id = id; + this.title = title; + this.author = author; + this.subject = subject; + } + + public UUID getId() { + return id; + } + + public void setId(UUID id) { + this.id = id; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getAuthor() { + return author; + } + + public void setAuthor(String author) { + this.author = author; + } + + public String getSubject() { + return subject; + } + + public void setSubject(String subject) { + this.subject = subject; + } + + public String getPublisher() { + return publisher; + } + + public void setPublisher(String publisher) { + this.publisher = publisher; + } +} diff --git a/java-cassandra/src/main/java/com/baeldung/cassandra/java/client/repository/BookRepository.java b/java-cassandra/src/main/java/com/baeldung/cassandra/java/client/repository/BookRepository.java new file mode 100644 index 0000000000..31e2969e01 --- /dev/null +++ b/java-cassandra/src/main/java/com/baeldung/cassandra/java/client/repository/BookRepository.java @@ -0,0 +1,177 @@ +package com.baeldung.cassandra.java.client.repository; + +import java.util.ArrayList; +import java.util.List; + +import com.baeldung.cassandra.java.client.domain.Book; +import com.datastax.driver.core.ResultSet; +import com.datastax.driver.core.Row; +import com.datastax.driver.core.Session; + +public class BookRepository { + + private static final String TABLE_NAME = "books"; + + private static final String TABLE_NAME_BY_TITLE = TABLE_NAME + "ByTitle"; + + private Session session; + + public BookRepository(Session session) { + this.session = session; + } + + /** + * Creates the books table. + */ + public void createTable() { + StringBuilder sb = new StringBuilder("CREATE TABLE IF NOT EXISTS ").append(TABLE_NAME).append("(").append("id uuid PRIMARY KEY, ").append("title text,").append("author text,").append("subject text);"); + + final String query = sb.toString(); + session.execute(query); + } + + /** + * Creates the books table. + */ + public void createTableBooksByTitle() { + StringBuilder sb = new StringBuilder("CREATE TABLE IF NOT EXISTS ").append(TABLE_NAME_BY_TITLE).append("(").append("id uuid, ").append("title text,").append("PRIMARY KEY (title, id));"); + + final String query = sb.toString(); + session.execute(query); + } + + /** + * Alters the table books and adds an extra column. + */ + public void alterTablebooks(String columnName, String columnType) { + StringBuilder sb = new StringBuilder("ALTER TABLE ").append(TABLE_NAME).append(" ADD ").append(columnName).append(" ").append(columnType).append(";"); + + final String query = sb.toString(); + session.execute(query); + } + + /** + * Insert a row in the table books. + * + * @param book + */ + public void insertbook(Book book) { + StringBuilder sb = new StringBuilder("INSERT INTO ").append(TABLE_NAME).append("(id, title, author, subject) ").append("VALUES (").append(book.getId()).append(", '").append(book.getTitle()).append("', '").append(book.getAuthor()).append("', '") + .append(book.getSubject()).append("');"); + + final String query = sb.toString(); + session.execute(query); + } + + /** + * Insert a row in the table booksByTitle. + * @param book + */ + public void insertbookByTitle(Book book) { + StringBuilder sb = new StringBuilder("INSERT INTO ").append(TABLE_NAME_BY_TITLE).append("(id, title) ").append("VALUES (").append(book.getId()).append(", '").append(book.getTitle()).append("');"); + + final String query = sb.toString(); + session.execute(query); + } + + /** + * Insert a book into two identical tables using a batch query. + * + * @param book + */ + public void insertBookBatch(Book book) { + StringBuilder sb = new StringBuilder("BEGIN BATCH ") + .append("INSERT INTO ").append(TABLE_NAME).append("(id, title, author, subject) ") + .append("VALUES (").append(book.getId()).append(", '").append(book.getTitle()).append("', '").append(book.getAuthor()).append("', '") + .append(book.getSubject()).append("');") + .append("INSERT INTO ").append(TABLE_NAME_BY_TITLE).append("(id, title) ") + .append("VALUES (").append(book.getId()).append(", '").append(book.getTitle()).append("');") + .append("APPLY BATCH;"); + + final String query = sb.toString(); + session.execute(query); + } + + /** + * Select book by id. + * + * @return + */ + public Book selectByTitle(String title) { + StringBuilder sb = new StringBuilder("SELECT * FROM ").append(TABLE_NAME_BY_TITLE).append(" WHERE title = '").append(title).append("';"); + + final String query = sb.toString(); + + ResultSet rs = session.execute(query); + + List books = new ArrayList(); + + for (Row r : rs) { + Book s = new Book(r.getUUID("id"), r.getString("title"), null, null); + books.add(s); + } + + return books.get(0); + } + + /** + * Select all books from books + * + * @return + */ + public List selectAll() { + StringBuilder sb = new StringBuilder("SELECT * FROM ").append(TABLE_NAME); + + final String query = sb.toString(); + ResultSet rs = session.execute(query); + + List books = new ArrayList(); + + for (Row r : rs) { + Book book = new Book(r.getUUID("id"), r.getString("title"), r.getString("author"), r.getString("subject")); + books.add(book); + } + return books; + } + + /** + * Select all books from booksByTitle + * @return + */ + public List selectAllBookByTitle() { + StringBuilder sb = new StringBuilder("SELECT * FROM ").append(TABLE_NAME_BY_TITLE); + + final String query = sb.toString(); + ResultSet rs = session.execute(query); + + List books = new ArrayList(); + + for (Row r : rs) { + Book book = new Book(r.getUUID("id"), r.getString("title"), null, null); + books.add(book); + } + return books; + } + + /** + * Delete a book by title. + */ + public void deletebookByTitle(String title) { + StringBuilder sb = new StringBuilder("DELETE FROM ").append(TABLE_NAME_BY_TITLE).append(" WHERE title = '").append(title).append("';"); + + final String query = sb.toString(); + session.execute(query); + } + + /** + * Delete table. + * + * @param tableName the name of the table to delete. + */ + public void deleteTable(String tableName) { + StringBuilder sb = new StringBuilder("DROP TABLE IF EXISTS ").append(tableName); + + final String query = sb.toString(); + session.execute(query); + } +} diff --git a/java-cassandra/src/main/java/com/baeldung/cassandra/java/client/repository/KeyspaceRepository.java b/java-cassandra/src/main/java/com/baeldung/cassandra/java/client/repository/KeyspaceRepository.java new file mode 100644 index 0000000000..1b42a6ec21 --- /dev/null +++ b/java-cassandra/src/main/java/com/baeldung/cassandra/java/client/repository/KeyspaceRepository.java @@ -0,0 +1,54 @@ +package com.baeldung.cassandra.java.client.repository; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.datastax.driver.core.Session; + +/** + * Repository to handle the Cassandra schema. + * + */ +public class KeyspaceRepository { + private static final Logger LOG = LoggerFactory.getLogger(KeyspaceRepository.class); + + private Session session; + + public KeyspaceRepository(Session session) { + this.session = session; + } + + /** + * Method used to create any keyspace - schema. + * + * @param schemaName the name of the schema. + * @param replicatioonStrategy the replication strategy. + * @param numberOfReplicas the number of replicas. + * + */ + public void createKeyspace(String keyspaceName, String replicatioonStrategy, int numberOfReplicas) { + StringBuilder sb = new StringBuilder("CREATE KEYSPACE IF NOT EXISTS ").append(keyspaceName).append(" WITH replication = {").append("'class':'").append(replicatioonStrategy).append("','replication_factor':").append(numberOfReplicas).append("};"); + + final String query = sb.toString(); + + session.execute(query); + } + + public void useKeyspace(String keyspace) { + session.execute("USE " + keyspace); + } + + /** + * Method used to delete the specified schema. + * It results in the immediate, irreversable removal of the keyspace, including all tables and data contained in the keyspace. + * + * @param schemaName the name of the keyspace to delete. + */ + public void deleteKeyspace(String keyspaceName) { + StringBuilder sb = new StringBuilder("DROP KEYSPACE ").append(keyspaceName); + + final String query = sb.toString(); + + session.execute(query); + } +} diff --git a/java-cassandra/src/test/java/com/baeldung/cassandra/java/client/repository/BookRepositoryIntegrationTest.java b/java-cassandra/src/test/java/com/baeldung/cassandra/java/client/repository/BookRepositoryIntegrationTest.java new file mode 100644 index 0000000000..c6db326547 --- /dev/null +++ b/java-cassandra/src/test/java/com/baeldung/cassandra/java/client/repository/BookRepositoryIntegrationTest.java @@ -0,0 +1,174 @@ +package com.baeldung.cassandra.java.client.repository; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertEquals; + +import java.io.IOException; +import java.util.List; +import java.util.stream.Collectors; + +import org.apache.cassandra.exceptions.ConfigurationException; +import org.apache.thrift.transport.TTransportException; +import org.cassandraunit.utils.EmbeddedCassandraServerHelper; +import org.junit.AfterClass; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; + +import com.baeldung.cassandra.java.client.CassandraConnector; +import com.baeldung.cassandra.java.client.domain.Book; +import com.datastax.driver.core.ResultSet; +import com.datastax.driver.core.Session; +import com.datastax.driver.core.exceptions.InvalidQueryException; +import com.datastax.driver.core.utils.UUIDs; + +public class BookRepositoryIntegrationTest { + + private KeyspaceRepository schemaRepository; + + private BookRepository bookRepository; + + private Session session; + + final String KEYSPACE_NAME = "testLibrary"; + final String BOOKS = "books"; + final String BOOKS_BY_TITLE = "booksByTitle"; + + @BeforeClass + public static void init() throws ConfigurationException, TTransportException, IOException, InterruptedException { + // Start an embedded Cassandra Server + EmbeddedCassandraServerHelper.startEmbeddedCassandra(); + } + + @Before + public void connect() { + CassandraConnector client = new CassandraConnector(); + client.connect("127.0.0.1", 9142); + this.session = client.getSession(); + schemaRepository = new KeyspaceRepository(session); + schemaRepository.createKeyspace(KEYSPACE_NAME, "SimpleStrategy", 1); + schemaRepository.useKeyspace(KEYSPACE_NAME); + bookRepository = new BookRepository(session); + } + + @Test + public void whenCreatingATable_thenCreatedCorrectly() { + bookRepository.deleteTable(BOOKS); + bookRepository.createTable(); + + ResultSet result = session.execute("SELECT * FROM " + KEYSPACE_NAME + "." + BOOKS + ";"); + + // Collect all the column names in one list. + List columnNames = result.getColumnDefinitions().asList().stream().map(cl -> cl.getName()).collect(Collectors.toList()); + assertEquals(columnNames.size(), 4); + assertTrue(columnNames.contains("id")); + assertTrue(columnNames.contains("title")); + assertTrue(columnNames.contains("author")); + assertTrue(columnNames.contains("subject")); + } + + @Test + public void whenAlteringTable_thenAddedColumnExists() { + bookRepository.deleteTable(BOOKS); + bookRepository.createTable(); + + bookRepository.alterTablebooks("publisher", "text"); + + ResultSet result = session.execute("SELECT * FROM " + KEYSPACE_NAME + "." + BOOKS + ";"); + + boolean columnExists = result.getColumnDefinitions().asList().stream().anyMatch(cl -> cl.getName().equals("publisher")); + assertTrue(columnExists); + } + + @Test + public void whenAddingANewBook_thenBookExists() { + bookRepository.deleteTable(BOOKS_BY_TITLE); + bookRepository.createTableBooksByTitle(); + + String title = "Effective Java"; + String author = "Joshua Bloch"; + Book book = new Book(UUIDs.timeBased(), title, author, "Programming"); + bookRepository.insertbookByTitle(book); + + Book savedBook = bookRepository.selectByTitle(title); + assertEquals(book.getTitle(), savedBook.getTitle()); + } + + @Test + public void whenAddingANewBookBatch_ThenBookAddedInAllTables() { + // Create table books + bookRepository.deleteTable(BOOKS); + bookRepository.createTable(); + + // Create table booksByTitle + bookRepository.deleteTable(BOOKS_BY_TITLE); + bookRepository.createTableBooksByTitle(); + + String title = "Effective Java"; + String author = "Joshua Bloch"; + Book book = new Book(UUIDs.timeBased(), title, author, "Programming"); + bookRepository.insertBookBatch(book); + + List books = bookRepository.selectAll(); + + assertEquals(1, books.size()); + assertTrue(books.stream().anyMatch(b -> b.getTitle().equals("Effective Java"))); + + List booksByTitle = bookRepository.selectAllBookByTitle(); + + assertEquals(1, booksByTitle.size()); + assertTrue(booksByTitle.stream().anyMatch(b -> b.getTitle().equals("Effective Java"))); + } + + @Test + public void whenSelectingAll_thenReturnAllRecords() { + bookRepository.deleteTable(BOOKS); + bookRepository.createTable(); + + Book book = new Book(UUIDs.timeBased(), "Effective Java", "Joshua Bloch", "Programming"); + bookRepository.insertbook(book); + + book = new Book(UUIDs.timeBased(), "Clean Code", "Robert C. Martin", "Programming"); + bookRepository.insertbook(book); + + List books = bookRepository.selectAll(); + + assertEquals(2, books.size()); + assertTrue(books.stream().anyMatch(b -> b.getTitle().equals("Effective Java"))); + assertTrue(books.stream().anyMatch(b -> b.getTitle().equals("Clean Code"))); + } + + @Test + public void whenDeletingABookByTitle_thenBookIsDeleted() { + bookRepository.deleteTable(BOOKS_BY_TITLE); + bookRepository.createTableBooksByTitle(); + + Book book = new Book(UUIDs.timeBased(), "Effective Java", "Joshua Bloch", "Programming"); + bookRepository.insertbookByTitle(book); + + book = new Book(UUIDs.timeBased(), "Clean Code", "Robert C. Martin", "Programming"); + bookRepository.insertbookByTitle(book); + + bookRepository.deletebookByTitle("Clean Code"); + + List books = bookRepository.selectAllBookByTitle(); + assertEquals(1, books.size()); + assertTrue(books.stream().anyMatch(b -> b.getTitle().equals("Effective Java"))); + assertFalse(books.stream().anyMatch(b -> b.getTitle().equals("Clean Code"))); + + } + + @Test(expected = InvalidQueryException.class) + public void whenDeletingATable_thenUnconfiguredTable() { + bookRepository.createTable(); + bookRepository.deleteTable(BOOKS); + + session.execute("SELECT * FROM " + KEYSPACE_NAME + "." + BOOKS + ";"); + } + + @AfterClass + public static void cleanup() { + EmbeddedCassandraServerHelper.cleanEmbeddedCassandra(); + } +} diff --git a/java-cassandra/src/test/java/com/baeldung/cassandra/java/client/repository/KeyspaceRepositoryIntegrationTest.java b/java-cassandra/src/test/java/com/baeldung/cassandra/java/client/repository/KeyspaceRepositoryIntegrationTest.java new file mode 100644 index 0000000000..8d4c1d5d9c --- /dev/null +++ b/java-cassandra/src/test/java/com/baeldung/cassandra/java/client/repository/KeyspaceRepositoryIntegrationTest.java @@ -0,0 +1,77 @@ +package com.baeldung.cassandra.java.client.repository; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertEquals; + +import java.io.IOException; +import java.util.List; +import java.util.stream.Collectors; + +import org.apache.cassandra.exceptions.ConfigurationException; +import org.apache.thrift.transport.TTransportException; +import org.cassandraunit.utils.EmbeddedCassandraServerHelper; +import org.junit.AfterClass; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.FixMethodOrder; +import org.junit.Test; +import org.junit.runners.MethodSorters; + +import com.baeldung.cassandra.java.client.CassandraConnector; +import com.datastax.driver.core.ResultSet; +import com.datastax.driver.core.Session; + +@FixMethodOrder(MethodSorters.NAME_ASCENDING) +public class KeyspaceRepositoryIntegrationTest { + + private KeyspaceRepository schemaRepository; + + private Session session; + + @BeforeClass + public static void init() throws ConfigurationException, TTransportException, IOException, InterruptedException { + // Start an embedded Cassandra Server + EmbeddedCassandraServerHelper.startEmbeddedCassandra(); + } + + @Before + public void connect() { + CassandraConnector client = new CassandraConnector(); + client.connect("127.0.0.1", 9142); + this.session = client.getSession(); + schemaRepository = new KeyspaceRepository(session); + } + + @Test + public void whenCreatingAKeyspace_thenCreated() { + String keyspaceName = "testBaeldungKeyspace"; + schemaRepository.createKeyspace(keyspaceName, "SimpleStrategy", 1); + + // ResultSet result = session.execute("SELECT * FROM system_schema.keyspaces WHERE keyspace_name = 'testBaeldungKeyspace';"); + + ResultSet result = session.execute("SELECT * FROM system.schema_keyspaces;"); + + // Check if the Keyspace exists in the returned keyspaces. + List matchedKeyspaces = result.all().stream().filter(r -> r.getString(0).equals(keyspaceName.toLowerCase())).map(r -> r.getString(0)).collect(Collectors.toList()); + assertEquals(matchedKeyspaces.size(), 1); + assertTrue(matchedKeyspaces.get(0).equals(keyspaceName.toLowerCase())); + } + + @Test + public void whenDeletingAKeyspace_thenDoesNotExist() { + String keyspaceName = "testBaeldungKeyspace"; + + // schemaRepository.createKeyspace(keyspaceName, "SimpleStrategy", 1); + schemaRepository.deleteKeyspace(keyspaceName); + + ResultSet result = session.execute("SELECT * FROM system.schema_keyspaces;"); + boolean isKeyspaceCreated = result.all().stream().anyMatch(r -> r.getString(0).equals(keyspaceName.toLowerCase())); + assertFalse(isKeyspaceCreated); + } + + @AfterClass + public static void cleanup() { + EmbeddedCassandraServerHelper.cleanEmbeddedCassandra(); + } +} diff --git a/pom.xml b/pom.xml index 1ac8c83c99..fb16587021 100644 --- a/pom.xml +++ b/pom.xml @@ -116,6 +116,7 @@ xstream dozer orika + java-cassandra From f2ed42bcd22a803943410c1a9c7ffdfc0289d834 Mon Sep 17 00:00:00 2001 From: diego Date: Fri, 26 Aug 2016 04:07:09 +0200 Subject: [PATCH 017/265] Added Web Initializer to Cafe Address application --- wicket-intro/CafeAddress/pom.xml | 71 ++++++++-------- .../cafeaddress/ApplicationConfiguration.java | 10 +++ .../cafeaddress/WebAppInitializer.java | 26 ++++++ .../src/main/webapp/WEB-INF/web.xml | 32 -------- wicket-intro/HelloWorld/pom.xml | 82 +++++++++++++------ .../helloworld/ApplicationConfiguration.java | 10 +++ .../helloworld/HelloWorldApplication.java | 10 +++ .../helloworld/WebAppInitializer.java | 26 ++++++ .../src/main/webapp/WEB-INF/web.xml | 19 ----- 9 files changed, 173 insertions(+), 113 deletions(-) create mode 100644 wicket-intro/CafeAddress/src/main/java/com/baeldung/wicket/examples/cafeaddress/ApplicationConfiguration.java create mode 100644 wicket-intro/CafeAddress/src/main/java/com/baeldung/wicket/examples/cafeaddress/WebAppInitializer.java delete mode 100644 wicket-intro/CafeAddress/src/main/webapp/WEB-INF/web.xml create mode 100644 wicket-intro/HelloWorld/src/main/java/com/baeldung/wicket/examples/helloworld/ApplicationConfiguration.java create mode 100644 wicket-intro/HelloWorld/src/main/java/com/baeldung/wicket/examples/helloworld/WebAppInitializer.java delete mode 100644 wicket-intro/HelloWorld/src/main/webapp/WEB-INF/web.xml diff --git a/wicket-intro/CafeAddress/pom.xml b/wicket-intro/CafeAddress/pom.xml index 2966105404..d0e238bbb9 100644 --- a/wicket-intro/CafeAddress/pom.xml +++ b/wicket-intro/CafeAddress/pom.xml @@ -1,52 +1,20 @@ - 4.0.0 - com.baeldung.wicket.examples.cafeaddress - CafeAddress + com.baeldung.wicket.examples + cafe-address war 1.0-SNAPSHOT - - quickstart - - - - - The Apache Software License, Version 2.0 - http://www.apache.org/licenses/LICENSE-2.0.txt - repo - - + CafeAddress 7.4.0 9.2.13.v20150730 2.5 4.12 UTF-8 - none @@ -63,6 +31,24 @@ ${wicket.version}
--> + + + + + org.springframework + spring-web + 4.1.1.RELEASE + + + javax.servlet + javax.servlet-api + 3.1.0 + + + org.apache.wicket + wicket-spring + 8.0.0-M1 + @@ -93,6 +79,7 @@ + CafeAddress false @@ -130,15 +117,23 @@ true org.apache.maven.plugins maven-compiler-plugin - 3.1 + 3.5.1 - 1.7 - 1.7 + 1.8 + 1.8 UTF-8 true true + + org.apache.maven.plugins + maven-war-plugin + 2.6 + + false + + org.eclipse.jetty jetty-maven-plugin diff --git a/wicket-intro/CafeAddress/src/main/java/com/baeldung/wicket/examples/cafeaddress/ApplicationConfiguration.java b/wicket-intro/CafeAddress/src/main/java/com/baeldung/wicket/examples/cafeaddress/ApplicationConfiguration.java new file mode 100644 index 0000000000..c0e34c6dc1 --- /dev/null +++ b/wicket-intro/CafeAddress/src/main/java/com/baeldung/wicket/examples/cafeaddress/ApplicationConfiguration.java @@ -0,0 +1,10 @@ +package com.baeldung.wicket.examples.cafeaddress; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ComponentScan +public class ApplicationConfiguration { + +} diff --git a/wicket-intro/CafeAddress/src/main/java/com/baeldung/wicket/examples/cafeaddress/WebAppInitializer.java b/wicket-intro/CafeAddress/src/main/java/com/baeldung/wicket/examples/cafeaddress/WebAppInitializer.java new file mode 100644 index 0000000000..f1465e05b9 --- /dev/null +++ b/wicket-intro/CafeAddress/src/main/java/com/baeldung/wicket/examples/cafeaddress/WebAppInitializer.java @@ -0,0 +1,26 @@ +package com.baeldung.wicket.examples.cafeaddress; + +import javax.servlet.FilterRegistration; +import javax.servlet.ServletContext; +import javax.servlet.ServletException; + +import org.apache.wicket.protocol.http.WicketFilter; +import org.springframework.web.WebApplicationInitializer; +import org.springframework.web.context.ContextLoaderListener; +import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; + +public class WebAppInitializer implements WebApplicationInitializer { + + @Override + public void onStartup(ServletContext container) throws ServletException { + AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext(); + container.addListener(new ContextLoaderListener(context)); + context.register(ApplicationConfiguration.class); + + FilterRegistration filter = container.addFilter("CafeAddressApplication", WicketFilter.class); + filter.setInitParameter("applicationClassName", CafeAddressApplication.class.getName()); + filter.setInitParameter(WicketFilter.FILTER_MAPPING_PARAM, "/*"); + filter.addMappingForUrlPatterns(null, false, "/*"); + } + +} \ No newline at end of file diff --git a/wicket-intro/CafeAddress/src/main/webapp/WEB-INF/web.xml b/wicket-intro/CafeAddress/src/main/webapp/WEB-INF/web.xml deleted file mode 100644 index 03e600188b..0000000000 --- a/wicket-intro/CafeAddress/src/main/webapp/WEB-INF/web.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - CafeAddress - - - - - wicket.CafeAddress - org.apache.wicket.protocol.http.WicketFilter - - applicationClassName - com.baeldung.wicket.examples.cafeaddress.CafeAddressApplication - - - - - wicket.CafeAddress - /* - - diff --git a/wicket-intro/HelloWorld/pom.xml b/wicket-intro/HelloWorld/pom.xml index 08586375ce..2aff59dd93 100644 --- a/wicket-intro/HelloWorld/pom.xml +++ b/wicket-intro/HelloWorld/pom.xml @@ -1,26 +1,60 @@ - 4.0.0 - com.baeldung.wicket.examples.helloworld - HelloWorld - war - 1.0-SNAPSHOT - HelloWorld Maven Webapp - http://maven.apache.org - - - junit - junit - 3.8.1 - test - - - org.apache.wicket - wicket-core - 8.0.0-M1 - - - - HelloWorld - + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + 4.0.0 + com.baeldung.wicket.examples + hello-world + war + 1.0-SNAPSHOT + HelloWorld + + + junit + junit + 3.8.1 + test + + + org.apache.wicket + wicket-core + 8.0.0-M1 + + + org.springframework + spring-web + 4.1.1.RELEASE + + + javax.servlet + javax.servlet-api + 3.1.0 + + + org.apache.wicket + wicket-spring + 8.0.0-M1 + + + + HelloWorld + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.5.1 + + 1.8 + 1.8 + + + + org.apache.maven.plugins + maven-war-plugin + 2.6 + + false + + + + diff --git a/wicket-intro/HelloWorld/src/main/java/com/baeldung/wicket/examples/helloworld/ApplicationConfiguration.java b/wicket-intro/HelloWorld/src/main/java/com/baeldung/wicket/examples/helloworld/ApplicationConfiguration.java new file mode 100644 index 0000000000..f9de7adb2a --- /dev/null +++ b/wicket-intro/HelloWorld/src/main/java/com/baeldung/wicket/examples/helloworld/ApplicationConfiguration.java @@ -0,0 +1,10 @@ +package com.baeldung.wicket.examples.helloworld; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ComponentScan +public class ApplicationConfiguration { + +} diff --git a/wicket-intro/HelloWorld/src/main/java/com/baeldung/wicket/examples/helloworld/HelloWorldApplication.java b/wicket-intro/HelloWorld/src/main/java/com/baeldung/wicket/examples/helloworld/HelloWorldApplication.java index 618496e5f7..64bfcadd29 100644 --- a/wicket-intro/HelloWorld/src/main/java/com/baeldung/wicket/examples/helloworld/HelloWorldApplication.java +++ b/wicket-intro/HelloWorld/src/main/java/com/baeldung/wicket/examples/helloworld/HelloWorldApplication.java @@ -3,10 +3,20 @@ package com.baeldung.wicket.examples.helloworld; import org.apache.wicket.Page; import org.apache.wicket.protocol.http.WebApplication; +import org.apache.wicket.spring.injection.annot.SpringComponentInjector; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; public class HelloWorldApplication extends WebApplication { @Override public Class getHomePage() { return HelloWorld.class; } + + @Override + public void init() { + super.init(); + getComponentInstantiationListeners().add(new SpringComponentInjector(this)); + } + } diff --git a/wicket-intro/HelloWorld/src/main/java/com/baeldung/wicket/examples/helloworld/WebAppInitializer.java b/wicket-intro/HelloWorld/src/main/java/com/baeldung/wicket/examples/helloworld/WebAppInitializer.java new file mode 100644 index 0000000000..362502e264 --- /dev/null +++ b/wicket-intro/HelloWorld/src/main/java/com/baeldung/wicket/examples/helloworld/WebAppInitializer.java @@ -0,0 +1,26 @@ +package com.baeldung.wicket.examples.helloworld; + +import javax.servlet.FilterRegistration; +import javax.servlet.ServletContext; +import javax.servlet.ServletException; + +import org.apache.wicket.protocol.http.WicketFilter; +import org.springframework.web.WebApplicationInitializer; +import org.springframework.web.context.ContextLoaderListener; +import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; + +public class WebAppInitializer implements WebApplicationInitializer { + + @Override + public void onStartup(ServletContext container) throws ServletException { + AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext(); + container.addListener(new ContextLoaderListener(context)); + context.register(ApplicationConfiguration.class); + + FilterRegistration filter = container.addFilter("HelloWorldApplication", WicketFilter.class); + filter.setInitParameter("applicationClassName", HelloWorldApplication.class.getName()); + filter.setInitParameter(WicketFilter.FILTER_MAPPING_PARAM, "/*"); + filter.addMappingForUrlPatterns(null, false, "/*"); + } + +} \ No newline at end of file diff --git a/wicket-intro/HelloWorld/src/main/webapp/WEB-INF/web.xml b/wicket-intro/HelloWorld/src/main/webapp/WEB-INF/web.xml deleted file mode 100644 index c68ca09241..0000000000 --- a/wicket-intro/HelloWorld/src/main/webapp/WEB-INF/web.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - Hello World - - HelloWorldApplication - org.apache.wicket.protocol.http.WicketFilter - - applicationClassName - com.baeldung.wicket.examples.helloworld.HelloWorldApplication - - - - HelloWorldApplication - /* - - From dfa48a82f838dff79b7758af71783b75761acc09 Mon Sep 17 00:00:00 2001 From: Christian Raedel Date: Fri, 26 Aug 2016 20:58:06 +0200 Subject: [PATCH 018/265] BAEL-90/BAEL-219: Better interaction between both tutorials. --- spring-cloud-config/README.md | 27 ++++++ spring-cloud-config/client/pom.xml | 79 ----------------- spring-cloud-config/docker/Dockerfile.client | 2 +- spring-cloud-config/docker/Dockerfile.server | 2 +- spring-cloud-config/docker/files/.gitignore | 2 + .../{ => files}/config-client-entrypoint.sh | 0 spring-cloud-config/pom.xml | 58 ++++++++----- spring-cloud-config/server/pom.xml | 82 ------------------ .../spring-cloud-config-client/pom.xml | 40 +++++++++ .../cloud/config/client/ConfigClient.java | 0 .../src/main/resources/bootstrap.properties | 2 +- .../spring-cloud-config-server/pom.xml | 44 ++++++++++ .../cloud/config/server/ConfigServer.java | 0 .../src/main/resources/application.properties | 5 +- .../src/main/resources/config-server.jks | Bin 15 files changed, 153 insertions(+), 190 deletions(-) create mode 100644 spring-cloud-config/README.md delete mode 100644 spring-cloud-config/client/pom.xml create mode 100644 spring-cloud-config/docker/files/.gitignore rename spring-cloud-config/docker/{ => files}/config-client-entrypoint.sh (100%) delete mode 100644 spring-cloud-config/server/pom.xml create mode 100644 spring-cloud-config/spring-cloud-config-client/pom.xml rename spring-cloud-config/{client => spring-cloud-config-client}/src/main/java/com/baeldung/spring/cloud/config/client/ConfigClient.java (100%) rename spring-cloud-config/{client => spring-cloud-config-client}/src/main/resources/bootstrap.properties (72%) create mode 100644 spring-cloud-config/spring-cloud-config-server/pom.xml rename spring-cloud-config/{server => spring-cloud-config-server}/src/main/java/com/baeldung/spring/cloud/config/server/ConfigServer.java (100%) rename spring-cloud-config/{server => spring-cloud-config-server}/src/main/resources/application.properties (68%) rename spring-cloud-config/{server => spring-cloud-config-server}/src/main/resources/config-server.jks (100%) diff --git a/spring-cloud-config/README.md b/spring-cloud-config/README.md new file mode 100644 index 0000000000..b8ebb2bfe9 --- /dev/null +++ b/spring-cloud-config/README.md @@ -0,0 +1,27 @@ +## Spring Cloud Config ## + +To get this example working, you have to initialize a new *Git* repository in +the ```client-config``` directory first *and* you have to set the environment variable +```CONFIG_REPO``` to an absolute path of that directory. + +``` +$> cd client-config +$> git init +$> git add . +$> git commit -m 'Initial commit' +$> export CONFIG_REPO=$(pwd) +``` + +Then you're able to run the examples with ```mvn install spring-boot:run```. + +### Docker ### + +To get the *Docker* examples working, you have to repackage the ```spring-cloud-config-server``` +and ```spring-cloud-config-client``` modules first: + +``` +$> mvn install spring-boot:repackage +``` + +Don't forget to download the *Java JCE* package from +(Oracle)[http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html]. diff --git a/spring-cloud-config/client/pom.xml b/spring-cloud-config/client/pom.xml deleted file mode 100644 index 0ef4b35581..0000000000 --- a/spring-cloud-config/client/pom.xml +++ /dev/null @@ -1,79 +0,0 @@ - - - 4.0.0 - - - com.baeldung.spring.cloud - spring-cloud-config - 0.0.1-SNAPSHOT - - client - jar - - client - Demo project for Spring Cloud Config Client - - - UTF-8 - UTF-8 - 1.8 - - - - - org.springframework.cloud - spring-cloud-starter-config - - - org.springframework.boot - spring-boot-starter-web - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - - org.springframework.cloud - spring-cloud-dependencies - Brixton.BUILD-SNAPSHOT - pom - import - - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - - - - spring-snapshots - Spring Snapshots - https://repo.spring.io/snapshot - - true - - - - spring-milestones - Spring Milestones - https://repo.spring.io/milestone - - false - - - - diff --git a/spring-cloud-config/docker/Dockerfile.client b/spring-cloud-config/docker/Dockerfile.client index 5fbc0b98c0..0f9293bd22 100644 --- a/spring-cloud-config/docker/Dockerfile.client +++ b/spring-cloud-config/docker/Dockerfile.client @@ -1,6 +1,6 @@ FROM alpine-java:base MAINTAINER baeldung.com RUN apk --no-cache add netcat-openbsd -COPY files/config-client.jar /opt/spring-cloud/lib/ +COPY files/spring-cloud-config-client-1.0.0-SNAPSHOT.jar /opt/spring-cloud/lib/config-client.jar COPY files/config-client-entrypoint.sh /opt/spring-cloud/bin/ RUN chmod 755 /opt/spring-cloud/bin/config-client-entrypoint.sh diff --git a/spring-cloud-config/docker/Dockerfile.server b/spring-cloud-config/docker/Dockerfile.server index 4f7bd751e8..90d7e2a7cf 100644 --- a/spring-cloud-config/docker/Dockerfile.server +++ b/spring-cloud-config/docker/Dockerfile.server @@ -1,6 +1,6 @@ FROM alpine-java:base MAINTAINER baeldung.com -COPY files/config-server.jar /opt/spring-cloud/lib/ +COPY files/spring-cloud-config-server-1.0.0-SNAPSHOT.jar /opt/spring-cloud/lib/config-server.jar ENV SPRING_APPLICATION_JSON='{"spring": {"cloud": {"config": {"server": \ {"git": {"uri": "/var/lib/spring-cloud/config-repo", "clone-on-start": true}}}}}}' ENTRYPOINT ["/usr/bin/java"] diff --git a/spring-cloud-config/docker/files/.gitignore b/spring-cloud-config/docker/files/.gitignore new file mode 100644 index 0000000000..28ffcbffdb --- /dev/null +++ b/spring-cloud-config/docker/files/.gitignore @@ -0,0 +1,2 @@ +/UnlimitedJCEPolicyJDK8 +/*.jar diff --git a/spring-cloud-config/docker/config-client-entrypoint.sh b/spring-cloud-config/docker/files/config-client-entrypoint.sh similarity index 100% rename from spring-cloud-config/docker/config-client-entrypoint.sh rename to spring-cloud-config/docker/files/config-client-entrypoint.sh diff --git a/spring-cloud-config/pom.xml b/spring-cloud-config/pom.xml index 8e0e4b8706..3b1b59b037 100644 --- a/spring-cloud-config/pom.xml +++ b/spring-cloud-config/pom.xml @@ -5,38 +5,48 @@ com.baeldung.spring.cloud spring-cloud-config - 0.0.1-SNAPSHOT pom - server - client + spring-cloud-config-server + spring-cloud-config-client - org.springframework.boot - spring-boot-starter-parent - 1.3.5.RELEASE + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + .. + + + + org.springframework.boot + spring-boot-parent + 1.4.0.RELEASE + pom + import + + + org.springframework.cloud + spring-cloud-dependencies + Brixton.SR4 + pom + import + + + + - - - org.apache.maven.plugins - maven-surefire-plugin - ${maven-surefire-plugin.version} - - - **/*LiveTest.java - - - - - + + + + org.springframework.boot + spring-boot-maven-plugin + 1.4.0.RELEASE + + + - - - 1.3.5.RELEASE - 2.19.1 - diff --git a/spring-cloud-config/server/pom.xml b/spring-cloud-config/server/pom.xml deleted file mode 100644 index c3f68854bb..0000000000 --- a/spring-cloud-config/server/pom.xml +++ /dev/null @@ -1,82 +0,0 @@ - - - 4.0.0 - - - com.baeldung.spring.cloud - spring-cloud-config - 0.0.1-SNAPSHOT - - server - - server - Demo project for Spring Cloud Config Server - - - UTF-8 - UTF-8 - 1.8 - - - - - org.springframework.cloud - spring-cloud-config-server - - - org.springframework.boot - spring-boot-starter-security - - - org.springframework.boot - spring-boot-starter-web - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - - org.springframework.cloud - spring-cloud-dependencies - Brixton.BUILD-SNAPSHOT - pom - import - - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - - - - spring-snapshots - Spring Snapshots - https://repo.spring.io/snapshot - - true - - - - spring-milestones - Spring Milestones - https://repo.spring.io/milestone - - false - - - - diff --git a/spring-cloud-config/spring-cloud-config-client/pom.xml b/spring-cloud-config/spring-cloud-config-client/pom.xml new file mode 100644 index 0000000000..968489bce2 --- /dev/null +++ b/spring-cloud-config/spring-cloud-config-client/pom.xml @@ -0,0 +1,40 @@ + + + 4.0.0 + + + com.baeldung.spring.cloud + spring-cloud-config + 1.0.0-SNAPSHOT + + spring-cloud-config-client + jar + + spring-cloud-config-client + + + + org.springframework.cloud + spring-cloud-starter-config + 1.1.3.RELEASE + + + org.springframework.boot + spring-boot-starter-web + 1.4.0.RELEASE + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + ../docker/files + + + + + diff --git a/spring-cloud-config/client/src/main/java/com/baeldung/spring/cloud/config/client/ConfigClient.java b/spring-cloud-config/spring-cloud-config-client/src/main/java/com/baeldung/spring/cloud/config/client/ConfigClient.java similarity index 100% rename from spring-cloud-config/client/src/main/java/com/baeldung/spring/cloud/config/client/ConfigClient.java rename to spring-cloud-config/spring-cloud-config-client/src/main/java/com/baeldung/spring/cloud/config/client/ConfigClient.java diff --git a/spring-cloud-config/client/src/main/resources/bootstrap.properties b/spring-cloud-config/spring-cloud-config-client/src/main/resources/bootstrap.properties similarity index 72% rename from spring-cloud-config/client/src/main/resources/bootstrap.properties rename to spring-cloud-config/spring-cloud-config-client/src/main/resources/bootstrap.properties index 18982a93b5..6c350bffcd 100644 --- a/spring-cloud-config/client/src/main/resources/bootstrap.properties +++ b/spring-cloud-config/spring-cloud-config-client/src/main/resources/bootstrap.properties @@ -1,5 +1,5 @@ spring.application.name=config-client spring.profiles.active=development -spring.cloud.config.uri=http://localhost:8888 +spring.cloud.config.uri=http://localhost:${PORT:8888} spring.cloud.config.username=root spring.cloud.config.password=s3cr3t diff --git a/spring-cloud-config/spring-cloud-config-server/pom.xml b/spring-cloud-config/spring-cloud-config-server/pom.xml new file mode 100644 index 0000000000..f2b8b69a6a --- /dev/null +++ b/spring-cloud-config/spring-cloud-config-server/pom.xml @@ -0,0 +1,44 @@ + + + 4.0.0 + + + com.baeldung.spring.cloud + spring-cloud-config + 1.0.0-SNAPSHOT + + spring-cloud-config-server + + spring-cloud-config-server + + + + org.springframework.cloud + spring-cloud-config-server + 1.1.3.RELEASE + + + org.springframework.boot + spring-boot-starter-security + 1.4.0.RELEASE + + + org.springframework.boot + spring-boot-starter-web + 1.4.0.RELEASE + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + ../docker/files + + + + + diff --git a/spring-cloud-config/server/src/main/java/com/baeldung/spring/cloud/config/server/ConfigServer.java b/spring-cloud-config/spring-cloud-config-server/src/main/java/com/baeldung/spring/cloud/config/server/ConfigServer.java similarity index 100% rename from spring-cloud-config/server/src/main/java/com/baeldung/spring/cloud/config/server/ConfigServer.java rename to spring-cloud-config/spring-cloud-config-server/src/main/java/com/baeldung/spring/cloud/config/server/ConfigServer.java diff --git a/spring-cloud-config/server/src/main/resources/application.properties b/spring-cloud-config/spring-cloud-config-server/src/main/resources/application.properties similarity index 68% rename from spring-cloud-config/server/src/main/resources/application.properties rename to spring-cloud-config/spring-cloud-config-server/src/main/resources/application.properties index 2131f3b249..c4f57f0a82 100644 --- a/spring-cloud-config/server/src/main/resources/application.properties +++ b/spring-cloud-config/spring-cloud-config-server/src/main/resources/application.properties @@ -1,6 +1,7 @@ -server.port=8888 -spring.cloud.config.server.git.uri=https://github.com/eugenp/tutorials/tree/master/spring-cloud-config/client-config +server.port=${PORT:8888} +spring.cloud.config.server.git.uri=${CONFIG_REPO} spring.cloud.config.server.git.clone-on-start=false +spring.cloud.config.fail-fast=true security.user.name=root security.user.password=s3cr3t encrypt.key-store.location=classpath:/config-server.jks diff --git a/spring-cloud-config/server/src/main/resources/config-server.jks b/spring-cloud-config/spring-cloud-config-server/src/main/resources/config-server.jks similarity index 100% rename from spring-cloud-config/server/src/main/resources/config-server.jks rename to spring-cloud-config/spring-cloud-config-server/src/main/resources/config-server.jks From 42aac4bb4d651db52934edc8b7c3b93770e744a8 Mon Sep 17 00:00:00 2001 From: diego Date: Sat, 27 Aug 2016 01:16:11 +0200 Subject: [PATCH 019/265] added readme with execution instructions --- wicket-intro/README.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 wicket-intro/README.md diff --git a/wicket-intro/README.md b/wicket-intro/README.md new file mode 100644 index 0000000000..614446e7ba --- /dev/null +++ b/wicket-intro/README.md @@ -0,0 +1,4 @@ + +From the same directory where pom.xml is, execute the following command to run the project: + +mvn jetty:run From c1667fe02458364d4935c16aeae0b609a54dc2b0 Mon Sep 17 00:00:00 2001 From: diego Date: Sat, 27 Aug 2016 01:16:48 +0200 Subject: [PATCH 020/265] removed unnecesary config from project --- wicket-intro/CafeAddress/pom.xml | 19 ------------------- .../CafeAddress/src/main/resources/log4j2.xml | 16 ---------------- 2 files changed, 35 deletions(-) delete mode 100644 wicket-intro/CafeAddress/src/main/resources/log4j2.xml diff --git a/wicket-intro/CafeAddress/pom.xml b/wicket-intro/CafeAddress/pom.xml index d0e238bbb9..8fb0fbd05a 100644 --- a/wicket-intro/CafeAddress/pom.xml +++ b/wicket-intro/CafeAddress/pom.xml @@ -24,13 +24,6 @@ wicket-core ${wicket.version} - @@ -50,18 +43,6 @@ 8.0.0-M1 - - - org.apache.logging.log4j - log4j-slf4j-impl - ${log4j.version} - - - org.apache.logging.log4j - log4j-core - ${log4j.version} - - junit diff --git a/wicket-intro/CafeAddress/src/main/resources/log4j2.xml b/wicket-intro/CafeAddress/src/main/resources/log4j2.xml deleted file mode 100644 index 5596dd5f40..0000000000 --- a/wicket-intro/CafeAddress/src/main/resources/log4j2.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file From 9cf6ea22537a8e5c1f1bd0de8bb5b045d8d45e25 Mon Sep 17 00:00:00 2001 From: antonk Date: Sat, 27 Aug 2016 10:42:13 +0300 Subject: [PATCH 021/265] Fixed Maven build with experimental java 9 Maven compiler plug-in. Minor code changes --- .../java9/language/PrivateInterface.java | 23 ------------------- .../PrivateInterfaceTest.java} | 0 pom.xml | 1 + 3 files changed, 1 insertion(+), 23 deletions(-) delete mode 100644 core-java-9/src/test/java/com/baeldung/java9/language/PrivateInterface.java rename core-java-9/src/test/java/com/baeldung/java9/{Main.java => language/PrivateInterfaceTest.java} (100%) diff --git a/core-java-9/src/test/java/com/baeldung/java9/language/PrivateInterface.java b/core-java-9/src/test/java/com/baeldung/java9/language/PrivateInterface.java deleted file mode 100644 index fd6a496b18..0000000000 --- a/core-java-9/src/test/java/com/baeldung/java9/language/PrivateInterface.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.baeldung.java9.language; - -public interface PrivateInterface { - - private static String staticPrivate() { - return "static private"; - } - - private String instancePrivate() { - return "instance private"; - } - - public default void check(){ - String result = staticPrivate(); - if (!result.equals("static private")) - throw new AssertionError("Incorrect result for static private interface method"); - PrivateInterface pvt = new PrivateInterface() { - }; - result = pvt.instancePrivate(); - if (!result.equals("instance private")) - throw new AssertionError("Incorrect result for instance private interface method"); - } -} diff --git a/core-java-9/src/test/java/com/baeldung/java9/Main.java b/core-java-9/src/test/java/com/baeldung/java9/language/PrivateInterfaceTest.java similarity index 100% rename from core-java-9/src/test/java/com/baeldung/java9/Main.java rename to core-java-9/src/test/java/com/baeldung/java9/language/PrivateInterfaceTest.java diff --git a/pom.xml b/pom.xml index d2f5d83b46..cbe3055dbe 100644 --- a/pom.xml +++ b/pom.xml @@ -18,6 +18,7 @@ apache-fop core-java core-java-8 + core-java-9 couchbase-sdk-intro couchbase-sdk-spring-service From f79a0c0ee3c3a4f08e54e4870ffac7c815c5f649 Mon Sep 17 00:00:00 2001 From: egimaben Date: Sat, 27 Aug 2016 22:42:08 +0300 Subject: [PATCH 022/265] added project for java reflection --- reflection/pom.xml | 30 ++ .../java/com/baeldung/reflection/Animal.java | 26 ++ .../java/com/baeldung/reflection/Bird.java | 33 ++ .../java/com/baeldung/reflection/Eating.java | 5 + .../java/com/baeldung/reflection/Goat.java | 24 ++ .../com/baeldung/reflection/Locomotion.java | 5 + .../java/com/baeldung/reflection/Person.java | 6 + .../baeldung/reflection/ReflectionTest.java | 316 ++++++++++++++++++ 8 files changed, 445 insertions(+) create mode 100644 reflection/pom.xml create mode 100644 reflection/src/main/java/com/baeldung/reflection/Animal.java create mode 100644 reflection/src/main/java/com/baeldung/reflection/Bird.java create mode 100644 reflection/src/main/java/com/baeldung/reflection/Eating.java create mode 100644 reflection/src/main/java/com/baeldung/reflection/Goat.java create mode 100644 reflection/src/main/java/com/baeldung/reflection/Locomotion.java create mode 100644 reflection/src/main/java/com/baeldung/reflection/Person.java create mode 100644 reflection/src/test/java/com/baeldung/reflection/ReflectionTest.java diff --git a/reflection/pom.xml b/reflection/pom.xml new file mode 100644 index 0000000000..d3e5b16231 --- /dev/null +++ b/reflection/pom.xml @@ -0,0 +1,30 @@ + + 4.0.0 + com.baeldung + reflection + 1.0 + reflection + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.3 + + 7 + 7 + + + + + + + junit + junit + 4.3 + test + + + + diff --git a/reflection/src/main/java/com/baeldung/reflection/Animal.java b/reflection/src/main/java/com/baeldung/reflection/Animal.java new file mode 100644 index 0000000000..2370659d34 --- /dev/null +++ b/reflection/src/main/java/com/baeldung/reflection/Animal.java @@ -0,0 +1,26 @@ +package com.baeldung.reflection; + +public abstract class Animal implements Eating{ + public static final String CATEGORY = "domestic"; + private String name; + + public Animal(String name) { + super(); + this.name = name; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String makeSound() { + return getSound(); + } + + protected abstract String getSound(); + +} diff --git a/reflection/src/main/java/com/baeldung/reflection/Bird.java b/reflection/src/main/java/com/baeldung/reflection/Bird.java new file mode 100644 index 0000000000..eb7115c53a --- /dev/null +++ b/reflection/src/main/java/com/baeldung/reflection/Bird.java @@ -0,0 +1,33 @@ +package com.baeldung.reflection; + +public class Bird extends Animal { + private boolean walks; + public Bird() { + super("bird"); + } + public Bird(String name, boolean walks) { + super(name); + setWalks(walks); + } + public Bird(String name) { + super(name); + } + + @Override + public String eats() { + return "grains"; + } + + @Override + protected String getSound() { + return "chaps"; + } + + public boolean walks() { + return walks; + } + + public void setWalks(boolean walks) { + this.walks = walks; + } +} diff --git a/reflection/src/main/java/com/baeldung/reflection/Eating.java b/reflection/src/main/java/com/baeldung/reflection/Eating.java new file mode 100644 index 0000000000..4e73be0d52 --- /dev/null +++ b/reflection/src/main/java/com/baeldung/reflection/Eating.java @@ -0,0 +1,5 @@ +package com.baeldung.reflection; + +public interface Eating { + public String eats(); +} diff --git a/reflection/src/main/java/com/baeldung/reflection/Goat.java b/reflection/src/main/java/com/baeldung/reflection/Goat.java new file mode 100644 index 0000000000..9dc69f626b --- /dev/null +++ b/reflection/src/main/java/com/baeldung/reflection/Goat.java @@ -0,0 +1,24 @@ +package com.baeldung.reflection; + +public class Goat extends Animal implements Locomotion{ + + public Goat(String name) { + super(name); + } + + @Override + protected String getSound() { + return "bleat"; + } + + @Override + public String getLocomotion() { + return "walks"; + } + + @Override + public String eats() { + return "grass"; + } + +} diff --git a/reflection/src/main/java/com/baeldung/reflection/Locomotion.java b/reflection/src/main/java/com/baeldung/reflection/Locomotion.java new file mode 100644 index 0000000000..4b1e54a4e9 --- /dev/null +++ b/reflection/src/main/java/com/baeldung/reflection/Locomotion.java @@ -0,0 +1,5 @@ +package com.baeldung.reflection; + +public interface Locomotion { + public String getLocomotion(); +} diff --git a/reflection/src/main/java/com/baeldung/reflection/Person.java b/reflection/src/main/java/com/baeldung/reflection/Person.java new file mode 100644 index 0000000000..66250f8da1 --- /dev/null +++ b/reflection/src/main/java/com/baeldung/reflection/Person.java @@ -0,0 +1,6 @@ +package com.baeldung.reflection; + +public class Person { + private String name; + private int age; +} diff --git a/reflection/src/test/java/com/baeldung/reflection/ReflectionTest.java b/reflection/src/test/java/com/baeldung/reflection/ReflectionTest.java new file mode 100644 index 0000000000..7eb0c35671 --- /dev/null +++ b/reflection/src/test/java/com/baeldung/reflection/ReflectionTest.java @@ -0,0 +1,316 @@ +package com.baeldung.reflection; + +import static org.junit.Assert.*; + +import java.lang.reflect.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import org.junit.Test; + +public class ReflectionTest { + @Test + public void givenObject_whenGetsFieldNamesAtRuntime_thenCorrect() { + Object person = new Person(); + Field[] fields = person.getClass().getDeclaredFields(); + List expectedFieldNames = Arrays.asList(new String[] { "name", + "age" }); + + List actualFieldNames = new ArrayList<>(); + for (Field field : fields) + actualFieldNames.add(field.getName()); + + assertTrue(expectedFieldNames.containsAll(actualFieldNames)); + + } + + @Test + public void givenObject_whenGetsClassName_thenCorrect() { + Object goat = new Goat("goat"); + Class clazz = goat.getClass(); + assertEquals("Goat", clazz.getSimpleName()); + assertEquals("com.baeldung.reflection.Goat", clazz.getName()); + assertEquals("com.baeldung.reflection.Goat", clazz.getCanonicalName()); + } + + @Test + public void givenClassName_whenCreatesObject_thenCorrect() + throws ClassNotFoundException { + Class clazz = Class.forName("com.baeldung.reflection.Goat"); + assertEquals("Goat", clazz.getSimpleName()); + assertEquals("com.baeldung.reflection.Goat", clazz.getName()); + assertEquals("com.baeldung.reflection.Goat", clazz.getCanonicalName()); + } + + @Test + public void givenClass_whenRecognisesModifiers_thenCorrect() + throws ClassNotFoundException { + Class goatClass = Class.forName("com.baeldung.reflection.Goat"); + Class animalClass = Class.forName("com.baeldung.reflection.Animal"); + int goatMods = goatClass.getModifiers(); + int animalMods = animalClass.getModifiers(); + assertTrue(Modifier.isPublic(goatMods)); + assertTrue(Modifier.isAbstract(animalMods)); + assertTrue(Modifier.isPublic(animalMods)); + } + + @Test + public void givenClass_whenGetsPackageInfo_thenCorrect() { + Goat goat = new Goat("goat"); + Class goatClass = goat.getClass(); + Package pkg = goatClass.getPackage(); + assertEquals("com.baeldung.reflection", pkg.getName()); + } + + @Test + public void givenClass_whenGetsSuperClass_thenCorrect() { + Goat goat = new Goat("goat"); + String str = "any string"; + + Class goatClass = goat.getClass(); + Class goatSuperClass = goatClass.getSuperclass(); + + assertEquals("Animal", goatSuperClass.getSimpleName()); + assertEquals("Object", str.getClass().getSuperclass().getSimpleName()); + + } + + @Test + public void givenClass_whenGetsImplementedInterfaces_thenCorrect() + throws ClassNotFoundException { + Class goatClass = Class.forName("com.baeldung.reflection.Goat"); + Class animalClass = Class.forName("com.baeldung.reflection.Animal"); + Class[] goatInterfaces = goatClass.getInterfaces(); + Class[] animalInterfaces = animalClass.getInterfaces(); + assertEquals(1, goatInterfaces.length); + assertEquals(1, animalInterfaces.length); + assertEquals("Locomotion", goatInterfaces[0].getSimpleName()); + assertEquals("Eating", animalInterfaces[0].getSimpleName()); + } + + @Test + public void givenClass_whenGetsConstructor_thenCorrect() + throws ClassNotFoundException { + Class goatClass = Class.forName("com.baeldung.reflection.Goat"); + Constructor[] constructors = goatClass.getConstructors(); + assertEquals(1, constructors.length); + assertEquals("com.baeldung.reflection.Goat", constructors[0].getName()); + } + + @Test + public void givenClass_whenGetsFields_thenCorrect() + throws ClassNotFoundException { + Class animalClass = Class.forName("com.baeldung.reflection.Animal"); + Field[] fields = animalClass.getDeclaredFields(); + List expectedFields = Arrays.asList(new String[] { "name", + "CATEGORY" }); + List actualFields = new ArrayList<>(); + for (Field field : fields) + actualFields.add(field.getName()); + assertEquals(2, actualFields.size()); + assertTrue(actualFields.containsAll(expectedFields)); + } + + @Test + public void givenClass_whenGetsMethods_thenCorrect() + throws ClassNotFoundException { + Class animalClass = Class.forName("com.baeldung.reflection.Animal"); + Method[] methods = animalClass.getDeclaredMethods(); + List expectedMethods = Arrays.asList(new String[] { "getName", + "setName", "getSound", "makeSound" }); + List actualMethods = new ArrayList<>(); + for (Method method : methods) + actualMethods.add(method.getName()); + assertEquals(4, actualMethods.size()); + assertTrue(actualMethods.containsAll(expectedMethods)); + + } + + @Test + public void givenClass_whenGetsAllConstructors_thenCorrect() + throws ClassNotFoundException { + Class birdClass = Class.forName("com.baeldung.reflection.Bird"); + Constructor[] constructors = birdClass.getConstructors(); + assertEquals(3, constructors.length); + } + + @Test + public void givenClass_whenGetsEachConstructorByParamTypes_thenCorrect() + throws ClassNotFoundException, NoSuchMethodException, + SecurityException { + Class birdClass = Class.forName("com.baeldung.reflection.Bird"); + Constructor cons1 = birdClass.getConstructor(); + Constructor cons2 = birdClass.getConstructor(String.class); + Constructor cons3 = birdClass.getConstructor(String.class, + boolean.class); + } + + @Test + public void givenClass_whenInstantiatesObjectsAtRuntime_thenCorrect() + throws ClassNotFoundException, NoSuchMethodException, + SecurityException, InstantiationException, IllegalAccessException, + IllegalArgumentException, InvocationTargetException { + Class birdClass = Class.forName("com.baeldung.reflection.Bird"); + Constructor cons1 = birdClass.getConstructor(); + Constructor cons2 = birdClass.getConstructor(String.class); + Constructor cons3 = birdClass.getConstructor(String.class, + boolean.class); + Bird bird1 = (Bird) cons1.newInstance(); + Bird bird2 = (Bird) cons2.newInstance("Weaver bird"); + Bird bird3 = (Bird) cons3.newInstance("dove", true); + assertEquals("bird", bird1.getName()); + assertEquals("Weaver bird", bird2.getName()); + assertEquals("dove", bird3.getName()); + assertFalse(bird1.walks()); + assertTrue(bird3.walks()); + } + + @Test + public void givenClass_whenGetsPublicFields_thenCorrect() + throws ClassNotFoundException { + Class birdClass = Class.forName("com.baeldung.reflection.Bird"); + Field[] fields = birdClass.getFields(); + assertEquals(1, fields.length); + assertEquals("CATEGORY", fields[0].getName()); + + } + + @Test + public void givenClass_whenGetsPublicFieldByName_thenCorrect() + throws ClassNotFoundException, NoSuchFieldException, + SecurityException { + Class birdClass = Class.forName("com.baeldung.reflection.Bird"); + Field field = birdClass.getField("CATEGORY"); + assertEquals("CATEGORY", field.getName()); + + } + + @Test + public void givenClass_whenGetsDeclaredFields_thenCorrect() + throws ClassNotFoundException { + Class birdClass = Class.forName("com.baeldung.reflection.Bird"); + Field[] fields = birdClass.getDeclaredFields(); + assertEquals(1, fields.length); + assertEquals("walks", fields[0].getName()); + } + + @Test + public void givenClass_whenGetsFieldsByName_thenCorrect() + throws ClassNotFoundException, NoSuchFieldException, + SecurityException { + Class birdClass = Class.forName("com.baeldung.reflection.Bird"); + Field field = birdClass.getDeclaredField("walks"); + assertEquals("walks", field.getName()); + + } + + @Test + public void givenClassField_whenGetsType_thenCorrect() + throws ClassNotFoundException, NoSuchFieldException, + SecurityException { + Field field = Class.forName("com.baeldung.reflection.Bird") + .getDeclaredField("walks"); + Class fieldClass = field.getType(); + assertEquals("boolean", fieldClass.getSimpleName()); + } + + @Test + public void givenClassField_whenSetsAndGetsValue_thenCorrect() + throws ClassNotFoundException, NoSuchFieldException, + SecurityException, InstantiationException, IllegalAccessException { + Class birdClass = Class.forName("com.baeldung.reflection.Bird"); + Bird bird = (Bird) birdClass.newInstance(); + Field field = birdClass.getDeclaredField("walks"); + field.setAccessible(true); + + assertFalse(field.getBoolean(bird)); + assertFalse(bird.walks()); + + field.set(bird, true); + + assertTrue(field.getBoolean(bird)); + assertTrue(bird.walks()); + + } + + @Test + public void givenClassField_whenGetsAndSetsWithNull_thenCorrect() + throws ClassNotFoundException, InstantiationException, + IllegalAccessException, NoSuchFieldException, SecurityException { + Class birdClass = Class.forName("com.baeldung.reflection.Bird"); + Field field = birdClass.getField("CATEGORY"); + field.setAccessible(true); + + assertEquals("domestic", field.get(null)); + } + + @Test + public void givenClass_whenGetsAllPublicMethods_thenCorrect() + throws ClassNotFoundException { + Class birdClass = Class.forName("com.baeldung.reflection.Bird"); + Method[] methods = birdClass.getMethods(); + List methodNames = new ArrayList<>(); + for (Method method : methods) + methodNames.add(method.getName()); + assertTrue(methodNames.containsAll(Arrays + .asList(new String[] { "equals", "notifyAll", "hashCode", + "walks", "eats", "toString" }))); + + } + + @Test + public void givenClass_whenGetsOnlyDeclaredMethods_thenCorrect() + throws ClassNotFoundException { + Class birdClass = Class.forName("com.baeldung.reflection.Bird"); + Method[] methods = birdClass.getDeclaredMethods(); + List expectedMethodNames = Arrays.asList(new String[] { + "setWalks", "walks", "getSound", "eats" }); + List actualMethodNames = new ArrayList<>(); + for (Method method : methods) + actualMethodNames.add(method.getName()); + assertEquals(expectedMethodNames.size(), actualMethodNames.size()); + assertTrue(expectedMethodNames.containsAll(actualMethodNames)); + assertTrue(actualMethodNames.containsAll(expectedMethodNames)); + + } + + @Test + public void givenMethodName_whenGetsMethod_thenCorrect() + throws ClassNotFoundException, NoSuchMethodException, + SecurityException { + Class birdClass = Class.forName("com.baeldung.reflection.Bird"); + Method walksMethod = birdClass.getDeclaredMethod("walks"); + Method setWalksMethod = birdClass.getDeclaredMethod("setWalks", + boolean.class); + assertFalse(walksMethod.isAccessible()); + assertFalse(setWalksMethod.isAccessible()); + walksMethod.setAccessible(true); + setWalksMethod.setAccessible(true); + assertTrue(walksMethod.isAccessible()); + assertTrue(setWalksMethod.isAccessible()); + + } + + @Test + public void givenMethod_whenInvokes_thenCorrect() + throws ClassNotFoundException, NoSuchMethodException, + SecurityException, IllegalAccessException, + IllegalArgumentException, InvocationTargetException, + InstantiationException { + Class birdClass = Class.forName("com.baeldung.reflection.Bird"); + Bird bird = (Bird) birdClass.newInstance(); + Method setWalksMethod = birdClass.getDeclaredMethod("setWalks", + boolean.class); + Method walksMethod = birdClass.getDeclaredMethod("walks"); + boolean walks = (boolean) walksMethod.invoke(bird); + assertFalse(walks); + assertFalse(bird.walks()); + setWalksMethod.invoke(bird, true); + boolean walks2 = (boolean) walksMethod.invoke(bird); + assertTrue(walks2); + assertTrue(bird.walks()); + + } + +} From 784b5a6d825d6bf03bfe0fcbddb9392d598a2c75 Mon Sep 17 00:00:00 2001 From: egimaben Date: Sat, 27 Aug 2016 22:42:51 +0300 Subject: [PATCH 023/265] added project for java reflection --- pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/pom.xml b/pom.xml index daa92744ae..6a3e2b3312 100644 --- a/pom.xml +++ b/pom.xml @@ -117,6 +117,7 @@ xstream dozer orika + reflection From f670bd84430b3e879ee897af560f5330cf396f30 Mon Sep 17 00:00:00 2001 From: sanketmeghani Date: Tue, 30 Aug 2016 19:45:52 +0530 Subject: [PATCH 024/265] Adding .gitignore --- flyway-migration/.gitignore | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 flyway-migration/.gitignore diff --git a/flyway-migration/.gitignore b/flyway-migration/.gitignore new file mode 100644 index 0000000000..abffe04ed2 --- /dev/null +++ b/flyway-migration/.gitignore @@ -0,0 +1,4 @@ +.classpath +.project +.settings +target/ \ No newline at end of file From e4810b71b08854b96f9cd729382dfade5507163c Mon Sep 17 00:00:00 2001 From: sanketmeghani Date: Tue, 30 Aug 2016 19:46:09 +0530 Subject: [PATCH 025/265] Adding pom.xml --- flyway-migration/pom.xml | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 flyway-migration/pom.xml diff --git a/flyway-migration/pom.xml b/flyway-migration/pom.xml new file mode 100644 index 0000000000..e3e29cd43f --- /dev/null +++ b/flyway-migration/pom.xml @@ -0,0 +1,33 @@ + + 4.0.0 + com.baeldung + flyway-migration + 1.0 + flyway-migration + A sample project to demonstrate Flyway migrations + + + mysql + mysql-connector-java + 6.0.3 + + + + + + org.flywaydb + flyway-maven-plugin + 4.0.3 + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + + + \ No newline at end of file From eba93a64471ea28629deea62d8631f4292f01301 Mon Sep 17 00:00:00 2001 From: sanketmeghani Date: Tue, 30 Aug 2016 19:49:03 +0530 Subject: [PATCH 026/265] Adding external flyway configuration file --- flyway-migration/myFlywayConfig.properties | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 flyway-migration/myFlywayConfig.properties diff --git a/flyway-migration/myFlywayConfig.properties b/flyway-migration/myFlywayConfig.properties new file mode 100644 index 0000000000..22f3afefd3 --- /dev/null +++ b/flyway-migration/myFlywayConfig.properties @@ -0,0 +1,5 @@ +flyway.user=root +flyway.password=mysql +flyway.schemas=app-db +flyway.url=jdbc:mysql://localhost:3306/ +flyway.locations=filesystem:db/migration \ No newline at end of file From 9dc0c05a6b2e1d0a67cdb94452b4dbf65febcb37 Mon Sep 17 00:00:00 2001 From: sanketmeghani Date: Tue, 30 Aug 2016 19:49:49 +0530 Subject: [PATCH 027/265] Adding sample migration file --- .../db/migration/V1_0__create_employee_schema.sql | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 flyway-migration/db/migration/V1_0__create_employee_schema.sql diff --git a/flyway-migration/db/migration/V1_0__create_employee_schema.sql b/flyway-migration/db/migration/V1_0__create_employee_schema.sql new file mode 100644 index 0000000000..09408faecb --- /dev/null +++ b/flyway-migration/db/migration/V1_0__create_employee_schema.sql @@ -0,0 +1,8 @@ +CREATE TABLE IF NOT EXISTS `employee` ( + +`id` int NOT NULL AUTO_INCREMENT PRIMARY KEY, +`name` varchar(20), +`email` varchar(50), +`date_of_birth` timestamp + +)ENGINE=InnoDB DEFAULT CHARSET=UTF8; \ No newline at end of file From 574cd84f8975cc4a0df051dcc4ad9c8159197ca2 Mon Sep 17 00:00:00 2001 From: GuenHamza Date: Tue, 30 Aug 2016 20:30:14 +0100 Subject: [PATCH 028/265] Add ElasticSearch module --- elasticsearch/pom.xml | 40 ++++++ .../com/baeldung/elasticsearch/Person.java | 52 ++++++++ .../elasticsearch/ElasticSearchUnitTests.java | 117 ++++++++++++++++++ 3 files changed, 209 insertions(+) create mode 100644 elasticsearch/pom.xml create mode 100644 elasticsearch/src/main/java/com/baeldung/elasticsearch/Person.java create mode 100644 elasticsearch/src/test/java/com/baeldung/elasticsearch/ElasticSearchUnitTests.java diff --git a/elasticsearch/pom.xml b/elasticsearch/pom.xml new file mode 100644 index 0000000000..cb66042052 --- /dev/null +++ b/elasticsearch/pom.xml @@ -0,0 +1,40 @@ + + 4.0.0 + + com.baeldung + elasticsearch + 0.0.1-SNAPSHOT + jar + + elasticsearch + http://maven.apache.org + + + UTF-8 + + + + + org.elasticsearch + elasticsearch + 2.3.5 + + + com.alibaba + fastjson + 1.2.13 + + + junit + junit + 4.12 + test + + + com.google.code.gson + gson + 2.6.2 + + + diff --git a/elasticsearch/src/main/java/com/baeldung/elasticsearch/Person.java b/elasticsearch/src/main/java/com/baeldung/elasticsearch/Person.java new file mode 100644 index 0000000000..8f0b19a186 --- /dev/null +++ b/elasticsearch/src/main/java/com/baeldung/elasticsearch/Person.java @@ -0,0 +1,52 @@ +package com.baeldung.elasticsearch; + +import java.util.Date; + +public class Person { + + private int age; + + private String fullName; + + private Date dateOfBirth; + + public Person() { + + } + + public Person(int age, String fullName, Date dateOfBirth) { + super(); + this.age = age; + this.fullName = fullName; + this.dateOfBirth = dateOfBirth; + } + + public int getAge() { + return age; + } + + public void setAge(int age) { + this.age = age; + } + + public String getFullName() { + return fullName; + } + + public void setFullName(String fullName) { + this.fullName = fullName; + } + + public Date getDateOfBirth() { + return dateOfBirth; + } + + public void setDateOfBirth(Date dateOfBirth) { + this.dateOfBirth = dateOfBirth; + } + + @Override + public String toString() { + return "Person [age=" + age + ", fullName=" + fullName + ", dateOfBirth=" + dateOfBirth + "]"; + } +} diff --git a/elasticsearch/src/test/java/com/baeldung/elasticsearch/ElasticSearchUnitTests.java b/elasticsearch/src/test/java/com/baeldung/elasticsearch/ElasticSearchUnitTests.java new file mode 100644 index 0000000000..9a6bfb19a2 --- /dev/null +++ b/elasticsearch/src/test/java/com/baeldung/elasticsearch/ElasticSearchUnitTests.java @@ -0,0 +1,117 @@ +package com.baeldung.elasticsearch; + +import static org.elasticsearch.node.NodeBuilder.*; +import static org.junit.Assert.*; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import org.elasticsearch.action.delete.DeleteResponse; +import org.elasticsearch.action.index.IndexResponse; +import org.elasticsearch.action.search.SearchResponse; +import org.elasticsearch.action.search.SearchType; +import org.elasticsearch.client.Client; +import org.elasticsearch.common.xcontent.XContentBuilder; +import org.elasticsearch.common.xcontent.XContentFactory; +import org.elasticsearch.index.query.QueryBuilders; +import org.elasticsearch.node.Node; +import org.elasticsearch.search.SearchHit; +import org.junit.Before; +import org.junit.Test; + +import com.alibaba.fastjson.JSON; + +public class ElasticSearchUnitTests { + private List listOfPersons = new ArrayList(); + String jsonString = null; + + @Before + public void setUp() { + Person person1 = new Person(10, "John Doe", new Date()); + Person person2 = new Person(25, "Janette Doe", new Date()); + listOfPersons.add(person1); + listOfPersons.add(person2); + jsonString = JSON.toJSONString(listOfPersons); + System.out.println(jsonString); + } + + @Test + public void givenJsonString_whenJavaObject_thenIndexDocument() { + String jsonObject = "{\"age\":20,\"dateOfBirth\":1471466076564,\"fullName\":\"John Doe\"}"; + + Node node = nodeBuilder().clusterName("elasticsearch").client(true).node(); + Client client = node.client(); + IndexResponse response = client.prepareIndex("people", "Doe") + .setSource(jsonObject).get(); + String id = response.getId(); + String index = response.getIndex(); + String type = response.getType(); + assertTrue(response.isCreated()); + assertEquals(index, "people"); + assertEquals(type, "Doe"); + } + + @Test + public void givenDocumentId_whenJavaObject_thenDeleteDocument() { + String jsonObject = "{\"age\":10,\"dateOfBirth\":1471455886564,\"fullName\":\"Johan Doe\"}"; + + Node node = nodeBuilder().clusterName("elasticsearch").client(true).node(); + Client client = node.client(); + IndexResponse response = client.prepareIndex("people", "Doe") + .setSource(jsonObject).get(); + String id = response.getId(); + DeleteResponse deleteResponse = client.prepareDelete("people", "Doe", id).get(); + assertTrue(deleteResponse.isFound()); + } + + @Test + public void givenSearchRequest_whenMatchAll_thenReturnAllResults() { + Node node = nodeBuilder().clusterName("elasticsearch").client(true).node(); + Client client = node.client(); + SearchResponse response = client.prepareSearch().execute().actionGet(); + SearchHit[] searchHits = response.getHits().getHits(); + List results = new ArrayList(); + for(SearchHit hit : searchHits){ + String sourceAsString = hit.getSourceAsString(); + Person person = JSON.parseObject(sourceAsString, Person.class); + results.add(person); + } + } + + @Test + public void givenSearchParamters_thenReturnResults() { + Node node = nodeBuilder().clusterName("elasticsearch").client(true).node(); + Client client = node.client(); + SearchResponse response = client.prepareSearch() + .setTypes() + .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) + .setPostFilter(QueryBuilders.rangeQuery("age").from(5).to(15)) + .setFrom(0).setSize(60).setExplain(true) + .execute() + .actionGet(); + SearchHit[] searchHits = response.getHits().getHits(); + List results = new ArrayList(); + for(SearchHit hit : searchHits){ + String sourceAsString = hit.getSourceAsString(); + Person person = JSON.parseObject(sourceAsString, Person.class); + results.add(person); + } + } + + @Test + public void givenContentBuilder_whenHelpers_thanIndexJson() throws IOException { + Node node = nodeBuilder().clusterName("elasticsearch").client(true).node(); + Client client = node.client(); + XContentBuilder builder = XContentFactory.jsonBuilder() + .startObject() + .field("fullName", "Test") + .field("salary", "11500") + .field("age", "10") + .endObject(); + IndexResponse response = client.prepareIndex("people", "Doe") + .setSource(builder).get(); + assertTrue(response.isCreated()); + } +} From aab38dc10d5ca400fc2fe505e7463852ec5ee2ce Mon Sep 17 00:00:00 2001 From: GuenHamza Date: Tue, 30 Aug 2016 20:31:31 +0100 Subject: [PATCH 029/265] Create README.md file --- elasticsearch/README.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 elasticsearch/README.md diff --git a/elasticsearch/README.md b/elasticsearch/README.md new file mode 100644 index 0000000000..e21070dbee --- /dev/null +++ b/elasticsearch/README.md @@ -0,0 +1,6 @@ +========= + +## ElasticSearch + +### Relevant Articles: +- [A Guide to ElasticSearch](http://www.baeldung.com/????????) From ec0eb9c804c402e15b9502df4c01c90ae1654a32 Mon Sep 17 00:00:00 2001 From: GuenHamza Date: Tue, 30 Aug 2016 20:32:30 +0100 Subject: [PATCH 030/265] Delete Gson dependency --- elasticsearch/pom.xml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/elasticsearch/pom.xml b/elasticsearch/pom.xml index cb66042052..c12f258b98 100644 --- a/elasticsearch/pom.xml +++ b/elasticsearch/pom.xml @@ -31,10 +31,5 @@ 4.12 test - - com.google.code.gson - gson - 2.6.2 - From 28f88b0ca3f3f15caa452a46083eb505ee7dc2cd Mon Sep 17 00:00:00 2001 From: Anil Bhaskar Date: Wed, 31 Aug 2016 01:50:06 +0530 Subject: [PATCH 031/265] adding webjars code to spring-boot (#648) merging the code and webjars different project cleanup --- spring-boot/pom.xml | 17 ++++- .../java/com/baeldung/TestController.java | 0 .../com/baeldung/WebjarsdemoApplication.java | 0 .../src/main/resources/templates/index.html | 0 .../baeldung/WebjarsdemoApplicationTests.java | 0 webjars/pom.xml | 63 ------------------- 6 files changed, 16 insertions(+), 64 deletions(-) rename {webjars => spring-boot}/src/main/java/com/baeldung/TestController.java (100%) rename {webjars => spring-boot}/src/main/java/com/baeldung/WebjarsdemoApplication.java (100%) rename {webjars => spring-boot}/src/main/resources/templates/index.html (100%) rename {webjars => spring-boot}/src/test/java/com/baeldung/WebjarsdemoApplicationTests.java (100%) delete mode 100644 webjars/pom.xml diff --git a/spring-boot/pom.xml b/spring-boot/pom.xml index 1b4cc0a753..5a20ff5602 100644 --- a/spring-boot/pom.xml +++ b/spring-boot/pom.xml @@ -24,7 +24,11 @@ 4.3.1.RELEASE - + + + org.springframework.boot + spring-boot-starter-thymeleaf + org.springframework.boot spring-boot-starter-web @@ -80,6 +84,17 @@ 3.1.7 test + + + org.webjars + bootstrap + 3.3.4 + + + org.webjars + jquery + 2.1.4 + diff --git a/webjars/src/main/java/com/baeldung/TestController.java b/spring-boot/src/main/java/com/baeldung/TestController.java similarity index 100% rename from webjars/src/main/java/com/baeldung/TestController.java rename to spring-boot/src/main/java/com/baeldung/TestController.java diff --git a/webjars/src/main/java/com/baeldung/WebjarsdemoApplication.java b/spring-boot/src/main/java/com/baeldung/WebjarsdemoApplication.java similarity index 100% rename from webjars/src/main/java/com/baeldung/WebjarsdemoApplication.java rename to spring-boot/src/main/java/com/baeldung/WebjarsdemoApplication.java diff --git a/webjars/src/main/resources/templates/index.html b/spring-boot/src/main/resources/templates/index.html similarity index 100% rename from webjars/src/main/resources/templates/index.html rename to spring-boot/src/main/resources/templates/index.html diff --git a/webjars/src/test/java/com/baeldung/WebjarsdemoApplicationTests.java b/spring-boot/src/test/java/com/baeldung/WebjarsdemoApplicationTests.java similarity index 100% rename from webjars/src/test/java/com/baeldung/WebjarsdemoApplicationTests.java rename to spring-boot/src/test/java/com/baeldung/WebjarsdemoApplicationTests.java diff --git a/webjars/pom.xml b/webjars/pom.xml deleted file mode 100644 index 80e4f0a42a..0000000000 --- a/webjars/pom.xml +++ /dev/null @@ -1,63 +0,0 @@ - - - 4.0.0 - - com.baeldung - webjarsdemo - 0.0.1-SNAPSHOT - jar - - webjarsdemo - Demo project for webjars using Spring Boot - - - org.springframework.boot - spring-boot-starter-parent - 1.3.5.RELEASE - - - - - UTF-8 - 1.8 - - - - - org.springframework.boot - spring-boot-starter-thymeleaf - - - org.springframework.boot - spring-boot-starter-web - - - - org.springframework.boot - spring-boot-starter-test - test - - - org.webjars - bootstrap - 3.3.4 - - - org.webjars - jquery - 2.1.4 - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - - - From 7b53cdb9a76578096e4710a98e94e6485c977e1e Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Tue, 30 Aug 2016 22:51:37 +0200 Subject: [PATCH 032/265] Build fix --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index daa92744ae..7ca9238680 100644 --- a/pom.xml +++ b/pom.xml @@ -110,7 +110,7 @@ xml lombok redis - webjars + mutation-testing spring-mvc-velocity From 9c5404ead8e1799ee5da18892fc07b3ae134f5f6 Mon Sep 17 00:00:00 2001 From: Christian Raedel Date: Wed, 31 Aug 2016 03:18:02 +0200 Subject: [PATCH 033/265] BAEL-305: Runnable demo application --- .../front-controller-pattern/pom.xml | 41 +++++++++++++++++ .../controller/FrontControllerServlet.java | 45 +++++++++++++++++++ .../controller/commands/BookCommand.java | 22 +++++++++ .../controller/commands/FrontCommand.java | 32 +++++++++++++ .../controller/commands/UnknownCommand.java | 11 +++++ .../patterns/front/controller/data/Book.java | 40 +++++++++++++++++ .../front/controller/data/Bookshelf.java | 32 +++++++++++++ .../src/main/webapp/WEB-INF/jboss-web.xml | 6 +++ .../main/webapp/WEB-INF/jsp/book-found.jsp | 4 ++ .../main/webapp/WEB-INF/jsp/book-notfound.jsp | 2 + .../src/main/webapp/WEB-INF/jsp/unknown.jsp | 1 + .../src/main/webapp/WEB-INF/web.xml | 11 +++++ enterprise-patterns/pom.xml | 35 +++++++++++++++ 13 files changed, 282 insertions(+) create mode 100644 enterprise-patterns/front-controller-pattern/pom.xml create mode 100644 enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/FrontControllerServlet.java create mode 100644 enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/BookCommand.java create mode 100644 enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/FrontCommand.java create mode 100644 enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/UnknownCommand.java create mode 100644 enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Book.java create mode 100644 enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Bookshelf.java create mode 100644 enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jboss-web.xml create mode 100644 enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/book-found.jsp create mode 100644 enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/book-notfound.jsp create mode 100644 enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/unknown.jsp create mode 100644 enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/web.xml create mode 100644 enterprise-patterns/pom.xml diff --git a/enterprise-patterns/front-controller-pattern/pom.xml b/enterprise-patterns/front-controller-pattern/pom.xml new file mode 100644 index 0000000000..eefd52a52d --- /dev/null +++ b/enterprise-patterns/front-controller-pattern/pom.xml @@ -0,0 +1,41 @@ + + + 4.0.0 + + front-controller-pattern + war + + + enterprise-patterns-parent + com.baeldung.enterprise.patterns + 1.0.0-SNAPSHOT + + + + + javax.servlet + servlet-api + 2.5 + provided + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org.apache.maven.plugins + maven-war-plugin + 3.0.0 + + ${env.DEPLOYMENTS} + + + + + diff --git a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/FrontControllerServlet.java b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/FrontControllerServlet.java new file mode 100644 index 0000000000..4dfc12c050 --- /dev/null +++ b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/FrontControllerServlet.java @@ -0,0 +1,45 @@ +package com.baeldung.enterprise.patterns.front.controller; + +import com.baeldung.enterprise.patterns.front.controller.commands.FrontCommand; +import com.baeldung.enterprise.patterns.front.controller.commands.UnknownCommand; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +public class FrontControllerServlet extends HttpServlet { + @Override + protected void doGet( + HttpServletRequest request, + HttpServletResponse response + ) throws ServletException, IOException { + FrontCommand command = getCommand(request); + command.init(getServletContext(), request, response); + command.process(); + } + + private FrontCommand getCommand(HttpServletRequest request) { + try { + return (FrontCommand) getCommandClass(request) + .asSubclass(FrontCommand.class) + .newInstance(); + } catch (Exception e) { + throw new RuntimeException("Failed to get command!", e); + } + } + + private Class getCommandClass(HttpServletRequest request) { + try { + return Class.forName( + String.format( + "com.baeldung.enterprise.patterns.front.controller.commands.%sCommand", + request.getParameter("command") + ) + ); + } catch (ClassNotFoundException e) { + return UnknownCommand.class; + } + } +} diff --git a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/BookCommand.java b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/BookCommand.java new file mode 100644 index 0000000000..e858cd98a9 --- /dev/null +++ b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/BookCommand.java @@ -0,0 +1,22 @@ +package com.baeldung.enterprise.patterns.front.controller.commands; + +import com.baeldung.enterprise.patterns.front.controller.data.Book; +import com.baeldung.enterprise.patterns.front.controller.data.Bookshelf; + +import javax.servlet.ServletException; +import java.io.IOException; + +public class BookCommand extends FrontCommand { + @Override + public void process() throws ServletException, IOException { + Book book = Bookshelf.getInstance() + .findByTitle(request.getParameter("title")); + if (book != null) { + request.setAttribute("book", book); + forward("book-found"); + } else { + request.setAttribute("books", Bookshelf.getInstance().getBooks()); + forward("book-notfound"); + } + } +} diff --git a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/FrontCommand.java b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/FrontCommand.java new file mode 100644 index 0000000000..12a008faeb --- /dev/null +++ b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/FrontCommand.java @@ -0,0 +1,32 @@ +package com.baeldung.enterprise.patterns.front.controller.commands; + +import javax.servlet.RequestDispatcher; +import javax.servlet.ServletContext; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +public abstract class FrontCommand { + protected ServletContext context; + protected HttpServletRequest request; + protected HttpServletResponse response; + + public void init( + ServletContext servletContext, + HttpServletRequest servletRequest, + HttpServletResponse servletResponse + ) { + this.context = servletContext; + this.request = servletRequest; + this.response = servletResponse; + } + + public abstract void process() throws ServletException, IOException; + + protected void forward(String target) throws ServletException, IOException { + target = String.format("/WEB-INF/jsp/%s.jsp", target); + RequestDispatcher dispatcher = context.getRequestDispatcher(target); + dispatcher.forward(request, response); + } +} diff --git a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/UnknownCommand.java b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/UnknownCommand.java new file mode 100644 index 0000000000..90103c8f42 --- /dev/null +++ b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/UnknownCommand.java @@ -0,0 +1,11 @@ +package com.baeldung.enterprise.patterns.front.controller.commands; + +import javax.servlet.ServletException; +import java.io.IOException; + +public class UnknownCommand extends FrontCommand { + @Override + public void process() throws ServletException, IOException { + forward("unknown"); + } +} diff --git a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Book.java b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Book.java new file mode 100644 index 0000000000..634e05c3a0 --- /dev/null +++ b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Book.java @@ -0,0 +1,40 @@ +package com.baeldung.enterprise.patterns.front.controller.data; + +public class Book { + private String author; + private String title; + private Double price; + + public Book() { + } + + public Book(String author, String title, Double price) { + this.author = author; + this.title = title; + this.price = price; + } + + public String getAuthor() { + return author; + } + + public void setAuthor(String author) { + this.author = author; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public Double getPrice() { + return price; + } + + public void setPrice(Double price) { + this.price = price; + } +} diff --git a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Bookshelf.java b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Bookshelf.java new file mode 100644 index 0000000000..142435e2e3 --- /dev/null +++ b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Bookshelf.java @@ -0,0 +1,32 @@ +package com.baeldung.enterprise.patterns.front.controller.data; + +import java.util.ArrayList; +import java.util.List; + +public class Bookshelf { + private static Bookshelf INSTANCE = new Bookshelf(); + private List books = new ArrayList<>(); + + public static Bookshelf getInstance() { + if (INSTANCE.books.size() == 0) { + INSTANCE.init(); + } + return INSTANCE; + } + + private void init() { + books.add(new Book("Wilson, Robert Anton & Shea, Robert", "Illuminati", 9.99)); + books.add(new Book("Fowler, Martin", "Patterns of Enterprise Application Architecture", 27.88)); + } + + public Book findByTitle(String title) { + return books.stream() + .filter(book -> book.getTitle().equalsIgnoreCase(title)) + .findFirst() + .orElse(null); + } + + public List getBooks() { + return books; + } +} diff --git a/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jboss-web.xml b/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jboss-web.xml new file mode 100644 index 0000000000..db2d804135 --- /dev/null +++ b/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jboss-web.xml @@ -0,0 +1,6 @@ + + + + /front-controller/ + diff --git a/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/book-found.jsp b/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/book-found.jsp new file mode 100644 index 0000000000..8fa82ee816 --- /dev/null +++ b/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/book-found.jsp @@ -0,0 +1,4 @@ +

Our Bookshelf contains this title:

+

${book.getTitle()}

+

Author: ${book.getAuthor()}

+ diff --git a/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/book-notfound.jsp b/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/book-notfound.jsp new file mode 100644 index 0000000000..e8ce67ac96 --- /dev/null +++ b/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/book-notfound.jsp @@ -0,0 +1,2 @@ +

Our Bookshelf doesn't contains this title:

+

${param.get("title")}

diff --git a/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/unknown.jsp b/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/unknown.jsp new file mode 100644 index 0000000000..d348f757d9 --- /dev/null +++ b/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/unknown.jsp @@ -0,0 +1 @@ +

Sorry, this command is not known!

diff --git a/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/web.xml b/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000000..372ee42800 --- /dev/null +++ b/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,11 @@ + + + + front-controller + com.baeldung.enterprise.patterns.front.controller.FrontControllerServlet + + + front-controller + / + + diff --git a/enterprise-patterns/pom.xml b/enterprise-patterns/pom.xml new file mode 100644 index 0000000000..2fba12547f --- /dev/null +++ b/enterprise-patterns/pom.xml @@ -0,0 +1,35 @@ + + + 4.0.0 + + com.baeldung.enterprise.patterns + enterprise-patterns-parent + pom + + front-controller-pattern + + + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.5.1 + + 1.8 + 1.8 + + + + + + From ed03a59711764bbf5b90fc4761e19c1b2f84b605 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20R=C3=A4del?= Date: Wed, 31 Aug 2016 03:38:46 +0200 Subject: [PATCH 034/265] BAEL-305: Some minor changes --- .../{BookCommand.java => SearchCommand.java} | 2 +- .../front/controller/data/Bookshelf.java | 2 +- .../src/main/webapp/WEB-INF/jsp/book-found.jsp | 16 ++++++++++++---- .../main/webapp/WEB-INF/jsp/book-notfound.jsp | 12 ++++++++++-- .../src/main/webapp/WEB-INF/jsp/unknown.jsp | 10 +++++++++- 5 files changed, 33 insertions(+), 9 deletions(-) rename enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/{BookCommand.java => SearchCommand.java} (93%) diff --git a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/BookCommand.java b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/SearchCommand.java similarity index 93% rename from enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/BookCommand.java rename to enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/SearchCommand.java index e858cd98a9..4d9e5f7b79 100644 --- a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/BookCommand.java +++ b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/SearchCommand.java @@ -6,7 +6,7 @@ import com.baeldung.enterprise.patterns.front.controller.data.Bookshelf; import javax.servlet.ServletException; import java.io.IOException; -public class BookCommand extends FrontCommand { +public class SearchCommand extends FrontCommand { @Override public void process() throws ServletException, IOException { Book book = Bookshelf.getInstance() diff --git a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Bookshelf.java b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Bookshelf.java index 142435e2e3..ad9758bf76 100644 --- a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Bookshelf.java +++ b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Bookshelf.java @@ -21,7 +21,7 @@ public class Bookshelf { public Book findByTitle(String title) { return books.stream() - .filter(book -> book.getTitle().equalsIgnoreCase(title)) + .filter(book -> book.getTitle().toLowerCase().contains(title.toLowerCase())) .findFirst() .orElse(null); } diff --git a/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/book-found.jsp b/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/book-found.jsp index 8fa82ee816..42e08b4a46 100644 --- a/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/book-found.jsp +++ b/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/book-found.jsp @@ -1,4 +1,12 @@ -

Our Bookshelf contains this title:

-

${book.getTitle()}

-

Author: ${book.getAuthor()}

- + + + + Bookshelf: Title found + + +

Our Bookshelf contains this title:

+

${book.getTitle()}

+

Author: ${book.getAuthor()}

+ + + diff --git a/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/book-notfound.jsp b/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/book-notfound.jsp index e8ce67ac96..2f8ac01755 100644 --- a/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/book-notfound.jsp +++ b/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/book-notfound.jsp @@ -1,2 +1,10 @@ -

Our Bookshelf doesn't contains this title:

-

${param.get("title")}

+ + + + Bookshelf: Title not found + + +

Our Bookshelf doesn't contains this title:

+

${param.get("title")}

+ + diff --git a/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/unknown.jsp b/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/unknown.jsp index d348f757d9..b52b2de8d5 100644 --- a/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/unknown.jsp +++ b/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/unknown.jsp @@ -1 +1,9 @@ -

Sorry, this command is not known!

+ + + + Bookshelf: Command unknown + + +

Sorry, this command is not known!

+ + From 0c1ad4f7c3177d1bb1690e240a75703050abc709 Mon Sep 17 00:00:00 2001 From: diego Date: Wed, 31 Aug 2016 04:29:24 +0200 Subject: [PATCH 035/265] New project with both examples included and a home page that contains a link for each. --- .../wicket/examples/cafeaddress/Start.java | 134 ++++++++--------- wicket-intro/WicketIntro/pom.xml | 136 ++++++++++++++++++ .../examples/ApplicationConfiguration.java | 10 ++ .../baeldung/wicket/examples/Examples.html | 52 +++++++ .../baeldung/wicket/examples/Examples.java | 9 ++ .../wicket/examples/ExamplesApplication.java | 27 ++++ .../wicket/examples/WebAppInitializer.java | 26 ++++ .../examples/cafeaddress/CafeAddress.html | 15 ++ .../examples/cafeaddress/CafeAddress.java | 72 ++++++++++ .../examples/helloworld/HelloWorld.html | 5 + .../examples/helloworld/HelloWorld.java | 13 ++ .../WicketIntro/src/test/jetty/jetty-http.xml | 38 +++++ .../src/test/jetty/jetty-https.xml | 45 ++++++ .../WicketIntro/src/test/jetty/jetty-ssl.xml | 36 +++++ .../WicketIntro/src/test/jetty/jetty.xml | 23 +++ .../WicketIntro/src/test/resources/keystore | Bin 0 -> 1481 bytes 16 files changed, 570 insertions(+), 71 deletions(-) create mode 100644 wicket-intro/WicketIntro/pom.xml create mode 100644 wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/ApplicationConfiguration.java create mode 100644 wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/Examples.html create mode 100644 wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/Examples.java create mode 100644 wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/ExamplesApplication.java create mode 100644 wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/WebAppInitializer.java create mode 100644 wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/cafeaddress/CafeAddress.html create mode 100644 wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/cafeaddress/CafeAddress.java create mode 100644 wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/helloworld/HelloWorld.html create mode 100644 wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/helloworld/HelloWorld.java create mode 100644 wicket-intro/WicketIntro/src/test/jetty/jetty-http.xml create mode 100644 wicket-intro/WicketIntro/src/test/jetty/jetty-https.xml create mode 100644 wicket-intro/WicketIntro/src/test/jetty/jetty-ssl.xml create mode 100644 wicket-intro/WicketIntro/src/test/jetty/jetty.xml create mode 100644 wicket-intro/WicketIntro/src/test/resources/keystore diff --git a/wicket-intro/CafeAddress/src/test/java/com/baeldung/wicket/examples/cafeaddress/Start.java b/wicket-intro/CafeAddress/src/test/java/com/baeldung/wicket/examples/cafeaddress/Start.java index b2be405124..bb67ac56a5 100644 --- a/wicket-intro/CafeAddress/src/test/java/com/baeldung/wicket/examples/cafeaddress/Start.java +++ b/wicket-intro/CafeAddress/src/test/java/com/baeldung/wicket/examples/cafeaddress/Start.java @@ -19,90 +19,82 @@ import org.eclipse.jetty.webapp.WebAppContext; * Separate startup class for people that want to run the examples directly. Use parameter * -Dcom.sun.management.jmxremote to startup JMX (and e.g. connect with jconsole). */ -public class Start -{ - /** - * Main function, starts the jetty server. - * - * @param args - */ - public static void main(String[] args) - { - System.setProperty("wicket.configuration", "development"); +public class Start { + /** + * Main function, starts the jetty server. + * + * @param args + */ + public static void main(String[] args) { + System.setProperty("wicket.configuration", "development"); - Server server = new Server(); + Server server = new Server(); - HttpConfiguration http_config = new HttpConfiguration(); - http_config.setSecureScheme("https"); - http_config.setSecurePort(8443); - http_config.setOutputBufferSize(32768); + HttpConfiguration http_config = new HttpConfiguration(); + http_config.setSecureScheme("https"); + http_config.setSecurePort(8443); + http_config.setOutputBufferSize(32768); - ServerConnector http = new ServerConnector(server, new HttpConnectionFactory(http_config)); - http.setPort(8080); - http.setIdleTimeout(1000 * 60 * 60); + ServerConnector http = new ServerConnector(server, new HttpConnectionFactory(http_config)); + http.setPort(8080); + http.setIdleTimeout(1000 * 60 * 60); - server.addConnector(http); + server.addConnector(http); - Resource keystore = Resource.newClassPathResource("/keystore"); - if (keystore != null && keystore.exists()) - { - // if a keystore for a SSL certificate is available, start a SSL - // connector on port 8443. - // By default, the quickstart comes with a Apache Wicket Quickstart - // Certificate that expires about half way september 2021. Do not - // use this certificate anywhere important as the passwords are - // available in the source. + Resource keystore = Resource.newClassPathResource("/keystore"); + if (keystore != null && keystore.exists()) { + // if a keystore for a SSL certificate is available, start a SSL + // connector on port 8443. + // By default, the quickstart comes with a Apache Wicket Quickstart + // Certificate that expires about half way september 2021. Do not + // use this certificate anywhere important as the passwords are + // available in the source. - SslContextFactory sslContextFactory = new SslContextFactory(); - sslContextFactory.setKeyStoreResource(keystore); - sslContextFactory.setKeyStorePassword("wicket"); - sslContextFactory.setKeyManagerPassword("wicket"); + SslContextFactory sslContextFactory = new SslContextFactory(); + sslContextFactory.setKeyStoreResource(keystore); + sslContextFactory.setKeyStorePassword("wicket"); + sslContextFactory.setKeyManagerPassword("wicket"); - HttpConfiguration https_config = new HttpConfiguration(http_config); - https_config.addCustomizer(new SecureRequestCustomizer()); + HttpConfiguration https_config = new HttpConfiguration(http_config); + https_config.addCustomizer(new SecureRequestCustomizer()); - ServerConnector https = new ServerConnector(server, new SslConnectionFactory( - sslContextFactory, "http/1.1"), new HttpConnectionFactory(https_config)); - https.setPort(8443); - https.setIdleTimeout(500000); + ServerConnector https = new ServerConnector(server, new SslConnectionFactory(sslContextFactory, "http/1.1"), new HttpConnectionFactory(https_config)); + https.setPort(8443); + https.setIdleTimeout(500000); - server.addConnector(https); - System.out.println("SSL access to the examples has been enabled on port 8443"); - System.out - .println("You can access the application using SSL on https://localhost:8443"); - System.out.println(); - } + server.addConnector(https); + System.out.println("SSL access to the examples has been enabled on port 8443"); + System.out.println("You can access the application using SSL on https://localhost:8443"); + System.out.println(); + } - WebAppContext bb = new WebAppContext(); - bb.setServer(server); - bb.setContextPath("/"); - bb.setWar("src/main/webapp"); + WebAppContext bb = new WebAppContext(); + bb.setServer(server); + bb.setContextPath("/"); + bb.setWar("src/main/webapp"); - // uncomment the next two lines if you want to start Jetty with WebSocket (JSR-356) support - // you need org.apache.wicket:wicket-native-websocket-javax in the classpath! - // ServerContainer serverContainer = WebSocketServerContainerInitializer.configureContext(bb); - // serverContainer.addEndpoint(new WicketServerEndpointConfig()); + // uncomment the next two lines if you want to start Jetty with WebSocket (JSR-356) support + // you need org.apache.wicket:wicket-native-websocket-javax in the classpath! + // ServerContainer serverContainer = WebSocketServerContainerInitializer.configureContext(bb); + // serverContainer.addEndpoint(new WicketServerEndpointConfig()); - // uncomment next line if you want to test with JSESSIONID encoded in the urls - // ((AbstractSessionManager) - // bb.getSessionHandler().getSessionManager()).setUsingCookies(false); + // uncomment next line if you want to test with JSESSIONID encoded in the urls + // ((AbstractSessionManager) + // bb.getSessionHandler().getSessionManager()).setUsingCookies(false); - server.setHandler(bb); + server.setHandler(bb); - MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer(); - MBeanContainer mBeanContainer = new MBeanContainer(mBeanServer); - server.addEventListener(mBeanContainer); - server.addBean(mBeanContainer); + MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer(); + MBeanContainer mBeanContainer = new MBeanContainer(mBeanServer); + server.addEventListener(mBeanContainer); + server.addBean(mBeanContainer); - try - { - server.start(); - server.join(); - } - catch (Exception e) - { - e.printStackTrace(); - System.exit(100); - } - } + try { + server.start(); + server.join(); + } catch (Exception e) { + e.printStackTrace(); + System.exit(100); + } + } } diff --git a/wicket-intro/WicketIntro/pom.xml b/wicket-intro/WicketIntro/pom.xml new file mode 100644 index 0000000000..9b759eb1be --- /dev/null +++ b/wicket-intro/WicketIntro/pom.xml @@ -0,0 +1,136 @@ + + + + 4.0.0 + com.baeldung.wicket.examples + wicket-intro + war + 1.0-SNAPSHOT + WicketIntro + + 7.4.0 + 9.2.13.v20150730 + 2.5 + 4.12 + 4.1.1.RELEASE + 3.1.0 + 8.0.0-M1 + 3.5.1 + 2.6 + UTF-8 + none + + + + + org.apache.wicket + wicket-core + ${wicket.version} + + + + + + org.springframework + spring-web + ${spring-web.version} + + + javax.servlet + javax.servlet-api + ${javax.servlet-api.version} + + + org.apache.wicket + wicket-spring + ${wicket-spring.version} + + + + + junit + junit + ${junit.version} + test + + + + + org.eclipse.jetty.aggregate + jetty-all + ${jetty9.version} + test + + + + WicketIntro + + + false + src/main/resources + + + false + src/main/java + + ** + + + **/*.java + + + + + + true + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + 1.8 + 1.8 + UTF-8 + true + true + + + + org.apache.maven.plugins + maven-war-plugin + ${maven-war-plugin.version} + + false + + + + org.eclipse.jetty + jetty-maven-plugin + ${jetty9.version} + + + + maven.project.build.directory.test-classes + ${project.build.directory}/test-classes + + + ${project.basedir}/src/test/jetty/jetty.xml,${project.basedir}/src/test/jetty/jetty-ssl.xml,${project.basedir}/src/test/jetty/jetty-http.xml,${project.basedir}/src/test/jetty/jetty-https.xml + + + + + + + + Apache Nexus + https://repository.apache.org/content/repositories/snapshots/ + + false + + + true + + + + diff --git a/wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/ApplicationConfiguration.java b/wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/ApplicationConfiguration.java new file mode 100644 index 0000000000..2b42af9065 --- /dev/null +++ b/wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/ApplicationConfiguration.java @@ -0,0 +1,10 @@ +package com.baeldung.wicket.examples; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ComponentScan +public class ApplicationConfiguration { + +} diff --git a/wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/Examples.html b/wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/Examples.html new file mode 100644 index 0000000000..38eebbffe0 --- /dev/null +++ b/wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/Examples.html @@ -0,0 +1,52 @@ + + + + +Wicket Intro Examples + + + +
+
+
+

Wicket Introduction Examples:

+ + Hello World! +
+
+ Cafes +
+
+
+
+ + diff --git a/wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/Examples.java b/wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/Examples.java new file mode 100644 index 0000000000..358e4f7b19 --- /dev/null +++ b/wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/Examples.java @@ -0,0 +1,9 @@ +package com.baeldung.wicket.examples; + +import org.apache.wicket.markup.html.WebPage; + +public class Examples extends WebPage { + + private static final long serialVersionUID = 1L; + +} diff --git a/wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/ExamplesApplication.java b/wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/ExamplesApplication.java new file mode 100644 index 0000000000..711e8f01fd --- /dev/null +++ b/wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/ExamplesApplication.java @@ -0,0 +1,27 @@ +package com.baeldung.wicket.examples; + +import org.apache.wicket.markup.html.WebPage; +import org.apache.wicket.protocol.http.WebApplication; + +import com.baeldung.wicket.examples.cafeaddress.CafeAddress; +import com.baeldung.wicket.examples.helloworld.HelloWorld; + +public class ExamplesApplication extends WebApplication { + /** + * @see org.apache.wicket.Application#getHomePage() + */ + @Override + public Class getHomePage() { + return Examples.class; + } + + /** + * @see org.apache.wicket.Application#init() + */ + @Override + public void init() { + super.init(); + mountPage("/examples/helloworld", HelloWorld.class); + mountPage("/examples/cafes", CafeAddress.class); + } +} diff --git a/wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/WebAppInitializer.java b/wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/WebAppInitializer.java new file mode 100644 index 0000000000..1b2d06d2dc --- /dev/null +++ b/wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/WebAppInitializer.java @@ -0,0 +1,26 @@ +package com.baeldung.wicket.examples; + +import javax.servlet.FilterRegistration; +import javax.servlet.ServletContext; +import javax.servlet.ServletException; + +import org.apache.wicket.protocol.http.WicketFilter; +import org.springframework.web.WebApplicationInitializer; +import org.springframework.web.context.ContextLoaderListener; +import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; + +public class WebAppInitializer implements WebApplicationInitializer { + + @Override + public void onStartup(ServletContext container) throws ServletException { + AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext(); + container.addListener(new ContextLoaderListener(context)); + context.register(ApplicationConfiguration.class); + + FilterRegistration filter = container.addFilter("ExamplesApplication", WicketFilter.class); + filter.setInitParameter("applicationClassName", ExamplesApplication.class.getName()); + filter.setInitParameter(WicketFilter.FILTER_MAPPING_PARAM, "/*"); + filter.addMappingForUrlPatterns(null, false, "/*"); + } + +} \ No newline at end of file diff --git a/wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/cafeaddress/CafeAddress.html b/wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/cafeaddress/CafeAddress.html new file mode 100644 index 0000000000..b7e0368eaa --- /dev/null +++ b/wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/cafeaddress/CafeAddress.html @@ -0,0 +1,15 @@ + + + + +Cafes + + +
+ +

+ Address: address +

+
+ + diff --git a/wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/cafeaddress/CafeAddress.java b/wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/cafeaddress/CafeAddress.java new file mode 100644 index 0000000000..ce26c5a1ad --- /dev/null +++ b/wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/cafeaddress/CafeAddress.java @@ -0,0 +1,72 @@ +package com.baeldung.wicket.examples.cafeaddress; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior; +import org.apache.wicket.markup.html.WebPage; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.markup.html.form.DropDownChoice; +import org.apache.wicket.model.PropertyModel; +import org.apache.wicket.request.mapper.parameter.PageParameters; + +public class CafeAddress extends WebPage { + + private static final long serialVersionUID = 1L; + + String selectedCafe; + Address address; + Map cafeNamesAndAddresses = new HashMap<>(); + + public CafeAddress(final PageParameters parameters) { + super(parameters); + initCafes(); + + ArrayList cafeNames = new ArrayList<>(this.cafeNamesAndAddresses.keySet()); + this.selectedCafe = cafeNames.get(0); + this.address = new Address(this.cafeNamesAndAddresses.get(this.selectedCafe).getAddress()); + + final Label addressLabel = new Label("address", new PropertyModel(this.address, "address")); + addressLabel.setOutputMarkupId(true); + + final DropDownChoice cafeDropdown = new DropDownChoice<>("cafes", new PropertyModel(this, "selectedCafe"), cafeNames); + cafeDropdown.add(new AjaxFormComponentUpdatingBehavior("onchange") { + private static final long serialVersionUID = 1L; + + @Override + protected void onUpdate(AjaxRequestTarget target) { + String name = (String) cafeDropdown.getDefaultModel().getObject(); + address.setAddress(cafeNamesAndAddresses.get(name).getAddress()); + target.add(addressLabel); + } + }); + + add(addressLabel); + add(cafeDropdown); + + } + + private void initCafes() { + this.cafeNamesAndAddresses.put("Linda's Cafe", new Address("35 Bower St.")); + this.cafeNamesAndAddresses.put("Old Tree", new Address("2 Edgware Rd.")); + } + + class Address implements Serializable { + private String sAddress = ""; + + public Address(String address) { + this.sAddress = address; + } + + public String getAddress() { + return this.sAddress; + } + + public void setAddress(String address) { + this.sAddress = address; + } + } +} diff --git a/wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/helloworld/HelloWorld.html b/wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/helloworld/HelloWorld.html new file mode 100644 index 0000000000..c56d07fc10 --- /dev/null +++ b/wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/helloworld/HelloWorld.html @@ -0,0 +1,5 @@ + + + + + diff --git a/wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/helloworld/HelloWorld.java b/wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/helloworld/HelloWorld.java new file mode 100644 index 0000000000..f819e05be6 --- /dev/null +++ b/wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/helloworld/HelloWorld.java @@ -0,0 +1,13 @@ +package com.baeldung.wicket.examples.helloworld; + +import org.apache.wicket.markup.html.WebPage; +import org.apache.wicket.markup.html.basic.Label; + +public class HelloWorld extends WebPage { + + private static final long serialVersionUID = 1L; + + public HelloWorld() { + add(new Label("hello", "Hello World!")); + } +} diff --git a/wicket-intro/WicketIntro/src/test/jetty/jetty-http.xml b/wicket-intro/WicketIntro/src/test/jetty/jetty-http.xml new file mode 100644 index 0000000000..9f3256b15c --- /dev/null +++ b/wicket-intro/WicketIntro/src/test/jetty/jetty-http.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/wicket-intro/WicketIntro/src/test/jetty/jetty-https.xml b/wicket-intro/WicketIntro/src/test/jetty/jetty-https.xml new file mode 100644 index 0000000000..58f7d53d2d --- /dev/null +++ b/wicket-intro/WicketIntro/src/test/jetty/jetty-https.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + http/1.1 + + + + + + + + + + + + + 30000 + + + + \ No newline at end of file diff --git a/wicket-intro/WicketIntro/src/test/jetty/jetty-ssl.xml b/wicket-intro/WicketIntro/src/test/jetty/jetty-ssl.xml new file mode 100644 index 0000000000..49e558bb47 --- /dev/null +++ b/wicket-intro/WicketIntro/src/test/jetty/jetty-ssl.xml @@ -0,0 +1,36 @@ + + + + + + + + + / + + + + + + SSL_RSA_WITH_DES_CBC_SHA + SSL_DHE_RSA_WITH_DES_CBC_SHA + SSL_DHE_DSS_WITH_DES_CBC_SHA + SSL_RSA_EXPORT_WITH_RC4_40_MD5 + SSL_RSA_EXPORT_WITH_DES40_CBC_SHA + SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA + SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/wicket-intro/WicketIntro/src/test/jetty/jetty.xml b/wicket-intro/WicketIntro/src/test/jetty/jetty.xml new file mode 100644 index 0000000000..1a6293b405 --- /dev/null +++ b/wicket-intro/WicketIntro/src/test/jetty/jetty.xml @@ -0,0 +1,23 @@ + + + + + + + + https + + + + 32768 + 8192 + 8192 + true + false + 512 + + + + + + \ No newline at end of file diff --git a/wicket-intro/WicketIntro/src/test/resources/keystore b/wicket-intro/WicketIntro/src/test/resources/keystore new file mode 100644 index 0000000000000000000000000000000000000000..30bbc90ccffcc2745adf09077df16fc3db9c0b47 GIT binary patch literal 1481 zcmezO_TO6u1_mY|W&~r_tkjZ{N+8cDIXV0qP-d4w6Vo;WJ~l3GHbxdkEha%mMpg!v zCZXF+L+yeb(_D>eh5NdK;{zR}$;>(o{ zE3dg|o8B)~5ILLXvtIl5>N#JOOd1Wnqs3o|CH&_3)%k6yk>9%q<*Th*+pP{h`8MfJ zi*YvUmF+Z?t0^x!WMEPBj(9H=gC$Rl(ii9d&)j3 zbTLZUo^$C9pTUfx#bzsWYP%dfFaJ7`%~pJY<=Y|t;J>bqocFORJ8`)y%bsft`MuQV z>{(ffqGR9Jv){6}VE@M8vig|blV9STFXpbA!u05_iEyhlhqkKZ;q9M!rpxs*tJ<*3 zhiWIa`fr}ezEJ&I{ND#6cX8iNm8;zH2RodQ=n#@cCCOr| zTXCYzlEX`7T5ANh+?d0qlI6dJ@sW+nZle@FF~#KRKmX0;w|%=dD0Q*hi_hY5Y{CW4 zrOJiNd#@bdbya1dHCyZRTmE&^ii4i-IJn9!!^(ZV)t=3cyTYEANN&*o!@WvnMVp(G z{s(U^qqZe`enoqQPhO)mduP*#-L_kTKzrv7mI-@Dg3P;OV0 z+>^?;+IITpTAR2zDn5LAd`IV(R$N{5^Homy`Hv1=mC|&FBxtu~Lg@4UcN&B|cVxXe%hnAVv?S=fZxL-Vrp^2_sJA{-bZ z>z> zKgGsI?`g4Czs|(W$iRr~JYW)G2D&RF+G&cYMyt~S#qC>9Yo8yjfwPfwA z__FOSvwctPaoU&=rO7Hf`?L)EoW48GpSg3HG`N>Wh@H&bQ>GZp6P=NEzJCF4QTtMF zyCu^XE;=4q;eAoe&u6Fp<&$m~Ic0x)r`Sfd8H?)QbE`9U3bGFi_@iY1?tkt>-^;Q{1ps`KMkD|L literal 0 HcmV?d00001 From 9b52b7a3ef22cc37122b1b56e375d270393d39a8 Mon Sep 17 00:00:00 2001 From: diego Date: Wed, 31 Aug 2016 04:30:51 +0200 Subject: [PATCH 036/265] Deleted individual projects for each example --- wicket-intro/CafeAddress/pom.xml | 156 ------------------ .../cafeaddress/ApplicationConfiguration.java | 10 -- .../examples/cafeaddress/CafeAddress.html | 20 --- .../examples/cafeaddress/CafeAddress.java | 72 -------- .../cafeaddress/CafeAddressApplication.java | 33 ---- .../cafeaddress/WebAppInitializer.java | 26 --- .../CafeAddress/src/main/webapp/logo.png | Bin 12244 -> 0 bytes .../CafeAddress/src/main/webapp/style.css | 68 -------- .../wicket/examples/cafeaddress/Start.java | 100 ----------- .../examples/cafeaddress/TestHomePage.java | 29 ---- .../CafeAddress/src/test/jetty/jetty-http.xml | 38 ----- .../src/test/jetty/jetty-https.xml | 45 ----- .../CafeAddress/src/test/jetty/jetty-ssl.xml | 36 ---- .../CafeAddress/src/test/jetty/jetty.xml | 23 --- .../CafeAddress/src/test/resources/keystore | Bin 1481 -> 0 bytes wicket-intro/HelloWorld/pom.xml | 60 ------- .../helloworld/ApplicationConfiguration.java | 10 -- .../examples/helloworld/HelloWorld.html | 5 - .../examples/helloworld/HelloWorld.java | 10 -- .../helloworld/HelloWorldApplication.java | 22 --- .../helloworld/WebAppInitializer.java | 26 --- 21 files changed, 789 deletions(-) delete mode 100644 wicket-intro/CafeAddress/pom.xml delete mode 100644 wicket-intro/CafeAddress/src/main/java/com/baeldung/wicket/examples/cafeaddress/ApplicationConfiguration.java delete mode 100644 wicket-intro/CafeAddress/src/main/java/com/baeldung/wicket/examples/cafeaddress/CafeAddress.html delete mode 100644 wicket-intro/CafeAddress/src/main/java/com/baeldung/wicket/examples/cafeaddress/CafeAddress.java delete mode 100644 wicket-intro/CafeAddress/src/main/java/com/baeldung/wicket/examples/cafeaddress/CafeAddressApplication.java delete mode 100644 wicket-intro/CafeAddress/src/main/java/com/baeldung/wicket/examples/cafeaddress/WebAppInitializer.java delete mode 100644 wicket-intro/CafeAddress/src/main/webapp/logo.png delete mode 100644 wicket-intro/CafeAddress/src/main/webapp/style.css delete mode 100644 wicket-intro/CafeAddress/src/test/java/com/baeldung/wicket/examples/cafeaddress/Start.java delete mode 100644 wicket-intro/CafeAddress/src/test/java/com/baeldung/wicket/examples/cafeaddress/TestHomePage.java delete mode 100644 wicket-intro/CafeAddress/src/test/jetty/jetty-http.xml delete mode 100644 wicket-intro/CafeAddress/src/test/jetty/jetty-https.xml delete mode 100644 wicket-intro/CafeAddress/src/test/jetty/jetty-ssl.xml delete mode 100644 wicket-intro/CafeAddress/src/test/jetty/jetty.xml delete mode 100644 wicket-intro/CafeAddress/src/test/resources/keystore delete mode 100644 wicket-intro/HelloWorld/pom.xml delete mode 100644 wicket-intro/HelloWorld/src/main/java/com/baeldung/wicket/examples/helloworld/ApplicationConfiguration.java delete mode 100644 wicket-intro/HelloWorld/src/main/java/com/baeldung/wicket/examples/helloworld/HelloWorld.html delete mode 100644 wicket-intro/HelloWorld/src/main/java/com/baeldung/wicket/examples/helloworld/HelloWorld.java delete mode 100644 wicket-intro/HelloWorld/src/main/java/com/baeldung/wicket/examples/helloworld/HelloWorldApplication.java delete mode 100644 wicket-intro/HelloWorld/src/main/java/com/baeldung/wicket/examples/helloworld/WebAppInitializer.java diff --git a/wicket-intro/CafeAddress/pom.xml b/wicket-intro/CafeAddress/pom.xml deleted file mode 100644 index 8fb0fbd05a..0000000000 --- a/wicket-intro/CafeAddress/pom.xml +++ /dev/null @@ -1,156 +0,0 @@ - - - - 4.0.0 - com.baeldung.wicket.examples - cafe-address - war - 1.0-SNAPSHOT - CafeAddress - - 7.4.0 - 9.2.13.v20150730 - 2.5 - 4.12 - UTF-8 - none - - - - - org.apache.wicket - wicket-core - ${wicket.version} - - - - - - org.springframework - spring-web - 4.1.1.RELEASE - - - javax.servlet - javax.servlet-api - 3.1.0 - - - org.apache.wicket - wicket-spring - 8.0.0-M1 - - - - - junit - junit - ${junit.version} - test - - - - - org.eclipse.jetty.aggregate - jetty-all - ${jetty9.version} - test - - - - CafeAddress - - - false - src/main/resources - - - false - src/main/java - - ** - - - **/*.java - - - - - - false - src/test/resources - - - false - src/test/java - - ** - - - **/*.java - - - - - - true - org.apache.maven.plugins - maven-compiler-plugin - 3.5.1 - - 1.8 - 1.8 - UTF-8 - true - true - - - - org.apache.maven.plugins - maven-war-plugin - 2.6 - - false - - - - org.eclipse.jetty - jetty-maven-plugin - ${jetty9.version} - - - - maven.project.build.directory.test-classes - ${project.build.directory}/test-classes - - - ${project.basedir}/src/test/jetty/jetty.xml,${project.basedir}/src/test/jetty/jetty-ssl.xml,${project.basedir}/src/test/jetty/jetty-http.xml,${project.basedir}/src/test/jetty/jetty-https.xml - - - - org.apache.maven.plugins - maven-eclipse-plugin - 2.9 - - true - ${wtp.version} - - - - - - - - Apache Nexus - https://repository.apache.org/content/repositories/snapshots/ - - false - - - true - - - - diff --git a/wicket-intro/CafeAddress/src/main/java/com/baeldung/wicket/examples/cafeaddress/ApplicationConfiguration.java b/wicket-intro/CafeAddress/src/main/java/com/baeldung/wicket/examples/cafeaddress/ApplicationConfiguration.java deleted file mode 100644 index c0e34c6dc1..0000000000 --- a/wicket-intro/CafeAddress/src/main/java/com/baeldung/wicket/examples/cafeaddress/ApplicationConfiguration.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.baeldung.wicket.examples.cafeaddress; - -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; - -@Configuration -@ComponentScan -public class ApplicationConfiguration { - -} diff --git a/wicket-intro/CafeAddress/src/main/java/com/baeldung/wicket/examples/cafeaddress/CafeAddress.html b/wicket-intro/CafeAddress/src/main/java/com/baeldung/wicket/examples/cafeaddress/CafeAddress.html deleted file mode 100644 index 954ff551f1..0000000000 --- a/wicket-intro/CafeAddress/src/main/java/com/baeldung/wicket/examples/cafeaddress/CafeAddress.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - -Apache Wicket Quickstart - - - - -
- -

- Address: address -

-
- - diff --git a/wicket-intro/CafeAddress/src/main/java/com/baeldung/wicket/examples/cafeaddress/CafeAddress.java b/wicket-intro/CafeAddress/src/main/java/com/baeldung/wicket/examples/cafeaddress/CafeAddress.java deleted file mode 100644 index ce26c5a1ad..0000000000 --- a/wicket-intro/CafeAddress/src/main/java/com/baeldung/wicket/examples/cafeaddress/CafeAddress.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.baeldung.wicket.examples.cafeaddress; - -import java.io.Serializable; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Map; - -import org.apache.wicket.ajax.AjaxRequestTarget; -import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior; -import org.apache.wicket.markup.html.WebPage; -import org.apache.wicket.markup.html.basic.Label; -import org.apache.wicket.markup.html.form.DropDownChoice; -import org.apache.wicket.model.PropertyModel; -import org.apache.wicket.request.mapper.parameter.PageParameters; - -public class CafeAddress extends WebPage { - - private static final long serialVersionUID = 1L; - - String selectedCafe; - Address address; - Map cafeNamesAndAddresses = new HashMap<>(); - - public CafeAddress(final PageParameters parameters) { - super(parameters); - initCafes(); - - ArrayList cafeNames = new ArrayList<>(this.cafeNamesAndAddresses.keySet()); - this.selectedCafe = cafeNames.get(0); - this.address = new Address(this.cafeNamesAndAddresses.get(this.selectedCafe).getAddress()); - - final Label addressLabel = new Label("address", new PropertyModel(this.address, "address")); - addressLabel.setOutputMarkupId(true); - - final DropDownChoice cafeDropdown = new DropDownChoice<>("cafes", new PropertyModel(this, "selectedCafe"), cafeNames); - cafeDropdown.add(new AjaxFormComponentUpdatingBehavior("onchange") { - private static final long serialVersionUID = 1L; - - @Override - protected void onUpdate(AjaxRequestTarget target) { - String name = (String) cafeDropdown.getDefaultModel().getObject(); - address.setAddress(cafeNamesAndAddresses.get(name).getAddress()); - target.add(addressLabel); - } - }); - - add(addressLabel); - add(cafeDropdown); - - } - - private void initCafes() { - this.cafeNamesAndAddresses.put("Linda's Cafe", new Address("35 Bower St.")); - this.cafeNamesAndAddresses.put("Old Tree", new Address("2 Edgware Rd.")); - } - - class Address implements Serializable { - private String sAddress = ""; - - public Address(String address) { - this.sAddress = address; - } - - public String getAddress() { - return this.sAddress; - } - - public void setAddress(String address) { - this.sAddress = address; - } - } -} diff --git a/wicket-intro/CafeAddress/src/main/java/com/baeldung/wicket/examples/cafeaddress/CafeAddressApplication.java b/wicket-intro/CafeAddress/src/main/java/com/baeldung/wicket/examples/cafeaddress/CafeAddressApplication.java deleted file mode 100644 index 189ef14558..0000000000 --- a/wicket-intro/CafeAddress/src/main/java/com/baeldung/wicket/examples/cafeaddress/CafeAddressApplication.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.baeldung.wicket.examples.cafeaddress; - -import org.apache.wicket.markup.html.WebPage; -import org.apache.wicket.protocol.http.WebApplication; - -/** - * Application object for your web application. - * If you want to run this application without deploying, run the Start class. - * - * @see com.baeldung.wicket.examples.Start#main(String[]) - */ -public class CafeAddressApplication extends WebApplication -{ - /** - * @see org.apache.wicket.Application#getHomePage() - */ - @Override - public Class getHomePage() - { - return CafeAddress.class; - } - - /** - * @see org.apache.wicket.Application#init() - */ - @Override - public void init() - { - super.init(); - - // add your configuration here - } -} diff --git a/wicket-intro/CafeAddress/src/main/java/com/baeldung/wicket/examples/cafeaddress/WebAppInitializer.java b/wicket-intro/CafeAddress/src/main/java/com/baeldung/wicket/examples/cafeaddress/WebAppInitializer.java deleted file mode 100644 index f1465e05b9..0000000000 --- a/wicket-intro/CafeAddress/src/main/java/com/baeldung/wicket/examples/cafeaddress/WebAppInitializer.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.baeldung.wicket.examples.cafeaddress; - -import javax.servlet.FilterRegistration; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; - -import org.apache.wicket.protocol.http.WicketFilter; -import org.springframework.web.WebApplicationInitializer; -import org.springframework.web.context.ContextLoaderListener; -import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; - -public class WebAppInitializer implements WebApplicationInitializer { - - @Override - public void onStartup(ServletContext container) throws ServletException { - AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext(); - container.addListener(new ContextLoaderListener(context)); - context.register(ApplicationConfiguration.class); - - FilterRegistration filter = container.addFilter("CafeAddressApplication", WicketFilter.class); - filter.setInitParameter("applicationClassName", CafeAddressApplication.class.getName()); - filter.setInitParameter(WicketFilter.FILTER_MAPPING_PARAM, "/*"); - filter.addMappingForUrlPatterns(null, false, "/*"); - } - -} \ No newline at end of file diff --git a/wicket-intro/CafeAddress/src/main/webapp/logo.png b/wicket-intro/CafeAddress/src/main/webapp/logo.png deleted file mode 100644 index 39ec54854b748ab6aeb6b3965d88f452772d7d8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12244 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 i1O^!^0gjqN1OFf9qq%!F8)!QK0000`K diff --git a/wicket-intro/CafeAddress/src/main/webapp/style.css b/wicket-intro/CafeAddress/src/main/webapp/style.css deleted file mode 100644 index fc137cadb0..0000000000 --- a/wicket-intro/CafeAddress/src/main/webapp/style.css +++ /dev/null @@ -1,68 +0,0 @@ -body, p, li, a { font-family: georgia, times, serif;font-size:13pt;} -h1, h2, h3 { font-family: 'Yanone Kaffeesatz', arial, serif; } -body { margin:0;padding:0;} -#hd { - width : 100%; - height : 87px; - background-color : #092E67; - margin-top : 0; - padding-top : 10px; - border-bottom : 1px solid #888; - z-index : 0; -} -#ft { - position : absolute; - bottom : 0; - width : 100%; - height : 99px; - background-color : #6493D2; - border-top : 1px solid #888; - z-index : 0; -} -#logo,#bd { - width : 650px; - margin: 0 auto; - padding: 25px 50px 0 50px; -} -#logo h1 { - color : white; - font-size:36pt; - display: inline; -} -#logo img { - display:inline; - vertical-align: bottom; - margin-left : 50px; - margin-right : 5px; -} -body { margin-top : 0; padding-top : 0;} -#logo, #logo h1 { margin-top : 0; padding-top : 0;} -#bd { - position : absolute; - top : 75px; - bottom : 75px; - left : 50%; - margin-left : -325px; - z-index : 1; - overflow: auto; - background-color : #fff; - -webkit-border-radius: 10px; - -moz-border-radius: 10px; - border-radius: 10px; - -moz-box-shadow: 0px 0px 10px #888; - -webkit-box-shadow: 0px 0px 10px #888; - box-shadow: 0px 0px 10px #888; -} -a, a:visited, a:hover, a:active { - color : #6493D2; -} -h2 { - padding : 0; margin:0; - font-size:36pt; - color:#FF5500; -} -h3 { - padding : 0; margin:0; - font-size:24pt; - color:#092E67; -} \ No newline at end of file diff --git a/wicket-intro/CafeAddress/src/test/java/com/baeldung/wicket/examples/cafeaddress/Start.java b/wicket-intro/CafeAddress/src/test/java/com/baeldung/wicket/examples/cafeaddress/Start.java deleted file mode 100644 index bb67ac56a5..0000000000 --- a/wicket-intro/CafeAddress/src/test/java/com/baeldung/wicket/examples/cafeaddress/Start.java +++ /dev/null @@ -1,100 +0,0 @@ -package com.baeldung.wicket.examples.cafeaddress; - -import java.lang.management.ManagementFactory; - -import javax.management.MBeanServer; - -import org.eclipse.jetty.jmx.MBeanContainer; -import org.eclipse.jetty.server.HttpConfiguration; -import org.eclipse.jetty.server.HttpConnectionFactory; -import org.eclipse.jetty.server.SecureRequestCustomizer; -import org.eclipse.jetty.server.Server; -import org.eclipse.jetty.server.ServerConnector; -import org.eclipse.jetty.server.SslConnectionFactory; -import org.eclipse.jetty.util.resource.Resource; -import org.eclipse.jetty.util.ssl.SslContextFactory; -import org.eclipse.jetty.webapp.WebAppContext; - -/** - * Separate startup class for people that want to run the examples directly. Use parameter - * -Dcom.sun.management.jmxremote to startup JMX (and e.g. connect with jconsole). - */ -public class Start { - /** - * Main function, starts the jetty server. - * - * @param args - */ - public static void main(String[] args) { - System.setProperty("wicket.configuration", "development"); - - Server server = new Server(); - - HttpConfiguration http_config = new HttpConfiguration(); - http_config.setSecureScheme("https"); - http_config.setSecurePort(8443); - http_config.setOutputBufferSize(32768); - - ServerConnector http = new ServerConnector(server, new HttpConnectionFactory(http_config)); - http.setPort(8080); - http.setIdleTimeout(1000 * 60 * 60); - - server.addConnector(http); - - Resource keystore = Resource.newClassPathResource("/keystore"); - if (keystore != null && keystore.exists()) { - // if a keystore for a SSL certificate is available, start a SSL - // connector on port 8443. - // By default, the quickstart comes with a Apache Wicket Quickstart - // Certificate that expires about half way september 2021. Do not - // use this certificate anywhere important as the passwords are - // available in the source. - - SslContextFactory sslContextFactory = new SslContextFactory(); - sslContextFactory.setKeyStoreResource(keystore); - sslContextFactory.setKeyStorePassword("wicket"); - sslContextFactory.setKeyManagerPassword("wicket"); - - HttpConfiguration https_config = new HttpConfiguration(http_config); - https_config.addCustomizer(new SecureRequestCustomizer()); - - ServerConnector https = new ServerConnector(server, new SslConnectionFactory(sslContextFactory, "http/1.1"), new HttpConnectionFactory(https_config)); - https.setPort(8443); - https.setIdleTimeout(500000); - - server.addConnector(https); - System.out.println("SSL access to the examples has been enabled on port 8443"); - System.out.println("You can access the application using SSL on https://localhost:8443"); - System.out.println(); - } - - WebAppContext bb = new WebAppContext(); - bb.setServer(server); - bb.setContextPath("/"); - bb.setWar("src/main/webapp"); - - // uncomment the next two lines if you want to start Jetty with WebSocket (JSR-356) support - // you need org.apache.wicket:wicket-native-websocket-javax in the classpath! - // ServerContainer serverContainer = WebSocketServerContainerInitializer.configureContext(bb); - // serverContainer.addEndpoint(new WicketServerEndpointConfig()); - - // uncomment next line if you want to test with JSESSIONID encoded in the urls - // ((AbstractSessionManager) - // bb.getSessionHandler().getSessionManager()).setUsingCookies(false); - - server.setHandler(bb); - - MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer(); - MBeanContainer mBeanContainer = new MBeanContainer(mBeanServer); - server.addEventListener(mBeanContainer); - server.addBean(mBeanContainer); - - try { - server.start(); - server.join(); - } catch (Exception e) { - e.printStackTrace(); - System.exit(100); - } - } -} diff --git a/wicket-intro/CafeAddress/src/test/java/com/baeldung/wicket/examples/cafeaddress/TestHomePage.java b/wicket-intro/CafeAddress/src/test/java/com/baeldung/wicket/examples/cafeaddress/TestHomePage.java deleted file mode 100644 index 9b186ce52b..0000000000 --- a/wicket-intro/CafeAddress/src/test/java/com/baeldung/wicket/examples/cafeaddress/TestHomePage.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.baeldung.wicket.examples.cafeaddress; - -import org.apache.wicket.util.tester.WicketTester; -import org.junit.Before; -import org.junit.Test; - -/** - * Simple test using the WicketTester - */ -public class TestHomePage -{ - private WicketTester tester; - - @Before - public void setUp() - { - tester = new WicketTester(new CafeAddressApplication()); - } - - @Test - public void homepageRendersSuccessfully() - { - //start and render the test page - tester.startPage(CafeAddress.class); - - //assert rendered page class - tester.assertRenderedPage(CafeAddress.class); - } -} diff --git a/wicket-intro/CafeAddress/src/test/jetty/jetty-http.xml b/wicket-intro/CafeAddress/src/test/jetty/jetty-http.xml deleted file mode 100644 index 9f3256b15c..0000000000 --- a/wicket-intro/CafeAddress/src/test/jetty/jetty-http.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/wicket-intro/CafeAddress/src/test/jetty/jetty-https.xml b/wicket-intro/CafeAddress/src/test/jetty/jetty-https.xml deleted file mode 100644 index 58f7d53d2d..0000000000 --- a/wicket-intro/CafeAddress/src/test/jetty/jetty-https.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - http/1.1 - - - - - - - - - - - - - 30000 - - - - \ No newline at end of file diff --git a/wicket-intro/CafeAddress/src/test/jetty/jetty-ssl.xml b/wicket-intro/CafeAddress/src/test/jetty/jetty-ssl.xml deleted file mode 100644 index 49e558bb47..0000000000 --- a/wicket-intro/CafeAddress/src/test/jetty/jetty-ssl.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - / - - - - - - SSL_RSA_WITH_DES_CBC_SHA - SSL_DHE_RSA_WITH_DES_CBC_SHA - SSL_DHE_DSS_WITH_DES_CBC_SHA - SSL_RSA_EXPORT_WITH_RC4_40_MD5 - SSL_RSA_EXPORT_WITH_DES40_CBC_SHA - SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA - SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/wicket-intro/CafeAddress/src/test/jetty/jetty.xml b/wicket-intro/CafeAddress/src/test/jetty/jetty.xml deleted file mode 100644 index 1a6293b405..0000000000 --- a/wicket-intro/CafeAddress/src/test/jetty/jetty.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - https - - - - 32768 - 8192 - 8192 - true - false - 512 - - - - - - \ No newline at end of file diff --git a/wicket-intro/CafeAddress/src/test/resources/keystore b/wicket-intro/CafeAddress/src/test/resources/keystore deleted file mode 100644 index 30bbc90ccffcc2745adf09077df16fc3db9c0b47..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1481 zcmezO_TO6u1_mY|W&~r_tkjZ{N+8cDIXV0qP-d4w6Vo;WJ~l3GHbxdkEha%mMpg!v zCZXF+L+yeb(_D>eh5NdK;{zR}$;>(o{ zE3dg|o8B)~5ILLXvtIl5>N#JOOd1Wnqs3o|CH&_3)%k6yk>9%q<*Th*+pP{h`8MfJ zi*YvUmF+Z?t0^x!WMEPBj(9H=gC$Rl(ii9d&)j3 zbTLZUo^$C9pTUfx#bzsWYP%dfFaJ7`%~pJY<=Y|t;J>bqocFORJ8`)y%bsft`MuQV z>{(ffqGR9Jv){6}VE@M8vig|blV9STFXpbA!u05_iEyhlhqkKZ;q9M!rpxs*tJ<*3 zhiWIa`fr}ezEJ&I{ND#6cX8iNm8;zH2RodQ=n#@cCCOr| zTXCYzlEX`7T5ANh+?d0qlI6dJ@sW+nZle@FF~#KRKmX0;w|%=dD0Q*hi_hY5Y{CW4 zrOJiNd#@bdbya1dHCyZRTmE&^ii4i-IJn9!!^(ZV)t=3cyTYEANN&*o!@WvnMVp(G z{s(U^qqZe`enoqQPhO)mduP*#-L_kTKzrv7mI-@Dg3P;OV0 z+>^?;+IITpTAR2zDn5LAd`IV(R$N{5^Homy`Hv1=mC|&FBxtu~Lg@4UcN&B|cVxXe%hnAVv?S=fZxL-Vrp^2_sJA{-bZ z>z> zKgGsI?`g4Czs|(W$iRr~JYW)G2D&RF+G&cYMyt~S#qC>9Yo8yjfwPfwA z__FOSvwctPaoU&=rO7Hf`?L)EoW48GpSg3HG`N>Wh@H&bQ>GZp6P=NEzJCF4QTtMF zyCu^XE;=4q;eAoe&u6Fp<&$m~Ic0x)r`Sfd8H?)QbE`9U3bGFi_@iY1?tkt>-^;Q{1ps`KMkD|L diff --git a/wicket-intro/HelloWorld/pom.xml b/wicket-intro/HelloWorld/pom.xml deleted file mode 100644 index 2aff59dd93..0000000000 --- a/wicket-intro/HelloWorld/pom.xml +++ /dev/null @@ -1,60 +0,0 @@ - - 4.0.0 - com.baeldung.wicket.examples - hello-world - war - 1.0-SNAPSHOT - HelloWorld - - - junit - junit - 3.8.1 - test - - - org.apache.wicket - wicket-core - 8.0.0-M1 - - - org.springframework - spring-web - 4.1.1.RELEASE - - - javax.servlet - javax.servlet-api - 3.1.0 - - - org.apache.wicket - wicket-spring - 8.0.0-M1 - - - - HelloWorld - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.5.1 - - 1.8 - 1.8 - - - - org.apache.maven.plugins - maven-war-plugin - 2.6 - - false - - - - - diff --git a/wicket-intro/HelloWorld/src/main/java/com/baeldung/wicket/examples/helloworld/ApplicationConfiguration.java b/wicket-intro/HelloWorld/src/main/java/com/baeldung/wicket/examples/helloworld/ApplicationConfiguration.java deleted file mode 100644 index f9de7adb2a..0000000000 --- a/wicket-intro/HelloWorld/src/main/java/com/baeldung/wicket/examples/helloworld/ApplicationConfiguration.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.baeldung.wicket.examples.helloworld; - -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; - -@Configuration -@ComponentScan -public class ApplicationConfiguration { - -} diff --git a/wicket-intro/HelloWorld/src/main/java/com/baeldung/wicket/examples/helloworld/HelloWorld.html b/wicket-intro/HelloWorld/src/main/java/com/baeldung/wicket/examples/helloworld/HelloWorld.html deleted file mode 100644 index c56d07fc10..0000000000 --- a/wicket-intro/HelloWorld/src/main/java/com/baeldung/wicket/examples/helloworld/HelloWorld.html +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/wicket-intro/HelloWorld/src/main/java/com/baeldung/wicket/examples/helloworld/HelloWorld.java b/wicket-intro/HelloWorld/src/main/java/com/baeldung/wicket/examples/helloworld/HelloWorld.java deleted file mode 100644 index 6dc7295798..0000000000 --- a/wicket-intro/HelloWorld/src/main/java/com/baeldung/wicket/examples/helloworld/HelloWorld.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.baeldung.wicket.examples.helloworld; - -import org.apache.wicket.markup.html.WebPage; -import org.apache.wicket.markup.html.basic.Label; - -public class HelloWorld extends WebPage { - public HelloWorld() { - add(new Label("hello", "Hello World!")); - } -} diff --git a/wicket-intro/HelloWorld/src/main/java/com/baeldung/wicket/examples/helloworld/HelloWorldApplication.java b/wicket-intro/HelloWorld/src/main/java/com/baeldung/wicket/examples/helloworld/HelloWorldApplication.java deleted file mode 100644 index 64bfcadd29..0000000000 --- a/wicket-intro/HelloWorld/src/main/java/com/baeldung/wicket/examples/helloworld/HelloWorldApplication.java +++ /dev/null @@ -1,22 +0,0 @@ - -package com.baeldung.wicket.examples.helloworld; - -import org.apache.wicket.Page; -import org.apache.wicket.protocol.http.WebApplication; -import org.apache.wicket.spring.injection.annot.SpringComponentInjector; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; - -public class HelloWorldApplication extends WebApplication { - @Override - public Class getHomePage() { - return HelloWorld.class; - } - - @Override - public void init() { - super.init(); - getComponentInstantiationListeners().add(new SpringComponentInjector(this)); - } - -} diff --git a/wicket-intro/HelloWorld/src/main/java/com/baeldung/wicket/examples/helloworld/WebAppInitializer.java b/wicket-intro/HelloWorld/src/main/java/com/baeldung/wicket/examples/helloworld/WebAppInitializer.java deleted file mode 100644 index 362502e264..0000000000 --- a/wicket-intro/HelloWorld/src/main/java/com/baeldung/wicket/examples/helloworld/WebAppInitializer.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.baeldung.wicket.examples.helloworld; - -import javax.servlet.FilterRegistration; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; - -import org.apache.wicket.protocol.http.WicketFilter; -import org.springframework.web.WebApplicationInitializer; -import org.springframework.web.context.ContextLoaderListener; -import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; - -public class WebAppInitializer implements WebApplicationInitializer { - - @Override - public void onStartup(ServletContext container) throws ServletException { - AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext(); - container.addListener(new ContextLoaderListener(context)); - context.register(ApplicationConfiguration.class); - - FilterRegistration filter = container.addFilter("HelloWorldApplication", WicketFilter.class); - filter.setInitParameter("applicationClassName", HelloWorldApplication.class.getName()); - filter.setInitParameter(WicketFilter.FILTER_MAPPING_PARAM, "/*"); - filter.addMappingForUrlPatterns(null, false, "/*"); - } - -} \ No newline at end of file From cfebd40b429bc59f2451f47f0367079628b8f614 Mon Sep 17 00:00:00 2001 From: diego Date: Wed, 31 Aug 2016 05:04:15 +0200 Subject: [PATCH 037/265] proper formatting --- wicket-intro/WicketIntro/pom.xml | 261 +++++++++--------- .../baeldung/wicket/examples/Examples.html | 62 ++--- .../examples/cafeaddress/CafeAddress.html | 12 +- 3 files changed, 167 insertions(+), 168 deletions(-) diff --git a/wicket-intro/WicketIntro/pom.xml b/wicket-intro/WicketIntro/pom.xml index 9b759eb1be..c6a1a4985d 100644 --- a/wicket-intro/WicketIntro/pom.xml +++ b/wicket-intro/WicketIntro/pom.xml @@ -1,136 +1,135 @@ - + - 4.0.0 - com.baeldung.wicket.examples - wicket-intro - war - 1.0-SNAPSHOT - WicketIntro - - 7.4.0 - 9.2.13.v20150730 - 2.5 - 4.12 - 4.1.1.RELEASE - 3.1.0 - 8.0.0-M1 - 3.5.1 - 2.6 - UTF-8 - none - - - - - org.apache.wicket - wicket-core - ${wicket.version} - - - - - - org.springframework - spring-web - ${spring-web.version} - - - javax.servlet - javax.servlet-api - ${javax.servlet-api.version} - - - org.apache.wicket - wicket-spring - ${wicket-spring.version} - + 4.0.0 + com.baeldung.wicket.examples + wicket-intro + war + 1.0-SNAPSHOT + WicketIntro + + 7.4.0 + 9.2.13.v20150730 + 2.5 + 4.12 + 4.1.1.RELEASE + 3.1.0 + 8.0.0-M1 + 3.5.1 + 2.6 + UTF-8 + none + + + + + org.apache.wicket + wicket-core + ${wicket.version} + - - - junit - junit - ${junit.version} - test - + - - - org.eclipse.jetty.aggregate - jetty-all - ${jetty9.version} - test - - - - WicketIntro - - - false - src/main/resources - - - false - src/main/java - - ** - - - **/*.java - - - - - - true - org.apache.maven.plugins - maven-compiler-plugin - ${maven-compiler-plugin.version} - - 1.8 - 1.8 - UTF-8 - true - true - - - - org.apache.maven.plugins - maven-war-plugin - ${maven-war-plugin.version} - - false - - - - org.eclipse.jetty - jetty-maven-plugin - ${jetty9.version} - - - - maven.project.build.directory.test-classes - ${project.build.directory}/test-classes - - - ${project.basedir}/src/test/jetty/jetty.xml,${project.basedir}/src/test/jetty/jetty-ssl.xml,${project.basedir}/src/test/jetty/jetty-http.xml,${project.basedir}/src/test/jetty/jetty-https.xml - - - - + + org.springframework + spring-web + ${spring-web.version} + + + javax.servlet + javax.servlet-api + ${javax.servlet-api.version} + + + org.apache.wicket + wicket-spring + ${wicket-spring.version} + - - - Apache Nexus - https://repository.apache.org/content/repositories/snapshots/ - - false - - - true - - - - + + + junit + junit + ${junit.version} + test + + + + + org.eclipse.jetty.aggregate + jetty-all + ${jetty9.version} + test + +
+ + WicketIntro + + + false + src/main/resources + + + false + src/main/java + + ** + + + **/*.java + + + + + + true + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + 1.8 + 1.8 + UTF-8 + true + true + + + + org.apache.maven.plugins + maven-war-plugin + ${maven-war-plugin.version} + + false + + + + org.eclipse.jetty + jetty-maven-plugin + ${jetty9.version} + + + + maven.project.build.directory.test-classes + ${project.build.directory}/test-classes + + + ${project.basedir}/src/test/jetty/jetty.xml,${project.basedir}/src/test/jetty/jetty-ssl.xml,${project.basedir}/src/test/jetty/jetty-http.xml,${project.basedir}/src/test/jetty/jetty-https.xml + + + + + + + + Apache Nexus + https://repository.apache.org/content/repositories/snapshots/ + + false + + + true + + + + diff --git a/wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/Examples.html b/wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/Examples.html index 38eebbffe0..497e98e01a 100644 --- a/wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/Examples.html +++ b/wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/Examples.html @@ -6,47 +6,47 @@ -
-
-
-

Wicket Introduction Examples:

- - Hello World! -
-
- Cafes -
-
-
-
+
+
+
+

Wicket Introduction Examples:

+ + Hello World! +
+
+ Cafes +
+
+
+
diff --git a/wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/cafeaddress/CafeAddress.html b/wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/cafeaddress/CafeAddress.html index b7e0368eaa..c5ada2323d 100644 --- a/wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/cafeaddress/CafeAddress.html +++ b/wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/cafeaddress/CafeAddress.html @@ -5,11 +5,11 @@ Cafes -
- -

- Address: address -

-
+
+ +

+ Address: address +

+
From d18e64037ed837ab89b49e4e17a859ce8bb2e71e Mon Sep 17 00:00:00 2001 From: maverick Date: Wed, 31 Aug 2016 19:29:25 +0530 Subject: [PATCH 038/265] Changes for naming conventions in test functions --- .../src/test/java/org/baeldung/java/sorting/ArraySort.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core-java/src/test/java/org/baeldung/java/sorting/ArraySort.java b/core-java/src/test/java/org/baeldung/java/sorting/ArraySort.java index cacbcdb727..35e6c8b46d 100644 --- a/core-java/src/test/java/org/baeldung/java/sorting/ArraySort.java +++ b/core-java/src/test/java/org/baeldung/java/sorting/ArraySort.java @@ -51,7 +51,7 @@ public class ArraySort { } @Test - public void comparatorSortIntArray_Java8Lambda() { + public void givenArray_whenUsingSortWithLambdas_thenSortedArray() { Arrays.sort(integers, (a, b) -> { return a - b; }); @@ -86,7 +86,7 @@ public class ArraySort { } @Test - public void arraySortVariant() { + public void givenIntArray_whenUsingRangeSort_thenRangeSortedArray() { System.out.println(Arrays.toString(numbers)); Arrays.sort(numbers, 3, 7); System.out.println(Arrays.toString(numbers)); @@ -94,7 +94,7 @@ public class ArraySort { } @Test - public void arrayParallelSortVariant() { + public void givenIntArray_whenUsingParallelSort_thenParallelSortedArray() { Arrays.parallelSort(numbers); From d9da586447274ad41685da67bc5fdc8ab1d23eb9 Mon Sep 17 00:00:00 2001 From: Ivan Paolillo Date: Thu, 1 Sep 2016 10:57:47 +0200 Subject: [PATCH 039/265] Add Stream processing example --- .../.mvn/wrapper/maven-wrapper.jar | Bin 0 -> 49502 bytes .../.mvn/wrapper/maven-wrapper.properties | 1 + spring-cloud-data-flow/data-flow-server/mvnw | 233 ++++++++++++++++++ .../data-flow-server/mvnw.cmd | 145 +++++++++++ .../data-flow-server/pom.xml | 87 +++++++ .../cloud/DataFlowServerApplication.java | 14 ++ .../src/main/resources/application.properties | 0 .../cloud/DataFlowServerApplicationTests.java | 16 ++ .../.mvn/wrapper/maven-wrapper.jar | Bin 0 -> 49502 bytes .../.mvn/wrapper/maven-wrapper.properties | 1 + spring-cloud-data-flow/data-flow-shell/mvnw | 233 ++++++++++++++++++ .../data-flow-shell/mvnw.cmd | 145 +++++++++++ .../data-flow-shell/pom.xml | 87 +++++++ .../cloud/DataFlowShellApplication.java | 14 ++ .../src/main/resources/application.properties | 0 .../cloud/DataFlowShellApplicationTests.java | 16 ++ .../log-sink/.mvn/wrapper/maven-wrapper.jar | Bin 0 -> 49502 bytes .../.mvn/wrapper/maven-wrapper.properties | 1 + spring-cloud-data-flow/log-sink/mvnw | 233 ++++++++++++++++++ spring-cloud-data-flow/log-sink/mvnw.cmd | 145 +++++++++++ spring-cloud-data-flow/log-sink/pom.xml | 62 +++++ .../spring/cloud/LogSinkApplication.java | 26 ++ .../src/main/resources/application.properties | 0 .../spring/cloud/LogSinkApplicationTests.java | 16 ++ spring-cloud-data-flow/pom.xml | 14 ++ .../.mvn/wrapper/maven-wrapper.jar | Bin 0 -> 49502 bytes .../.mvn/wrapper/maven-wrapper.properties | 1 + spring-cloud-data-flow/time-processor/mvnw | 233 ++++++++++++++++++ .../time-processor/mvnw.cmd | 145 +++++++++++ spring-cloud-data-flow/time-processor/pom.xml | 62 +++++ .../cloud/TimeProcessorApplication.java | 27 ++ .../src/main/resources/application.properties | 0 .../cloud/TimeProcessorApplicationTests.java | 16 ++ .../.mvn/wrapper/maven-wrapper.jar | Bin 0 -> 49502 bytes .../.mvn/wrapper/maven-wrapper.properties | 1 + spring-cloud-data-flow/time-source/mvnw | 233 ++++++++++++++++++ spring-cloud-data-flow/time-source/mvnw.cmd | 145 +++++++++++ spring-cloud-data-flow/time-source/pom.xml | 62 +++++ .../spring/cloud/TimeSourceApplication.java | 29 +++ .../src/main/resources/application.properties | 0 .../cloud/TimeSourceApplicationTests.java | 16 ++ 41 files changed, 2459 insertions(+) create mode 100644 spring-cloud-data-flow/data-flow-server/.mvn/wrapper/maven-wrapper.jar create mode 100644 spring-cloud-data-flow/data-flow-server/.mvn/wrapper/maven-wrapper.properties create mode 100644 spring-cloud-data-flow/data-flow-server/mvnw create mode 100644 spring-cloud-data-flow/data-flow-server/mvnw.cmd create mode 100644 spring-cloud-data-flow/data-flow-server/pom.xml create mode 100644 spring-cloud-data-flow/data-flow-server/src/main/java/org/baeldung/spring/cloud/DataFlowServerApplication.java create mode 100644 spring-cloud-data-flow/data-flow-server/src/main/resources/application.properties create mode 100644 spring-cloud-data-flow/data-flow-server/src/test/java/org/baeldung/spring/cloud/DataFlowServerApplicationTests.java create mode 100644 spring-cloud-data-flow/data-flow-shell/.mvn/wrapper/maven-wrapper.jar create mode 100644 spring-cloud-data-flow/data-flow-shell/.mvn/wrapper/maven-wrapper.properties create mode 100644 spring-cloud-data-flow/data-flow-shell/mvnw create mode 100644 spring-cloud-data-flow/data-flow-shell/mvnw.cmd create mode 100644 spring-cloud-data-flow/data-flow-shell/pom.xml create mode 100644 spring-cloud-data-flow/data-flow-shell/src/main/java/org/baeldung/spring/cloud/DataFlowShellApplication.java create mode 100644 spring-cloud-data-flow/data-flow-shell/src/main/resources/application.properties create mode 100644 spring-cloud-data-flow/data-flow-shell/src/test/java/org/baeldung/spring/cloud/DataFlowShellApplicationTests.java create mode 100644 spring-cloud-data-flow/log-sink/.mvn/wrapper/maven-wrapper.jar create mode 100644 spring-cloud-data-flow/log-sink/.mvn/wrapper/maven-wrapper.properties create mode 100644 spring-cloud-data-flow/log-sink/mvnw create mode 100644 spring-cloud-data-flow/log-sink/mvnw.cmd create mode 100644 spring-cloud-data-flow/log-sink/pom.xml create mode 100644 spring-cloud-data-flow/log-sink/src/main/java/org/baeldung/spring/cloud/LogSinkApplication.java create mode 100644 spring-cloud-data-flow/log-sink/src/main/resources/application.properties create mode 100644 spring-cloud-data-flow/log-sink/src/test/java/org/baeldung/spring/cloud/LogSinkApplicationTests.java create mode 100644 spring-cloud-data-flow/pom.xml create mode 100644 spring-cloud-data-flow/time-processor/.mvn/wrapper/maven-wrapper.jar create mode 100644 spring-cloud-data-flow/time-processor/.mvn/wrapper/maven-wrapper.properties create mode 100644 spring-cloud-data-flow/time-processor/mvnw create mode 100644 spring-cloud-data-flow/time-processor/mvnw.cmd create mode 100644 spring-cloud-data-flow/time-processor/pom.xml create mode 100644 spring-cloud-data-flow/time-processor/src/main/java/org/baeldung/spring/cloud/TimeProcessorApplication.java create mode 100644 spring-cloud-data-flow/time-processor/src/main/resources/application.properties create mode 100644 spring-cloud-data-flow/time-processor/src/test/java/org/baeldung/spring/cloud/TimeProcessorApplicationTests.java create mode 100644 spring-cloud-data-flow/time-source/.mvn/wrapper/maven-wrapper.jar create mode 100644 spring-cloud-data-flow/time-source/.mvn/wrapper/maven-wrapper.properties create mode 100644 spring-cloud-data-flow/time-source/mvnw create mode 100644 spring-cloud-data-flow/time-source/mvnw.cmd create mode 100644 spring-cloud-data-flow/time-source/pom.xml create mode 100644 spring-cloud-data-flow/time-source/src/main/java/org/baeldung/spring/cloud/TimeSourceApplication.java create mode 100644 spring-cloud-data-flow/time-source/src/main/resources/application.properties create mode 100644 spring-cloud-data-flow/time-source/src/test/java/org/baeldung/spring/cloud/TimeSourceApplicationTests.java diff --git a/spring-cloud-data-flow/data-flow-server/.mvn/wrapper/maven-wrapper.jar b/spring-cloud-data-flow/data-flow-server/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..5fd4d5023f1463b5ba3970e33c460c1eb26d748d GIT binary patch literal 49502 zcmb@tV|1n6wzeBvGe*U>ZQHh;%-Bg)Y}={WHY%yuwkkF%MnzxVwRUS~wY|@J_gP;% z^VfXZ{5793?z><89(^dufT2xlYVOQnYG>@?lA@vQF|UF0&X7tk8BUf?wq2J& zZe&>>paKUg4@;fwk0yeUPvM$yk)=f>TSFFB^a8f|_@mbE#MaBnd5qf6;hXq}c%IeK zn7gB0Kldbedq-vl@2wxJi{$%lufroKUjQLSFmt|<;M8~<5otM5ur#Dgc@ivmwRiYZW(Oco7kb8DWmo|a{coqYMU2raB9r6e9viK6MI3c&%jp05-Tf*O#6@8Ra=egYy01 z-V!G;_omANEvU-8!*>*)lWka9M<+IkNsrsenbXOfLc6qrYe`;lpst;vfs*70$z9UM zq%L>pFCOr$X*|9&3L2h;?VA9-IU*iR6FiGlJ=b~DzE5s^thxXUs4%~*zD#K&k>wZAU8 zpaa!M+Z-zjkfGK15N!&o<3=cgbZV7%ex@j^)Q9V`q^i;Fsbkbe6eHJ;dx{QbdCCs1 zdxq^WxoPsr`eiK3D0Ep}k$ank-0G&+lY!ZHDZBYEx%% z2FyE?Lb0cflLB)kDIj;G=m`^UO<4h(RWdF-DT>p{1J5J90!K!AgC0)?jxPbm$KUjg zJED+#7xQmAmr`(S%BQTV-c97As~r3zD$E;3S)@}p5udA@m6pLgRL5h-;m>LvCq?&Q zokC7Vnk-zBEaa;=Y;6(LJHS>mOJV&%0YfRdUOqbKZy~b z(905jIW0Pg;y`Yv2t+RnDvL4yGEUX*tK)JT6TWn4ik~L)fX#tAV!d8)+A)qWtSjcr z7s|f%f;*%XW!jiRvv9ayj@f&dc|1tKDc{O3BWcLGsn-OYyXRLXEOEwP4k?c`nIut0 z?4S;eO@EoynmkxHq>QpDL1q^wOQxrl))2qya?dk05^5hK? z{P6;WKHUaHw9B0dd&|xw&CYN2fVrn};Gq<=Z^QZk3e~HzzY~JrnPCs0XwMp#B<9Gm zw0?7h#4EY%O-ub6mi&O2vcpIkuM?st;RtEpKSz^Xr#3WHhpsZd!gh|_jGQ`KA30T- zKlz9vgB;pY^}Uh??nQKSzk>2&J+Qi*r3DeX4^$%2ag9^x_YckA-f9p_;8ulh(8j9~ zes{O#{v!m%n^el(VryTF-C%xfJJ$rZj)|Y|8o&))q9CEwg2;Wz&xzyHD=@T_B%b}C z=8G^*4*J4#jUJn{7-3^U(_uUp6E8+GDt#le)nya-Q4kL5ZGiFxT4bF+mX`whcif*? z>CL&Ryn3HHT^^QmWYr<}Q1_Jj7fOh}cS8r+^R#at-CnNl3!1_$96&7nR}gh}))7a0J&z-_eI))+{RCt)r8|7|sV9o01^9nv?aePxMqwPP!x|sNmnn&6{K$K*mVX9lxSAmcqAV1(hKA-=coeTb*otxTOGYXsh zW$31^q7L@<#y~SUYoNKP1JK?4|FQNQb$i8mCG@WhX9i_^;@M2f#!nq7_K*M!4lGz1 z5tfADkO7BZDLgVQ?k7C)f;$eqjHI&zgxhf}x$8^ZEwFfm-qY=+M+fbS)9r8fFE5H9 zv{WPU35cR8%z;(W%5<>y+E&v84J4^Y##N!$B++RI`CZ1i3IW9Nau=*pSxW&^Ov-F> zex=&9XYLVcm1Y?am>2VC`%gMev9$#~; zYwxYvMfeKFsd!OBB@eOb2QNHFcsfKm;&z{OVEUiYmQ}~L@>$Ms@|Ptf3jQO-=Q;1+ zFCw+p+Z3lK_FmIAYnk2V;o915cDM}%Ht5RH%w}P>Yg9{h1mZ}~R6tUII4X7i4-2i% z2Uiw3_uHR!d~5(s;p6btI@-xhAkRg9K|n#}PNT9Dw9P>z$3>30lP1(=mcQ|tpyv3@ ze1qU!69OAx4s7$8r7Y-#5I`m!BXq`f!6C(BtUlG-oq+liqMCS_D@0nSFc%y+N6_Zh zi%L3LhF3zZP{d1)L&SXxPD(fp@T@J;jZeNaf$zl>vAh7=tI z2;wS^QyRdZm~)Ur&!af;8eB8*7(F96K^=WbC$)#TWvB~Awo5AtPf8Il4snD}Xsqd< z>cH+gcg72nTg5tl>oFbwdT{BDyy1=f=4~h~L$)UX;FXa;NdSlyF{(YLrx&VDp`pQI zh3pQtC=d8i1V6yUmFon*LQsNYWen?eO-gSZ4cvYcdEd0klSxcBYw+|5AyCv6TT96h z{7Yh9`h}biU?3oBFn=d8>Hn`1Q*w6rgeX^QbC-WFwjY}Int0;qUny4WMjIee@#0%l z>YAWLVCNo1lp$>9L$Tx`t!dp?>5Pfbhc*!*wzfWkj_x`Q?`3Jc@9r8uq~dgb+lgeh zlA`eUal3e2ZnWQSSYB>qy#85^>j7!=uO-hG5*erp22NaC81#Ytioc>r?D9$b_JiC+ zSp)8KR$%}FjFNRkeE#c5vKbXNJDBoO< z)73Jt7Y|3v45efud1xkg2GO3OwYfsuBV`f6S_D>Aoh2%=`1Y$bHP>0kBvTSowX57H z&1nbbx=IT>X^ScKYL&&{LNq~^UNgR|at`D;SxTYpLvnj_F*bGgNV2tEl1k$ccA&NW zmX(LV*>Op)BOgoric(98mIU)$eUa&jM5bKlnOrHm$p^v@u;W0J)!@XWg+#X=9En(-tiw!l?65rD=zzl(+%<)bI{ZN;SRco{jO;>7 zlSY|TIxuN|d#YHx^^~>iYj2V>cC>wQwWzGVI!6#epjJ6tl_`7tDY17WMKMB@s*Jr& zXOs*@>EwQ6s>M13eZEBJ#q0|;8jao{wK4keesH9?$OSk~_3#*x`8fAzQa7fprQ6(Z zi$}B%m81y*S)RxaX;wW!5{{EDw8)IE3XDRO1Y^%TMr}c|Y>WBAKT=b*K&uMT(?JSl zO>gVtl_bKQ$??TeWr7wYO+Vbl?CTQj?JrW&td`|#@;R2Gca9jq^p`{@)KY97o3}Af zfTh{pUUWD;P7sq=I!lA6;*hq0Nq`F56T)x$K?BMOk}tptYw(%$?*otp2N6IF3#GgqM46Cda!qzvGZcMgcGV`bY5ZIfOB6^;US#WgRai zq#vS8ZqPY953|eFw<-p2Cakx|z#_{4pG}mk{EANI{PnK*CUslvS8whko=OTe13|It z>{O2p=mmanR2-n>LQHaMo}noWCmjFO@7^z~`Y{V>O`@rT{yBS=VXsb}*Pi_zDqM3? zjCZqWR}fEzAkms+Hiq8~qRAFvo}dVW{1gcZ?v&PdX?UG*yS}zT9g7nZ!F1WRH}sHA zJ4~B2Br~8?uhbaX!3g+7=3fVM)q^wEzv**rk5e34==NRCV z3G$G5B!DICFslm)c){oesa_0muLxGoq`xYVNURl*NhE#v2>y9vDz&vJwrB`Q>DhN# zY2GnY!Y^8E%PU0}haXL$8a5QN1-&7NWuC~{62j| z2ozmFyx8GpOzj?&KK1JF28;E8H_p4N^LMm9K0y}!lCxcK79eFGTtGm?7jy?t94Q@X zli|our1#|>f*68fyA0bSn=YisYSl8HB(dFN4Y$qb7p4DR0YQt=^eEMnJkgiM48$>QV6x5*^a|D|t zMPDk}u<^YEYrt|H&hy)DRk%rDIb{LTo;h7=fp^J9Lr&`{9`8_pS*tQ_$KXB$2#5{h z-&yPbN-zInq{7aYZuaItS8-2Mb4OQe2jD*&)0~898E|HlAq`o!M&It@vvnj z_y@))>~_oR%S8OfmFTGYIat^#8_YKMqWLac<^}RZFDcJqvSJa>&6HaLS7p-$)QyL= zHrO|t75`d41Bp37RZtKR%g^%o@9C5Ce=CjuvVQ-KI#Uw2WWa>cho;jztUt~Le*_pT zkfA2iif9QFp;vhd)|A?tdAQ?9o~?EqgL;=)eKFQ{E^u?OIP}fl^5A;$^ZVutCIqj5 z&*i+G?!Px|5~~6zTYf>~uw*kM`5p&Hju&#w!7^An3*mQwTK22wC7p^OsvMjWf`$MY zLX|ZFV#+>Uq2!QyRD9cgbI9nswteMAMWtK(_=d%r?TLrx?_rkjbjI(rbK#T9Gn}J| z5ajow3ZErpw+%}YfVL-q^{r~##xJ^_ux2yO1!LJZXg)>F70STV=&Ruwp&XP^_?$h0 zn>$a?!>N+Kt$UXzg`e+szB}*uw)Z$uL6?>*!0IrE)SgV~#a?Qgg7HuTsu3ncrcs|l z=sQSMtr}S!sQ4SriKg=M`1Y|bC`XJ+J(YT)op!Q);kj0_e)YNVNw8SI|1f%9%X?i5>$lLE(Wfc$wY?(O985d5e*)UPtF!7gG3(Kd z-^=-%-wWCEK`r4oFh^{|;Ci%W^P>K%9dBNDqi%c$Q{iY#(zbwN7~pQI=SHd%WuV7Z zO?0P;Zc6yeN;)IbJIP0=>W)EgE!76jM^?IyQ*D(T})1NGmP z~YAb6T^#R6;)Ls;cV~LWk z33lcLpbSjxStw9Z>Nv&+rPOXxCGB=?ttZs?{OF7;GYlV&w7-82POb$XrogqFpLA2`j&MLZXr=IG>PAFSb2np~x;E_kV{ zsDwbK$?iYRn7$;mHYZhQn6P2#_hXAHd?;q~!Zy}%;@%wT3u|Sa-!WxxOE_fwyFv*Db@>X;Rl+fK1oP?55*dN0#2%SuikZ)y7Kx>`8*9d?}5 zKvXF7J5&Ey6{A8qUFxrFOh<$xdSWV^dw7z|`7RVZJhAwO72V zRrM_3*wI`^ycl7~>6KaCYBr#WGR>}B)Q(V%&$MhVrU>u~ql zjGeZF&>=_ld$oY!V}5}Gb> z*iP38KOav9RHY)0uITwgz99w- zJX-0BGCdY*$c7pi@>@-`2>#>}c(DHaI62ntpKz z`c01Z#u7WuMZ71!jl7hv5|o61+uv5nG?*dffEL~328P5HlKh2&RQ;9X@f>c1x<>v= zZWNSz3Ii~oyAsKCmbd}|$2%ZN&3gc9>(NV=Z4Fnz2F@)PPbx1wwVMsUn=-G=cqE3# zjY{G4OI~2o$|*iuswTg1=hcZK$C=0^rOt-aOwXuxU=*uT?yF00)6sE}ZAZyy*$ZTH zk!P*xILX#5RygHy{k?2((&pRQv9_Ew+wZ>KPho_o1-{~I*s1h8 zBse@ONdkk-8EG?r5qof}lwTxdmmEN|%qw(STW|PFsw1LD!h_Vjo;C4?@h|da4Y;*; zvApQ=T&=jWU39Uz=_yN@Bn0{{)yn8RZ2&X!<*KBv-7tcWdkF1Ij8D0mU zwbcs}0vDaLGd@xx%S_QZ1H)GTt`~>+#z}HXJTl9S!sd9seVJc|_wUMSdD$>k`K_RG zlq(fsnR@KM^;C}}&vG2t+}_nGPuI5ovg$6TYeMPIREGxP@2r~RKd@>gV`mq0XENsh z%IRZ-ZNP+4#J`o-yRpP;w@;CrSr3wiix3e9Qc|s(WapRq950P->g|JYC$A)$YrGeH zz5dKlAHAPJ>%?llqqB&#+#VU3sp=9>Xms1J;tSYN>LMwNtU68yr!})K4X>%^IrIDp z>SHy&6fJHybwS^BW>okFeaQp6wxaVP`hy;ZX#e+=w3c?PGD&_LmeqL8oZ*YaM1+#S z5WNAKo4+99JW(+qcMjh;+c%R#R?t;(aQ`2`C=bo((ERzgAwKKazXy*0wHN;v;P|f> zBW&?`h#_I^?Bc5GX7XP@|MOiw%&-#?EQ|w+FdCl_&qPN&s$|Z17UCF9oXS#N z)px6>zm&}0osTnCGI;AXsj`q=LpIsW4x}q~70uey5N_NpdJ*Gv^@$g@f2{EB>LP7Y zE5P`jZh1vHNgk7LfMT({jLCjRZa4ubW;UA#%<@Zj?efrPdm{W3J5UEFgm`YkVqz;AMFetZuM5uQpvORb1GDX`WZGwTrF z46+&sAri5QXCfGYpdgonWR5`>ZEa;?jrKvfNvXF<&l)1uU-3q#4X16R2~?P0yg3H` zfw82QWZo^cac+%(g^_6`+2>~Fvy{pOCGnj86+=-!N`GPWAjus1ejhn6f4|mDkU6EE z&u~;xfdRMkj=h;4d~~+4(>L8weT3cz9e@E11EH!tX<IC!@kS+dsIQA`HQ2vdoS zzSD0U?mb1M0@qXu{yhZk2Y6}2B-AvvYg|tRr6z*_*2l*VLiR6G;M{O^Znq~LI%=I_ zCEU{htx&Bo+69G`p|A@R>KlY1*;;!{aWq?Pc0Cu!mT-0S`!>3<@s%Ri;utYNQ+CXDj+LC5<*$4*$-mogGg^S~3JRv{ry zPJzKJg!XKb>P}yJVc^1V@T&MV{z;@DLhvV{dG?RogCcPkROivliSr58>5Zw&&A2?n z9`JOLU;eQGaOr6GB(u{t3!+$NaLge$x#M&*sg!J;m~rRc)Ij5|?KX_4WiM-eE%t8e zqUM7eZ~ZonavR;K4g2t$4Fj=UVyEHM7LPb%8#0?Ks{~?!qhx9)2^>rg8{0npLtFKR zJB)19TFiD^T7IUXA8wt!@n5gj&@OK~EO}MR6^qd?^-?%-0~b2K9RWh+_mSEQQWsLCFOt#JlAQMgNxvv-m z;sF*r;WZ*Wi@I|6pMN+|_rLYKlWwvpKZY9rA;fo8l8hFQGI?4#kt1-r4UL;nPF@{~ z2T~a@2>yD|GuU55boxoIIe_BFo2Vq&rs&2itv|B>OC*bIeOqMBRw~y5KRMwiVHc)` zIBdliiY?Ai7*+k#NZf3MW5!hya~RZ6r7k)b?HF0e(n`ZX=iCpT7St`FDwL@SGgKlq zNnnU*3IcnYDzJg{7V$cb`xeb4(s(({&%f69XMTw-JQErS%?X_}?&y&tvHw@>1v{#R z4J@(=el^kRI+jGa;4)l#v%-jM^$~0ulxh6-{w*4Lsa>Tuc z>ElR3uM~GUChI)c{TW${73A3$vs<&iH;e?4HjW2MvSz9tp9@69+`_@x{Qte^eFo5IlAi&zw$=t6u8K%8JtjRI88PFNM7R>DaCO3rgngmk zI-RMOyt@kr-gVra=tl^@J#tI7M$dird(?aU!`&1xcm~2;dHN(RCxh4H((f|orQ!BS zu;(3Vn+^doXaqlhnjBJj-)w?5{;EEZTMx+?G>Rp4U^g<_yw_blAkdbj=5YrNhZB9@ zNmW=-!yFx5?5aF^+6*1XI|s3lIn_eyh`uv%?liNzSC#z&z^R(mqEYL@TdWzgkf>g1 zedzs*={eJavn{8vF%4nf@et<@wkOPR>NiVuYtESbFXQ;sDz_;|ITVeoW|me5>jN5P z5--{13JT{3ktkAf9M;Jty)yectg#{+9sK{C;2CvPU81tB3{8S5>hK{EXdVe?fR?sd8m`V zPM*$)g$HKp0~9Xf6#z!YJ&g!%VkCMxkt>ofE!62?#-&%|95^)JJ9 zk;GlJdoH0HwtDF(_aTv}mt$?EyRyE6@pm5DG~Gj-2%3HcZT13e)$)z99bdK_WCx|Q zQNza(R)Z>ZKTn8oIdcw%c^pFaMpFZ4HOds!BODgSBWJJYW3I_WJvoEm4xsfs%#LZ6 zdPCk{5XJ>2f7Hj-i*9lTW6BKCIuy)3L!b3(uPoSgW1WA+OEYYBRgSsJq7wjHh%c8ymMs3FU%~cprqL*084p*^T3{J%Gwq`jB30n(&y6- zII8-_r-s5&CVtsoNZ9%On?7yn;oZG03-$wx^uRk9>b*ufh15|HHk|%=MA^ioyb9CYU$7y$4R|M5HvpiCTxKSU`LUg$+ zB3IBl&{qO}agqF~BFM6&11wMeR-#Rkuh_(^j+P4{;X_w|siva$5P`dykyhfAUD%e8 z+{G0|7(Q`_U91sMKFO^rHoCWfXi0$^ev)-187G}klYv@+Rf%uZ&T4-Uhh=)pcU6O1 znXc^c5)!$X+39|4`yNHuCj0wkm+K1VN0G3_EL?-ZH$p5Y*v6ec4MV zS~1~}ZUhl&i^4`Fa|zyH4I%rXp;D6{&@*^TPEX2;4aI$}H@*ROEyFfe^RZI%;T>X> z>WVSUmx@2gGBxkV&nfyPK=JI$HxRKUv(-*xA_C;lDxT|PgX*&YYdkrd5-*3E1OSXBs>35DLsHHp%zm+n0N(Yu{lMo>_t&d1Xy zfCxl=(CNNx>ze+7w)60mp>(M``Qn$aUrVb$cJAb6=Do7VgW`Qn2;v5{9tB)jP$_mB zn{Hb_sMs4yxK|!`PI7+zO68}{Iv)dpu!+ZZl)xuoVU(oFsm<3gT{j2c*ORl|Lt+?dR^M?0 znW6rNA)cR*ci;z?BaG(f(XynY_y+kTjj~T$9{N{>ITQ4-DmZ6{cOkoea9*LpYL{Apo0hSpLqJu z9`tjP&ei;%pn9QY>-$9=<73M#X;qGb+%Bt0x>=u`eDtthI+LWB9CdAO=ulZo9&Ohs2X8GW>b7#&U|py28KTvPBl#Nqv^{AgkVXrOyS z@%3)}$I&mJOYWoG$BBb)Kb~0ptDmBxHNH^i6B8FA7NR2HfTnjP?eDnoY4NS_aYg4P zGGPw11sAf^^fTkY#j@T#6Ll*^GVaPo-1;aS6_a}{r{tWZilzse2m zc?LS=B|EWxCD|!O%|%t3C@Rd7=rKJRsteAWRoDu|*Kx-QwYZQeYpGrZ_1J%mFM;*S*u=0 z%1OC9>kmCGqBBu#-1jVPRVW*BTv%3uPI8fO?JOZD#P_W^V+K7&KVB>hzZ@PdY*%Ezo;}|5Mk`Mo2m*_K%no*jDJGp(s9j;&U`Z>z zO#SEe)k!p$VE-j2xDoX$!;Up5%8x$c`GH$l+gTA*YQaE0jwCOA<*__2NkV){z_u2=4NQ zSk$(oj$%ygio?3V8T3IyGMYvPs`t{im2IoHs7or+>>MYvG%Q?PwOLqe%73uGh6Wn; zo>e7qI$9?%cVVkvQLOLKcU5n*`~qn8pzkdu=Z4#2VnhUy>S*;kT=NqA!dQtnE?wVg zOKobxJ|QCjk`!(2*~5NQx{{=Lr=)ndyn{V|&PxUa=xQXVU?#M24F8H%C*uvs(#Va0 zSkp}0EFYq0#9xp&$O?gIInc#^^_6Ol88W%)S5A@HeE0(SR&!Yl>u=*5JEoUViDR@2 zJBjTsp=Y44W`Nb2+*CcZCkwP(QChX1s)b09DEIZCKt1$q2~;&DJ9!{bQ1Y6&T_9u1 zZM8^im8Wf#FUO6tZqc7#`z0cN_JA>#U_b7he%?cCnlV2&47y5Fc)Z7bp5xGe1zNq9 zl1VaV-tsm3fY=oIX^SPl!P;9$o?**0brq#ShM~3CXhh^SK0oOKB9O>;q3G@ z&4&h$mLSgohc^5IC|H>IGfZvVQFUT>T$|U7{znY`56<5d)07oiv*2R0+-BGPPkWJ! zIOzKF+<5o2YLWP|SGCx8w@<>u6K1o`++xJ+6kaJrt<&0Haq zyUccgxI$sR07Vo9-pF);heBva;?&NcAzC*gSSG9B3c?A;IH9J zl$j%F4*8;F0;H2Cjo*kWz4{kSh?nX}23&&KL+U(#nOAuR`wn@uwUNkWEgb*ZShKPy z`aXTJT4f*Um4`iv2KOfzf-~`#pOfH8>is*xnLBDTyx2Xuc8Y2Od6z((P2AZK@b_96 z#0V6jdw>sEDJ#uNGV|EshD1g&bYZCzCZTZ)286HLHc8Eyy_HPi;d#%;Wx}d6tUUxq z_VB$+898z_{9-A<*v6VI7?(dC04o!8$>DQ$OdbrA_@<6auiBNp{Dw$Hs@@gcybIQT zAU7Pc5YEX&&9IZ~iDo&V`&8K$-4o$)g?wF8xdv1I8-n}1bc7tviIBqt z#iIl1Hn;W?>2&#bU#VZ1wxq(7z=Q15#0yoz)#|r`KSPKI-{aN%l61^?B4RMDt?Vk` z)G#K6vUN?C!t{Q<@O4$0(qI>$U@@TI2FVF;AhSSb5}LtXx&=k&8%MWM3wv;Xq0p~W z#ZX;QFv5G9-i6=+d;R7Dwi)ciIZ1_V!aw;K^etau+g0fOA2HXpV#LQZGzf?h#@}(o z|3w!sZ|&mp$;tmDiO=zef5C|Alz+@@4u5#yZ7yNpP=&`432%a{K#{;nsS!jwk-$Qs zZRty}+N`Y~)c8|$&ra{bOQWM2K7qa}4Y{ndK%dKp&{ zFCvX{PAy_C{xzS_-`0>JlPP7&5!5 zBQ$NQz^z#2y-VeIxnfY|RzU`w+1t6vwQ|wM)LlpuaUzYehGII;>2DYyR|~wC@l97s zgX=f*1qtfDyco%BHmN+o<2qoi`D67R+RM$$NN5-moE4kx3MCFfuip*45nComOZKQf z3!(8tkSdhY5+A%@Y=eVEZkXU3S6B2V-R$ZuRIXWhsrJg3g)p4vXY@RV60bKuG zT6T!enE<;(A{*HPQhae*(@_!maV~AWD4EOwq10tkCXq+HPoe_Pu?d4Kg=2ypcs?&f zLa>mEmPF4ucJ%i~fEsNIa{QmQU27%Abh|w(`q)s~He5$5WYQ_wNJX6Qop<=7;I1jd zNZak`}0lVm+^O!i;|Lwo}ofXuJ)*UtH4xaPm*R7?YS*<&D__=@Kki>{f_Z-XqM;Tj195+~@d;rx zh5pj8oMuupWa#E(%85**I~1Zat-Sa^_R11-CiKdd`8m(DGuzOm9lX$Dd!DX!_Al}d zS!-|}dWG80S;`jSKDH%Uv;-OJNeBI0Bp$z->{_>1KU%h&Af7nns(L=xRN1 zLvOP=*UWIr)_5G2+fCsUV7mV|D>-~_VnvZ3_>=9 z_bL6`eK%W*9eJ34&Puz^@^ZIyoF@%DTun#OOEdUEn8>N9q(}?5*?`o?!_<(i%yc`k zf!xXD6SQscHgPgiHt>x6{n{+}%azrfV4VHi#umyi0;11c816`E??2`$;Rc`)qA2H( z5L|{o=ut7Te=^~@cR0_#cah0?w0Me$&>}ga8xxy=?DDl#}S~Y z4o2n`%IyGjQEP%8qS|v(kFK&RCJbF1gsRVJ>ceSjU`LuYJu%C>SRV#l`)ShD&KKzv ztD<9l0lcW0UQ8xjv|1NXRrCZhZh3JFX_BNT@V|u9$o~8M=cjOX|5iBS|9PAGPvQLc z6sA~BTM(~!c&V=5<}ZIx}O7A;|&bd7vR_y)t+ z?Vm7kb^gJ88g;!fRfMTSvKaPozQz4WcYD8l#0WxQ${P%0A$pwhjXzyA0ZzErH{1@M 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 OJOEd-=rxTO#Qy`$*1Hh^ literal 0 HcmV?d00001 diff --git a/spring-cloud-data-flow/data-flow-server/.mvn/wrapper/maven-wrapper.properties b/spring-cloud-data-flow/data-flow-server/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000000..c954cec91c --- /dev/null +++ b/spring-cloud-data-flow/data-flow-server/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1 @@ +distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.3.9/apache-maven-3.3.9-bin.zip diff --git a/spring-cloud-data-flow/data-flow-server/mvnw b/spring-cloud-data-flow/data-flow-server/mvnw new file mode 100644 index 0000000000..a1ba1bf554 --- /dev/null +++ b/spring-cloud-data-flow/data-flow-server/mvnw @@ -0,0 +1,233 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Maven2 Start Up Batch script +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# M2_HOME - location of maven2's installed home dir +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "`uname`" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # + # Look for the Apple JDKs first to preserve the existing behaviour, and then look + # for the new JDKs provided by Oracle. + # + if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK ] ; then + # + # Apple JDKs + # + export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home + fi + + if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Java/JavaVirtualMachines/CurrentJDK ] ; then + # + # Apple JDKs + # + export JAVA_HOME=/System/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home + fi + + if [ -z "$JAVA_HOME" ] && [ -L "/Library/Java/JavaVirtualMachines/CurrentJDK" ] ; then + # + # Oracle JDKs + # + export JAVA_HOME=/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home + fi + + if [ -z "$JAVA_HOME" ] && [ -x "/usr/libexec/java_home" ]; then + # + # Apple JDKs + # + export JAVA_HOME=`/usr/libexec/java_home` + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=`java-config --jre-home` + fi +fi + +if [ -z "$M2_HOME" ] ; then + ## resolve links - $0 may be a link to maven's home + PRG="$0" + + # need this for relative symlinks + while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Migwn, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" + # TODO classpath? +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`which java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` +fi + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + local basedir=$(pwd) + local wdir=$(pwd) + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + wdir=$(cd "$wdir/.."; pwd) + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-$(find_maven_basedir)} +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" +export MAVEN_CMD_LINE_ARGS + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} "$@" diff --git a/spring-cloud-data-flow/data-flow-server/mvnw.cmd b/spring-cloud-data-flow/data-flow-server/mvnw.cmd new file mode 100644 index 0000000000..2b934e89dd --- /dev/null +++ b/spring-cloud-data-flow/data-flow-server/mvnw.cmd @@ -0,0 +1,145 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven2 Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +set MAVEN_CMD_LINE_ARGS=%* + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" + +set WRAPPER_JAR="".\.mvn\wrapper\maven-wrapper.jar"" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CMD_LINE_ARGS% +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%" == "on" pause + +if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% + +exit /B %ERROR_CODE% \ No newline at end of file diff --git a/spring-cloud-data-flow/data-flow-server/pom.xml b/spring-cloud-data-flow/data-flow-server/pom.xml new file mode 100644 index 0000000000..76225cca3f --- /dev/null +++ b/spring-cloud-data-flow/data-flow-server/pom.xml @@ -0,0 +1,87 @@ + + + 4.0.0 + + org.baeldung.spring.cloud + data-flow-server + 0.0.1-SNAPSHOT + jar + + data-flow-server + Demo project for Spring Boot + + + org.springframework.boot + spring-boot-starter-parent + 1.4.0.RELEASE + + + + + UTF-8 + UTF-8 + 1.8 + + + + + org.springframework.cloud + spring-cloud-starter-dataflow-server-local + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.cloud + spring-cloud-dataflow-dependencies + 1.0.0.BUILD-SNAPSHOT + pom + import + + + org.springframework.cloud + spring-cloud-dependencies + Brixton.SR5 + pom + import + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + + spring-snapshots + Spring Snapshots + https://repo.spring.io/snapshot + + true + + + + spring-milestones + Spring Milestones + https://repo.spring.io/milestone + + false + + + + + diff --git a/spring-cloud-data-flow/data-flow-server/src/main/java/org/baeldung/spring/cloud/DataFlowServerApplication.java b/spring-cloud-data-flow/data-flow-server/src/main/java/org/baeldung/spring/cloud/DataFlowServerApplication.java new file mode 100644 index 0000000000..64026a9705 --- /dev/null +++ b/spring-cloud-data-flow/data-flow-server/src/main/java/org/baeldung/spring/cloud/DataFlowServerApplication.java @@ -0,0 +1,14 @@ +package org.baeldung.spring.cloud; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.dataflow.server.EnableDataFlowServer; + +@EnableDataFlowServer +@SpringBootApplication +public class DataFlowServerApplication { + + public static void main(String[] args) { + SpringApplication.run(DataFlowServerApplication.class, args); + } +} diff --git a/spring-cloud-data-flow/data-flow-server/src/main/resources/application.properties b/spring-cloud-data-flow/data-flow-server/src/main/resources/application.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/spring-cloud-data-flow/data-flow-server/src/test/java/org/baeldung/spring/cloud/DataFlowServerApplicationTests.java b/spring-cloud-data-flow/data-flow-server/src/test/java/org/baeldung/spring/cloud/DataFlowServerApplicationTests.java new file mode 100644 index 0000000000..82e0a7e684 --- /dev/null +++ b/spring-cloud-data-flow/data-flow-server/src/test/java/org/baeldung/spring/cloud/DataFlowServerApplicationTests.java @@ -0,0 +1,16 @@ +package org.baeldung.spring.cloud; + +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 DataFlowServerApplicationTests { + + @Test + public void contextLoads() { + } + +} diff --git a/spring-cloud-data-flow/data-flow-shell/.mvn/wrapper/maven-wrapper.jar b/spring-cloud-data-flow/data-flow-shell/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..5fd4d5023f1463b5ba3970e33c460c1eb26d748d GIT binary patch literal 49502 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%0A$pwhjXzyA0ZzErH{1@M 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 OJOEd-=rxTO#Qy`$*1Hh^ literal 0 HcmV?d00001 diff --git a/spring-cloud-data-flow/data-flow-shell/.mvn/wrapper/maven-wrapper.properties b/spring-cloud-data-flow/data-flow-shell/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000000..c954cec91c --- /dev/null +++ b/spring-cloud-data-flow/data-flow-shell/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1 @@ +distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.3.9/apache-maven-3.3.9-bin.zip diff --git a/spring-cloud-data-flow/data-flow-shell/mvnw b/spring-cloud-data-flow/data-flow-shell/mvnw new file mode 100644 index 0000000000..a1ba1bf554 --- /dev/null +++ b/spring-cloud-data-flow/data-flow-shell/mvnw @@ -0,0 +1,233 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Maven2 Start Up Batch script +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# M2_HOME - location of maven2's installed home dir +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "`uname`" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # + # Look for the Apple JDKs first to preserve the existing behaviour, and then look + # for the new JDKs provided by Oracle. + # + if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK ] ; then + # + # Apple JDKs + # + export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home + fi + + if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Java/JavaVirtualMachines/CurrentJDK ] ; then + # + # Apple JDKs + # + export JAVA_HOME=/System/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home + fi + + if [ -z "$JAVA_HOME" ] && [ -L "/Library/Java/JavaVirtualMachines/CurrentJDK" ] ; then + # + # Oracle JDKs + # + export JAVA_HOME=/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home + fi + + if [ -z "$JAVA_HOME" ] && [ -x "/usr/libexec/java_home" ]; then + # + # Apple JDKs + # + export JAVA_HOME=`/usr/libexec/java_home` + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=`java-config --jre-home` + fi +fi + +if [ -z "$M2_HOME" ] ; then + ## resolve links - $0 may be a link to maven's home + PRG="$0" + + # need this for relative symlinks + while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Migwn, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" + # TODO classpath? +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`which java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` +fi + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + local basedir=$(pwd) + local wdir=$(pwd) + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + wdir=$(cd "$wdir/.."; pwd) + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-$(find_maven_basedir)} +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" +export MAVEN_CMD_LINE_ARGS + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} "$@" diff --git a/spring-cloud-data-flow/data-flow-shell/mvnw.cmd b/spring-cloud-data-flow/data-flow-shell/mvnw.cmd new file mode 100644 index 0000000000..2b934e89dd --- /dev/null +++ b/spring-cloud-data-flow/data-flow-shell/mvnw.cmd @@ -0,0 +1,145 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven2 Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +set MAVEN_CMD_LINE_ARGS=%* + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" + +set WRAPPER_JAR="".\.mvn\wrapper\maven-wrapper.jar"" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CMD_LINE_ARGS% +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%" == "on" pause + +if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% + +exit /B %ERROR_CODE% \ No newline at end of file diff --git a/spring-cloud-data-flow/data-flow-shell/pom.xml b/spring-cloud-data-flow/data-flow-shell/pom.xml new file mode 100644 index 0000000000..34b9d3e2be --- /dev/null +++ b/spring-cloud-data-flow/data-flow-shell/pom.xml @@ -0,0 +1,87 @@ + + + 4.0.0 + + org.baeldung.spring.cloud + data-flow-shell + 0.0.1-SNAPSHOT + jar + + data-flow-shell + Demo project for Spring Boot + + + org.springframework.boot + spring-boot-starter-parent + 1.4.0.RELEASE + + + + + UTF-8 + UTF-8 + 1.8 + + + + + org.springframework.cloud + spring-cloud-dataflow-shell + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.cloud + spring-cloud-dataflow-dependencies + 1.0.0.BUILD-SNAPSHOT + pom + import + + + org.springframework.cloud + spring-cloud-dependencies + Brixton.SR5 + pom + import + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + + spring-snapshots + Spring Snapshots + https://repo.spring.io/snapshot + + true + + + + spring-milestones + Spring Milestones + https://repo.spring.io/milestone + + false + + + + + diff --git a/spring-cloud-data-flow/data-flow-shell/src/main/java/org/baeldung/spring/cloud/DataFlowShellApplication.java b/spring-cloud-data-flow/data-flow-shell/src/main/java/org/baeldung/spring/cloud/DataFlowShellApplication.java new file mode 100644 index 0000000000..6c83021a10 --- /dev/null +++ b/spring-cloud-data-flow/data-flow-shell/src/main/java/org/baeldung/spring/cloud/DataFlowShellApplication.java @@ -0,0 +1,14 @@ +package org.baeldung.spring.cloud; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.dataflow.shell.EnableDataFlowShell; + +@EnableDataFlowShell +@SpringBootApplication +public class DataFlowShellApplication { + + public static void main(String[] args) { + SpringApplication.run(DataFlowShellApplication.class, args); + } +} diff --git a/spring-cloud-data-flow/data-flow-shell/src/main/resources/application.properties b/spring-cloud-data-flow/data-flow-shell/src/main/resources/application.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/spring-cloud-data-flow/data-flow-shell/src/test/java/org/baeldung/spring/cloud/DataFlowShellApplicationTests.java b/spring-cloud-data-flow/data-flow-shell/src/test/java/org/baeldung/spring/cloud/DataFlowShellApplicationTests.java new file mode 100644 index 0000000000..d6b18394d5 --- /dev/null +++ b/spring-cloud-data-flow/data-flow-shell/src/test/java/org/baeldung/spring/cloud/DataFlowShellApplicationTests.java @@ -0,0 +1,16 @@ +package org.baeldung.spring.cloud; + +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 DataFlowShellApplicationTests { + + @Test + public void contextLoads() { + } + +} diff --git a/spring-cloud-data-flow/log-sink/.mvn/wrapper/maven-wrapper.jar b/spring-cloud-data-flow/log-sink/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..5fd4d5023f1463b5ba3970e33c460c1eb26d748d GIT binary patch literal 49502 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%0A$pwhjXzyA0ZzErH{1@M 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 OJOEd-=rxTO#Qy`$*1Hh^ literal 0 HcmV?d00001 diff --git a/spring-cloud-data-flow/log-sink/.mvn/wrapper/maven-wrapper.properties b/spring-cloud-data-flow/log-sink/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000000..c954cec91c --- /dev/null +++ b/spring-cloud-data-flow/log-sink/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1 @@ +distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.3.9/apache-maven-3.3.9-bin.zip diff --git a/spring-cloud-data-flow/log-sink/mvnw b/spring-cloud-data-flow/log-sink/mvnw new file mode 100644 index 0000000000..a1ba1bf554 --- /dev/null +++ b/spring-cloud-data-flow/log-sink/mvnw @@ -0,0 +1,233 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Maven2 Start Up Batch script +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# M2_HOME - location of maven2's installed home dir +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "`uname`" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # + # Look for the Apple JDKs first to preserve the existing behaviour, and then look + # for the new JDKs provided by Oracle. + # + if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK ] ; then + # + # Apple JDKs + # + export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home + fi + + if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Java/JavaVirtualMachines/CurrentJDK ] ; then + # + # Apple JDKs + # + export JAVA_HOME=/System/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home + fi + + if [ -z "$JAVA_HOME" ] && [ -L "/Library/Java/JavaVirtualMachines/CurrentJDK" ] ; then + # + # Oracle JDKs + # + export JAVA_HOME=/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home + fi + + if [ -z "$JAVA_HOME" ] && [ -x "/usr/libexec/java_home" ]; then + # + # Apple JDKs + # + export JAVA_HOME=`/usr/libexec/java_home` + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=`java-config --jre-home` + fi +fi + +if [ -z "$M2_HOME" ] ; then + ## resolve links - $0 may be a link to maven's home + PRG="$0" + + # need this for relative symlinks + while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Migwn, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" + # TODO classpath? +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`which java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` +fi + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + local basedir=$(pwd) + local wdir=$(pwd) + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + wdir=$(cd "$wdir/.."; pwd) + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-$(find_maven_basedir)} +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" +export MAVEN_CMD_LINE_ARGS + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} "$@" diff --git a/spring-cloud-data-flow/log-sink/mvnw.cmd b/spring-cloud-data-flow/log-sink/mvnw.cmd new file mode 100644 index 0000000000..2b934e89dd --- /dev/null +++ b/spring-cloud-data-flow/log-sink/mvnw.cmd @@ -0,0 +1,145 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven2 Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +set MAVEN_CMD_LINE_ARGS=%* + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" + +set WRAPPER_JAR="".\.mvn\wrapper\maven-wrapper.jar"" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CMD_LINE_ARGS% +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%" == "on" pause + +if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% + +exit /B %ERROR_CODE% \ No newline at end of file diff --git a/spring-cloud-data-flow/log-sink/pom.xml b/spring-cloud-data-flow/log-sink/pom.xml new file mode 100644 index 0000000000..a0c899baaa --- /dev/null +++ b/spring-cloud-data-flow/log-sink/pom.xml @@ -0,0 +1,62 @@ + + + 4.0.0 + + org.baeldung.spring.cloud + log-sink + 0.0.1-SNAPSHOT + jar + + log-sink + Demo project for Spring Boot + + + org.springframework.boot + spring-boot-starter-parent + 1.4.0.RELEASE + + + + + UTF-8 + UTF-8 + 1.8 + + + + + org.springframework.cloud + spring-cloud-starter-stream-rabbit + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.cloud + spring-cloud-dependencies + Brixton.SR5 + pom + import + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + diff --git a/spring-cloud-data-flow/log-sink/src/main/java/org/baeldung/spring/cloud/LogSinkApplication.java b/spring-cloud-data-flow/log-sink/src/main/java/org/baeldung/spring/cloud/LogSinkApplication.java new file mode 100644 index 0000000000..a078497c47 --- /dev/null +++ b/spring-cloud-data-flow/log-sink/src/main/java/org/baeldung/spring/cloud/LogSinkApplication.java @@ -0,0 +1,26 @@ +package org.baeldung.spring.cloud; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.stream.annotation.EnableBinding; +import org.springframework.cloud.stream.annotation.StreamListener; +import org.springframework.cloud.stream.messaging.Sink; + +@EnableBinding(Sink.class) +@SpringBootApplication +public class LogSinkApplication { + + private static Logger logger = LoggerFactory.getLogger(LogSinkApplication.class); + + @StreamListener(Sink.INPUT) + public void loggerSink(String date) { + + logger.info("Received: " + date); + } + + public static void main(String[] args) { + SpringApplication.run(LogSinkApplication.class, args); + } +} diff --git a/spring-cloud-data-flow/log-sink/src/main/resources/application.properties b/spring-cloud-data-flow/log-sink/src/main/resources/application.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/spring-cloud-data-flow/log-sink/src/test/java/org/baeldung/spring/cloud/LogSinkApplicationTests.java b/spring-cloud-data-flow/log-sink/src/test/java/org/baeldung/spring/cloud/LogSinkApplicationTests.java new file mode 100644 index 0000000000..3e9347f394 --- /dev/null +++ b/spring-cloud-data-flow/log-sink/src/test/java/org/baeldung/spring/cloud/LogSinkApplicationTests.java @@ -0,0 +1,16 @@ +package org.baeldung.spring.cloud; + +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 LogSinkApplicationTests { + + @Test + public void contextLoads() { + } + +} diff --git a/spring-cloud-data-flow/pom.xml b/spring-cloud-data-flow/pom.xml new file mode 100644 index 0000000000..3a0d7ada90 --- /dev/null +++ b/spring-cloud-data-flow/pom.xml @@ -0,0 +1,14 @@ + + 4.0.0 + org.baeldung.spring.cloud + spring-cloud-data-flow + 0.0.1-SNAPSHOT + pom + + data-flow-server + data-flow-shell + time-source + time-processor + log-sink + + \ No newline at end of file diff --git a/spring-cloud-data-flow/time-processor/.mvn/wrapper/maven-wrapper.jar b/spring-cloud-data-flow/time-processor/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..5fd4d5023f1463b5ba3970e33c460c1eb26d748d GIT binary patch literal 49502 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%0A$pwhjXzyA0ZzErH{1@M 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 OJOEd-=rxTO#Qy`$*1Hh^ literal 0 HcmV?d00001 diff --git a/spring-cloud-data-flow/time-processor/.mvn/wrapper/maven-wrapper.properties b/spring-cloud-data-flow/time-processor/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000000..c954cec91c --- /dev/null +++ b/spring-cloud-data-flow/time-processor/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1 @@ +distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.3.9/apache-maven-3.3.9-bin.zip diff --git a/spring-cloud-data-flow/time-processor/mvnw b/spring-cloud-data-flow/time-processor/mvnw new file mode 100644 index 0000000000..a1ba1bf554 --- /dev/null +++ b/spring-cloud-data-flow/time-processor/mvnw @@ -0,0 +1,233 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Maven2 Start Up Batch script +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# M2_HOME - location of maven2's installed home dir +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "`uname`" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # + # Look for the Apple JDKs first to preserve the existing behaviour, and then look + # for the new JDKs provided by Oracle. + # + if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK ] ; then + # + # Apple JDKs + # + export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home + fi + + if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Java/JavaVirtualMachines/CurrentJDK ] ; then + # + # Apple JDKs + # + export JAVA_HOME=/System/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home + fi + + if [ -z "$JAVA_HOME" ] && [ -L "/Library/Java/JavaVirtualMachines/CurrentJDK" ] ; then + # + # Oracle JDKs + # + export JAVA_HOME=/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home + fi + + if [ -z "$JAVA_HOME" ] && [ -x "/usr/libexec/java_home" ]; then + # + # Apple JDKs + # + export JAVA_HOME=`/usr/libexec/java_home` + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=`java-config --jre-home` + fi +fi + +if [ -z "$M2_HOME" ] ; then + ## resolve links - $0 may be a link to maven's home + PRG="$0" + + # need this for relative symlinks + while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Migwn, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" + # TODO classpath? +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`which java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` +fi + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + local basedir=$(pwd) + local wdir=$(pwd) + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + wdir=$(cd "$wdir/.."; pwd) + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-$(find_maven_basedir)} +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" +export MAVEN_CMD_LINE_ARGS + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} "$@" diff --git a/spring-cloud-data-flow/time-processor/mvnw.cmd b/spring-cloud-data-flow/time-processor/mvnw.cmd new file mode 100644 index 0000000000..2b934e89dd --- /dev/null +++ b/spring-cloud-data-flow/time-processor/mvnw.cmd @@ -0,0 +1,145 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven2 Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +set MAVEN_CMD_LINE_ARGS=%* + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" + +set WRAPPER_JAR="".\.mvn\wrapper\maven-wrapper.jar"" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CMD_LINE_ARGS% +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%" == "on" pause + +if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% + +exit /B %ERROR_CODE% \ No newline at end of file diff --git a/spring-cloud-data-flow/time-processor/pom.xml b/spring-cloud-data-flow/time-processor/pom.xml new file mode 100644 index 0000000000..895e859b1e --- /dev/null +++ b/spring-cloud-data-flow/time-processor/pom.xml @@ -0,0 +1,62 @@ + + + 4.0.0 + + org.baeldung.spring.cloud + time-processor + 0.0.1-SNAPSHOT + jar + + time-processor + Demo project for Spring Boot + + + org.springframework.boot + spring-boot-starter-parent + 1.4.0.RELEASE + + + + + UTF-8 + UTF-8 + 1.8 + + + + + org.springframework.cloud + spring-cloud-starter-stream-rabbit + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.cloud + spring-cloud-dependencies + Brixton.SR5 + pom + import + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + diff --git a/spring-cloud-data-flow/time-processor/src/main/java/org/baeldung/spring/cloud/TimeProcessorApplication.java b/spring-cloud-data-flow/time-processor/src/main/java/org/baeldung/spring/cloud/TimeProcessorApplication.java new file mode 100644 index 0000000000..d074d5b167 --- /dev/null +++ b/spring-cloud-data-flow/time-processor/src/main/java/org/baeldung/spring/cloud/TimeProcessorApplication.java @@ -0,0 +1,27 @@ +package org.baeldung.spring.cloud; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.stream.annotation.EnableBinding; +import org.springframework.cloud.stream.messaging.Processor; +import org.springframework.integration.annotation.Transformer; + +@EnableBinding(Processor.class) +@SpringBootApplication +public class TimeProcessorApplication { + + @Transformer(inputChannel = Processor.INPUT, outputChannel = Processor.OUTPUT) + public Object transform(Long timestamp) { + + DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss"); + String date = dateFormat.format(timestamp); + return date; + } + + public static void main(String[] args) { + SpringApplication.run(TimeProcessorApplication.class, args); + } +} diff --git a/spring-cloud-data-flow/time-processor/src/main/resources/application.properties b/spring-cloud-data-flow/time-processor/src/main/resources/application.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/spring-cloud-data-flow/time-processor/src/test/java/org/baeldung/spring/cloud/TimeProcessorApplicationTests.java b/spring-cloud-data-flow/time-processor/src/test/java/org/baeldung/spring/cloud/TimeProcessorApplicationTests.java new file mode 100644 index 0000000000..8990fd8403 --- /dev/null +++ b/spring-cloud-data-flow/time-processor/src/test/java/org/baeldung/spring/cloud/TimeProcessorApplicationTests.java @@ -0,0 +1,16 @@ +package org.baeldung.spring.cloud; + +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 TimeProcessorApplicationTests { + + @Test + public void contextLoads() { + } + +} diff --git a/spring-cloud-data-flow/time-source/.mvn/wrapper/maven-wrapper.jar b/spring-cloud-data-flow/time-source/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..5fd4d5023f1463b5ba3970e33c460c1eb26d748d GIT binary patch literal 49502 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%0A$pwhjXzyA0ZzErH{1@M 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 OJOEd-=rxTO#Qy`$*1Hh^ literal 0 HcmV?d00001 diff --git a/spring-cloud-data-flow/time-source/.mvn/wrapper/maven-wrapper.properties b/spring-cloud-data-flow/time-source/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000000..c954cec91c --- /dev/null +++ b/spring-cloud-data-flow/time-source/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1 @@ +distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.3.9/apache-maven-3.3.9-bin.zip diff --git a/spring-cloud-data-flow/time-source/mvnw b/spring-cloud-data-flow/time-source/mvnw new file mode 100644 index 0000000000..a1ba1bf554 --- /dev/null +++ b/spring-cloud-data-flow/time-source/mvnw @@ -0,0 +1,233 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Maven2 Start Up Batch script +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# M2_HOME - location of maven2's installed home dir +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "`uname`" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # + # Look for the Apple JDKs first to preserve the existing behaviour, and then look + # for the new JDKs provided by Oracle. + # + if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK ] ; then + # + # Apple JDKs + # + export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home + fi + + if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Java/JavaVirtualMachines/CurrentJDK ] ; then + # + # Apple JDKs + # + export JAVA_HOME=/System/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home + fi + + if [ -z "$JAVA_HOME" ] && [ -L "/Library/Java/JavaVirtualMachines/CurrentJDK" ] ; then + # + # Oracle JDKs + # + export JAVA_HOME=/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home + fi + + if [ -z "$JAVA_HOME" ] && [ -x "/usr/libexec/java_home" ]; then + # + # Apple JDKs + # + export JAVA_HOME=`/usr/libexec/java_home` + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=`java-config --jre-home` + fi +fi + +if [ -z "$M2_HOME" ] ; then + ## resolve links - $0 may be a link to maven's home + PRG="$0" + + # need this for relative symlinks + while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Migwn, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" + # TODO classpath? +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`which java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` +fi + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + local basedir=$(pwd) + local wdir=$(pwd) + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + wdir=$(cd "$wdir/.."; pwd) + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-$(find_maven_basedir)} +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" +export MAVEN_CMD_LINE_ARGS + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} "$@" diff --git a/spring-cloud-data-flow/time-source/mvnw.cmd b/spring-cloud-data-flow/time-source/mvnw.cmd new file mode 100644 index 0000000000..2b934e89dd --- /dev/null +++ b/spring-cloud-data-flow/time-source/mvnw.cmd @@ -0,0 +1,145 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven2 Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +set MAVEN_CMD_LINE_ARGS=%* + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" + +set WRAPPER_JAR="".\.mvn\wrapper\maven-wrapper.jar"" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CMD_LINE_ARGS% +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%" == "on" pause + +if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% + +exit /B %ERROR_CODE% \ No newline at end of file diff --git a/spring-cloud-data-flow/time-source/pom.xml b/spring-cloud-data-flow/time-source/pom.xml new file mode 100644 index 0000000000..1e482b9553 --- /dev/null +++ b/spring-cloud-data-flow/time-source/pom.xml @@ -0,0 +1,62 @@ + + + 4.0.0 + + org.baeldung.spring.cloud + time-source + 0.0.1-SNAPSHOT + jar + + time-source + Demo project for Spring Boot + + + org.springframework.boot + spring-boot-starter-parent + 1.4.0.RELEASE + + + + + UTF-8 + UTF-8 + 1.8 + + + + + org.springframework.cloud + spring-cloud-starter-stream-rabbit + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.cloud + spring-cloud-dependencies + Brixton.SR5 + pom + import + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + diff --git a/spring-cloud-data-flow/time-source/src/main/java/org/baeldung/spring/cloud/TimeSourceApplication.java b/spring-cloud-data-flow/time-source/src/main/java/org/baeldung/spring/cloud/TimeSourceApplication.java new file mode 100644 index 0000000000..9f6de4b1c7 --- /dev/null +++ b/spring-cloud-data-flow/time-source/src/main/java/org/baeldung/spring/cloud/TimeSourceApplication.java @@ -0,0 +1,29 @@ +package org.baeldung.spring.cloud; + +import java.util.Date; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.stream.annotation.EnableBinding; +import org.springframework.cloud.stream.messaging.Source; +import org.springframework.context.annotation.Bean; +import org.springframework.integration.annotation.InboundChannelAdapter; +import org.springframework.integration.annotation.Poller; +import org.springframework.integration.core.MessageSource; +import org.springframework.integration.support.MessageBuilder; + +@EnableBinding(Source.class) +@SpringBootApplication +public class TimeSourceApplication { + + @Bean + @InboundChannelAdapter(value = Source.OUTPUT, poller = @Poller(fixedDelay = "10000", maxMessagesPerPoll = "1")) + public MessageSource timeMessageSource() { + + return () -> MessageBuilder.withPayload(new Date().getTime()).build(); + } + + public static void main(String[] args) { + SpringApplication.run(TimeSourceApplication.class, args); + } +} diff --git a/spring-cloud-data-flow/time-source/src/main/resources/application.properties b/spring-cloud-data-flow/time-source/src/main/resources/application.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/spring-cloud-data-flow/time-source/src/test/java/org/baeldung/spring/cloud/TimeSourceApplicationTests.java b/spring-cloud-data-flow/time-source/src/test/java/org/baeldung/spring/cloud/TimeSourceApplicationTests.java new file mode 100644 index 0000000000..44e2123c7b --- /dev/null +++ b/spring-cloud-data-flow/time-source/src/test/java/org/baeldung/spring/cloud/TimeSourceApplicationTests.java @@ -0,0 +1,16 @@ +package org.baeldung.spring.cloud; + +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 TimeSourceApplicationTests { + + @Test + public void contextLoads() { + } + +} From 54d3d40e727608dbd20d8971baee8b4a2deaf69a Mon Sep 17 00:00:00 2001 From: Ivan Paolillo Date: Thu, 1 Sep 2016 12:20:44 +0200 Subject: [PATCH 040/265] Add Stream processing example --- .../data-flow-server/pom.xml | 148 +++++++++--------- .../cloud/DataFlowServerApplication.java | 6 +- .../cloud/DataFlowServerApplicationTests.java | 6 +- .../data-flow-shell/pom.xml | 148 +++++++++--------- .../cloud/DataFlowShellApplication.java | 6 +- .../cloud/DataFlowShellApplicationTests.java | 6 +- spring-cloud-data-flow/log-sink/pom.xml | 98 ++++++------ .../spring/cloud/LogSinkApplication.java | 16 +- .../spring/cloud/LogSinkApplicationTests.java | 6 +- spring-cloud-data-flow/pom.xml | 12 +- spring-cloud-data-flow/time-processor/pom.xml | 98 ++++++------ .../cloud/TimeProcessorApplication.java | 18 +-- .../cloud/TimeProcessorApplicationTests.java | 6 +- spring-cloud-data-flow/time-source/pom.xml | 98 ++++++------ .../spring/cloud/TimeSourceApplication.java | 16 +- .../cloud/TimeSourceApplicationTests.java | 6 +- 16 files changed, 347 insertions(+), 347 deletions(-) diff --git a/spring-cloud-data-flow/data-flow-server/pom.xml b/spring-cloud-data-flow/data-flow-server/pom.xml index 76225cca3f..94c4106d6f 100644 --- a/spring-cloud-data-flow/data-flow-server/pom.xml +++ b/spring-cloud-data-flow/data-flow-server/pom.xml @@ -1,87 +1,87 @@ - 4.0.0 + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 - org.baeldung.spring.cloud - data-flow-server - 0.0.1-SNAPSHOT - jar + org.baeldung.spring.cloud + data-flow-server + 0.0.1-SNAPSHOT + jar - data-flow-server - Demo project for Spring Boot + data-flow-server + Demo project for Spring Boot - - org.springframework.boot - spring-boot-starter-parent - 1.4.0.RELEASE - - + + org.springframework.boot + spring-boot-starter-parent + 1.4.0.RELEASE + + - - UTF-8 - UTF-8 - 1.8 - + + UTF-8 + UTF-8 + 1.8 + - - - org.springframework.cloud - spring-cloud-starter-dataflow-server-local - + + + org.springframework.cloud + spring-cloud-starter-dataflow-server-local + - - org.springframework.boot - spring-boot-starter-test - test - - + + org.springframework.boot + spring-boot-starter-test + test + + - - - - org.springframework.cloud - spring-cloud-dataflow-dependencies - 1.0.0.BUILD-SNAPSHOT - pom - import - - - org.springframework.cloud - spring-cloud-dependencies - Brixton.SR5 - pom - import - - - + + + + org.springframework.cloud + spring-cloud-dataflow-dependencies + 1.0.0.BUILD-SNAPSHOT + pom + import + + + org.springframework.cloud + spring-cloud-dependencies + Brixton.SR5 + pom + import + + + - - - - org.springframework.boot - spring-boot-maven-plugin - - - + + + + org.springframework.boot + spring-boot-maven-plugin + + + - - - spring-snapshots - Spring Snapshots - https://repo.spring.io/snapshot - - true - - - - spring-milestones - Spring Milestones - https://repo.spring.io/milestone - - false - - - + + + spring-snapshots + Spring Snapshots + https://repo.spring.io/snapshot + + true + + + + spring-milestones + Spring Milestones + https://repo.spring.io/milestone + + false + + + diff --git a/spring-cloud-data-flow/data-flow-server/src/main/java/org/baeldung/spring/cloud/DataFlowServerApplication.java b/spring-cloud-data-flow/data-flow-server/src/main/java/org/baeldung/spring/cloud/DataFlowServerApplication.java index 64026a9705..227c10b620 100644 --- a/spring-cloud-data-flow/data-flow-server/src/main/java/org/baeldung/spring/cloud/DataFlowServerApplication.java +++ b/spring-cloud-data-flow/data-flow-server/src/main/java/org/baeldung/spring/cloud/DataFlowServerApplication.java @@ -8,7 +8,7 @@ import org.springframework.cloud.dataflow.server.EnableDataFlowServer; @SpringBootApplication public class DataFlowServerApplication { - public static void main(String[] args) { - SpringApplication.run(DataFlowServerApplication.class, args); - } + public static void main(String[] args) { + SpringApplication.run(DataFlowServerApplication.class, args); + } } diff --git a/spring-cloud-data-flow/data-flow-server/src/test/java/org/baeldung/spring/cloud/DataFlowServerApplicationTests.java b/spring-cloud-data-flow/data-flow-server/src/test/java/org/baeldung/spring/cloud/DataFlowServerApplicationTests.java index 82e0a7e684..f853e29244 100644 --- a/spring-cloud-data-flow/data-flow-server/src/test/java/org/baeldung/spring/cloud/DataFlowServerApplicationTests.java +++ b/spring-cloud-data-flow/data-flow-server/src/test/java/org/baeldung/spring/cloud/DataFlowServerApplicationTests.java @@ -9,8 +9,8 @@ import org.springframework.test.context.junit4.SpringRunner; @SpringBootTest public class DataFlowServerApplicationTests { - @Test - public void contextLoads() { - } + @Test + public void contextLoads() { + } } diff --git a/spring-cloud-data-flow/data-flow-shell/pom.xml b/spring-cloud-data-flow/data-flow-shell/pom.xml index 34b9d3e2be..a074fef88f 100644 --- a/spring-cloud-data-flow/data-flow-shell/pom.xml +++ b/spring-cloud-data-flow/data-flow-shell/pom.xml @@ -1,87 +1,87 @@ - 4.0.0 + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 - org.baeldung.spring.cloud - data-flow-shell - 0.0.1-SNAPSHOT - jar + org.baeldung.spring.cloud + data-flow-shell + 0.0.1-SNAPSHOT + jar - data-flow-shell - Demo project for Spring Boot + data-flow-shell + Demo project for Spring Boot - - org.springframework.boot - spring-boot-starter-parent - 1.4.0.RELEASE - - + + org.springframework.boot + spring-boot-starter-parent + 1.4.0.RELEASE + + - - UTF-8 - UTF-8 - 1.8 - + + UTF-8 + UTF-8 + 1.8 + - - - org.springframework.cloud - spring-cloud-dataflow-shell - + + + org.springframework.cloud + spring-cloud-dataflow-shell + - - org.springframework.boot - spring-boot-starter-test - test - - + + org.springframework.boot + spring-boot-starter-test + test + + - - - - org.springframework.cloud - spring-cloud-dataflow-dependencies - 1.0.0.BUILD-SNAPSHOT - pom - import - - - org.springframework.cloud - spring-cloud-dependencies - Brixton.SR5 - pom - import - - - + + + + org.springframework.cloud + spring-cloud-dataflow-dependencies + 1.0.0.BUILD-SNAPSHOT + pom + import + + + org.springframework.cloud + spring-cloud-dependencies + Brixton.SR5 + pom + import + + + - - - - org.springframework.boot - spring-boot-maven-plugin - - - + + + + org.springframework.boot + spring-boot-maven-plugin + + + - - - spring-snapshots - Spring Snapshots - https://repo.spring.io/snapshot - - true - - - - spring-milestones - Spring Milestones - https://repo.spring.io/milestone - - false - - - + + + spring-snapshots + Spring Snapshots + https://repo.spring.io/snapshot + + true + + + + spring-milestones + Spring Milestones + https://repo.spring.io/milestone + + false + + + diff --git a/spring-cloud-data-flow/data-flow-shell/src/main/java/org/baeldung/spring/cloud/DataFlowShellApplication.java b/spring-cloud-data-flow/data-flow-shell/src/main/java/org/baeldung/spring/cloud/DataFlowShellApplication.java index 6c83021a10..36c421f5bf 100644 --- a/spring-cloud-data-flow/data-flow-shell/src/main/java/org/baeldung/spring/cloud/DataFlowShellApplication.java +++ b/spring-cloud-data-flow/data-flow-shell/src/main/java/org/baeldung/spring/cloud/DataFlowShellApplication.java @@ -8,7 +8,7 @@ import org.springframework.cloud.dataflow.shell.EnableDataFlowShell; @SpringBootApplication public class DataFlowShellApplication { - public static void main(String[] args) { - SpringApplication.run(DataFlowShellApplication.class, args); - } + public static void main(String[] args) { + SpringApplication.run(DataFlowShellApplication.class, args); + } } diff --git a/spring-cloud-data-flow/data-flow-shell/src/test/java/org/baeldung/spring/cloud/DataFlowShellApplicationTests.java b/spring-cloud-data-flow/data-flow-shell/src/test/java/org/baeldung/spring/cloud/DataFlowShellApplicationTests.java index d6b18394d5..7e2bc1cb37 100644 --- a/spring-cloud-data-flow/data-flow-shell/src/test/java/org/baeldung/spring/cloud/DataFlowShellApplicationTests.java +++ b/spring-cloud-data-flow/data-flow-shell/src/test/java/org/baeldung/spring/cloud/DataFlowShellApplicationTests.java @@ -9,8 +9,8 @@ import org.springframework.test.context.junit4.SpringRunner; @SpringBootTest public class DataFlowShellApplicationTests { - @Test - public void contextLoads() { - } + @Test + public void contextLoads() { + } } diff --git a/spring-cloud-data-flow/log-sink/pom.xml b/spring-cloud-data-flow/log-sink/pom.xml index a0c899baaa..8415d95373 100644 --- a/spring-cloud-data-flow/log-sink/pom.xml +++ b/spring-cloud-data-flow/log-sink/pom.xml @@ -1,62 +1,62 @@ - 4.0.0 + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 - org.baeldung.spring.cloud - log-sink - 0.0.1-SNAPSHOT - jar + org.baeldung.spring.cloud + log-sink + 0.0.1-SNAPSHOT + jar - log-sink - Demo project for Spring Boot + log-sink + Demo project for Spring Boot - - org.springframework.boot - spring-boot-starter-parent - 1.4.0.RELEASE - - + + org.springframework.boot + spring-boot-starter-parent + 1.4.0.RELEASE + + - - UTF-8 - UTF-8 - 1.8 - + + UTF-8 + UTF-8 + 1.8 + - - - org.springframework.cloud - spring-cloud-starter-stream-rabbit - + + + org.springframework.cloud + spring-cloud-starter-stream-rabbit + - - org.springframework.boot - spring-boot-starter-test - test - - + + org.springframework.boot + spring-boot-starter-test + test + + - - - - org.springframework.cloud - spring-cloud-dependencies - Brixton.SR5 - pom - import - - - + + + + org.springframework.cloud + spring-cloud-dependencies + Brixton.SR5 + pom + import + + + - - - - org.springframework.boot - spring-boot-maven-plugin - - - + + + + org.springframework.boot + spring-boot-maven-plugin + + + diff --git a/spring-cloud-data-flow/log-sink/src/main/java/org/baeldung/spring/cloud/LogSinkApplication.java b/spring-cloud-data-flow/log-sink/src/main/java/org/baeldung/spring/cloud/LogSinkApplication.java index a078497c47..a2b9968539 100644 --- a/spring-cloud-data-flow/log-sink/src/main/java/org/baeldung/spring/cloud/LogSinkApplication.java +++ b/spring-cloud-data-flow/log-sink/src/main/java/org/baeldung/spring/cloud/LogSinkApplication.java @@ -12,15 +12,15 @@ import org.springframework.cloud.stream.messaging.Sink; @SpringBootApplication public class LogSinkApplication { - private static Logger logger = LoggerFactory.getLogger(LogSinkApplication.class); + private static Logger logger = LoggerFactory.getLogger(LogSinkApplication.class); - @StreamListener(Sink.INPUT) - public void loggerSink(String date) { + @StreamListener(Sink.INPUT) + public void loggerSink(String date) { - logger.info("Received: " + date); - } + logger.info("Received: " + date); + } - public static void main(String[] args) { - SpringApplication.run(LogSinkApplication.class, args); - } + public static void main(String[] args) { + SpringApplication.run(LogSinkApplication.class, args); + } } diff --git a/spring-cloud-data-flow/log-sink/src/test/java/org/baeldung/spring/cloud/LogSinkApplicationTests.java b/spring-cloud-data-flow/log-sink/src/test/java/org/baeldung/spring/cloud/LogSinkApplicationTests.java index 3e9347f394..9f88c7f632 100644 --- a/spring-cloud-data-flow/log-sink/src/test/java/org/baeldung/spring/cloud/LogSinkApplicationTests.java +++ b/spring-cloud-data-flow/log-sink/src/test/java/org/baeldung/spring/cloud/LogSinkApplicationTests.java @@ -9,8 +9,8 @@ import org.springframework.test.context.junit4.SpringRunner; @SpringBootTest public class LogSinkApplicationTests { - @Test - public void contextLoads() { - } + @Test + public void contextLoads() { + } } diff --git a/spring-cloud-data-flow/pom.xml b/spring-cloud-data-flow/pom.xml index 3a0d7ada90..9651c0b826 100644 --- a/spring-cloud-data-flow/pom.xml +++ b/spring-cloud-data-flow/pom.xml @@ -5,10 +5,10 @@ 0.0.1-SNAPSHOT pom - data-flow-server - data-flow-shell - time-source - time-processor - log-sink + data-flow-server + data-flow-shell + time-source + time-processor + log-sink - \ No newline at end of file + diff --git a/spring-cloud-data-flow/time-processor/pom.xml b/spring-cloud-data-flow/time-processor/pom.xml index 895e859b1e..bc2efe7754 100644 --- a/spring-cloud-data-flow/time-processor/pom.xml +++ b/spring-cloud-data-flow/time-processor/pom.xml @@ -1,62 +1,62 @@ - 4.0.0 + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 - org.baeldung.spring.cloud - time-processor - 0.0.1-SNAPSHOT - jar + org.baeldung.spring.cloud + time-processor + 0.0.1-SNAPSHOT + jar - time-processor - Demo project for Spring Boot + time-processor + Demo project for Spring Boot - - org.springframework.boot - spring-boot-starter-parent - 1.4.0.RELEASE - - + + org.springframework.boot + spring-boot-starter-parent + 1.4.0.RELEASE + + - - UTF-8 - UTF-8 - 1.8 - + + UTF-8 + UTF-8 + 1.8 + - - - org.springframework.cloud - spring-cloud-starter-stream-rabbit - + + + org.springframework.cloud + spring-cloud-starter-stream-rabbit + - - org.springframework.boot - spring-boot-starter-test - test - - + + org.springframework.boot + spring-boot-starter-test + test + + - - - - org.springframework.cloud - spring-cloud-dependencies - Brixton.SR5 - pom - import - - - + + + + org.springframework.cloud + spring-cloud-dependencies + Brixton.SR5 + pom + import + + + - - - - org.springframework.boot - spring-boot-maven-plugin - - - + + + + org.springframework.boot + spring-boot-maven-plugin + + + diff --git a/spring-cloud-data-flow/time-processor/src/main/java/org/baeldung/spring/cloud/TimeProcessorApplication.java b/spring-cloud-data-flow/time-processor/src/main/java/org/baeldung/spring/cloud/TimeProcessorApplication.java index d074d5b167..7a2763d436 100644 --- a/spring-cloud-data-flow/time-processor/src/main/java/org/baeldung/spring/cloud/TimeProcessorApplication.java +++ b/spring-cloud-data-flow/time-processor/src/main/java/org/baeldung/spring/cloud/TimeProcessorApplication.java @@ -13,15 +13,15 @@ import org.springframework.integration.annotation.Transformer; @SpringBootApplication public class TimeProcessorApplication { - @Transformer(inputChannel = Processor.INPUT, outputChannel = Processor.OUTPUT) - public Object transform(Long timestamp) { + @Transformer(inputChannel = Processor.INPUT, outputChannel = Processor.OUTPUT) + public Object transform(Long timestamp) { - DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss"); - String date = dateFormat.format(timestamp); - return date; - } + DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss"); + String date = dateFormat.format(timestamp); + return date; + } - public static void main(String[] args) { - SpringApplication.run(TimeProcessorApplication.class, args); - } + public static void main(String[] args) { + SpringApplication.run(TimeProcessorApplication.class, args); + } } diff --git a/spring-cloud-data-flow/time-processor/src/test/java/org/baeldung/spring/cloud/TimeProcessorApplicationTests.java b/spring-cloud-data-flow/time-processor/src/test/java/org/baeldung/spring/cloud/TimeProcessorApplicationTests.java index 8990fd8403..875346f9db 100644 --- a/spring-cloud-data-flow/time-processor/src/test/java/org/baeldung/spring/cloud/TimeProcessorApplicationTests.java +++ b/spring-cloud-data-flow/time-processor/src/test/java/org/baeldung/spring/cloud/TimeProcessorApplicationTests.java @@ -9,8 +9,8 @@ import org.springframework.test.context.junit4.SpringRunner; @SpringBootTest public class TimeProcessorApplicationTests { - @Test - public void contextLoads() { - } + @Test + public void contextLoads() { + } } diff --git a/spring-cloud-data-flow/time-source/pom.xml b/spring-cloud-data-flow/time-source/pom.xml index 1e482b9553..587b782227 100644 --- a/spring-cloud-data-flow/time-source/pom.xml +++ b/spring-cloud-data-flow/time-source/pom.xml @@ -1,62 +1,62 @@ - 4.0.0 + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 - org.baeldung.spring.cloud - time-source - 0.0.1-SNAPSHOT - jar + org.baeldung.spring.cloud + time-source + 0.0.1-SNAPSHOT + jar - time-source - Demo project for Spring Boot + time-source + Demo project for Spring Boot - - org.springframework.boot - spring-boot-starter-parent - 1.4.0.RELEASE - - + + org.springframework.boot + spring-boot-starter-parent + 1.4.0.RELEASE + + - - UTF-8 - UTF-8 - 1.8 - + + UTF-8 + UTF-8 + 1.8 + - - - org.springframework.cloud - spring-cloud-starter-stream-rabbit - + + + org.springframework.cloud + spring-cloud-starter-stream-rabbit + - - org.springframework.boot - spring-boot-starter-test - test - - + + org.springframework.boot + spring-boot-starter-test + test + + - - - - org.springframework.cloud - spring-cloud-dependencies - Brixton.SR5 - pom - import - - - + + + + org.springframework.cloud + spring-cloud-dependencies + Brixton.SR5 + pom + import + + + - - - - org.springframework.boot - spring-boot-maven-plugin - - - + + + + org.springframework.boot + spring-boot-maven-plugin + + + diff --git a/spring-cloud-data-flow/time-source/src/main/java/org/baeldung/spring/cloud/TimeSourceApplication.java b/spring-cloud-data-flow/time-source/src/main/java/org/baeldung/spring/cloud/TimeSourceApplication.java index 9f6de4b1c7..5bce39ebe0 100644 --- a/spring-cloud-data-flow/time-source/src/main/java/org/baeldung/spring/cloud/TimeSourceApplication.java +++ b/spring-cloud-data-flow/time-source/src/main/java/org/baeldung/spring/cloud/TimeSourceApplication.java @@ -16,14 +16,14 @@ import org.springframework.integration.support.MessageBuilder; @SpringBootApplication public class TimeSourceApplication { - @Bean - @InboundChannelAdapter(value = Source.OUTPUT, poller = @Poller(fixedDelay = "10000", maxMessagesPerPoll = "1")) - public MessageSource timeMessageSource() { + @Bean + @InboundChannelAdapter(value = Source.OUTPUT, poller = @Poller(fixedDelay = "10000", maxMessagesPerPoll = "1")) + public MessageSource timeMessageSource() { - return () -> MessageBuilder.withPayload(new Date().getTime()).build(); - } + return () -> MessageBuilder.withPayload(new Date().getTime()).build(); + } - public static void main(String[] args) { - SpringApplication.run(TimeSourceApplication.class, args); - } + public static void main(String[] args) { + SpringApplication.run(TimeSourceApplication.class, args); + } } diff --git a/spring-cloud-data-flow/time-source/src/test/java/org/baeldung/spring/cloud/TimeSourceApplicationTests.java b/spring-cloud-data-flow/time-source/src/test/java/org/baeldung/spring/cloud/TimeSourceApplicationTests.java index 44e2123c7b..61fd8323d2 100644 --- a/spring-cloud-data-flow/time-source/src/test/java/org/baeldung/spring/cloud/TimeSourceApplicationTests.java +++ b/spring-cloud-data-flow/time-source/src/test/java/org/baeldung/spring/cloud/TimeSourceApplicationTests.java @@ -9,8 +9,8 @@ import org.springframework.test.context.junit4.SpringRunner; @SpringBootTest public class TimeSourceApplicationTests { - @Test - public void contextLoads() { - } + @Test + public void contextLoads() { + } } From a0ef91fc9272e323e968020c6b40a3ac5b79debf Mon Sep 17 00:00:00 2001 From: slavisa-baeldung Date: Thu, 1 Sep 2016 13:54:53 +0200 Subject: [PATCH 041/265] BAEL-169 - grouping spring-cloud modules in a multi-maven project --- pom.xml | 22 ++--- spring-cloud/pom.xml | 49 +++++++++++ .../config-client-development.properties | 2 + .../config-client-production.properties | 1 + .../spring-cloud-config/client/pom.xml | 79 +++++++++++++++++ .../cloud/config/client/ConfigClient.java | 29 +++++++ .../src/main/resources/bootstrap.properties | 5 ++ .../config/client/ConfigClientLiveTest.java | 17 ++++ .../spring-cloud-config/docker/Dockerfile | 4 + .../docker/Dockerfile.client | 6 ++ .../docker/Dockerfile.server | 9 ++ .../docker/config-client-entrypoint.sh | 8 ++ .../docker/docker-compose.scale.yml | 41 +++++++++ .../docker/docker-compose.yml | 43 +++++++++ spring-cloud/spring-cloud-config/pom.xml | 42 +++++++++ .../spring-cloud-config/server/pom.xml | 82 ++++++++++++++++++ .../cloud/config/server/ConfigServer.java | 15 ++++ .../src/main/resources/application.properties | 9 ++ .../src/main/resources/config-server.jks | Bin 0 -> 3842 bytes .../config/server/ConfigServerListTest.java | 18 ++++ spring-cloud/spring-cloud-eureka/pom.xml | 50 +++++++++++ .../spring-cloud-eureka-client/pom.xml | 57 ++++++++++++ .../client/EurekaClientApplication.java | 32 +++++++ .../eureka/client/GreetingController.java | 8 ++ .../src/main/resources/application.yml | 13 +++ .../spring-cloud-eureka-feign-client/pom.xml | 67 ++++++++++++++ .../feign/client/FeignClientApplication.java | 29 +++++++ .../cloud/feign/client/GreetingClient.java | 8 ++ .../src/main/resources/application.yml | 11 +++ .../resources/templates/greeting-view.html | 9 ++ .../spring-cloud-eureka-server/pom.xml | 52 +++++++++++ .../server/EurekaServerApplication.java | 13 +++ .../src/main/resources/application.yml | 7 ++ .../feign-rest-consumer/pom.xml | 81 +++++++++++++++++ .../hystrix/rest/consumer/GreetingClient.java | 21 +++++ .../rest/consumer/GreetingController.java | 19 ++++ .../RestConsumerFeignApplication.java | 17 ++++ .../src/main/resources/application.properties | 1 + .../resources/templates/greeting-view.html | 9 ++ spring-cloud/spring-cloud-hystrix/pom.xml | 49 +++++++++++ .../rest-consumer/pom.xml | 71 +++++++++++++++ .../rest/consumer/GreetingController.java | 19 ++++ .../rest/consumer/GreetingService.java | 17 ++++ .../consumer/RestConsumerApplication.java | 15 ++++ .../src/main/resources/application.properties | 1 + .../resources/templates/greeting-view.html | 9 ++ .../rest-producer/pom.xml | 39 +++++++++ .../rest/producer/GreetingController.java | 9 ++ .../rest/producer/GreetingControllerImpl.java | 12 +++ .../producer/RestProducerApplication.java | 11 +++ .../src/main/resources/application.properties | 2 + 51 files changed, 1228 insertions(+), 11 deletions(-) create mode 100644 spring-cloud/pom.xml create mode 100644 spring-cloud/spring-cloud-config/client-config/config-client-development.properties create mode 100644 spring-cloud/spring-cloud-config/client-config/config-client-production.properties create mode 100644 spring-cloud/spring-cloud-config/client/pom.xml create mode 100644 spring-cloud/spring-cloud-config/client/src/main/java/com/baeldung/spring/cloud/config/client/ConfigClient.java create mode 100644 spring-cloud/spring-cloud-config/client/src/main/resources/bootstrap.properties create mode 100644 spring-cloud/spring-cloud-config/client/src/test/java/com/baeldung/spring/cloud/config/client/ConfigClientLiveTest.java create mode 100644 spring-cloud/spring-cloud-config/docker/Dockerfile create mode 100644 spring-cloud/spring-cloud-config/docker/Dockerfile.client create mode 100644 spring-cloud/spring-cloud-config/docker/Dockerfile.server create mode 100644 spring-cloud/spring-cloud-config/docker/config-client-entrypoint.sh create mode 100644 spring-cloud/spring-cloud-config/docker/docker-compose.scale.yml create mode 100644 spring-cloud/spring-cloud-config/docker/docker-compose.yml create mode 100644 spring-cloud/spring-cloud-config/pom.xml create mode 100644 spring-cloud/spring-cloud-config/server/pom.xml create mode 100644 spring-cloud/spring-cloud-config/server/src/main/java/com/baeldung/spring/cloud/config/server/ConfigServer.java create mode 100644 spring-cloud/spring-cloud-config/server/src/main/resources/application.properties create mode 100644 spring-cloud/spring-cloud-config/server/src/main/resources/config-server.jks create mode 100644 spring-cloud/spring-cloud-config/server/src/test/java/com/baeldung/spring/cloud/config/server/ConfigServerListTest.java create mode 100644 spring-cloud/spring-cloud-eureka/pom.xml create mode 100644 spring-cloud/spring-cloud-eureka/spring-cloud-eureka-client/pom.xml create mode 100644 spring-cloud/spring-cloud-eureka/spring-cloud-eureka-client/src/main/java/com/baeldung/spring/cloud/eureka/client/EurekaClientApplication.java create mode 100644 spring-cloud/spring-cloud-eureka/spring-cloud-eureka-client/src/main/java/com/baeldung/spring/cloud/eureka/client/GreetingController.java create mode 100644 spring-cloud/spring-cloud-eureka/spring-cloud-eureka-client/src/main/resources/application.yml create mode 100644 spring-cloud/spring-cloud-eureka/spring-cloud-eureka-feign-client/pom.xml create mode 100644 spring-cloud/spring-cloud-eureka/spring-cloud-eureka-feign-client/src/main/java/com/baeldung/spring/cloud/feign/client/FeignClientApplication.java create mode 100644 spring-cloud/spring-cloud-eureka/spring-cloud-eureka-feign-client/src/main/java/com/baeldung/spring/cloud/feign/client/GreetingClient.java create mode 100644 spring-cloud/spring-cloud-eureka/spring-cloud-eureka-feign-client/src/main/resources/application.yml create mode 100644 spring-cloud/spring-cloud-eureka/spring-cloud-eureka-feign-client/src/main/resources/templates/greeting-view.html create mode 100644 spring-cloud/spring-cloud-eureka/spring-cloud-eureka-server/pom.xml create mode 100644 spring-cloud/spring-cloud-eureka/spring-cloud-eureka-server/src/main/java/com/baeldung/spring/cloud/eureka/server/EurekaServerApplication.java create mode 100644 spring-cloud/spring-cloud-eureka/spring-cloud-eureka-server/src/main/resources/application.yml create mode 100644 spring-cloud/spring-cloud-hystrix/feign-rest-consumer/pom.xml create mode 100644 spring-cloud/spring-cloud-hystrix/feign-rest-consumer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/consumer/GreetingClient.java create mode 100644 spring-cloud/spring-cloud-hystrix/feign-rest-consumer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/consumer/GreetingController.java create mode 100644 spring-cloud/spring-cloud-hystrix/feign-rest-consumer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/consumer/RestConsumerFeignApplication.java create mode 100644 spring-cloud/spring-cloud-hystrix/feign-rest-consumer/src/main/resources/application.properties create mode 100644 spring-cloud/spring-cloud-hystrix/feign-rest-consumer/src/main/resources/templates/greeting-view.html create mode 100644 spring-cloud/spring-cloud-hystrix/pom.xml create mode 100644 spring-cloud/spring-cloud-hystrix/rest-consumer/pom.xml create mode 100644 spring-cloud/spring-cloud-hystrix/rest-consumer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/consumer/GreetingController.java create mode 100644 spring-cloud/spring-cloud-hystrix/rest-consumer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/consumer/GreetingService.java create mode 100644 spring-cloud/spring-cloud-hystrix/rest-consumer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/consumer/RestConsumerApplication.java create mode 100644 spring-cloud/spring-cloud-hystrix/rest-consumer/src/main/resources/application.properties create mode 100644 spring-cloud/spring-cloud-hystrix/rest-consumer/src/main/resources/templates/greeting-view.html create mode 100644 spring-cloud/spring-cloud-hystrix/rest-producer/pom.xml create mode 100644 spring-cloud/spring-cloud-hystrix/rest-producer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/producer/GreetingController.java create mode 100644 spring-cloud/spring-cloud-hystrix/rest-producer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/producer/GreetingControllerImpl.java create mode 100644 spring-cloud/spring-cloud-hystrix/rest-producer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/producer/RestProducerApplication.java create mode 100644 spring-cloud/spring-cloud-hystrix/rest-producer/src/main/resources/application.properties diff --git a/pom.xml b/pom.xml index 7ca9238680..a98ecc682b 100644 --- a/pom.xml +++ b/pom.xml @@ -1,4 +1,5 @@ - + 4.0.0 com.baeldung parent-modules @@ -8,9 +9,9 @@ pom - + UTF-8 - + assertj @@ -52,7 +53,7 @@ rest-assured rest-testing resteasy - log4j + log4j spring-all spring-akka @@ -74,7 +75,7 @@ spring-hibernate3 spring-hibernate4 spring-jpa - spring-jpa-jndi + spring-jpa-jndi spring-katharsis spring-mockito spring-mvc-java @@ -87,8 +88,7 @@ spring-rest spring-rest-angular spring-rest-docs - spring-cloud-config - spring-cloud-hystrix + spring-cloud spring-security-basic-auth spring-security-custom-permission @@ -112,11 +112,11 @@ redis - mutation-testing - spring-mvc-velocity + mutation-testing + spring-mvc-velocity xstream - dozer - orika + dozer + orika diff --git a/spring-cloud/pom.xml b/spring-cloud/pom.xml new file mode 100644 index 0000000000..4f6b37a76f --- /dev/null +++ b/spring-cloud/pom.xml @@ -0,0 +1,49 @@ + + + 4.0.0 + + com.baeldung.spring.cloud + spring-cloud + 1.0.0-SNAPSHOT + + spring-cloud-config + spring-cloud-eureka + spring-cloud-hystrix + + pom + + spring-cloud + + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + .. + + + + UTF-8 + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.5.1 + + 1.8 + 1.8 + + + + org.springframework.boot + spring-boot-maven-plugin + 1.4.0.RELEASE + + + + + diff --git a/spring-cloud/spring-cloud-config/client-config/config-client-development.properties b/spring-cloud/spring-cloud-config/client-config/config-client-development.properties new file mode 100644 index 0000000000..6401d1be7f --- /dev/null +++ b/spring-cloud/spring-cloud-config/client-config/config-client-development.properties @@ -0,0 +1,2 @@ +user.role=Developer +user.password=pass diff --git a/spring-cloud/spring-cloud-config/client-config/config-client-production.properties b/spring-cloud/spring-cloud-config/client-config/config-client-production.properties new file mode 100644 index 0000000000..cd2e14fcc3 --- /dev/null +++ b/spring-cloud/spring-cloud-config/client-config/config-client-production.properties @@ -0,0 +1 @@ +user.role=User diff --git a/spring-cloud/spring-cloud-config/client/pom.xml b/spring-cloud/spring-cloud-config/client/pom.xml new file mode 100644 index 0000000000..0ef4b35581 --- /dev/null +++ b/spring-cloud/spring-cloud-config/client/pom.xml @@ -0,0 +1,79 @@ + + + 4.0.0 + + + com.baeldung.spring.cloud + spring-cloud-config + 0.0.1-SNAPSHOT + + client + jar + + client + Demo project for Spring Cloud Config Client + + + UTF-8 + UTF-8 + 1.8 + + + + + org.springframework.cloud + spring-cloud-starter-config + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.cloud + spring-cloud-dependencies + Brixton.BUILD-SNAPSHOT + pom + import + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + + spring-snapshots + Spring Snapshots + https://repo.spring.io/snapshot + + true + + + + spring-milestones + Spring Milestones + https://repo.spring.io/milestone + + false + + + + diff --git a/spring-cloud/spring-cloud-config/client/src/main/java/com/baeldung/spring/cloud/config/client/ConfigClient.java b/spring-cloud/spring-cloud-config/client/src/main/java/com/baeldung/spring/cloud/config/client/ConfigClient.java new file mode 100644 index 0000000000..1dd3bbdab0 --- /dev/null +++ b/spring-cloud/spring-cloud-config/client/src/main/java/com/baeldung/spring/cloud/config/client/ConfigClient.java @@ -0,0 +1,29 @@ +package com.baeldung.spring.cloud.config.client; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +@SpringBootApplication +@RestController +public class ConfigClient { + @Value("${user.role}") + private String role; + + @Value("${user.password}") + private String password; + + public static void main(String[] args) { + SpringApplication.run(ConfigClient.class, args); + } + + @RequestMapping(value = "/whoami/{username}", method = RequestMethod.GET, produces = MediaType.TEXT_PLAIN_VALUE) + public String whoami(@PathVariable("username") String username) { + return String.format("Hello %s! You are a(n) %s and your password is '%s'.\n", username, role, password); + } +} diff --git a/spring-cloud/spring-cloud-config/client/src/main/resources/bootstrap.properties b/spring-cloud/spring-cloud-config/client/src/main/resources/bootstrap.properties new file mode 100644 index 0000000000..18982a93b5 --- /dev/null +++ b/spring-cloud/spring-cloud-config/client/src/main/resources/bootstrap.properties @@ -0,0 +1,5 @@ +spring.application.name=config-client +spring.profiles.active=development +spring.cloud.config.uri=http://localhost:8888 +spring.cloud.config.username=root +spring.cloud.config.password=s3cr3t diff --git a/spring-cloud/spring-cloud-config/client/src/test/java/com/baeldung/spring/cloud/config/client/ConfigClientLiveTest.java b/spring-cloud/spring-cloud-config/client/src/test/java/com/baeldung/spring/cloud/config/client/ConfigClientLiveTest.java new file mode 100644 index 0000000000..058fd45f35 --- /dev/null +++ b/spring-cloud/spring-cloud-config/client/src/test/java/com/baeldung/spring/cloud/config/client/ConfigClientLiveTest.java @@ -0,0 +1,17 @@ +package com.baeldung.spring.cloud.config.client; + +import org.junit.Ignore; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.SpringApplicationConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.web.WebAppConfiguration; + +@RunWith(SpringJUnit4ClassRunner.class) +@SpringApplicationConfiguration(classes = ConfigClient.class) +@WebAppConfiguration +public class ConfigClientLiveTest { + @Test + public void contextLoads() { + } +} diff --git a/spring-cloud/spring-cloud-config/docker/Dockerfile b/spring-cloud/spring-cloud-config/docker/Dockerfile new file mode 100644 index 0000000000..bdb37abf80 --- /dev/null +++ b/spring-cloud/spring-cloud-config/docker/Dockerfile @@ -0,0 +1,4 @@ +FROM alpine:edge +MAINTAINER baeldung.com +RUN apk add --no-cache openjdk8 +COPY files/UnlimitedJCEPolicyJDK8/* /usr/lib/jvm/java-1.8-openjdk/jre/lib/security/ diff --git a/spring-cloud/spring-cloud-config/docker/Dockerfile.client b/spring-cloud/spring-cloud-config/docker/Dockerfile.client new file mode 100644 index 0000000000..5fbc0b98c0 --- /dev/null +++ b/spring-cloud/spring-cloud-config/docker/Dockerfile.client @@ -0,0 +1,6 @@ +FROM alpine-java:base +MAINTAINER baeldung.com +RUN apk --no-cache add netcat-openbsd +COPY files/config-client.jar /opt/spring-cloud/lib/ +COPY files/config-client-entrypoint.sh /opt/spring-cloud/bin/ +RUN chmod 755 /opt/spring-cloud/bin/config-client-entrypoint.sh diff --git a/spring-cloud/spring-cloud-config/docker/Dockerfile.server b/spring-cloud/spring-cloud-config/docker/Dockerfile.server new file mode 100644 index 0000000000..4f7bd751e8 --- /dev/null +++ b/spring-cloud/spring-cloud-config/docker/Dockerfile.server @@ -0,0 +1,9 @@ +FROM alpine-java:base +MAINTAINER baeldung.com +COPY files/config-server.jar /opt/spring-cloud/lib/ +ENV SPRING_APPLICATION_JSON='{"spring": {"cloud": {"config": {"server": \ + {"git": {"uri": "/var/lib/spring-cloud/config-repo", "clone-on-start": true}}}}}}' +ENTRYPOINT ["/usr/bin/java"] +CMD ["-jar", "/opt/spring-cloud/lib/config-server.jar"] +VOLUME /var/lib/spring-cloud/config-repo +EXPOSE 8888 diff --git a/spring-cloud/spring-cloud-config/docker/config-client-entrypoint.sh b/spring-cloud/spring-cloud-config/docker/config-client-entrypoint.sh new file mode 100644 index 0000000000..12352119fa --- /dev/null +++ b/spring-cloud/spring-cloud-config/docker/config-client-entrypoint.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +while ! nc -z config-server 8888 ; do + echo "Waiting for upcoming Config Server" + sleep 2 +done + +java -jar /opt/spring-cloud/lib/config-client.jar diff --git a/spring-cloud/spring-cloud-config/docker/docker-compose.scale.yml b/spring-cloud/spring-cloud-config/docker/docker-compose.scale.yml new file mode 100644 index 0000000000..f74153bea3 --- /dev/null +++ b/spring-cloud/spring-cloud-config/docker/docker-compose.scale.yml @@ -0,0 +1,41 @@ +version: '2' +services: + config-server: + build: + context: . + dockerfile: Dockerfile.server + image: config-server:latest + expose: + - 8888 + networks: + - spring-cloud-network + volumes: + - spring-cloud-config-repo:/var/lib/spring-cloud/config-repo + logging: + driver: json-file + config-client: + build: + context: . + dockerfile: Dockerfile.client + image: config-client:latest + entrypoint: /opt/spring-cloud/bin/config-client-entrypoint.sh + environment: + SPRING_APPLICATION_JSON: '{"spring": {"cloud": {"config": {"uri": "http://config-server:8888"}}}}' + expose: + - 8080 + ports: + - 8080 + networks: + - spring-cloud-network + links: + - config-server:config-server + depends_on: + - config-server + logging: + driver: json-file +networks: + spring-cloud-network: + driver: bridge +volumes: + spring-cloud-config-repo: + external: true diff --git a/spring-cloud/spring-cloud-config/docker/docker-compose.yml b/spring-cloud/spring-cloud-config/docker/docker-compose.yml new file mode 100644 index 0000000000..74c71b651c --- /dev/null +++ b/spring-cloud/spring-cloud-config/docker/docker-compose.yml @@ -0,0 +1,43 @@ +version: '2' +services: + config-server: + container_name: config-server + build: + context: . + dockerfile: Dockerfile.server + image: config-server:latest + expose: + - 8888 + networks: + - spring-cloud-network + volumes: + - spring-cloud-config-repo:/var/lib/spring-cloud/config-repo + logging: + driver: json-file + config-client: + container_name: config-client + build: + context: . + dockerfile: Dockerfile.client + image: config-client:latest + entrypoint: /opt/spring-cloud/bin/config-client-entrypoint.sh + environment: + SPRING_APPLICATION_JSON: '{"spring": {"cloud": {"config": {"uri": "http://config-server:8888"}}}}' + expose: + - 8080 + ports: + - 8080:8080 + networks: + - spring-cloud-network + links: + - config-server:config-server + depends_on: + - config-server + logging: + driver: json-file +networks: + spring-cloud-network: + driver: bridge +volumes: + spring-cloud-config-repo: + external: true diff --git a/spring-cloud/spring-cloud-config/pom.xml b/spring-cloud/spring-cloud-config/pom.xml new file mode 100644 index 0000000000..8e0e4b8706 --- /dev/null +++ b/spring-cloud/spring-cloud-config/pom.xml @@ -0,0 +1,42 @@ + + + 4.0.0 + + com.baeldung.spring.cloud + spring-cloud-config + 0.0.1-SNAPSHOT + pom + + + server + client + + + + org.springframework.boot + spring-boot-starter-parent + 1.3.5.RELEASE + + + + + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + + **/*LiveTest.java + + + + + + + + + 1.3.5.RELEASE + 2.19.1 + + diff --git a/spring-cloud/spring-cloud-config/server/pom.xml b/spring-cloud/spring-cloud-config/server/pom.xml new file mode 100644 index 0000000000..c3f68854bb --- /dev/null +++ b/spring-cloud/spring-cloud-config/server/pom.xml @@ -0,0 +1,82 @@ + + + 4.0.0 + + + com.baeldung.spring.cloud + spring-cloud-config + 0.0.1-SNAPSHOT + + server + + server + Demo project for Spring Cloud Config Server + + + UTF-8 + UTF-8 + 1.8 + + + + + org.springframework.cloud + spring-cloud-config-server + + + org.springframework.boot + spring-boot-starter-security + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.cloud + spring-cloud-dependencies + Brixton.BUILD-SNAPSHOT + pom + import + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + + spring-snapshots + Spring Snapshots + https://repo.spring.io/snapshot + + true + + + + spring-milestones + Spring Milestones + https://repo.spring.io/milestone + + false + + + + diff --git a/spring-cloud/spring-cloud-config/server/src/main/java/com/baeldung/spring/cloud/config/server/ConfigServer.java b/spring-cloud/spring-cloud-config/server/src/main/java/com/baeldung/spring/cloud/config/server/ConfigServer.java new file mode 100644 index 0000000000..4dd34ae3ff --- /dev/null +++ b/spring-cloud/spring-cloud-config/server/src/main/java/com/baeldung/spring/cloud/config/server/ConfigServer.java @@ -0,0 +1,15 @@ +package com.baeldung.spring.cloud.config.server; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.config.server.EnableConfigServer; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; + +@SpringBootApplication +@EnableConfigServer +@EnableWebSecurity +public class ConfigServer { + public static void main(String[] args) { + SpringApplication.run(ConfigServer.class, args); + } +} diff --git a/spring-cloud/spring-cloud-config/server/src/main/resources/application.properties b/spring-cloud/spring-cloud-config/server/src/main/resources/application.properties new file mode 100644 index 0000000000..2131f3b249 --- /dev/null +++ b/spring-cloud/spring-cloud-config/server/src/main/resources/application.properties @@ -0,0 +1,9 @@ +server.port=8888 +spring.cloud.config.server.git.uri=https://github.com/eugenp/tutorials/tree/master/spring-cloud-config/client-config +spring.cloud.config.server.git.clone-on-start=false +security.user.name=root +security.user.password=s3cr3t +encrypt.key-store.location=classpath:/config-server.jks +encrypt.key-store.password=my-s70r3-s3cr3t +encrypt.key-store.alias=config-server-key +encrypt.key-store.secret=my-k34-s3cr3t diff --git a/spring-cloud/spring-cloud-config/server/src/main/resources/config-server.jks b/spring-cloud/spring-cloud-config/server/src/main/resources/config-server.jks new file mode 100644 index 0000000000000000000000000000000000000000..f3dddb4a8f4c4773a8feae4d8534b129e5e67f45 GIT binary patch literal 3842 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 + + 4.0.0 + + com.baeldung.spring.cloud + spring-cloud-eureka + 1.0.0-SNAPSHOT + + spring-cloud-eureka-server + spring-cloud-eureka-client + spring-cloud-eureka-feign-client + + pom + + Spring Cloud Eureka + Spring Cloud Eureka Server and Sample Clients + + + com.baeldung.spring.cloud + spring-cloud + 1.0.0-SNAPSHOT + .. + + + + UTF-8 + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.5.1 + + 1.8 + 1.8 + + + + org.springframework.boot + spring-boot-maven-plugin + 1.4.0.RELEASE + + + + + diff --git a/spring-cloud/spring-cloud-eureka/spring-cloud-eureka-client/pom.xml b/spring-cloud/spring-cloud-eureka/spring-cloud-eureka-client/pom.xml new file mode 100644 index 0000000000..720b49ddc2 --- /dev/null +++ b/spring-cloud/spring-cloud-eureka/spring-cloud-eureka-client/pom.xml @@ -0,0 +1,57 @@ + + + 4.0.0 + + spring-cloud-eureka-client + 1.0.0-SNAPSHOT + jar + + Spring Cloud Eureka Client + Spring Cloud Eureka Sample Client + + + com.baeldung.spring.cloud + spring-cloud-eureka + 1.0.0-SNAPSHOT + .. + + + + + org.springframework.cloud + spring-cloud-starter-eureka + 1.1.5.RELEASE + + + org.springframework.boot + spring-boot-starter-web + 1.4.0.RELEASE + + + + + + + org.springframework.cloud + spring-cloud-starter-parent + Brixton.SR4 + pom + import + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org.springframework.boot + spring-boot-maven-plugin + + + + diff --git a/spring-cloud/spring-cloud-eureka/spring-cloud-eureka-client/src/main/java/com/baeldung/spring/cloud/eureka/client/EurekaClientApplication.java b/spring-cloud/spring-cloud-eureka/spring-cloud-eureka-client/src/main/java/com/baeldung/spring/cloud/eureka/client/EurekaClientApplication.java new file mode 100644 index 0000000000..48099eeaa2 --- /dev/null +++ b/spring-cloud/spring-cloud-eureka/spring-cloud-eureka-client/src/main/java/com/baeldung/spring/cloud/eureka/client/EurekaClientApplication.java @@ -0,0 +1,32 @@ +package com.baeldung.spring.cloud.eureka.client; + +import com.netflix.discovery.EurekaClient; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.netflix.eureka.EnableEurekaClient; +import org.springframework.context.annotation.Lazy; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@SpringBootApplication +@EnableEurekaClient +@RestController +public class EurekaClientApplication implements GreetingController { + @Autowired + @Lazy + private EurekaClient eurekaClient; + + @Value("${spring.application.name}") + private String appName; + + public static void main(String[] args) { + SpringApplication.run(EurekaClientApplication.class, args); + } + + @Override + public String greeting() { + return String.format("Hello from '%s'!", eurekaClient.getApplication(appName).getName()); + } +} diff --git a/spring-cloud/spring-cloud-eureka/spring-cloud-eureka-client/src/main/java/com/baeldung/spring/cloud/eureka/client/GreetingController.java b/spring-cloud/spring-cloud-eureka/spring-cloud-eureka-client/src/main/java/com/baeldung/spring/cloud/eureka/client/GreetingController.java new file mode 100644 index 0000000000..33ee2574b7 --- /dev/null +++ b/spring-cloud/spring-cloud-eureka/spring-cloud-eureka-client/src/main/java/com/baeldung/spring/cloud/eureka/client/GreetingController.java @@ -0,0 +1,8 @@ +package com.baeldung.spring.cloud.eureka.client; + +import org.springframework.web.bind.annotation.RequestMapping; + +public interface GreetingController { + @RequestMapping("/greeting") + String greeting(); +} diff --git a/spring-cloud/spring-cloud-eureka/spring-cloud-eureka-client/src/main/resources/application.yml b/spring-cloud/spring-cloud-eureka/spring-cloud-eureka-client/src/main/resources/application.yml new file mode 100644 index 0000000000..08624aa159 --- /dev/null +++ b/spring-cloud/spring-cloud-eureka/spring-cloud-eureka-client/src/main/resources/application.yml @@ -0,0 +1,13 @@ +spring: + application: + name: spring-cloud-eureka-client + +server: + port: 0 + +eureka: + client: + serviceUrl: + defaultZone: ${EUREKA_URI:http://localhost:8761/eureka} + instance: + preferIpAddress: true \ No newline at end of file diff --git a/spring-cloud/spring-cloud-eureka/spring-cloud-eureka-feign-client/pom.xml b/spring-cloud/spring-cloud-eureka/spring-cloud-eureka-feign-client/pom.xml new file mode 100644 index 0000000000..9e639c666a --- /dev/null +++ b/spring-cloud/spring-cloud-eureka/spring-cloud-eureka-feign-client/pom.xml @@ -0,0 +1,67 @@ + + + 4.0.0 + + spring-cloud-eureka-feign-client + 1.0.0-SNAPSHOT + jar + + Spring Cloud Eureka Feign Client + Spring Cloud Eureka - Sample Feign Client + + + com.baeldung.spring.cloud + spring-cloud-eureka + 1.0.0-SNAPSHOT + .. + + + + + com.baeldung.spring.cloud + spring-cloud-eureka-client + 1.0.0-SNAPSHOT + + + org.springframework.cloud + spring-cloud-starter-feign + 1.1.5.RELEASE + + + org.springframework.boot + spring-boot-starter-web + 1.4.0.RELEASE + + + org.springframework.boot + spring-boot-starter-thymeleaf + 1.4.0.RELEASE + + + + + + + org.springframework.cloud + spring-cloud-starter-parent + Brixton.SR4 + pom + import + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org.springframework.boot + spring-boot-maven-plugin + + + + diff --git a/spring-cloud/spring-cloud-eureka/spring-cloud-eureka-feign-client/src/main/java/com/baeldung/spring/cloud/feign/client/FeignClientApplication.java b/spring-cloud/spring-cloud-eureka/spring-cloud-eureka-feign-client/src/main/java/com/baeldung/spring/cloud/feign/client/FeignClientApplication.java new file mode 100644 index 0000000000..7beb51d1ac --- /dev/null +++ b/spring-cloud/spring-cloud-eureka/spring-cloud-eureka-feign-client/src/main/java/com/baeldung/spring/cloud/feign/client/FeignClientApplication.java @@ -0,0 +1,29 @@ +package com.baeldung.spring.cloud.feign.client; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.netflix.eureka.EnableEurekaClient; +import org.springframework.cloud.netflix.feign.EnableFeignClients; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.RequestMapping; + +@SpringBootApplication +@EnableEurekaClient +@EnableFeignClients +@Controller +public class FeignClientApplication { + @Autowired + private GreetingClient greetingClient; + + public static void main(String[] args) { + SpringApplication.run(FeignClientApplication.class, args); + } + + @RequestMapping("/get-greeting") + public String greeting(Model model) { + model.addAttribute("greeting", greetingClient.greeting()); + return "greeting-view"; + } +} diff --git a/spring-cloud/spring-cloud-eureka/spring-cloud-eureka-feign-client/src/main/java/com/baeldung/spring/cloud/feign/client/GreetingClient.java b/spring-cloud/spring-cloud-eureka/spring-cloud-eureka-feign-client/src/main/java/com/baeldung/spring/cloud/feign/client/GreetingClient.java new file mode 100644 index 0000000000..6bd444b347 --- /dev/null +++ b/spring-cloud/spring-cloud-eureka/spring-cloud-eureka-feign-client/src/main/java/com/baeldung/spring/cloud/feign/client/GreetingClient.java @@ -0,0 +1,8 @@ +package com.baeldung.spring.cloud.feign.client; + +import com.baeldung.spring.cloud.eureka.client.GreetingController; +import org.springframework.cloud.netflix.feign.FeignClient; + +@FeignClient("spring-cloud-eureka-client") +public interface GreetingClient extends GreetingController { +} diff --git a/spring-cloud/spring-cloud-eureka/spring-cloud-eureka-feign-client/src/main/resources/application.yml b/spring-cloud/spring-cloud-eureka/spring-cloud-eureka-feign-client/src/main/resources/application.yml new file mode 100644 index 0000000000..d053ef7a7e --- /dev/null +++ b/spring-cloud/spring-cloud-eureka/spring-cloud-eureka-feign-client/src/main/resources/application.yml @@ -0,0 +1,11 @@ +spring: + application: + name: spring-cloud-eureka-feign-client + +server: + port: 8080 + +eureka: + client: + serviceUrl: + defaultZone: ${EUREKA_URI:http://localhost:8761/eureka} \ No newline at end of file diff --git a/spring-cloud/spring-cloud-eureka/spring-cloud-eureka-feign-client/src/main/resources/templates/greeting-view.html b/spring-cloud/spring-cloud-eureka/spring-cloud-eureka-feign-client/src/main/resources/templates/greeting-view.html new file mode 100644 index 0000000000..42cdadb487 --- /dev/null +++ b/spring-cloud/spring-cloud-eureka/spring-cloud-eureka-feign-client/src/main/resources/templates/greeting-view.html @@ -0,0 +1,9 @@ + + + + Greeting Page + + +

+ + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-eureka/spring-cloud-eureka-server/pom.xml b/spring-cloud/spring-cloud-eureka/spring-cloud-eureka-server/pom.xml new file mode 100644 index 0000000000..f4d655f708 --- /dev/null +++ b/spring-cloud/spring-cloud-eureka/spring-cloud-eureka-server/pom.xml @@ -0,0 +1,52 @@ + + + 4.0.0 + + spring-cloud-eureka-server + 1.0.0-SNAPSHOT + jar + + Spring Cloud Eureka Server + Spring Cloud Eureka Server Demo + + + com.baeldung.spring.cloud + spring-cloud-eureka + 1.0.0-SNAPSHOT + .. + + + + + org.springframework.cloud + spring-cloud-starter-eureka-server + 1.1.5.RELEASE + + + + + + + org.springframework.cloud + spring-cloud-starter-parent + Brixton.SR4 + pom + import + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org.springframework.boot + spring-boot-maven-plugin + + + + diff --git a/spring-cloud/spring-cloud-eureka/spring-cloud-eureka-server/src/main/java/com/baeldung/spring/cloud/eureka/server/EurekaServerApplication.java b/spring-cloud/spring-cloud-eureka/spring-cloud-eureka-server/src/main/java/com/baeldung/spring/cloud/eureka/server/EurekaServerApplication.java new file mode 100644 index 0000000000..d55145448d --- /dev/null +++ b/spring-cloud/spring-cloud-eureka/spring-cloud-eureka-server/src/main/java/com/baeldung/spring/cloud/eureka/server/EurekaServerApplication.java @@ -0,0 +1,13 @@ +package com.baeldung.spring.cloud.eureka.server; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; + +@SpringBootApplication +@EnableEurekaServer +public class EurekaServerApplication { + public static void main(String[] args) { + SpringApplication.run(EurekaServerApplication.class, args); + } +} diff --git a/spring-cloud/spring-cloud-eureka/spring-cloud-eureka-server/src/main/resources/application.yml b/spring-cloud/spring-cloud-eureka/spring-cloud-eureka-server/src/main/resources/application.yml new file mode 100644 index 0000000000..49c3179bb5 --- /dev/null +++ b/spring-cloud/spring-cloud-eureka/spring-cloud-eureka-server/src/main/resources/application.yml @@ -0,0 +1,7 @@ +server: + port: 8761 + +eureka: + client: + registerWithEureka: false + fetchRegistry: false \ No newline at end of file diff --git a/spring-cloud/spring-cloud-hystrix/feign-rest-consumer/pom.xml b/spring-cloud/spring-cloud-hystrix/feign-rest-consumer/pom.xml new file mode 100644 index 0000000000..8209dc8c67 --- /dev/null +++ b/spring-cloud/spring-cloud-hystrix/feign-rest-consumer/pom.xml @@ -0,0 +1,81 @@ + + + 4.0.0 + + feign-rest-consumer + 1.0.0-SNAPSHOT + jar + + feign-rest-consumer + + + com.baeldung.spring.cloud + spring-cloud-hystrix + 1.0.0-SNAPSHOT + .. + + + + + com.baeldung.spring.cloud + rest-producer + 1.0.0-SNAPSHOT + + + org.springframework.cloud + spring-cloud-starter-hystrix + 1.1.5.RELEASE + + + org.springframework.cloud + spring-cloud-starter-hystrix-dashboard + 1.1.5.RELEASE + + + org.springframework.cloud + spring-cloud-starter-feign + 1.1.5.RELEASE + + + org.springframework.boot + spring-boot-starter-web + 1.4.0.RELEASE + + + org.springframework.boot + spring-boot-starter-thymeleaf + 1.4.0.RELEASE + + + org.springframework.boot + spring-boot-starter-actuator + 1.4.0.RELEASE + + + + + + + org.springframework.cloud + spring-cloud-starter-parent + Brixton.SR4 + pom + import + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org.springframework.boot + spring-boot-maven-plugin + + + + diff --git a/spring-cloud/spring-cloud-hystrix/feign-rest-consumer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/consumer/GreetingClient.java b/spring-cloud/spring-cloud-hystrix/feign-rest-consumer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/consumer/GreetingClient.java new file mode 100644 index 0000000000..b715e8c052 --- /dev/null +++ b/spring-cloud/spring-cloud-hystrix/feign-rest-consumer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/consumer/GreetingClient.java @@ -0,0 +1,21 @@ +package com.baeldung.spring.cloud.hystrix.rest.consumer; + +import com.baeldung.spring.cloud.hystrix.rest.producer.GreetingController; +import org.springframework.cloud.netflix.feign.FeignClient; +import org.springframework.stereotype.Component; +import org.springframework.web.bind.annotation.PathVariable; + +@FeignClient( + name = "rest-producer", + url = "http://localhost:9090", + fallback = GreetingClient.GreetingClientFallback.class +) +public interface GreetingClient extends GreetingController { + @Component + public static class GreetingClientFallback implements GreetingClient { + @Override + public String greeting(@PathVariable("username") String username) { + return "Hello User!"; + } + } +} diff --git a/spring-cloud/spring-cloud-hystrix/feign-rest-consumer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/consumer/GreetingController.java b/spring-cloud/spring-cloud-hystrix/feign-rest-consumer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/consumer/GreetingController.java new file mode 100644 index 0000000000..62dbbdd608 --- /dev/null +++ b/spring-cloud/spring-cloud-hystrix/feign-rest-consumer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/consumer/GreetingController.java @@ -0,0 +1,19 @@ +package com.baeldung.spring.cloud.hystrix.rest.consumer; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; + +@Controller +public class GreetingController { + @Autowired + private GreetingClient greetingClient; + + @RequestMapping("/get-greeting/{username}") + public String getGreeting(Model model, @PathVariable("username") String username) { + model.addAttribute("greeting", greetingClient.greeting(username)); + return "greeting-view"; + } +} diff --git a/spring-cloud/spring-cloud-hystrix/feign-rest-consumer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/consumer/RestConsumerFeignApplication.java b/spring-cloud/spring-cloud-hystrix/feign-rest-consumer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/consumer/RestConsumerFeignApplication.java new file mode 100644 index 0000000000..2fc54216fe --- /dev/null +++ b/spring-cloud/spring-cloud-hystrix/feign-rest-consumer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/consumer/RestConsumerFeignApplication.java @@ -0,0 +1,17 @@ +package com.baeldung.spring.cloud.hystrix.rest.consumer; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker; +import org.springframework.cloud.netflix.feign.EnableFeignClients; +import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard; + +@SpringBootApplication +@EnableCircuitBreaker +@EnableHystrixDashboard +@EnableFeignClients +public class RestConsumerFeignApplication { + public static void main(String[] args) { + SpringApplication.run(RestConsumerFeignApplication.class, args); + } +} diff --git a/spring-cloud/spring-cloud-hystrix/feign-rest-consumer/src/main/resources/application.properties b/spring-cloud/spring-cloud-hystrix/feign-rest-consumer/src/main/resources/application.properties new file mode 100644 index 0000000000..3cf12afeb9 --- /dev/null +++ b/spring-cloud/spring-cloud-hystrix/feign-rest-consumer/src/main/resources/application.properties @@ -0,0 +1 @@ +server.port=8082 diff --git a/spring-cloud/spring-cloud-hystrix/feign-rest-consumer/src/main/resources/templates/greeting-view.html b/spring-cloud/spring-cloud-hystrix/feign-rest-consumer/src/main/resources/templates/greeting-view.html new file mode 100644 index 0000000000..302390fde0 --- /dev/null +++ b/spring-cloud/spring-cloud-hystrix/feign-rest-consumer/src/main/resources/templates/greeting-view.html @@ -0,0 +1,9 @@ + + + + Greetings from Hystrix + + +

+ + diff --git a/spring-cloud/spring-cloud-hystrix/pom.xml b/spring-cloud/spring-cloud-hystrix/pom.xml new file mode 100644 index 0000000000..b992ce3846 --- /dev/null +++ b/spring-cloud/spring-cloud-hystrix/pom.xml @@ -0,0 +1,49 @@ + + + 4.0.0 + + com.baeldung.spring.cloud + spring-cloud-hystrix + 1.0.0-SNAPSHOT + + rest-producer + rest-consumer + feign-rest-consumer + + pom + + spring-cloud-hystrix + + + com.baeldung.spring.cloud + spring-cloud + 1.0.0-SNAPSHOT + .. + + + + UTF-8 + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.5.1 + + 1.8 + 1.8 + + + + org.springframework.boot + spring-boot-maven-plugin + 1.4.0.RELEASE + + + + + diff --git a/spring-cloud/spring-cloud-hystrix/rest-consumer/pom.xml b/spring-cloud/spring-cloud-hystrix/rest-consumer/pom.xml new file mode 100644 index 0000000000..649ca88eb3 --- /dev/null +++ b/spring-cloud/spring-cloud-hystrix/rest-consumer/pom.xml @@ -0,0 +1,71 @@ + + + 4.0.0 + + rest-consumer + 1.0.0-SNAPSHOT + jar + + rest-consumer + + + com.baeldung.spring.cloud + spring-cloud-hystrix + 1.0.0-SNAPSHOT + .. + + + + + org.springframework.cloud + spring-cloud-starter-hystrix + 1.1.5.RELEASE + + + org.springframework.cloud + spring-cloud-starter-hystrix-dashboard + 1.1.5.RELEASE + + + org.springframework.boot + spring-boot-starter-web + 1.4.0.RELEASE + + + org.springframework.boot + spring-boot-starter-thymeleaf + 1.4.0.RELEASE + + + org.springframework.boot + spring-boot-starter-actuator + 1.4.0.RELEASE + + + + + + + org.springframework.cloud + spring-cloud-starter-parent + Brixton.SR4 + pom + import + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org.springframework.boot + spring-boot-maven-plugin + + + + diff --git a/spring-cloud/spring-cloud-hystrix/rest-consumer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/consumer/GreetingController.java b/spring-cloud/spring-cloud-hystrix/rest-consumer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/consumer/GreetingController.java new file mode 100644 index 0000000000..112ad167f6 --- /dev/null +++ b/spring-cloud/spring-cloud-hystrix/rest-consumer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/consumer/GreetingController.java @@ -0,0 +1,19 @@ +package com.baeldung.spring.cloud.hystrix.rest.consumer; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; + +@Controller +public class GreetingController { + @Autowired + private GreetingService greetingService; + + @RequestMapping("/get-greeting/{username}") + public String getGreeting(Model model, @PathVariable("username") String username) { + model.addAttribute("greeting", greetingService.getGreeting(username)); + return "greeting-view"; + } +} diff --git a/spring-cloud/spring-cloud-hystrix/rest-consumer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/consumer/GreetingService.java b/spring-cloud/spring-cloud-hystrix/rest-consumer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/consumer/GreetingService.java new file mode 100644 index 0000000000..2502e292df --- /dev/null +++ b/spring-cloud/spring-cloud-hystrix/rest-consumer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/consumer/GreetingService.java @@ -0,0 +1,17 @@ +package com.baeldung.spring.cloud.hystrix.rest.consumer; + +import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand; +import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; + +@Service +public class GreetingService { + @HystrixCommand(fallbackMethod = "defaultGreeting") + public String getGreeting(String username) { + return new RestTemplate().getForObject("http://localhost:9090/greeting/{username}", String.class, username); + } + + private String defaultGreeting(String username) { + return "Hello User!"; + } +} diff --git a/spring-cloud/spring-cloud-hystrix/rest-consumer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/consumer/RestConsumerApplication.java b/spring-cloud/spring-cloud-hystrix/rest-consumer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/consumer/RestConsumerApplication.java new file mode 100644 index 0000000000..113949c754 --- /dev/null +++ b/spring-cloud/spring-cloud-hystrix/rest-consumer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/consumer/RestConsumerApplication.java @@ -0,0 +1,15 @@ +package com.baeldung.spring.cloud.hystrix.rest.consumer; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker; +import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard; + +@SpringBootApplication +@EnableCircuitBreaker +@EnableHystrixDashboard +public class RestConsumerApplication { + public static void main(String[] args) { + SpringApplication.run(RestConsumerApplication.class, args); + } +} diff --git a/spring-cloud/spring-cloud-hystrix/rest-consumer/src/main/resources/application.properties b/spring-cloud/spring-cloud-hystrix/rest-consumer/src/main/resources/application.properties new file mode 100644 index 0000000000..4c00e40deb --- /dev/null +++ b/spring-cloud/spring-cloud-hystrix/rest-consumer/src/main/resources/application.properties @@ -0,0 +1 @@ +server.port=8080 diff --git a/spring-cloud/spring-cloud-hystrix/rest-consumer/src/main/resources/templates/greeting-view.html b/spring-cloud/spring-cloud-hystrix/rest-consumer/src/main/resources/templates/greeting-view.html new file mode 100644 index 0000000000..302390fde0 --- /dev/null +++ b/spring-cloud/spring-cloud-hystrix/rest-consumer/src/main/resources/templates/greeting-view.html @@ -0,0 +1,9 @@ + + + + Greetings from Hystrix + + +

+ + diff --git a/spring-cloud/spring-cloud-hystrix/rest-producer/pom.xml b/spring-cloud/spring-cloud-hystrix/rest-producer/pom.xml new file mode 100644 index 0000000000..726d18d2c3 --- /dev/null +++ b/spring-cloud/spring-cloud-hystrix/rest-producer/pom.xml @@ -0,0 +1,39 @@ + + + 4.0.0 + + rest-producer + 1.0.0-SNAPSHOT + jar + + rest-producer + + + com.baeldung.spring.cloud + spring-cloud-hystrix + 1.0.0-SNAPSHOT + .. + + + + + org.springframework.boot + spring-boot-starter-web + 1.4.0.RELEASE + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org.springframework.boot + spring-boot-maven-plugin + + + + diff --git a/spring-cloud/spring-cloud-hystrix/rest-producer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/producer/GreetingController.java b/spring-cloud/spring-cloud-hystrix/rest-producer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/producer/GreetingController.java new file mode 100644 index 0000000000..e82220d27a --- /dev/null +++ b/spring-cloud/spring-cloud-hystrix/rest-producer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/producer/GreetingController.java @@ -0,0 +1,9 @@ +package com.baeldung.spring.cloud.hystrix.rest.producer; + +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; + +public interface GreetingController { + @RequestMapping("/greeting/{username}") + String greeting(@PathVariable("username") String username); +} diff --git a/spring-cloud/spring-cloud-hystrix/rest-producer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/producer/GreetingControllerImpl.java b/spring-cloud/spring-cloud-hystrix/rest-producer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/producer/GreetingControllerImpl.java new file mode 100644 index 0000000000..3541035ba5 --- /dev/null +++ b/spring-cloud/spring-cloud-hystrix/rest-producer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/producer/GreetingControllerImpl.java @@ -0,0 +1,12 @@ +package com.baeldung.spring.cloud.hystrix.rest.producer; + +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class GreetingControllerImpl implements GreetingController { + @Override + public String greeting(@PathVariable("username") String username) { + return String.format("Hello %s!\n", username); + } +} diff --git a/spring-cloud/spring-cloud-hystrix/rest-producer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/producer/RestProducerApplication.java b/spring-cloud/spring-cloud-hystrix/rest-producer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/producer/RestProducerApplication.java new file mode 100644 index 0000000000..206a6a2d03 --- /dev/null +++ b/spring-cloud/spring-cloud-hystrix/rest-producer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/producer/RestProducerApplication.java @@ -0,0 +1,11 @@ +package com.baeldung.spring.cloud.hystrix.rest.producer; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class RestProducerApplication { + public static void main(String[] args) { + SpringApplication.run(RestProducerApplication.class, args); + } +} diff --git a/spring-cloud/spring-cloud-hystrix/rest-producer/src/main/resources/application.properties b/spring-cloud/spring-cloud-hystrix/rest-producer/src/main/resources/application.properties new file mode 100644 index 0000000000..9ce9d88ffb --- /dev/null +++ b/spring-cloud/spring-cloud-hystrix/rest-producer/src/main/resources/application.properties @@ -0,0 +1,2 @@ +spring.application.name=rest-producer +server.port=9090 From c14c66167e1fdb42eef0901c43c072377da1de9b Mon Sep 17 00:00:00 2001 From: slavisa-baeldung Date: Thu, 1 Sep 2016 14:03:17 +0200 Subject: [PATCH 042/265] BAEL-169 - adding README file --- spring-cloud/README.md | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 spring-cloud/README.md diff --git a/spring-cloud/README.md b/spring-cloud/README.md new file mode 100644 index 0000000000..86f67cf26e --- /dev/null +++ b/spring-cloud/README.md @@ -0,0 +1,8 @@ +## The Module Holds Sources for the Following Articles + +- [Quick Intro to Spring Cloud Configuration](http://www.baeldung.com/spring-cloud-configuration) +- [Dockerizing a Spring Boot Application](http://www.baeldung.com/dockerizing-spring-boot-application) +- [Introduction to Spring Cloud Netflix – Eureka](http://www.baeldung.com/spring-cloud-netflix-eureka) +- [Intro to Spring Cloud Netflix - Hystrix](http://www.baeldung.com/spring-cloud-netflix-hystrix) + + From ffe5ce630c2d1e991dde66c3be3b9759af6ad464 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20R=C3=A4del?= Date: Thu, 1 Sep 2016 14:09:51 +0200 Subject: [PATCH 043/265] BAEL-305: Included embedded Jetty. Use more recent version of servlet api. --- .../front-controller-pattern/pom.xml | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/enterprise-patterns/front-controller-pattern/pom.xml b/enterprise-patterns/front-controller-pattern/pom.xml index eefd52a52d..dbcd4f1b1d 100644 --- a/enterprise-patterns/front-controller-pattern/pom.xml +++ b/enterprise-patterns/front-controller-pattern/pom.xml @@ -16,8 +16,8 @@ javax.servlet - servlet-api - 2.5 + javax.servlet-api + 3.1.0 provided @@ -29,11 +29,13 @@ maven-compiler-plugin - org.apache.maven.plugins - maven-war-plugin - 3.0.0 + org.eclipse.jetty + jetty-maven-plugin + 9.4.0.M1 - ${env.DEPLOYMENTS} + + /front-controller + From 525c93059c32f92da575177d0ec6c79d4b77f6fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20R=C3=A4del?= Date: Thu, 1 Sep 2016 21:41:37 +0200 Subject: [PATCH 044/265] BAEL-305: Refactored Book and Bookshelf as interfaces and implemented them. --- .../front-controller-pattern/pom.xml | 2 +- .../controller/commands/SearchCommand.java | 5 +- .../patterns/front/controller/data/Book.java | 39 +++------------- .../front/controller/data/BookImpl.java | 46 +++++++++++++++++++ .../front/controller/data/Bookshelf.java | 31 +++---------- .../front/controller/data/BookshelfImpl.java | 24 ++++++++++ 6 files changed, 87 insertions(+), 60 deletions(-) create mode 100644 enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/BookImpl.java create mode 100644 enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/BookshelfImpl.java diff --git a/enterprise-patterns/front-controller-pattern/pom.xml b/enterprise-patterns/front-controller-pattern/pom.xml index dbcd4f1b1d..5f9152ad42 100644 --- a/enterprise-patterns/front-controller-pattern/pom.xml +++ b/enterprise-patterns/front-controller-pattern/pom.xml @@ -17,7 +17,7 @@ javax.servlet javax.servlet-api - 3.1.0 + 4.0.0-b01 provided diff --git a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/SearchCommand.java b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/SearchCommand.java index 4d9e5f7b79..0c5bd64bbc 100644 --- a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/SearchCommand.java +++ b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/SearchCommand.java @@ -1,7 +1,7 @@ package com.baeldung.enterprise.patterns.front.controller.commands; import com.baeldung.enterprise.patterns.front.controller.data.Book; -import com.baeldung.enterprise.patterns.front.controller.data.Bookshelf; +import com.baeldung.enterprise.patterns.front.controller.data.BookshelfImpl; import javax.servlet.ServletException; import java.io.IOException; @@ -9,13 +9,12 @@ import java.io.IOException; public class SearchCommand extends FrontCommand { @Override public void process() throws ServletException, IOException { - Book book = Bookshelf.getInstance() + Book book = new BookshelfImpl().getInstance() .findByTitle(request.getParameter("title")); if (book != null) { request.setAttribute("book", book); forward("book-found"); } else { - request.setAttribute("books", Bookshelf.getInstance().getBooks()); forward("book-notfound"); } } diff --git a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Book.java b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Book.java index 634e05c3a0..abadcc0d76 100644 --- a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Book.java +++ b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Book.java @@ -1,40 +1,15 @@ package com.baeldung.enterprise.patterns.front.controller.data; -public class Book { - private String author; - private String title; - private Double price; +public interface Book { + String getAuthor(); - public Book() { - } + void setAuthor(String author); - public Book(String author, String title, Double price) { - this.author = author; - this.title = title; - this.price = price; - } + String getTitle(); - public String getAuthor() { - return author; - } + void setTitle(String title); - public void setAuthor(String author) { - this.author = author; - } + Double getPrice(); - public String getTitle() { - return title; - } - - public void setTitle(String title) { - this.title = title; - } - - public Double getPrice() { - return price; - } - - public void setPrice(Double price) { - this.price = price; - } + void setPrice(Double price); } diff --git a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/BookImpl.java b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/BookImpl.java new file mode 100644 index 0000000000..b270bc7985 --- /dev/null +++ b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/BookImpl.java @@ -0,0 +1,46 @@ +package com.baeldung.enterprise.patterns.front.controller.data; + +public class BookImpl implements Book { + private String author; + private String title; + private Double price; + + public BookImpl() { + } + + public BookImpl(String author, String title, Double price) { + this.author = author; + this.title = title; + this.price = price; + } + + @Override + public String getAuthor() { + return author; + } + + @Override + public void setAuthor(String author) { + this.author = author; + } + + @Override + public String getTitle() { + return title; + } + + @Override + public void setTitle(String title) { + this.title = title; + } + + @Override + public Double getPrice() { + return price; + } + + @Override + public void setPrice(Double price) { + this.price = price; + } +} diff --git a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Bookshelf.java b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Bookshelf.java index ad9758bf76..1e30452d95 100644 --- a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Bookshelf.java +++ b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Bookshelf.java @@ -1,32 +1,15 @@ package com.baeldung.enterprise.patterns.front.controller.data; -import java.util.ArrayList; -import java.util.List; +public interface Bookshelf { -public class Bookshelf { - private static Bookshelf INSTANCE = new Bookshelf(); - private List books = new ArrayList<>(); - - public static Bookshelf getInstance() { - if (INSTANCE.books.size() == 0) { - INSTANCE.init(); - } - return INSTANCE; + default void init() { + add(new BookImpl("Wilson, Robert Anton & Shea, Robert", "Illuminati", 9.99)); + add(new BookImpl("Fowler, Martin", "Patterns of Enterprise Application Architecture", 27.88)); } - private void init() { - books.add(new Book("Wilson, Robert Anton & Shea, Robert", "Illuminati", 9.99)); - books.add(new Book("Fowler, Martin", "Patterns of Enterprise Application Architecture", 27.88)); - } + Bookshelf getInstance(); - public Book findByTitle(String title) { - return books.stream() - .filter(book -> book.getTitle().toLowerCase().contains(title.toLowerCase())) - .findFirst() - .orElse(null); - } + boolean add(E book); - public List getBooks() { - return books; - } + Book findByTitle(String title); } diff --git a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/BookshelfImpl.java b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/BookshelfImpl.java new file mode 100644 index 0000000000..3862418857 --- /dev/null +++ b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/BookshelfImpl.java @@ -0,0 +1,24 @@ +package com.baeldung.enterprise.patterns.front.controller.data; + +import java.util.ArrayList; + +public class BookshelfImpl extends ArrayList implements Bookshelf { + private static Bookshelf INSTANCE; + + @Override + public Bookshelf getInstance() { + if (INSTANCE == null) { + INSTANCE = new BookshelfImpl(); + INSTANCE.init(); + } + return INSTANCE; + } + + @Override + public Book findByTitle(String title) { + return this.stream() + .filter(book -> book.getTitle().toLowerCase().contains(title.toLowerCase())) + .findFirst() + .orElse(null); + } +} From b8eb2a799a89c410a74b2f9943e184d57d76365b Mon Sep 17 00:00:00 2001 From: diego Date: Thu, 1 Sep 2016 23:50:24 +0200 Subject: [PATCH 045/265] Removed unnecessary configuration. --- wicket-intro/WicketIntro/pom.xml | 9 ---- .../WicketIntro/src/test/jetty/jetty-http.xml | 38 --------------- .../src/test/jetty/jetty-https.xml | 45 ------------------ .../WicketIntro/src/test/jetty/jetty-ssl.xml | 36 -------------- .../WicketIntro/src/test/jetty/jetty.xml | 23 --------- .../WicketIntro/src/test/resources/keystore | Bin 1481 -> 0 bytes 6 files changed, 151 deletions(-) delete mode 100644 wicket-intro/WicketIntro/src/test/jetty/jetty-http.xml delete mode 100644 wicket-intro/WicketIntro/src/test/jetty/jetty-https.xml delete mode 100644 wicket-intro/WicketIntro/src/test/jetty/jetty-ssl.xml delete mode 100644 wicket-intro/WicketIntro/src/test/jetty/jetty.xml delete mode 100644 wicket-intro/WicketIntro/src/test/resources/keystore diff --git a/wicket-intro/WicketIntro/pom.xml b/wicket-intro/WicketIntro/pom.xml index c6a1a4985d..f4b1d0e11c 100644 --- a/wicket-intro/WicketIntro/pom.xml +++ b/wicket-intro/WicketIntro/pom.xml @@ -107,15 +107,6 @@ org.eclipse.jetty jetty-maven-plugin ${jetty9.version} - - - - maven.project.build.directory.test-classes - ${project.build.directory}/test-classes - - - ${project.basedir}/src/test/jetty/jetty.xml,${project.basedir}/src/test/jetty/jetty-ssl.xml,${project.basedir}/src/test/jetty/jetty-http.xml,${project.basedir}/src/test/jetty/jetty-https.xml - diff --git a/wicket-intro/WicketIntro/src/test/jetty/jetty-http.xml b/wicket-intro/WicketIntro/src/test/jetty/jetty-http.xml deleted file mode 100644 index 9f3256b15c..0000000000 --- a/wicket-intro/WicketIntro/src/test/jetty/jetty-http.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/wicket-intro/WicketIntro/src/test/jetty/jetty-https.xml b/wicket-intro/WicketIntro/src/test/jetty/jetty-https.xml deleted file mode 100644 index 58f7d53d2d..0000000000 --- a/wicket-intro/WicketIntro/src/test/jetty/jetty-https.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - http/1.1 - - - - - - - - - - - - - 30000 - - - - \ No newline at end of file diff --git a/wicket-intro/WicketIntro/src/test/jetty/jetty-ssl.xml b/wicket-intro/WicketIntro/src/test/jetty/jetty-ssl.xml deleted file mode 100644 index 49e558bb47..0000000000 --- a/wicket-intro/WicketIntro/src/test/jetty/jetty-ssl.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - / - - - - - - SSL_RSA_WITH_DES_CBC_SHA - SSL_DHE_RSA_WITH_DES_CBC_SHA - SSL_DHE_DSS_WITH_DES_CBC_SHA - SSL_RSA_EXPORT_WITH_RC4_40_MD5 - SSL_RSA_EXPORT_WITH_DES40_CBC_SHA - SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA - SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/wicket-intro/WicketIntro/src/test/jetty/jetty.xml b/wicket-intro/WicketIntro/src/test/jetty/jetty.xml deleted file mode 100644 index 1a6293b405..0000000000 --- a/wicket-intro/WicketIntro/src/test/jetty/jetty.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - https - - - - 32768 - 8192 - 8192 - true - false - 512 - - - - - - \ No newline at end of file diff --git a/wicket-intro/WicketIntro/src/test/resources/keystore b/wicket-intro/WicketIntro/src/test/resources/keystore deleted file mode 100644 index 30bbc90ccffcc2745adf09077df16fc3db9c0b47..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1481 zcmezO_TO6u1_mY|W&~r_tkjZ{N+8cDIXV0qP-d4w6Vo;WJ~l3GHbxdkEha%mMpg!v zCZXF+L+yeb(_D>eh5NdK;{zR}$;>(o{ zE3dg|o8B)~5ILLXvtIl5>N#JOOd1Wnqs3o|CH&_3)%k6yk>9%q<*Th*+pP{h`8MfJ zi*YvUmF+Z?t0^x!WMEPBj(9H=gC$Rl(ii9d&)j3 zbTLZUo^$C9pTUfx#bzsWYP%dfFaJ7`%~pJY<=Y|t;J>bqocFORJ8`)y%bsft`MuQV z>{(ffqGR9Jv){6}VE@M8vig|blV9STFXpbA!u05_iEyhlhqkKZ;q9M!rpxs*tJ<*3 zhiWIa`fr}ezEJ&I{ND#6cX8iNm8;zH2RodQ=n#@cCCOr| zTXCYzlEX`7T5ANh+?d0qlI6dJ@sW+nZle@FF~#KRKmX0;w|%=dD0Q*hi_hY5Y{CW4 zrOJiNd#@bdbya1dHCyZRTmE&^ii4i-IJn9!!^(ZV)t=3cyTYEANN&*o!@WvnMVp(G z{s(U^qqZe`enoqQPhO)mduP*#-L_kTKzrv7mI-@Dg3P;OV0 z+>^?;+IITpTAR2zDn5LAd`IV(R$N{5^Homy`Hv1=mC|&FBxtu~Lg@4UcN&B|cVxXe%hnAVv?S=fZxL-Vrp^2_sJA{-bZ z>z> zKgGsI?`g4Czs|(W$iRr~JYW)G2D&RF+G&cYMyt~S#qC>9Yo8yjfwPfwA z__FOSvwctPaoU&=rO7Hf`?L)EoW48GpSg3HG`N>Wh@H&bQ>GZp6P=NEzJCF4QTtMF zyCu^XE;=4q;eAoe&u6Fp<&$m~Ic0x)r`Sfd8H?)QbE`9U3bGFi_@iY1?tkt>-^;Q{1ps`KMkD|L From 3f204ebd59d754a66b018e16dd6c291a6a4b3009 Mon Sep 17 00:00:00 2001 From: anton-k Date: Fri, 2 Sep 2016 01:43:49 +0300 Subject: [PATCH 046/265] Running maven build and changes to some of tests. --- .../java/com/baeldung/java9/httpclient/Main.java | 14 -------------- ...tpRequests.java => SimpleHttpRequestsTest.java} | 0 2 files changed, 14 deletions(-) delete mode 100644 core-java-9/src/test/java/com/baeldung/java9/httpclient/Main.java rename core-java-9/src/test/java/com/baeldung/java9/httpclient/{SimpleHttpRequests.java => SimpleHttpRequestsTest.java} (100%) diff --git a/core-java-9/src/test/java/com/baeldung/java9/httpclient/Main.java b/core-java-9/src/test/java/com/baeldung/java9/httpclient/Main.java deleted file mode 100644 index c7d2f43800..0000000000 --- a/core-java-9/src/test/java/com/baeldung/java9/httpclient/Main.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.baeldung.java9.httpclient; - -public class Main { - - public static void main(String[] args) throws Exception { - SimpleHttpRequests shr = new SimpleHttpRequests(); - shr.quickGet(); - shr.PostMehtod(); - - shr.configureHttpClient(); - shr.asyncGet(); - } - -} diff --git a/core-java-9/src/test/java/com/baeldung/java9/httpclient/SimpleHttpRequests.java b/core-java-9/src/test/java/com/baeldung/java9/httpclient/SimpleHttpRequestsTest.java similarity index 100% rename from core-java-9/src/test/java/com/baeldung/java9/httpclient/SimpleHttpRequests.java rename to core-java-9/src/test/java/com/baeldung/java9/httpclient/SimpleHttpRequestsTest.java From 27f540c9bfe15c16c156eeed3098feef3ddb2c10 Mon Sep 17 00:00:00 2001 From: anton-k Date: Fri, 2 Sep 2016 01:48:15 +0300 Subject: [PATCH 047/265] Fixed maven build and modifications ot some tests --- core-java-9/pom.xml | 192 +++++++----------- .../java9/language/PrivateInterface.java | 23 +++ .../baeldung/java9/process/ProcessUtils.java | 4 - .../httpclient/SimpleHttpRequestsTest.java | 58 ++---- .../java9/language/PrivateInterfaceTest.java | 21 +- 5 files changed, 127 insertions(+), 171 deletions(-) create mode 100644 core-java-9/src/main/java/com/baeldung/java9/language/PrivateInterface.java diff --git a/core-java-9/pom.xml b/core-java-9/pom.xml index 06421915a3..b29838d283 100644 --- a/core-java-9/pom.xml +++ b/core-java-9/pom.xml @@ -1,138 +1,102 @@ - - 4.0.0 - com.baeldung - core-java9 - 0.1-SNAPSHOT + + 4.0.0 + com.baeldung + core-java9 + 0.2-SNAPSHOT - core-java9 + core-java9 - + + + apache.snapshots + http://repository.apache.org/snapshots/ + + - - - org.slf4j - slf4j-api - ${org.slf4j.version} - + + org.slf4j + slf4j-api + ${org.slf4j.version} + - - org.hamcrest - hamcrest-library - ${org.hamcrest.version} - test - + + org.hamcrest + hamcrest-library + ${org.hamcrest.version} + test + - - junit - junit - ${junit.version} - test - + + junit + junit + ${junit.version} + test + - - org.mockito - mockito-core - ${mockito.version} - test - + + org.mockito + mockito-core + ${mockito.version} + test + - + - - core-java-9 - - - src/main/resources - true - - + + core-java-9 - + - - org.apache.maven.plugins - maven-compiler-plugin - ${maven-compiler-plugin.version} - - 1.8 - 1.8 - - true - C:\develop\jdks\jdk-9_ea122\bin\javac - 1.9 - - - + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + 1.9 + 1.9 - - org.apache.maven.plugins - maven-surefire-plugin - ${maven-surefire-plugin.version} - + true + + - + - + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + - - - 1.7.13 - 1.0.13 + - - 5.1.3.Final + - - 19.0 - 3.4 + + + 1.7.13 + 1.0.13 - - 1.3 - 4.12 - 1.10.19 - - 3.5.1 - - - 2.6 - 2.19.1 - 2.7 + + + 3.6-jigsaw-SNAPSHOT - + + 2.19.1 + + + 1.3 + 4.12 + 1.10.19 + diff --git a/core-java-9/src/main/java/com/baeldung/java9/language/PrivateInterface.java b/core-java-9/src/main/java/com/baeldung/java9/language/PrivateInterface.java new file mode 100644 index 0000000000..fd6a496b18 --- /dev/null +++ b/core-java-9/src/main/java/com/baeldung/java9/language/PrivateInterface.java @@ -0,0 +1,23 @@ +package com.baeldung.java9.language; + +public interface PrivateInterface { + + private static String staticPrivate() { + return "static private"; + } + + private String instancePrivate() { + return "instance private"; + } + + public default void check(){ + String result = staticPrivate(); + if (!result.equals("static private")) + throw new AssertionError("Incorrect result for static private interface method"); + PrivateInterface pvt = new PrivateInterface() { + }; + result = pvt.instancePrivate(); + if (!result.equals("instance private")) + throw new AssertionError("Incorrect result for instance private interface method"); + } +} diff --git a/core-java-9/src/main/java/com/baeldung/java9/process/ProcessUtils.java b/core-java-9/src/main/java/com/baeldung/java9/process/ProcessUtils.java index b9c1cf1880..d6682bd0c8 100644 --- a/core-java-9/src/main/java/com/baeldung/java9/process/ProcessUtils.java +++ b/core-java-9/src/main/java/com/baeldung/java9/process/ProcessUtils.java @@ -8,10 +8,6 @@ import java.time.Duration; import java.time.Instant; import java.util.stream.Stream; -import org.junit.Before; -import org.junit.Test; - -import junit.framework.Assert; public class ProcessUtils { diff --git a/core-java-9/src/test/java/com/baeldung/java9/httpclient/SimpleHttpRequestsTest.java b/core-java-9/src/test/java/com/baeldung/java9/httpclient/SimpleHttpRequestsTest.java index 78a38f3357..ab28b0a805 100644 --- a/core-java-9/src/test/java/com/baeldung/java9/httpclient/SimpleHttpRequestsTest.java +++ b/core-java-9/src/test/java/com/baeldung/java9/httpclient/SimpleHttpRequestsTest.java @@ -1,4 +1,6 @@ -package com.baeldung.java9.httpclient; +package com.baeldung.java9.httpclient; + + import static java.net.HttpURLConnection.HTTP_OK; import static org.junit.Assert.assertTrue; @@ -24,61 +26,40 @@ import javax.net.ssl.SSLParameters; import org.junit.Before; import org.junit.Test; -public class SimpleHttpRequests { +public class SimpleHttpRequestsTest { - // private URI httpURI = + private URI httpURI; @Before - public void init() { - + public void init() throws URISyntaxException { + httpURI = new URI("http://www.baeldung.com/"); } @Test public void quickGet() throws IOException, InterruptedException, URISyntaxException { - HttpRequest request = HttpRequest.create(new URI("http://localhost:8080")).GET(); + HttpRequest request = HttpRequest.create( httpURI ).GET(); HttpResponse response = request.response(); - System.out.println(printHeaders(response.headers())); + int responseStatusCode = response.statusCode(); String responseBody = response.body(HttpResponse.asString()); - assertTrue("Get response body size", responseBody.length() > 10); + assertTrue("Get response status code is bigger then 400", responseStatusCode < 400); } @Test - public void asyncGet() throws URISyntaxException, IOException, InterruptedException, ExecutionException{ - HttpRequest request = HttpRequest.create(new URI("http://localhost:8080")).GET(); + public void asynchronousGet() throws URISyntaxException, IOException, InterruptedException, ExecutionException{ + HttpRequest request = HttpRequest.create(httpURI).GET(); long before = System.currentTimeMillis(); CompletableFuture futureResponse = request.responseAsync(); futureResponse.thenAccept( response -> { - HttpHeaders hs = response.headers(); - System.out.println(Thread.currentThread()+"\nHeaders:----------------------\n"+ printHeaders(hs)); String responseBody = response.body(HttpResponse.asString()); - - - //System.out.println(responseBody); - }); - - - - - long after = System.currentTimeMillis(); - System.out.println(Thread.currentThread()+" waits "+ (after - before)); - assertTrue("Thread waits", (after - before) < 1500); - - futureResponse.join(); - - // Calculate some other thing in this Thread - //HttpResponse response = futureResponse.get(); - long afterAfter = System.currentTimeMillis(); - System.out.println(Thread.currentThread()+ "(afterAfter - before)"+ (afterAfter - before)); - - //String responseBody = response.body(HttpResponse.asString()); - //HttpHeaders hs = response.headers(); - //System.out.println(responseBody); - // assertTrue("Get response body size", responseBody.length() > 10); + }); + HttpResponse resp = futureResponse.get(); + HttpHeaders hs = resp.headers(); + assertTrue("There should be more then 1 header.", hs.map().size() >1); } @Test - public void PostMehtod() throws URISyntaxException, IOException, InterruptedException { - HttpRequest.Builder requestBuilder = HttpRequest.create(new URI("http://localhost:8080")); + public void postMehtod() throws URISyntaxException, IOException, InterruptedException { + HttpRequest.Builder requestBuilder = HttpRequest.create(httpURI); requestBuilder.body(HttpRequest.fromString("param1=foo,param2=bar")).followRedirects(HttpClient.Redirect.SECURE); HttpRequest request = requestBuilder.POST(); HttpResponse response = request.response(); @@ -96,12 +77,11 @@ public class SimpleHttpRequests { HttpClient.Builder hcBuilder = HttpClient.create(); hcBuilder.cookieManager(cManager).sslContext(SSLContext.getDefault()).sslParameters(sslParam); HttpClient httpClient = hcBuilder.build(); - HttpRequest.Builder reqBuilder = httpClient.request(new URI("https://localhost:8443")); + HttpRequest.Builder reqBuilder = httpClient.request(new URI("https://www.facebook.com")); HttpRequest request = reqBuilder.followRedirects(HttpClient.Redirect.ALWAYS).GET(); HttpResponse response = request.response(); int statusCode = response.statusCode(); - System.out.println(response.body(HttpResponse.asString())); assertTrue("HTTP return code", statusCode == HTTP_OK); } diff --git a/core-java-9/src/test/java/com/baeldung/java9/language/PrivateInterfaceTest.java b/core-java-9/src/test/java/com/baeldung/java9/language/PrivateInterfaceTest.java index a41541f000..29ef3930f8 100644 --- a/core-java-9/src/test/java/com/baeldung/java9/language/PrivateInterfaceTest.java +++ b/core-java-9/src/test/java/com/baeldung/java9/language/PrivateInterfaceTest.java @@ -1,22 +1,15 @@ -package com.baeldung.java9; +package com.baeldung.java9.language; import com.baeldung.java9.language.PrivateInterface; -import com.baeldung.java9.language.TryWithResourcesTest; +import org.junit.Test; -public class Main { +public class PrivateInterfaceTest { - public static void main(String args[]){ - PrivateInterface pi =new PrivateInterface() { + @Test + public void test() { + PrivateInterface piClass = new PrivateInterface() { }; - pi.check(); + piClass.check(); } - -// public static void main(String[] args) throws Exception { -// MultiResultionImageTest mri = new MultiResultionImageTest(); -// mri.baseMultiResImageTest(); -// -// TryWithResourcesTest tt = new TryWithResourcesTest(); -// // tt.test1(); -// } } From 335770683c021af22f2016261423c2afbe68497c Mon Sep 17 00:00:00 2001 From: Alex Theedom Date: Fri, 2 Sep 2016 00:00:43 +0100 Subject: [PATCH 048/265] Change package to com.baeldung --- mapstruct/bin/pom.xml | 49 ------------------- .../baeldung/dto/DivisionDTO.java | 2 +- .../baeldung/dto/EmployeeDTO.java | 2 +- .../baeldung/dto/SimpleSource.java | 2 +- .../baeldung/entity/Division.java | 2 +- .../baeldung/entity/Employee.java | 2 +- .../baeldung/entity/SimpleDestination.java | 2 +- .../baeldung/mapper/EmployeeMapper.java | 14 +++--- .../mapper/SimpleSourceDestinationMapper.java | 6 +-- .../src/main/resources/applicationContext.xml | 2 +- .../baeldung/mapper/EmployeeMapperTest.java | 16 +++--- .../SimpleSourceDestinationMapperTest.java | 6 +-- 12 files changed, 28 insertions(+), 77 deletions(-) delete mode 100644 mapstruct/bin/pom.xml rename mapstruct/src/main/java/{org => com}/baeldung/dto/DivisionDTO.java (94%) rename mapstruct/src/main/java/{org => com}/baeldung/dto/EmployeeDTO.java (97%) rename mapstruct/src/main/java/{org => com}/baeldung/dto/SimpleSource.java (93%) rename mapstruct/src/main/java/{org => com}/baeldung/entity/Division.java (94%) rename mapstruct/src/main/java/{org => com}/baeldung/entity/Employee.java (96%) rename mapstruct/src/main/java/{org => com}/baeldung/entity/SimpleDestination.java (93%) rename mapstruct/src/main/java/{org => com}/baeldung/mapper/EmployeeMapper.java (85%) rename mapstruct/src/main/java/{org => com}/baeldung/mapper/SimpleSourceDestinationMapper.java (69%) rename mapstruct/src/test/java/{org => com}/baeldung/mapper/EmployeeMapperTest.java (96%) rename mapstruct/src/test/java/{org => com}/baeldung/mapper/SimpleSourceDestinationMapperTest.java (93%) diff --git a/mapstruct/bin/pom.xml b/mapstruct/bin/pom.xml deleted file mode 100644 index 8a28ae9511..0000000000 --- a/mapstruct/bin/pom.xml +++ /dev/null @@ -1,49 +0,0 @@ - - - 4.0.0 - mapstruct - mapstruct - com.baeldung - 1.0 - jar - - - 1.0.0.Final - - - - org.mapstruct - mapstruct-jdk8 - ${org.mapstruct.version} - - - junit - junit - 4.12 - test - - - - mapstruct - - - org.apache.maven.plugins - maven-compiler-plugin - 3.5.1 - - 1.8 - 1.8 - - - org.mapstruct - mapstruct-processor - ${org.mapstruct.version} - - - - - - - diff --git a/mapstruct/src/main/java/org/baeldung/dto/DivisionDTO.java b/mapstruct/src/main/java/com/baeldung/dto/DivisionDTO.java similarity index 94% rename from mapstruct/src/main/java/org/baeldung/dto/DivisionDTO.java rename to mapstruct/src/main/java/com/baeldung/dto/DivisionDTO.java index 01a5792176..37f8bd111b 100644 --- a/mapstruct/src/main/java/org/baeldung/dto/DivisionDTO.java +++ b/mapstruct/src/main/java/com/baeldung/dto/DivisionDTO.java @@ -1,4 +1,4 @@ -package org.baeldung.dto; +package com.baeldung.dto; public class DivisionDTO { diff --git a/mapstruct/src/main/java/org/baeldung/dto/EmployeeDTO.java b/mapstruct/src/main/java/com/baeldung/dto/EmployeeDTO.java similarity index 97% rename from mapstruct/src/main/java/org/baeldung/dto/EmployeeDTO.java rename to mapstruct/src/main/java/com/baeldung/dto/EmployeeDTO.java index 24d6950cab..5da3165683 100644 --- a/mapstruct/src/main/java/org/baeldung/dto/EmployeeDTO.java +++ b/mapstruct/src/main/java/com/baeldung/dto/EmployeeDTO.java @@ -1,4 +1,4 @@ -package org.baeldung.dto; +package com.baeldung.dto; public class EmployeeDTO { diff --git a/mapstruct/src/main/java/org/baeldung/dto/SimpleSource.java b/mapstruct/src/main/java/com/baeldung/dto/SimpleSource.java similarity index 93% rename from mapstruct/src/main/java/org/baeldung/dto/SimpleSource.java rename to mapstruct/src/main/java/com/baeldung/dto/SimpleSource.java index 4c169461c8..ec8d80c4af 100644 --- a/mapstruct/src/main/java/org/baeldung/dto/SimpleSource.java +++ b/mapstruct/src/main/java/com/baeldung/dto/SimpleSource.java @@ -1,4 +1,4 @@ -package org.baeldung.dto; +package com.baeldung.dto; public class SimpleSource { diff --git a/mapstruct/src/main/java/org/baeldung/entity/Division.java b/mapstruct/src/main/java/com/baeldung/entity/Division.java similarity index 94% rename from mapstruct/src/main/java/org/baeldung/entity/Division.java rename to mapstruct/src/main/java/com/baeldung/entity/Division.java index 83b0916eb4..7b1416d6c5 100644 --- a/mapstruct/src/main/java/org/baeldung/entity/Division.java +++ b/mapstruct/src/main/java/com/baeldung/entity/Division.java @@ -1,4 +1,4 @@ -package org.baeldung.entity; +package com.baeldung.entity; public class Division { diff --git a/mapstruct/src/main/java/org/baeldung/entity/Employee.java b/mapstruct/src/main/java/com/baeldung/entity/Employee.java similarity index 96% rename from mapstruct/src/main/java/org/baeldung/entity/Employee.java rename to mapstruct/src/main/java/com/baeldung/entity/Employee.java index 8c441813b6..04044f4dfe 100644 --- a/mapstruct/src/main/java/org/baeldung/entity/Employee.java +++ b/mapstruct/src/main/java/com/baeldung/entity/Employee.java @@ -1,4 +1,4 @@ -package org.baeldung.entity; +package com.baeldung.entity; import java.util.Date; diff --git a/mapstruct/src/main/java/org/baeldung/entity/SimpleDestination.java b/mapstruct/src/main/java/com/baeldung/entity/SimpleDestination.java similarity index 93% rename from mapstruct/src/main/java/org/baeldung/entity/SimpleDestination.java rename to mapstruct/src/main/java/com/baeldung/entity/SimpleDestination.java index 9fdbd7f054..d9cba1c372 100644 --- a/mapstruct/src/main/java/org/baeldung/entity/SimpleDestination.java +++ b/mapstruct/src/main/java/com/baeldung/entity/SimpleDestination.java @@ -1,4 +1,4 @@ -package org.baeldung.entity; +package com.baeldung.entity; public class SimpleDestination { diff --git a/mapstruct/src/main/java/org/baeldung/mapper/EmployeeMapper.java b/mapstruct/src/main/java/com/baeldung/mapper/EmployeeMapper.java similarity index 85% rename from mapstruct/src/main/java/org/baeldung/mapper/EmployeeMapper.java rename to mapstruct/src/main/java/com/baeldung/mapper/EmployeeMapper.java index 013c332e6e..8e00103d0e 100644 --- a/mapstruct/src/main/java/org/baeldung/mapper/EmployeeMapper.java +++ b/mapstruct/src/main/java/com/baeldung/mapper/EmployeeMapper.java @@ -1,15 +1,15 @@ -package org.baeldung.mapper; +package com.baeldung.mapper; -import java.util.List; - -import org.baeldung.dto.DivisionDTO; -import org.baeldung.dto.EmployeeDTO; -import org.baeldung.entity.Division; -import org.baeldung.entity.Employee; +import com.baeldung.dto.DivisionDTO; +import com.baeldung.dto.EmployeeDTO; +import com.baeldung.entity.Division; +import com.baeldung.entity.Employee; import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.mapstruct.Mappings; +import java.util.List; + @Mapper public interface EmployeeMapper { diff --git a/mapstruct/src/main/java/org/baeldung/mapper/SimpleSourceDestinationMapper.java b/mapstruct/src/main/java/com/baeldung/mapper/SimpleSourceDestinationMapper.java similarity index 69% rename from mapstruct/src/main/java/org/baeldung/mapper/SimpleSourceDestinationMapper.java rename to mapstruct/src/main/java/com/baeldung/mapper/SimpleSourceDestinationMapper.java index 3e872e68a3..f3f2187c20 100644 --- a/mapstruct/src/main/java/org/baeldung/mapper/SimpleSourceDestinationMapper.java +++ b/mapstruct/src/main/java/com/baeldung/mapper/SimpleSourceDestinationMapper.java @@ -1,7 +1,7 @@ -package org.baeldung.mapper; +package com.baeldung.mapper; -import org.baeldung.dto.SimpleSource; -import org.baeldung.entity.SimpleDestination; +import com.baeldung.dto.SimpleSource; +import com.baeldung.entity.SimpleDestination; import org.mapstruct.Mapper; @Mapper(componentModel = "spring") diff --git a/mapstruct/src/main/resources/applicationContext.xml b/mapstruct/src/main/resources/applicationContext.xml index 1e6649139c..22d8d1b769 100644 --- a/mapstruct/src/main/resources/applicationContext.xml +++ b/mapstruct/src/main/resources/applicationContext.xml @@ -10,6 +10,6 @@ http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> - + \ No newline at end of file diff --git a/mapstruct/src/test/java/org/baeldung/mapper/EmployeeMapperTest.java b/mapstruct/src/test/java/com/baeldung/mapper/EmployeeMapperTest.java similarity index 96% rename from mapstruct/src/test/java/org/baeldung/mapper/EmployeeMapperTest.java rename to mapstruct/src/test/java/com/baeldung/mapper/EmployeeMapperTest.java index c5998f89ef..7da6c41dc1 100644 --- a/mapstruct/src/test/java/org/baeldung/mapper/EmployeeMapperTest.java +++ b/mapstruct/src/test/java/com/baeldung/mapper/EmployeeMapperTest.java @@ -1,6 +1,11 @@ -package org.baeldung.mapper; +package com.baeldung.mapper; -import static org.junit.Assert.assertEquals; +import com.baeldung.dto.DivisionDTO; +import com.baeldung.dto.EmployeeDTO; +import com.baeldung.entity.Division; +import com.baeldung.entity.Employee; +import org.junit.Test; +import org.mapstruct.factory.Mappers; import java.text.ParseException; import java.text.SimpleDateFormat; @@ -8,12 +13,7 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; -import org.baeldung.dto.DivisionDTO; -import org.baeldung.dto.EmployeeDTO; -import org.baeldung.entity.Division; -import org.baeldung.entity.Employee; -import org.junit.Test; -import org.mapstruct.factory.Mappers; +import static org.junit.Assert.assertEquals; public class EmployeeMapperTest { diff --git a/mapstruct/src/test/java/org/baeldung/mapper/SimpleSourceDestinationMapperTest.java b/mapstruct/src/test/java/com/baeldung/mapper/SimpleSourceDestinationMapperTest.java similarity index 93% rename from mapstruct/src/test/java/org/baeldung/mapper/SimpleSourceDestinationMapperTest.java rename to mapstruct/src/test/java/com/baeldung/mapper/SimpleSourceDestinationMapperTest.java index 226603b16a..a7addf33a7 100644 --- a/mapstruct/src/test/java/org/baeldung/mapper/SimpleSourceDestinationMapperTest.java +++ b/mapstruct/src/test/java/com/baeldung/mapper/SimpleSourceDestinationMapperTest.java @@ -1,9 +1,9 @@ -package org.baeldung.mapper; +package com.baeldung.mapper; import static org.junit.Assert.assertEquals; -import org.baeldung.dto.SimpleSource; -import org.baeldung.entity.SimpleDestination; +import com.baeldung.dto.SimpleSource; +import com.baeldung.entity.SimpleDestination; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; From 7b6200728d93a528c0be27f075becf7c121a6446 Mon Sep 17 00:00:00 2001 From: anton-k11 Date: Fri, 2 Sep 2016 02:08:55 +0300 Subject: [PATCH 049/265] Removing unnecessary files --- core-java-9/src/test/build.bat | 10 ---------- .../java/com/baeldung/java9/process/Main.java | 18 ------------------ 2 files changed, 28 deletions(-) delete mode 100644 core-java-9/src/test/build.bat delete mode 100644 core-java-9/src/test/java/com/baeldung/java9/process/Main.java diff --git a/core-java-9/src/test/build.bat b/core-java-9/src/test/build.bat deleted file mode 100644 index c6208b89d2..0000000000 --- a/core-java-9/src/test/build.bat +++ /dev/null @@ -1,10 +0,0 @@ -@echo off -REM C:\develop\jdks\jdk-9_ea123\bin\javac -REM -REM C:\develop\jdks\jdk1.8.0_45\bin\javac -@echo on -C:\develop\jdks\jdk-9_ea123\bin\javac -Werror -cp C:\Users\i032048\.m2\repository\org\hamcrest\hamcrest-library\1.3\hamcrest-library-1.3.jar;C:\Users\i032048\.m2\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;C:\Users\i032048\.m2\repository\junit\junit\4.4\junit-4.4.jar;C:\develop\git-repos\baeldung-tutorials\core-java-9\target\test-classes;C:\develop\git-repos\baeldung-tutorials\core-java-9\src\test %1 - - -@echo off -REM com\baeldung\java9\language\TryWithResourcesTest.java diff --git a/core-java-9/src/test/java/com/baeldung/java9/process/Main.java b/core-java-9/src/test/java/com/baeldung/java9/process/Main.java deleted file mode 100644 index b16baf4676..0000000000 --- a/core-java-9/src/test/java/com/baeldung/java9/process/Main.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.baeldung.java9.process; - -import java.security.NoSuchAlgorithmException; - -public class Main { - - public static void main(String[] args) throws Exception { - ProcessApi procApi = new ProcessApi(); - procApi.createAndDestroyProcess(); - - procApi.processInfoExample(); - - Thread.sleep(40200); - System.out.println("_______END!___________"); - - } - -} From 1665013fc0199603f77f2c3e199c05a7f6816b40 Mon Sep 17 00:00:00 2001 From: Tim Schimandle Date: Thu, 1 Sep 2016 23:33:43 -0600 Subject: [PATCH 050/265] BAEL-312 Adding the config clients' properties files so that they are accessible in git. This is currently on my git account and will need to be switched to eugen's after the pull request has completed. --- spring-cloud/pom.xml | 1 + .../application-config/discovery.properties | 13 ++++ .../application-config/gateway.properties | 15 +++++ spring-cloud/spring-cloud-integration/pom.xml | 61 +++++++++++++++++++ 4 files changed, 90 insertions(+) create mode 100644 spring-cloud/spring-cloud-integration/application-config/discovery.properties create mode 100644 spring-cloud/spring-cloud-integration/application-config/gateway.properties create mode 100644 spring-cloud/spring-cloud-integration/pom.xml diff --git a/spring-cloud/pom.xml b/spring-cloud/pom.xml index 4f6b37a76f..340923cbdf 100644 --- a/spring-cloud/pom.xml +++ b/spring-cloud/pom.xml @@ -10,6 +10,7 @@ spring-cloud-config spring-cloud-eureka spring-cloud-hystrix + spring-cloud-integration pom diff --git a/spring-cloud/spring-cloud-integration/application-config/discovery.properties b/spring-cloud/spring-cloud-integration/application-config/discovery.properties new file mode 100644 index 0000000000..40764d0ddb --- /dev/null +++ b/spring-cloud/spring-cloud-integration/application-config/discovery.properties @@ -0,0 +1,13 @@ +spring.application.name=discovery +server.port=8082 + +eureka.instance.hostname=localhost + +eureka.client.serviceUrl.defaultZone=http://localhost:8082/eureka/ +eureka.client.register-with-eureka=false +eureka.client.fetch-registry=false + +#management.context-path=/manage +#eureka.instance.status-page-url-path=${management.context-path}/info +#eureka.instance.health-check-url-path=${management.context-path}/health + diff --git a/spring-cloud/spring-cloud-integration/application-config/gateway.properties b/spring-cloud/spring-cloud-integration/application-config/gateway.properties new file mode 100644 index 0000000000..308f6ace6c --- /dev/null +++ b/spring-cloud/spring-cloud-integration/application-config/gateway.properties @@ -0,0 +1,15 @@ +spring.application.name=gateway +server.port=8084 + +eureka.client.region = default +eureka.client.registryFetchIntervalSeconds = 5 +eureka.client.serviceUrl.defaultZone=http://localhost:8082/eureka/ + +#management.context-path=/manage +#eureka.instance.status-page-url-path=${management.context-path}/info +#eureka.instance.health-check-url-path=${management.context-path}/health + +zuul.routes.ui.path=/resource/** + +logging.level.org.springframework.cloud.netflix.zuul=debug + diff --git a/spring-cloud/spring-cloud-integration/pom.xml b/spring-cloud/spring-cloud-integration/pom.xml new file mode 100644 index 0000000000..5417e83cbf --- /dev/null +++ b/spring-cloud/spring-cloud-integration/pom.xml @@ -0,0 +1,61 @@ + + + 4.0.0 + + com.baeldung.spring.cloud + spring-cloud-integration + 1.0.0-SNAPSHOT + pom + + + config + discovery + gateway + resource + + + + org.springframework.boot + spring-boot-starter-parent + 1.4.0.RELEASE + + + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.cloud + spring-cloud-dependencies + Brixton.RELEASE + pom + import + + + org.springframework.data + spring-data-releasetrain + Hopper-SR2 + pom + import + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + \ No newline at end of file From e04b2adce9d7e60d6d90d012e87332581477a9a8 Mon Sep 17 00:00:00 2001 From: Tim Schimandle Date: Fri, 2 Sep 2016 00:30:14 -0600 Subject: [PATCH 051/265] BAEL-312 Committing the 4 projects for the first article. --- .../spring-cloud-integration/config/pom.xml | 27 ++++++++++++++++ .../integration/config/ConfigApplication.java | 15 +++++++++ .../src/main/resources/application.properties | 8 +++++ .../discovery/pom.xml | 28 ++++++++++++++++ .../discovery/DiscoveryApplication.java | 13 ++++++++ .../src/main/resources/bootstrap.properties | 2 ++ .../spring-cloud-integration/gateway/pom.xml | 32 +++++++++++++++++++ .../resource/GatewayApplication.java | 15 +++++++++ .../src/main/resources/bootstrap.properties | 5 +++ .../spring-cloud-integration/resource/pom.xml | 31 ++++++++++++++++++ .../resource/ResourceApplication.java | 25 +++++++++++++++ .../src/main/resources/bootstrap.properties | 5 +++ 12 files changed, 206 insertions(+) create mode 100644 spring-cloud/spring-cloud-integration/config/pom.xml create mode 100644 spring-cloud/spring-cloud-integration/config/src/main/java/com/baeldung/spring/cloud/integration/config/ConfigApplication.java create mode 100644 spring-cloud/spring-cloud-integration/config/src/main/resources/application.properties create mode 100644 spring-cloud/spring-cloud-integration/discovery/pom.xml create mode 100644 spring-cloud/spring-cloud-integration/discovery/src/main/java/com/baeldung/spring/cloud/integration/discovery/DiscoveryApplication.java create mode 100644 spring-cloud/spring-cloud-integration/discovery/src/main/resources/bootstrap.properties create mode 100644 spring-cloud/spring-cloud-integration/gateway/pom.xml create mode 100644 spring-cloud/spring-cloud-integration/gateway/src/main/java/com/baeldung/spring/cloud/integration/resource/GatewayApplication.java create mode 100644 spring-cloud/spring-cloud-integration/gateway/src/main/resources/bootstrap.properties create mode 100644 spring-cloud/spring-cloud-integration/resource/pom.xml create mode 100644 spring-cloud/spring-cloud-integration/resource/src/main/java/com/baeldung/spring/cloud/integration/resource/ResourceApplication.java create mode 100644 spring-cloud/spring-cloud-integration/resource/src/main/resources/bootstrap.properties diff --git a/spring-cloud/spring-cloud-integration/config/pom.xml b/spring-cloud/spring-cloud-integration/config/pom.xml new file mode 100644 index 0000000000..b186a1d5ca --- /dev/null +++ b/spring-cloud/spring-cloud-integration/config/pom.xml @@ -0,0 +1,27 @@ + + + 4.0.0 + + + com.baeldung.spring.cloud + spring-cloud-integration + 1.0.0-SNAPSHOT + + + config + 1.0.0-SNAPSHOT + + + + + org.springframework.cloud + spring-cloud-config-server + + + org.springframework.cloud + spring-cloud-starter-eureka + + + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-integration/config/src/main/java/com/baeldung/spring/cloud/integration/config/ConfigApplication.java b/spring-cloud/spring-cloud-integration/config/src/main/java/com/baeldung/spring/cloud/integration/config/ConfigApplication.java new file mode 100644 index 0000000000..ff6c093b8b --- /dev/null +++ b/spring-cloud/spring-cloud-integration/config/src/main/java/com/baeldung/spring/cloud/integration/config/ConfigApplication.java @@ -0,0 +1,15 @@ +package com.baeldung.spring.cloud.integration.config; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.config.server.EnableConfigServer; +import org.springframework.cloud.netflix.eureka.EnableEurekaClient; + +@SpringBootApplication +@EnableConfigServer +@EnableEurekaClient +public class ConfigApplication { + public static void main(String[] args) { + SpringApplication.run(ConfigApplication.class, args); + } +} diff --git a/spring-cloud/spring-cloud-integration/config/src/main/resources/application.properties b/spring-cloud/spring-cloud-integration/config/src/main/resources/application.properties new file mode 100644 index 0000000000..e3dd94c386 --- /dev/null +++ b/spring-cloud/spring-cloud-integration/config/src/main/resources/application.properties @@ -0,0 +1,8 @@ +server.port=8081 +spring.application.name=config + +spring.cloud.config.server.git.uri=file:///C:/src/cms-git/tutorials/spring-cloud/spring-cloud-integration/application-config + +eureka.client.region = default +eureka.client.registryFetchIntervalSeconds = 5 +eureka.client.serviceUrl.defaultZone=http://localhost:8082/eureka \ No newline at end of file diff --git a/spring-cloud/spring-cloud-integration/discovery/pom.xml b/spring-cloud/spring-cloud-integration/discovery/pom.xml new file mode 100644 index 0000000000..c827895547 --- /dev/null +++ b/spring-cloud/spring-cloud-integration/discovery/pom.xml @@ -0,0 +1,28 @@ + + + 4.0.0 + + + com.baeldung.spring.cloud + spring-cloud-integration + 1.0.0-SNAPSHOT + + + discovery + 1.0.0-SNAPSHOT + + + + + org.springframework.cloud + spring-cloud-starter-config + + + org.springframework.cloud + spring-cloud-starter-eureka-server + + + + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-integration/discovery/src/main/java/com/baeldung/spring/cloud/integration/discovery/DiscoveryApplication.java b/spring-cloud/spring-cloud-integration/discovery/src/main/java/com/baeldung/spring/cloud/integration/discovery/DiscoveryApplication.java new file mode 100644 index 0000000000..a21c65312f --- /dev/null +++ b/spring-cloud/spring-cloud-integration/discovery/src/main/java/com/baeldung/spring/cloud/integration/discovery/DiscoveryApplication.java @@ -0,0 +1,13 @@ +package com.baeldung.spring.cloud.integration.discovery; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; + +@SpringBootApplication +@EnableEurekaServer +public class DiscoveryApplication { + public static void main(String[] args) { + SpringApplication.run(DiscoveryApplication.class, args); + } +} diff --git a/spring-cloud/spring-cloud-integration/discovery/src/main/resources/bootstrap.properties b/spring-cloud/spring-cloud-integration/discovery/src/main/resources/bootstrap.properties new file mode 100644 index 0000000000..ca9d59c9ed --- /dev/null +++ b/spring-cloud/spring-cloud-integration/discovery/src/main/resources/bootstrap.properties @@ -0,0 +1,2 @@ +spring.cloud.config.name=discovery +spring.cloud.config.uri=http://localhost:8081 \ No newline at end of file diff --git a/spring-cloud/spring-cloud-integration/gateway/pom.xml b/spring-cloud/spring-cloud-integration/gateway/pom.xml new file mode 100644 index 0000000000..5e2db3a7af --- /dev/null +++ b/spring-cloud/spring-cloud-integration/gateway/pom.xml @@ -0,0 +1,32 @@ + + + 4.0.0 + + + com.baeldung.spring.cloud + spring-cloud-integration + 1.0.0-SNAPSHOT + + + gateway + 1.0.0-SNAPSHOT + + + + org.springframework.cloud + spring-cloud-starter-config + + + org.springframework.cloud + spring-cloud-starter-eureka + + + org.springframework.cloud + spring-cloud-starter-zuul + + + + + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-integration/gateway/src/main/java/com/baeldung/spring/cloud/integration/resource/GatewayApplication.java b/spring-cloud/spring-cloud-integration/gateway/src/main/java/com/baeldung/spring/cloud/integration/resource/GatewayApplication.java new file mode 100644 index 0000000000..66e7c36f2a --- /dev/null +++ b/spring-cloud/spring-cloud-integration/gateway/src/main/java/com/baeldung/spring/cloud/integration/resource/GatewayApplication.java @@ -0,0 +1,15 @@ +package com.baeldung.spring.cloud.integration.resource; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.netflix.eureka.EnableEurekaClient; +import org.springframework.cloud.netflix.zuul.EnableZuulProxy; + +@SpringBootApplication +@EnableZuulProxy +@EnableEurekaClient +public class GatewayApplication { + public static void main(String[] args) { + SpringApplication.run(GatewayApplication.class, args); + } +} diff --git a/spring-cloud/spring-cloud-integration/gateway/src/main/resources/bootstrap.properties b/spring-cloud/spring-cloud-integration/gateway/src/main/resources/bootstrap.properties new file mode 100644 index 0000000000..9610d72675 --- /dev/null +++ b/spring-cloud/spring-cloud-integration/gateway/src/main/resources/bootstrap.properties @@ -0,0 +1,5 @@ +spring.cloud.config.name=gateway +spring.cloud.config.discovery.service-id=config +spring.cloud.config.discovery.enabled=true + +eureka.client.serviceUrl.defaultZone=http://localhost:8082/eureka/ \ No newline at end of file diff --git a/spring-cloud/spring-cloud-integration/resource/pom.xml b/spring-cloud/spring-cloud-integration/resource/pom.xml new file mode 100644 index 0000000000..1b109022f4 --- /dev/null +++ b/spring-cloud/spring-cloud-integration/resource/pom.xml @@ -0,0 +1,31 @@ + + + 4.0.0 + + + com.baeldung.spring.cloud + spring-cloud-integration + 1.0.0-SNAPSHOT + + + resource + 1.0.0-SNAPSHOT + + + + org.springframework.cloud + spring-cloud-starter-config + + + org.springframework.cloud + spring-cloud-starter-eureka + + + org.springframework.boot + spring-boot-starter-web + + + + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-integration/resource/src/main/java/com/baeldung/spring/cloud/integration/resource/ResourceApplication.java b/spring-cloud/spring-cloud-integration/resource/src/main/java/com/baeldung/spring/cloud/integration/resource/ResourceApplication.java new file mode 100644 index 0000000000..107a9d199f --- /dev/null +++ b/spring-cloud/spring-cloud-integration/resource/src/main/java/com/baeldung/spring/cloud/integration/resource/ResourceApplication.java @@ -0,0 +1,25 @@ +package com.baeldung.spring.cloud.integration.resource; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.netflix.eureka.EnableEurekaClient; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@SpringBootApplication +@EnableEurekaClient +@RestController +public class ResourceApplication { + public static void main(String[] args) { + SpringApplication.run(ResourceApplication.class, args); + } + + @Value("${resource.returnString}") + private String returnString; + + @RequestMapping("/hello/cloud") + public String getString() { + return returnString; + } +} diff --git a/spring-cloud/spring-cloud-integration/resource/src/main/resources/bootstrap.properties b/spring-cloud/spring-cloud-integration/resource/src/main/resources/bootstrap.properties new file mode 100644 index 0000000000..3c88a0b520 --- /dev/null +++ b/spring-cloud/spring-cloud-integration/resource/src/main/resources/bootstrap.properties @@ -0,0 +1,5 @@ +spring.cloud.config.name=resource +spring.cloud.config.discovery.service-id=config +spring.cloud.config.discovery.enabled=true + +eureka.client.serviceUrl.defaultZone=http://localhost:8082/eureka/ \ No newline at end of file From ed1c7598dd750695dd71ecb0d5b8ea22cc299806 Mon Sep 17 00:00:00 2001 From: Tim Schimandle Date: Fri, 2 Sep 2016 00:32:12 -0600 Subject: [PATCH 052/265] BAEL-312 Adding the resource files that will need to be in a separate git repository. --- .../application-config/gateway.properties | 9 +++------ .../application-config/resource.properties | 8 ++++++++ 2 files changed, 11 insertions(+), 6 deletions(-) create mode 100644 spring-cloud/spring-cloud-integration/application-config/resource.properties diff --git a/spring-cloud/spring-cloud-integration/application-config/gateway.properties b/spring-cloud/spring-cloud-integration/application-config/gateway.properties index 308f6ace6c..8385c2c395 100644 --- a/spring-cloud/spring-cloud-integration/application-config/gateway.properties +++ b/spring-cloud/spring-cloud-integration/application-config/gateway.properties @@ -1,15 +1,12 @@ spring.application.name=gateway -server.port=8084 +server.port=8080 eureka.client.region = default eureka.client.registryFetchIntervalSeconds = 5 eureka.client.serviceUrl.defaultZone=http://localhost:8082/eureka/ -#management.context-path=/manage -#eureka.instance.status-page-url-path=${management.context-path}/info -#eureka.instance.health-check-url-path=${management.context-path}/health - -zuul.routes.ui.path=/resource/** +zuul.routes.resource.path=/resource/** +hystrix.command.resource.execution.isolation.thread.timeoutInMilliseconds: 5000 logging.level.org.springframework.cloud.netflix.zuul=debug diff --git a/spring-cloud/spring-cloud-integration/application-config/resource.properties b/spring-cloud/spring-cloud-integration/application-config/resource.properties new file mode 100644 index 0000000000..4e6cf3817c --- /dev/null +++ b/spring-cloud/spring-cloud-integration/application-config/resource.properties @@ -0,0 +1,8 @@ +spring.application.name=resource +server.port=8083 + +resource.returnString=hello cloud + +eureka.client.region = default +eureka.client.registryFetchIntervalSeconds = 5 +eureka.client.serviceUrl.defaultZone=http://localhost:8082/eureka/ From 747c3169ee026fd68012eacdcc3378895331face Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20R=C3=A4del?= Date: Sat, 3 Sep 2016 19:40:09 +0200 Subject: [PATCH 053/265] BAEL-305: Updated servlet spec to 3.1. --- enterprise-patterns/front-controller-pattern/pom.xml | 2 +- .../src/main/webapp/WEB-INF/web.xml | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/enterprise-patterns/front-controller-pattern/pom.xml b/enterprise-patterns/front-controller-pattern/pom.xml index 5f9152ad42..dbcd4f1b1d 100644 --- a/enterprise-patterns/front-controller-pattern/pom.xml +++ b/enterprise-patterns/front-controller-pattern/pom.xml @@ -17,7 +17,7 @@ javax.servlet javax.servlet-api - 4.0.0-b01 + 3.1.0 provided diff --git a/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/web.xml b/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/web.xml index 372ee42800..77113db09b 100644 --- a/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/web.xml +++ b/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/web.xml @@ -1,5 +1,9 @@ - + front-controller com.baeldung.enterprise.patterns.front.controller.FrontControllerServlet From a28f3449993d5134a0c60e2e3cb91c1d6fde2f8a Mon Sep 17 00:00:00 2001 From: "anna.spanou" Date: Sat, 3 Sep 2016 21:13:32 +0300 Subject: [PATCH 054/265] upgrade cassandra versions in pom and remove public modifier from default constructor --- java-cassandra/pom.xml | 12 +++++++++--- .../baeldung/cassandra/java/client/domain/Book.java | 2 +- .../repository/BookRepositoryIntegrationTest.java | 2 +- .../KeyspaceRepositoryIntegrationTest.java | 6 +++--- 4 files changed, 14 insertions(+), 8 deletions(-) diff --git a/java-cassandra/pom.xml b/java-cassandra/pom.xml index 3866f2a1d5..4e16bb867a 100644 --- a/java-cassandra/pom.xml +++ b/java-cassandra/pom.xml @@ -24,7 +24,7 @@ 3.5.1 - 3.0.3 + 3.1.0 @@ -40,10 +40,16 @@ org.cassandraunit cassandra-unit - 2.2.2.1 + 3.0.0.1 - + + + com.google.guava + guava + 19.0 + + diff --git a/java-cassandra/src/main/java/com/baeldung/cassandra/java/client/domain/Book.java b/java-cassandra/src/main/java/com/baeldung/cassandra/java/client/domain/Book.java index 25ff9e2f22..490aaf7080 100644 --- a/java-cassandra/src/main/java/com/baeldung/cassandra/java/client/domain/Book.java +++ b/java-cassandra/src/main/java/com/baeldung/cassandra/java/client/domain/Book.java @@ -14,7 +14,7 @@ public class Book { private String publisher; - public Book() { + Book() { } diff --git a/java-cassandra/src/test/java/com/baeldung/cassandra/java/client/repository/BookRepositoryIntegrationTest.java b/java-cassandra/src/test/java/com/baeldung/cassandra/java/client/repository/BookRepositoryIntegrationTest.java index c6db326547..62eae94c7c 100644 --- a/java-cassandra/src/test/java/com/baeldung/cassandra/java/client/repository/BookRepositoryIntegrationTest.java +++ b/java-cassandra/src/test/java/com/baeldung/cassandra/java/client/repository/BookRepositoryIntegrationTest.java @@ -38,7 +38,7 @@ public class BookRepositoryIntegrationTest { @BeforeClass public static void init() throws ConfigurationException, TTransportException, IOException, InterruptedException { // Start an embedded Cassandra Server - EmbeddedCassandraServerHelper.startEmbeddedCassandra(); + EmbeddedCassandraServerHelper.startEmbeddedCassandra(20000L); } @Before diff --git a/java-cassandra/src/test/java/com/baeldung/cassandra/java/client/repository/KeyspaceRepositoryIntegrationTest.java b/java-cassandra/src/test/java/com/baeldung/cassandra/java/client/repository/KeyspaceRepositoryIntegrationTest.java index 8d4c1d5d9c..9df46b3176 100644 --- a/java-cassandra/src/test/java/com/baeldung/cassandra/java/client/repository/KeyspaceRepositoryIntegrationTest.java +++ b/java-cassandra/src/test/java/com/baeldung/cassandra/java/client/repository/KeyspaceRepositoryIntegrationTest.java @@ -32,7 +32,7 @@ public class KeyspaceRepositoryIntegrationTest { @BeforeClass public static void init() throws ConfigurationException, TTransportException, IOException, InterruptedException { // Start an embedded Cassandra Server - EmbeddedCassandraServerHelper.startEmbeddedCassandra(); + EmbeddedCassandraServerHelper.startEmbeddedCassandra(20000L); } @Before @@ -50,7 +50,7 @@ public class KeyspaceRepositoryIntegrationTest { // ResultSet result = session.execute("SELECT * FROM system_schema.keyspaces WHERE keyspace_name = 'testBaeldungKeyspace';"); - ResultSet result = session.execute("SELECT * FROM system.schema_keyspaces;"); + ResultSet result = session.execute("SELECT * FROM system_schema.keyspaces;"); // Check if the Keyspace exists in the returned keyspaces. List matchedKeyspaces = result.all().stream().filter(r -> r.getString(0).equals(keyspaceName.toLowerCase())).map(r -> r.getString(0)).collect(Collectors.toList()); @@ -65,7 +65,7 @@ public class KeyspaceRepositoryIntegrationTest { // schemaRepository.createKeyspace(keyspaceName, "SimpleStrategy", 1); schemaRepository.deleteKeyspace(keyspaceName); - ResultSet result = session.execute("SELECT * FROM system.schema_keyspaces;"); + ResultSet result = session.execute("SELECT * FROM system_schema.keyspaces;"); boolean isKeyspaceCreated = result.all().stream().anyMatch(r -> r.getString(0).equals(keyspaceName.toLowerCase())); assertFalse(isKeyspaceCreated); } From eb6f0214ca6a08fbab2631e169667e7b6208be99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20R=C3=A4del?= Date: Sat, 3 Sep 2016 20:13:55 +0200 Subject: [PATCH 055/265] BAEL-305: Simplified FrontControllerServlet. Removed unused JBoss deployment descriptor. --- .../controller/FrontControllerServlet.java | 19 ++++++------------- .../src/main/webapp/WEB-INF/jboss-web.xml | 6 ------ 2 files changed, 6 insertions(+), 19 deletions(-) delete mode 100644 enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jboss-web.xml diff --git a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/FrontControllerServlet.java b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/FrontControllerServlet.java index 4dfc12c050..a8962f5108 100644 --- a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/FrontControllerServlet.java +++ b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/FrontControllerServlet.java @@ -22,24 +22,17 @@ public class FrontControllerServlet extends HttpServlet { private FrontCommand getCommand(HttpServletRequest request) { try { - return (FrontCommand) getCommandClass(request) - .asSubclass(FrontCommand.class) - .newInstance(); - } catch (Exception e) { - throw new RuntimeException("Failed to get command!", e); - } - } - - private Class getCommandClass(HttpServletRequest request) { - try { - return Class.forName( + Class type = Class.forName( String.format( "com.baeldung.enterprise.patterns.front.controller.commands.%sCommand", request.getParameter("command") ) ); - } catch (ClassNotFoundException e) { - return UnknownCommand.class; + return (FrontCommand) type + .asSubclass(FrontCommand.class) + .newInstance(); + } catch (Exception e) { + return new UnknownCommand(); } } } diff --git a/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jboss-web.xml b/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jboss-web.xml deleted file mode 100644 index db2d804135..0000000000 --- a/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jboss-web.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - /front-controller/ - From 89944e9a9fde81ec744ce5e3fac9ce15776a32a9 Mon Sep 17 00:00:00 2001 From: Alex Theedom Date: Sat, 3 Sep 2016 19:24:33 +0100 Subject: [PATCH 056/265] Minor changes following review --- reflection/src/main/java/com/baeldung/reflection/Animal.java | 1 - reflection/src/main/java/com/baeldung/reflection/Eating.java | 2 +- .../src/main/java/com/baeldung/reflection/Locomotion.java | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/reflection/src/main/java/com/baeldung/reflection/Animal.java b/reflection/src/main/java/com/baeldung/reflection/Animal.java index 2370659d34..02269cf201 100644 --- a/reflection/src/main/java/com/baeldung/reflection/Animal.java +++ b/reflection/src/main/java/com/baeldung/reflection/Animal.java @@ -5,7 +5,6 @@ public abstract class Animal implements Eating{ private String name; public Animal(String name) { - super(); this.name = name; } diff --git a/reflection/src/main/java/com/baeldung/reflection/Eating.java b/reflection/src/main/java/com/baeldung/reflection/Eating.java index 4e73be0d52..c6fdd39123 100644 --- a/reflection/src/main/java/com/baeldung/reflection/Eating.java +++ b/reflection/src/main/java/com/baeldung/reflection/Eating.java @@ -1,5 +1,5 @@ package com.baeldung.reflection; public interface Eating { - public String eats(); + String eats(); } diff --git a/reflection/src/main/java/com/baeldung/reflection/Locomotion.java b/reflection/src/main/java/com/baeldung/reflection/Locomotion.java index 4b1e54a4e9..e736ac7e02 100644 --- a/reflection/src/main/java/com/baeldung/reflection/Locomotion.java +++ b/reflection/src/main/java/com/baeldung/reflection/Locomotion.java @@ -1,5 +1,5 @@ package com.baeldung.reflection; public interface Locomotion { - public String getLocomotion(); + String getLocomotion(); } From 5a3e078ae13038f97abc2ab904d8293b5d99f5ea Mon Sep 17 00:00:00 2001 From: Tim Schimandle Date: Sat, 3 Sep 2016 22:10:22 -0600 Subject: [PATCH 057/265] BAEL-314 moving the project into a sub module to better organizae the article projects. --- .../application-config/discovery.properties | 0 .../application-config/gateway.properties | 0 .../application-config/resource.properties | 0 .../{ => part-1}/config/pom.xml | 2 +- .../integration/config/ConfigApplication.java | 0 .../src/main/resources/application.properties | 2 +- .../{ => part-1}/discovery/pom.xml | 2 +- .../discovery/DiscoveryApplication.java | 0 .../src/main/resources/bootstrap.properties | 0 .../{ => part-1}/gateway/pom.xml | 2 +- .../resource/GatewayApplication.java | 0 .../src/main/resources/bootstrap.properties | 0 .../spring-cloud-integration/part-1/pom.xml | 25 +++++++++++++++++++ .../{ => part-1}/resource/pom.xml | 2 +- .../resource/ResourceApplication.java | 0 .../src/main/resources/bootstrap.properties | 0 spring-cloud/spring-cloud-integration/pom.xml | 12 +-------- 17 files changed, 31 insertions(+), 16 deletions(-) rename spring-cloud/spring-cloud-integration/{ => part-1}/application-config/discovery.properties (100%) rename spring-cloud/spring-cloud-integration/{ => part-1}/application-config/gateway.properties (100%) rename spring-cloud/spring-cloud-integration/{ => part-1}/application-config/resource.properties (100%) rename spring-cloud/spring-cloud-integration/{ => part-1}/config/pom.xml (92%) rename spring-cloud/spring-cloud-integration/{ => part-1}/config/src/main/java/com/baeldung/spring/cloud/integration/config/ConfigApplication.java (100%) rename spring-cloud/spring-cloud-integration/{ => part-1}/config/src/main/resources/application.properties (78%) rename spring-cloud/spring-cloud-integration/{ => part-1}/discovery/pom.xml (93%) rename spring-cloud/spring-cloud-integration/{ => part-1}/discovery/src/main/java/com/baeldung/spring/cloud/integration/discovery/DiscoveryApplication.java (100%) rename spring-cloud/spring-cloud-integration/{ => part-1}/discovery/src/main/resources/bootstrap.properties (100%) rename spring-cloud/spring-cloud-integration/{ => part-1}/gateway/pom.xml (93%) rename spring-cloud/spring-cloud-integration/{ => part-1}/gateway/src/main/java/com/baeldung/spring/cloud/integration/resource/GatewayApplication.java (100%) rename spring-cloud/spring-cloud-integration/{ => part-1}/gateway/src/main/resources/bootstrap.properties (100%) create mode 100644 spring-cloud/spring-cloud-integration/part-1/pom.xml rename spring-cloud/spring-cloud-integration/{ => part-1}/resource/pom.xml (93%) rename spring-cloud/spring-cloud-integration/{ => part-1}/resource/src/main/java/com/baeldung/spring/cloud/integration/resource/ResourceApplication.java (100%) rename spring-cloud/spring-cloud-integration/{ => part-1}/resource/src/main/resources/bootstrap.properties (100%) diff --git a/spring-cloud/spring-cloud-integration/application-config/discovery.properties b/spring-cloud/spring-cloud-integration/part-1/application-config/discovery.properties similarity index 100% rename from spring-cloud/spring-cloud-integration/application-config/discovery.properties rename to spring-cloud/spring-cloud-integration/part-1/application-config/discovery.properties diff --git a/spring-cloud/spring-cloud-integration/application-config/gateway.properties b/spring-cloud/spring-cloud-integration/part-1/application-config/gateway.properties similarity index 100% rename from spring-cloud/spring-cloud-integration/application-config/gateway.properties rename to spring-cloud/spring-cloud-integration/part-1/application-config/gateway.properties diff --git a/spring-cloud/spring-cloud-integration/application-config/resource.properties b/spring-cloud/spring-cloud-integration/part-1/application-config/resource.properties similarity index 100% rename from spring-cloud/spring-cloud-integration/application-config/resource.properties rename to spring-cloud/spring-cloud-integration/part-1/application-config/resource.properties diff --git a/spring-cloud/spring-cloud-integration/config/pom.xml b/spring-cloud/spring-cloud-integration/part-1/config/pom.xml similarity index 92% rename from spring-cloud/spring-cloud-integration/config/pom.xml rename to spring-cloud/spring-cloud-integration/part-1/config/pom.xml index b186a1d5ca..c64b3626b1 100644 --- a/spring-cloud/spring-cloud-integration/config/pom.xml +++ b/spring-cloud/spring-cloud-integration/part-1/config/pom.xml @@ -6,7 +6,7 @@ com.baeldung.spring.cloud - spring-cloud-integration + part-1 1.0.0-SNAPSHOT diff --git a/spring-cloud/spring-cloud-integration/config/src/main/java/com/baeldung/spring/cloud/integration/config/ConfigApplication.java b/spring-cloud/spring-cloud-integration/part-1/config/src/main/java/com/baeldung/spring/cloud/integration/config/ConfigApplication.java similarity index 100% rename from spring-cloud/spring-cloud-integration/config/src/main/java/com/baeldung/spring/cloud/integration/config/ConfigApplication.java rename to spring-cloud/spring-cloud-integration/part-1/config/src/main/java/com/baeldung/spring/cloud/integration/config/ConfigApplication.java diff --git a/spring-cloud/spring-cloud-integration/config/src/main/resources/application.properties b/spring-cloud/spring-cloud-integration/part-1/config/src/main/resources/application.properties similarity index 78% rename from spring-cloud/spring-cloud-integration/config/src/main/resources/application.properties rename to spring-cloud/spring-cloud-integration/part-1/config/src/main/resources/application.properties index e3dd94c386..249ee471a6 100644 --- a/spring-cloud/spring-cloud-integration/config/src/main/resources/application.properties +++ b/spring-cloud/spring-cloud-integration/part-1/config/src/main/resources/application.properties @@ -1,7 +1,7 @@ server.port=8081 spring.application.name=config -spring.cloud.config.server.git.uri=file:///C:/src/cms-git/tutorials/spring-cloud/spring-cloud-integration/application-config +spring.cloud.config.server.git.uri=file:///C:/src/cms-git/tutorials/spring-cloud/spring-cloud-integration/part-1/application-config eureka.client.region = default eureka.client.registryFetchIntervalSeconds = 5 diff --git a/spring-cloud/spring-cloud-integration/discovery/pom.xml b/spring-cloud/spring-cloud-integration/part-1/discovery/pom.xml similarity index 93% rename from spring-cloud/spring-cloud-integration/discovery/pom.xml rename to spring-cloud/spring-cloud-integration/part-1/discovery/pom.xml index c827895547..6fe5d807f8 100644 --- a/spring-cloud/spring-cloud-integration/discovery/pom.xml +++ b/spring-cloud/spring-cloud-integration/part-1/discovery/pom.xml @@ -6,7 +6,7 @@ com.baeldung.spring.cloud - spring-cloud-integration + part-1 1.0.0-SNAPSHOT diff --git a/spring-cloud/spring-cloud-integration/discovery/src/main/java/com/baeldung/spring/cloud/integration/discovery/DiscoveryApplication.java b/spring-cloud/spring-cloud-integration/part-1/discovery/src/main/java/com/baeldung/spring/cloud/integration/discovery/DiscoveryApplication.java similarity index 100% rename from spring-cloud/spring-cloud-integration/discovery/src/main/java/com/baeldung/spring/cloud/integration/discovery/DiscoveryApplication.java rename to spring-cloud/spring-cloud-integration/part-1/discovery/src/main/java/com/baeldung/spring/cloud/integration/discovery/DiscoveryApplication.java diff --git a/spring-cloud/spring-cloud-integration/discovery/src/main/resources/bootstrap.properties b/spring-cloud/spring-cloud-integration/part-1/discovery/src/main/resources/bootstrap.properties similarity index 100% rename from spring-cloud/spring-cloud-integration/discovery/src/main/resources/bootstrap.properties rename to spring-cloud/spring-cloud-integration/part-1/discovery/src/main/resources/bootstrap.properties diff --git a/spring-cloud/spring-cloud-integration/gateway/pom.xml b/spring-cloud/spring-cloud-integration/part-1/gateway/pom.xml similarity index 93% rename from spring-cloud/spring-cloud-integration/gateway/pom.xml rename to spring-cloud/spring-cloud-integration/part-1/gateway/pom.xml index 5e2db3a7af..40f1884004 100644 --- a/spring-cloud/spring-cloud-integration/gateway/pom.xml +++ b/spring-cloud/spring-cloud-integration/part-1/gateway/pom.xml @@ -6,7 +6,7 @@ com.baeldung.spring.cloud - spring-cloud-integration + part-1 1.0.0-SNAPSHOT diff --git a/spring-cloud/spring-cloud-integration/gateway/src/main/java/com/baeldung/spring/cloud/integration/resource/GatewayApplication.java b/spring-cloud/spring-cloud-integration/part-1/gateway/src/main/java/com/baeldung/spring/cloud/integration/resource/GatewayApplication.java similarity index 100% rename from spring-cloud/spring-cloud-integration/gateway/src/main/java/com/baeldung/spring/cloud/integration/resource/GatewayApplication.java rename to spring-cloud/spring-cloud-integration/part-1/gateway/src/main/java/com/baeldung/spring/cloud/integration/resource/GatewayApplication.java diff --git a/spring-cloud/spring-cloud-integration/gateway/src/main/resources/bootstrap.properties b/spring-cloud/spring-cloud-integration/part-1/gateway/src/main/resources/bootstrap.properties similarity index 100% rename from spring-cloud/spring-cloud-integration/gateway/src/main/resources/bootstrap.properties rename to spring-cloud/spring-cloud-integration/part-1/gateway/src/main/resources/bootstrap.properties diff --git a/spring-cloud/spring-cloud-integration/part-1/pom.xml b/spring-cloud/spring-cloud-integration/part-1/pom.xml new file mode 100644 index 0000000000..770e26bca2 --- /dev/null +++ b/spring-cloud/spring-cloud-integration/part-1/pom.xml @@ -0,0 +1,25 @@ + + + 4.0.0 + + + com.baeldung.spring.cloud + spring-cloud-integration + 1.0.0-SNAPSHOT + + + + config + discovery + gateway + resource + + + part-1 + 1.0.0-SNAPSHOT + pom + + + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-integration/resource/pom.xml b/spring-cloud/spring-cloud-integration/part-1/resource/pom.xml similarity index 93% rename from spring-cloud/spring-cloud-integration/resource/pom.xml rename to spring-cloud/spring-cloud-integration/part-1/resource/pom.xml index 1b109022f4..f1a17918ef 100644 --- a/spring-cloud/spring-cloud-integration/resource/pom.xml +++ b/spring-cloud/spring-cloud-integration/part-1/resource/pom.xml @@ -6,7 +6,7 @@ com.baeldung.spring.cloud - spring-cloud-integration + part-1 1.0.0-SNAPSHOT diff --git a/spring-cloud/spring-cloud-integration/resource/src/main/java/com/baeldung/spring/cloud/integration/resource/ResourceApplication.java b/spring-cloud/spring-cloud-integration/part-1/resource/src/main/java/com/baeldung/spring/cloud/integration/resource/ResourceApplication.java similarity index 100% rename from spring-cloud/spring-cloud-integration/resource/src/main/java/com/baeldung/spring/cloud/integration/resource/ResourceApplication.java rename to spring-cloud/spring-cloud-integration/part-1/resource/src/main/java/com/baeldung/spring/cloud/integration/resource/ResourceApplication.java diff --git a/spring-cloud/spring-cloud-integration/resource/src/main/resources/bootstrap.properties b/spring-cloud/spring-cloud-integration/part-1/resource/src/main/resources/bootstrap.properties similarity index 100% rename from spring-cloud/spring-cloud-integration/resource/src/main/resources/bootstrap.properties rename to spring-cloud/spring-cloud-integration/part-1/resource/src/main/resources/bootstrap.properties diff --git a/spring-cloud/spring-cloud-integration/pom.xml b/spring-cloud/spring-cloud-integration/pom.xml index 5417e83cbf..922875df14 100644 --- a/spring-cloud/spring-cloud-integration/pom.xml +++ b/spring-cloud/spring-cloud-integration/pom.xml @@ -10,10 +10,7 @@ pom - config - discovery - gateway - resource + part-1 @@ -40,13 +37,6 @@ pom import - - org.springframework.data - spring-data-releasetrain - Hopper-SR2 - pom - import - From 11f7c80a75780e0c3e2f6c7b02783d55607e1c1b Mon Sep 17 00:00:00 2001 From: Tim Schimandle Date: Sat, 3 Sep 2016 22:55:42 -0600 Subject: [PATCH 058/265] BAEL-314 modifying the config application properties so that it points to a generic file location. --- .../part-1/config/src/main/resources/application.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-cloud/spring-cloud-integration/part-1/config/src/main/resources/application.properties b/spring-cloud/spring-cloud-integration/part-1/config/src/main/resources/application.properties index 249ee471a6..6f614d0690 100644 --- a/spring-cloud/spring-cloud-integration/part-1/config/src/main/resources/application.properties +++ b/spring-cloud/spring-cloud-integration/part-1/config/src/main/resources/application.properties @@ -1,7 +1,7 @@ server.port=8081 spring.application.name=config -spring.cloud.config.server.git.uri=file:///C:/src/cms-git/tutorials/spring-cloud/spring-cloud-integration/part-1/application-config +spring.cloud.config.server.git.uri=file:///${user.home}/application-config eureka.client.region = default eureka.client.registryFetchIntervalSeconds = 5 From 6bd09ce0ae227126e591a6c3d97ba0d126c0d2c0 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Sun, 4 Sep 2016 08:18:17 +0200 Subject: [PATCH 059/265] Refactor Reflection examples --- reflection/pom.xml | 4 +- .../java/com/baeldung/reflection/Animal.java | 34 +- .../java/com/baeldung/reflection/Bird.java | 53 +- .../java/com/baeldung/reflection/Eating.java | 2 +- .../java/com/baeldung/reflection/Goat.java | 32 +- .../com/baeldung/reflection/Locomotion.java | 2 +- .../java/com/baeldung/reflection/Person.java | 4 +- .../baeldung/reflection/ReflectionTest.java | 541 +++++++++--------- 8 files changed, 342 insertions(+), 330 deletions(-) diff --git a/reflection/pom.xml b/reflection/pom.xml index d3e5b16231..10a6d7df0c 100644 --- a/reflection/pom.xml +++ b/reflection/pom.xml @@ -12,8 +12,8 @@ maven-compiler-plugin 3.3 - 7 - 7 + 8 + 8 diff --git a/reflection/src/main/java/com/baeldung/reflection/Animal.java b/reflection/src/main/java/com/baeldung/reflection/Animal.java index 02269cf201..f35f3b626c 100644 --- a/reflection/src/main/java/com/baeldung/reflection/Animal.java +++ b/reflection/src/main/java/com/baeldung/reflection/Animal.java @@ -1,25 +1,27 @@ package com.baeldung.reflection; -public abstract class Animal implements Eating{ - public static final String CATEGORY = "domestic"; - private String name; +public abstract class Animal implements Eating { - public Animal(String name) { - this.name = name; - } + public static final String CATEGORY = "domestic"; - public String getName() { - return name; - } + private String name; - public void setName(String name) { - this.name = name; - } + public Animal(String name) { + this.name = name; + } - public String makeSound() { - return getSound(); - } + public String getName() { + return name; + } - protected abstract String getSound(); + public void setName(String name) { + this.name = name; + } + + public String makeSound() { + return getSound(); + } + + protected abstract String getSound(); } diff --git a/reflection/src/main/java/com/baeldung/reflection/Bird.java b/reflection/src/main/java/com/baeldung/reflection/Bird.java index eb7115c53a..f5bb0f9b19 100644 --- a/reflection/src/main/java/com/baeldung/reflection/Bird.java +++ b/reflection/src/main/java/com/baeldung/reflection/Bird.java @@ -1,33 +1,36 @@ package com.baeldung.reflection; public class Bird extends Animal { - private boolean walks; - public Bird() { - super("bird"); - } - public Bird(String name, boolean walks) { - super(name); - setWalks(walks); - } - public Bird(String name) { - super(name); - } + private boolean walks; - @Override - public String eats() { - return "grains"; - } + public Bird() { + super("bird"); + } - @Override - protected String getSound() { - return "chaps"; - } + public Bird(String name, boolean walks) { + super(name); + setWalks(walks); + } - public boolean walks() { - return walks; - } + public Bird(String name) { + super(name); + } - public void setWalks(boolean walks) { - this.walks = walks; - } + @Override + public String eats() { + return "grains"; + } + + @Override + protected String getSound() { + return "chaps"; + } + + public boolean walks() { + return walks; + } + + public void setWalks(boolean walks) { + this.walks = walks; + } } diff --git a/reflection/src/main/java/com/baeldung/reflection/Eating.java b/reflection/src/main/java/com/baeldung/reflection/Eating.java index c6fdd39123..c959becf00 100644 --- a/reflection/src/main/java/com/baeldung/reflection/Eating.java +++ b/reflection/src/main/java/com/baeldung/reflection/Eating.java @@ -1,5 +1,5 @@ package com.baeldung.reflection; public interface Eating { - String eats(); + String eats(); } diff --git a/reflection/src/main/java/com/baeldung/reflection/Goat.java b/reflection/src/main/java/com/baeldung/reflection/Goat.java index 9dc69f626b..086d09d543 100644 --- a/reflection/src/main/java/com/baeldung/reflection/Goat.java +++ b/reflection/src/main/java/com/baeldung/reflection/Goat.java @@ -1,24 +1,24 @@ package com.baeldung.reflection; -public class Goat extends Animal implements Locomotion{ +public class Goat extends Animal implements Locomotion { - public Goat(String name) { - super(name); - } + public Goat(String name) { + super(name); + } - @Override - protected String getSound() { - return "bleat"; - } + @Override + protected String getSound() { + return "bleat"; + } - @Override - public String getLocomotion() { - return "walks"; - } + @Override + public String getLocomotion() { + return "walks"; + } - @Override - public String eats() { - return "grass"; - } + @Override + public String eats() { + return "grass"; + } } diff --git a/reflection/src/main/java/com/baeldung/reflection/Locomotion.java b/reflection/src/main/java/com/baeldung/reflection/Locomotion.java index e736ac7e02..230fd9a466 100644 --- a/reflection/src/main/java/com/baeldung/reflection/Locomotion.java +++ b/reflection/src/main/java/com/baeldung/reflection/Locomotion.java @@ -1,5 +1,5 @@ package com.baeldung.reflection; public interface Locomotion { - String getLocomotion(); + String getLocomotion(); } diff --git a/reflection/src/main/java/com/baeldung/reflection/Person.java b/reflection/src/main/java/com/baeldung/reflection/Person.java index 66250f8da1..1a1fafef93 100644 --- a/reflection/src/main/java/com/baeldung/reflection/Person.java +++ b/reflection/src/main/java/com/baeldung/reflection/Person.java @@ -1,6 +1,6 @@ package com.baeldung.reflection; public class Person { - private String name; - private int age; + private String name; + private int age; } diff --git a/reflection/src/test/java/com/baeldung/reflection/ReflectionTest.java b/reflection/src/test/java/com/baeldung/reflection/ReflectionTest.java index 7eb0c35671..180ea38098 100644 --- a/reflection/src/test/java/com/baeldung/reflection/ReflectionTest.java +++ b/reflection/src/test/java/com/baeldung/reflection/ReflectionTest.java @@ -1,316 +1,323 @@ package com.baeldung.reflection; -import static org.junit.Assert.*; - -import java.lang.reflect.*; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - import org.junit.Test; +import java.lang.reflect.*; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Stream; + +import static java.util.stream.Collectors.toList; +import static org.junit.Assert.*; + public class ReflectionTest { - @Test - public void givenObject_whenGetsFieldNamesAtRuntime_thenCorrect() { - Object person = new Person(); - Field[] fields = person.getClass().getDeclaredFields(); - List expectedFieldNames = Arrays.asList(new String[] { "name", - "age" }); - List actualFieldNames = new ArrayList<>(); - for (Field field : fields) - actualFieldNames.add(field.getName()); + @Test + public void givenObject_whenGetsFieldNamesAtRuntime_thenCorrect() { + Object person = new Person(); + Field[] fields = person.getClass().getDeclaredFields(); - assertTrue(expectedFieldNames.containsAll(actualFieldNames)); + List actualFieldNames = getFieldNames(fields); - } + assertTrue(Arrays.asList("name", "age") + .containsAll(actualFieldNames)); - @Test - public void givenObject_whenGetsClassName_thenCorrect() { - Object goat = new Goat("goat"); - Class clazz = goat.getClass(); - assertEquals("Goat", clazz.getSimpleName()); - assertEquals("com.baeldung.reflection.Goat", clazz.getName()); - assertEquals("com.baeldung.reflection.Goat", clazz.getCanonicalName()); - } + } - @Test - public void givenClassName_whenCreatesObject_thenCorrect() - throws ClassNotFoundException { - Class clazz = Class.forName("com.baeldung.reflection.Goat"); - assertEquals("Goat", clazz.getSimpleName()); - assertEquals("com.baeldung.reflection.Goat", clazz.getName()); - assertEquals("com.baeldung.reflection.Goat", clazz.getCanonicalName()); - } + @Test + public void givenObject_whenGetsClassName_thenCorrect() { + Object goat = new Goat("goat"); + Class clazz = goat.getClass(); - @Test - public void givenClass_whenRecognisesModifiers_thenCorrect() - throws ClassNotFoundException { - Class goatClass = Class.forName("com.baeldung.reflection.Goat"); - Class animalClass = Class.forName("com.baeldung.reflection.Animal"); - int goatMods = goatClass.getModifiers(); - int animalMods = animalClass.getModifiers(); - assertTrue(Modifier.isPublic(goatMods)); - assertTrue(Modifier.isAbstract(animalMods)); - assertTrue(Modifier.isPublic(animalMods)); - } + assertEquals("Goat", clazz.getSimpleName()); + assertEquals("com.baeldung.reflection.Goat", clazz.getName()); + assertEquals("com.baeldung.reflection.Goat", clazz.getCanonicalName()); + } - @Test - public void givenClass_whenGetsPackageInfo_thenCorrect() { - Goat goat = new Goat("goat"); - Class goatClass = goat.getClass(); - Package pkg = goatClass.getPackage(); - assertEquals("com.baeldung.reflection", pkg.getName()); - } + @Test + public void givenClassName_whenCreatesObject_thenCorrect() + throws ClassNotFoundException { + Class clazz = Class.forName("com.baeldung.reflection.Goat"); - @Test - public void givenClass_whenGetsSuperClass_thenCorrect() { - Goat goat = new Goat("goat"); - String str = "any string"; + assertEquals("Goat", clazz.getSimpleName()); + assertEquals("com.baeldung.reflection.Goat", clazz.getName()); + assertEquals("com.baeldung.reflection.Goat", clazz.getCanonicalName()); + } - Class goatClass = goat.getClass(); - Class goatSuperClass = goatClass.getSuperclass(); + @Test + public void givenClass_whenRecognisesModifiers_thenCorrect() + throws ClassNotFoundException { + Class goatClass = Class.forName("com.baeldung.reflection.Goat"); + Class animalClass = Class.forName("com.baeldung.reflection.Animal"); + int goatMods = goatClass.getModifiers(); + int animalMods = animalClass.getModifiers(); - assertEquals("Animal", goatSuperClass.getSimpleName()); - assertEquals("Object", str.getClass().getSuperclass().getSimpleName()); + assertTrue(Modifier.isPublic(goatMods)); + assertTrue(Modifier.isAbstract(animalMods)); + assertTrue(Modifier.isPublic(animalMods)); + } - } + @Test + public void givenClass_whenGetsPackageInfo_thenCorrect() { + Goat goat = new Goat("goat"); + Class goatClass = goat.getClass(); + Package pkg = goatClass.getPackage(); - @Test - public void givenClass_whenGetsImplementedInterfaces_thenCorrect() - throws ClassNotFoundException { - Class goatClass = Class.forName("com.baeldung.reflection.Goat"); - Class animalClass = Class.forName("com.baeldung.reflection.Animal"); - Class[] goatInterfaces = goatClass.getInterfaces(); - Class[] animalInterfaces = animalClass.getInterfaces(); - assertEquals(1, goatInterfaces.length); - assertEquals(1, animalInterfaces.length); - assertEquals("Locomotion", goatInterfaces[0].getSimpleName()); - assertEquals("Eating", animalInterfaces[0].getSimpleName()); - } + assertEquals("com.baeldung.reflection", pkg.getName()); + } - @Test - public void givenClass_whenGetsConstructor_thenCorrect() - throws ClassNotFoundException { - Class goatClass = Class.forName("com.baeldung.reflection.Goat"); - Constructor[] constructors = goatClass.getConstructors(); - assertEquals(1, constructors.length); - assertEquals("com.baeldung.reflection.Goat", constructors[0].getName()); - } + @Test + public void givenClass_whenGetsSuperClass_thenCorrect() { + Goat goat = new Goat("goat"); + String str = "any string"; - @Test - public void givenClass_whenGetsFields_thenCorrect() - throws ClassNotFoundException { - Class animalClass = Class.forName("com.baeldung.reflection.Animal"); - Field[] fields = animalClass.getDeclaredFields(); - List expectedFields = Arrays.asList(new String[] { "name", - "CATEGORY" }); - List actualFields = new ArrayList<>(); - for (Field field : fields) - actualFields.add(field.getName()); - assertEquals(2, actualFields.size()); - assertTrue(actualFields.containsAll(expectedFields)); - } + Class goatClass = goat.getClass(); + Class goatSuperClass = goatClass.getSuperclass(); - @Test - public void givenClass_whenGetsMethods_thenCorrect() - throws ClassNotFoundException { - Class animalClass = Class.forName("com.baeldung.reflection.Animal"); - Method[] methods = animalClass.getDeclaredMethods(); - List expectedMethods = Arrays.asList(new String[] { "getName", - "setName", "getSound", "makeSound" }); - List actualMethods = new ArrayList<>(); - for (Method method : methods) - actualMethods.add(method.getName()); - assertEquals(4, actualMethods.size()); - assertTrue(actualMethods.containsAll(expectedMethods)); + assertEquals("Animal", goatSuperClass.getSimpleName()); + assertEquals("Object", str.getClass().getSuperclass().getSimpleName()); - } + } - @Test - public void givenClass_whenGetsAllConstructors_thenCorrect() - throws ClassNotFoundException { - Class birdClass = Class.forName("com.baeldung.reflection.Bird"); - Constructor[] constructors = birdClass.getConstructors(); - assertEquals(3, constructors.length); - } + @Test + public void givenClass_whenGetsImplementedInterfaces_thenCorrect() + throws ClassNotFoundException { + Class goatClass = Class.forName("com.baeldung.reflection.Goat"); + Class animalClass = Class.forName("com.baeldung.reflection.Animal"); + Class[] goatInterfaces = goatClass.getInterfaces(); + Class[] animalInterfaces = animalClass.getInterfaces(); - @Test - public void givenClass_whenGetsEachConstructorByParamTypes_thenCorrect() - throws ClassNotFoundException, NoSuchMethodException, - SecurityException { - Class birdClass = Class.forName("com.baeldung.reflection.Bird"); - Constructor cons1 = birdClass.getConstructor(); - Constructor cons2 = birdClass.getConstructor(String.class); - Constructor cons3 = birdClass.getConstructor(String.class, - boolean.class); - } + assertEquals(1, goatInterfaces.length); + assertEquals(1, animalInterfaces.length); + assertEquals("Locomotion", goatInterfaces[0].getSimpleName()); + assertEquals("Eating", animalInterfaces[0].getSimpleName()); + } - @Test - public void givenClass_whenInstantiatesObjectsAtRuntime_thenCorrect() - throws ClassNotFoundException, NoSuchMethodException, - SecurityException, InstantiationException, IllegalAccessException, - IllegalArgumentException, InvocationTargetException { - Class birdClass = Class.forName("com.baeldung.reflection.Bird"); - Constructor cons1 = birdClass.getConstructor(); - Constructor cons2 = birdClass.getConstructor(String.class); - Constructor cons3 = birdClass.getConstructor(String.class, - boolean.class); - Bird bird1 = (Bird) cons1.newInstance(); - Bird bird2 = (Bird) cons2.newInstance("Weaver bird"); - Bird bird3 = (Bird) cons3.newInstance("dove", true); - assertEquals("bird", bird1.getName()); - assertEquals("Weaver bird", bird2.getName()); - assertEquals("dove", bird3.getName()); - assertFalse(bird1.walks()); - assertTrue(bird3.walks()); - } + @Test + public void givenClass_whenGetsConstructor_thenCorrect() + throws ClassNotFoundException { + Class goatClass = Class.forName("com.baeldung.reflection.Goat"); + Constructor[] constructors = goatClass.getConstructors(); - @Test - public void givenClass_whenGetsPublicFields_thenCorrect() - throws ClassNotFoundException { - Class birdClass = Class.forName("com.baeldung.reflection.Bird"); - Field[] fields = birdClass.getFields(); - assertEquals(1, fields.length); - assertEquals("CATEGORY", fields[0].getName()); + assertEquals(1, constructors.length); + assertEquals("com.baeldung.reflection.Goat", constructors[0].getName()); + } - } + @Test + public void givenClass_whenGetsFields_thenCorrect() + throws ClassNotFoundException { + Class animalClass = Class.forName("com.baeldung.reflection.Animal"); + Field[] fields = animalClass.getDeclaredFields(); - @Test - public void givenClass_whenGetsPublicFieldByName_thenCorrect() - throws ClassNotFoundException, NoSuchFieldException, - SecurityException { - Class birdClass = Class.forName("com.baeldung.reflection.Bird"); - Field field = birdClass.getField("CATEGORY"); - assertEquals("CATEGORY", field.getName()); + List actualFields = getFieldNames(fields); - } + assertEquals(2, actualFields.size()); + assertTrue(actualFields.containsAll(Arrays.asList("name", "CATEGORY"))); + } - @Test - public void givenClass_whenGetsDeclaredFields_thenCorrect() - throws ClassNotFoundException { - Class birdClass = Class.forName("com.baeldung.reflection.Bird"); - Field[] fields = birdClass.getDeclaredFields(); - assertEquals(1, fields.length); - assertEquals("walks", fields[0].getName()); - } + @Test + public void givenClass_whenGetsMethods_thenCorrect() + throws ClassNotFoundException { + Class animalClass = Class.forName("com.baeldung.reflection.Animal"); + Method[] methods = animalClass.getDeclaredMethods(); + List actualMethods = getMethodNames(methods); - @Test - public void givenClass_whenGetsFieldsByName_thenCorrect() - throws ClassNotFoundException, NoSuchFieldException, - SecurityException { - Class birdClass = Class.forName("com.baeldung.reflection.Bird"); - Field field = birdClass.getDeclaredField("walks"); - assertEquals("walks", field.getName()); + assertEquals(4, actualMethods.size()); + assertTrue(actualMethods.containsAll(Arrays.asList("getName", + "setName", "getSound", "makeSound"))); + } - } + @Test + public void givenClass_whenGetsAllConstructors_thenCorrect() + throws ClassNotFoundException { + Class birdClass = Class.forName("com.baeldung.reflection.Bird"); + Constructor[] constructors = birdClass.getConstructors(); - @Test - public void givenClassField_whenGetsType_thenCorrect() - throws ClassNotFoundException, NoSuchFieldException, - SecurityException { - Field field = Class.forName("com.baeldung.reflection.Bird") - .getDeclaredField("walks"); - Class fieldClass = field.getType(); - assertEquals("boolean", fieldClass.getSimpleName()); - } + assertEquals(3, constructors.length); + } - @Test - public void givenClassField_whenSetsAndGetsValue_thenCorrect() - throws ClassNotFoundException, NoSuchFieldException, - SecurityException, InstantiationException, IllegalAccessException { - Class birdClass = Class.forName("com.baeldung.reflection.Bird"); - Bird bird = (Bird) birdClass.newInstance(); - Field field = birdClass.getDeclaredField("walks"); - field.setAccessible(true); + @Test + public void givenClass_whenGetsEachConstructorByParamTypes_thenCorrect() + throws Exception { + Class birdClass = Class.forName("com.baeldung.reflection.Bird"); + Constructor cons1 = birdClass.getConstructor(); + Constructor cons2 = birdClass.getConstructor(String.class); + Constructor cons3 = birdClass.getConstructor(String.class, + boolean.class); + } - assertFalse(field.getBoolean(bird)); - assertFalse(bird.walks()); + @Test + public void givenClass_whenInstantiatesObjectsAtRuntime_thenCorrect() + throws Exception { + Class birdClass = Class.forName("com.baeldung.reflection.Bird"); - field.set(bird, true); + Constructor cons1 = birdClass.getConstructor(); + Constructor cons2 = birdClass.getConstructor(String.class); + Constructor cons3 = birdClass.getConstructor(String.class, + boolean.class); - assertTrue(field.getBoolean(bird)); - assertTrue(bird.walks()); + Bird bird1 = (Bird) cons1.newInstance(); + Bird bird2 = (Bird) cons2.newInstance("Weaver bird"); + Bird bird3 = (Bird) cons3.newInstance("dove", true); - } + assertEquals("bird", bird1.getName()); + assertEquals("Weaver bird", bird2.getName()); + assertEquals("dove", bird3.getName()); + assertFalse(bird1.walks()); + assertTrue(bird3.walks()); + } - @Test - public void givenClassField_whenGetsAndSetsWithNull_thenCorrect() - throws ClassNotFoundException, InstantiationException, - IllegalAccessException, NoSuchFieldException, SecurityException { - Class birdClass = Class.forName("com.baeldung.reflection.Bird"); - Field field = birdClass.getField("CATEGORY"); - field.setAccessible(true); + @Test + public void givenClass_whenGetsPublicFields_thenCorrect() + throws ClassNotFoundException { + Class birdClass = Class.forName("com.baeldung.reflection.Bird"); + Field[] fields = birdClass.getFields(); + assertEquals(1, fields.length); + assertEquals("CATEGORY", fields[0].getName()); - assertEquals("domestic", field.get(null)); - } + } - @Test - public void givenClass_whenGetsAllPublicMethods_thenCorrect() - throws ClassNotFoundException { - Class birdClass = Class.forName("com.baeldung.reflection.Bird"); - Method[] methods = birdClass.getMethods(); - List methodNames = new ArrayList<>(); - for (Method method : methods) - methodNames.add(method.getName()); - assertTrue(methodNames.containsAll(Arrays - .asList(new String[] { "equals", "notifyAll", "hashCode", - "walks", "eats", "toString" }))); + @Test + public void givenClass_whenGetsPublicFieldByName_thenCorrect() + throws Exception { + Class birdClass = Class.forName("com.baeldung.reflection.Bird"); + Field field = birdClass.getField("CATEGORY"); + assertEquals("CATEGORY", field.getName()); - } + } - @Test - public void givenClass_whenGetsOnlyDeclaredMethods_thenCorrect() - throws ClassNotFoundException { - Class birdClass = Class.forName("com.baeldung.reflection.Bird"); - Method[] methods = birdClass.getDeclaredMethods(); - List expectedMethodNames = Arrays.asList(new String[] { - "setWalks", "walks", "getSound", "eats" }); - List actualMethodNames = new ArrayList<>(); - for (Method method : methods) - actualMethodNames.add(method.getName()); - assertEquals(expectedMethodNames.size(), actualMethodNames.size()); - assertTrue(expectedMethodNames.containsAll(actualMethodNames)); - assertTrue(actualMethodNames.containsAll(expectedMethodNames)); + @Test + public void givenClass_whenGetsDeclaredFields_thenCorrect() + throws ClassNotFoundException { + Class birdClass = Class.forName("com.baeldung.reflection.Bird"); + Field[] fields = birdClass.getDeclaredFields(); + assertEquals(1, fields.length); + assertEquals("walks", fields[0].getName()); + } - } + @Test + public void givenClass_whenGetsFieldsByName_thenCorrect() + throws Exception { + Class birdClass = Class.forName("com.baeldung.reflection.Bird"); + Field field = birdClass.getDeclaredField("walks"); + assertEquals("walks", field.getName()); - @Test - public void givenMethodName_whenGetsMethod_thenCorrect() - throws ClassNotFoundException, NoSuchMethodException, - SecurityException { - Class birdClass = Class.forName("com.baeldung.reflection.Bird"); - Method walksMethod = birdClass.getDeclaredMethod("walks"); - Method setWalksMethod = birdClass.getDeclaredMethod("setWalks", - boolean.class); - assertFalse(walksMethod.isAccessible()); - assertFalse(setWalksMethod.isAccessible()); - walksMethod.setAccessible(true); - setWalksMethod.setAccessible(true); - assertTrue(walksMethod.isAccessible()); - assertTrue(setWalksMethod.isAccessible()); + } - } + @Test + public void givenClassField_whenGetsType_thenCorrect() + throws Exception { + Field field = Class.forName("com.baeldung.reflection.Bird") + .getDeclaredField("walks"); + Class fieldClass = field.getType(); + assertEquals("boolean", fieldClass.getSimpleName()); + } - @Test - public void givenMethod_whenInvokes_thenCorrect() - throws ClassNotFoundException, NoSuchMethodException, - SecurityException, IllegalAccessException, - IllegalArgumentException, InvocationTargetException, - InstantiationException { - Class birdClass = Class.forName("com.baeldung.reflection.Bird"); - Bird bird = (Bird) birdClass.newInstance(); - Method setWalksMethod = birdClass.getDeclaredMethod("setWalks", - boolean.class); - Method walksMethod = birdClass.getDeclaredMethod("walks"); - boolean walks = (boolean) walksMethod.invoke(bird); - assertFalse(walks); - assertFalse(bird.walks()); - setWalksMethod.invoke(bird, true); - boolean walks2 = (boolean) walksMethod.invoke(bird); - assertTrue(walks2); - assertTrue(bird.walks()); + @Test + public void givenClassField_whenSetsAndGetsValue_thenCorrect() + throws Exception { + Class birdClass = Class.forName("com.baeldung.reflection.Bird"); + Bird bird = (Bird) birdClass.newInstance(); + Field field = birdClass.getDeclaredField("walks"); + field.setAccessible(true); - } + assertFalse(field.getBoolean(bird)); + assertFalse(bird.walks()); + + field.set(bird, true); + + assertTrue(field.getBoolean(bird)); + assertTrue(bird.walks()); + + } + + @Test + public void givenClassField_whenGetsAndSetsWithNull_thenCorrect() + throws Exception { + Class birdClass = Class.forName("com.baeldung.reflection.Bird"); + Field field = birdClass.getField("CATEGORY"); + field.setAccessible(true); + + assertEquals("domestic", field.get(null)); + } + + @Test + public void givenClass_whenGetsAllPublicMethods_thenCorrect() + throws ClassNotFoundException { + Class birdClass = Class.forName("com.baeldung.reflection.Bird"); + Method[] methods = birdClass.getMethods(); + List methodNames = getMethodNames(methods); + + assertTrue(methodNames.containsAll(Arrays + .asList("equals", "notifyAll", "hashCode", + "walks", "eats", "toString"))); + + } + + @Test + public void givenClass_whenGetsOnlyDeclaredMethods_thenCorrect() + throws ClassNotFoundException { + Class birdClass = Class.forName("com.baeldung.reflection.Bird"); + List actualMethodNames = getMethodNames(birdClass.getDeclaredMethods()); + + List expectedMethodNames = Arrays.asList("setWalks", "walks", "getSound", "eats"); + + assertEquals(expectedMethodNames.size(), actualMethodNames.size()); + assertTrue(expectedMethodNames.containsAll(actualMethodNames)); + assertTrue(actualMethodNames.containsAll(expectedMethodNames)); + + } + + @Test + public void givenMethodName_whenGetsMethod_thenCorrect() + throws Exception { + Class birdClass = Class.forName("com.baeldung.reflection.Bird"); + Method walksMethod = birdClass.getDeclaredMethod("walks"); + Method setWalksMethod = birdClass.getDeclaredMethod("setWalks", + boolean.class); + + assertFalse(walksMethod.isAccessible()); + assertFalse(setWalksMethod.isAccessible()); + + walksMethod.setAccessible(true); + setWalksMethod.setAccessible(true); + + assertTrue(walksMethod.isAccessible()); + assertTrue(setWalksMethod.isAccessible()); + + } + + @Test + public void givenMethod_whenInvokes_thenCorrect() + throws Exception { + Class birdClass = Class.forName("com.baeldung.reflection.Bird"); + Bird bird = (Bird) birdClass.newInstance(); + Method setWalksMethod = birdClass.getDeclaredMethod("setWalks", + boolean.class); + Method walksMethod = birdClass.getDeclaredMethod("walks"); + boolean walks = (boolean) walksMethod.invoke(bird); + + assertFalse(walks); + assertFalse(bird.walks()); + + setWalksMethod.invoke(bird, true); + boolean walks2 = (boolean) walksMethod.invoke(bird); + + assertTrue(walks2); + assertTrue(bird.walks()); + + } + + private static List getMethodNames(Method[] methods) { + return Stream.of(methods) + .map((Method::getName)) + .collect(toList()); + } + + private static List getFieldNames(Field[] fields) { + return Stream.of(fields) + .map(Field::getName) + .collect(toList()); + } } From 20e52971a779c56845e0f2cb4eee654dd5a22e35 Mon Sep 17 00:00:00 2001 From: Alex Theedom Date: Sun, 4 Sep 2016 08:02:40 +0100 Subject: [PATCH 060/265] Migrate Reflection code to Core-Java module --- .../com/baeldung/java/reflection/Animal.java | 27 ++ .../com/baeldung/java/reflection/Bird.java | 36 ++ .../com/baeldung/java/reflection/Eating.java | 5 + .../com/baeldung/java/reflection/Goat.java | 24 ++ .../baeldung/java/reflection/Locomotion.java | 5 + .../com/baeldung/java/reflection/Person.java | 6 + .../java/reflection/ReflectionTest.java | 326 ++++++++++++++++++ 7 files changed, 429 insertions(+) create mode 100644 core-java/src/main/java/com/baeldung/java/reflection/Animal.java create mode 100644 core-java/src/main/java/com/baeldung/java/reflection/Bird.java create mode 100644 core-java/src/main/java/com/baeldung/java/reflection/Eating.java create mode 100644 core-java/src/main/java/com/baeldung/java/reflection/Goat.java create mode 100644 core-java/src/main/java/com/baeldung/java/reflection/Locomotion.java create mode 100644 core-java/src/main/java/com/baeldung/java/reflection/Person.java create mode 100644 core-java/src/test/java/com/baeldung/java/reflection/ReflectionTest.java diff --git a/core-java/src/main/java/com/baeldung/java/reflection/Animal.java b/core-java/src/main/java/com/baeldung/java/reflection/Animal.java new file mode 100644 index 0000000000..2107c7522d --- /dev/null +++ b/core-java/src/main/java/com/baeldung/java/reflection/Animal.java @@ -0,0 +1,27 @@ +package com.baeldung.java.reflection; + +public abstract class Animal implements Eating { + + public static final String CATEGORY = "domestic"; + + private String name; + + public Animal(String name) { + this.name = name; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String makeSound() { + return getSound(); + } + + protected abstract String getSound(); + +} diff --git a/core-java/src/main/java/com/baeldung/java/reflection/Bird.java b/core-java/src/main/java/com/baeldung/java/reflection/Bird.java new file mode 100644 index 0000000000..bd6f13094c --- /dev/null +++ b/core-java/src/main/java/com/baeldung/java/reflection/Bird.java @@ -0,0 +1,36 @@ +package com.baeldung.java.reflection; + +public class Bird extends Animal { + private boolean walks; + + public Bird() { + super("bird"); + } + + public Bird(String name, boolean walks) { + super(name); + setWalks(walks); + } + + public Bird(String name) { + super(name); + } + + @Override + public String eats() { + return "grains"; + } + + @Override + protected String getSound() { + return "chaps"; + } + + public boolean walks() { + return walks; + } + + public void setWalks(boolean walks) { + this.walks = walks; + } +} diff --git a/core-java/src/main/java/com/baeldung/java/reflection/Eating.java b/core-java/src/main/java/com/baeldung/java/reflection/Eating.java new file mode 100644 index 0000000000..479425cad4 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/java/reflection/Eating.java @@ -0,0 +1,5 @@ +package com.baeldung.java.reflection; + +public interface Eating { + String eats(); +} diff --git a/core-java/src/main/java/com/baeldung/java/reflection/Goat.java b/core-java/src/main/java/com/baeldung/java/reflection/Goat.java new file mode 100644 index 0000000000..503717ae5e --- /dev/null +++ b/core-java/src/main/java/com/baeldung/java/reflection/Goat.java @@ -0,0 +1,24 @@ +package com.baeldung.java.reflection; + +public class Goat extends Animal implements Locomotion { + + public Goat(String name) { + super(name); + } + + @Override + protected String getSound() { + return "bleat"; + } + + @Override + public String getLocomotion() { + return "walks"; + } + + @Override + public String eats() { + return "grass"; + } + +} diff --git a/core-java/src/main/java/com/baeldung/java/reflection/Locomotion.java b/core-java/src/main/java/com/baeldung/java/reflection/Locomotion.java new file mode 100644 index 0000000000..047c00cb13 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/java/reflection/Locomotion.java @@ -0,0 +1,5 @@ +package com.baeldung.java.reflection; + +public interface Locomotion { + String getLocomotion(); +} diff --git a/core-java/src/main/java/com/baeldung/java/reflection/Person.java b/core-java/src/main/java/com/baeldung/java/reflection/Person.java new file mode 100644 index 0000000000..f3d7f9f001 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/java/reflection/Person.java @@ -0,0 +1,6 @@ +package com.baeldung.java.reflection; + +public class Person { + private String name; + private int age; +} diff --git a/core-java/src/test/java/com/baeldung/java/reflection/ReflectionTest.java b/core-java/src/test/java/com/baeldung/java/reflection/ReflectionTest.java new file mode 100644 index 0000000000..6a0ad7d34f --- /dev/null +++ b/core-java/src/test/java/com/baeldung/java/reflection/ReflectionTest.java @@ -0,0 +1,326 @@ +package com.baeldung.java.reflection; + +import org.junit.Test; + +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Stream; + +import static java.util.stream.Collectors.toList; +import static org.junit.Assert.*; + +public class ReflectionTest { + + @Test + public void givenObject_whenGetsFieldNamesAtRuntime_thenCorrect() { + Object person = new Person(); + Field[] fields = person.getClass().getDeclaredFields(); + + List actualFieldNames = getFieldNames(fields); + + assertTrue(Arrays.asList("name", "age") + .containsAll(actualFieldNames)); + + } + + @Test + public void givenObject_whenGetsClassName_thenCorrect() { + Object goat = new Goat("goat"); + Class clazz = goat.getClass(); + + assertEquals("Goat", clazz.getSimpleName()); + assertEquals("com.baeldung.java.reflection.Goat", clazz.getName()); + assertEquals("com.baeldung.java.reflection.Goat", clazz.getCanonicalName()); + } + + @Test + public void givenClassName_whenCreatesObject_thenCorrect() + throws ClassNotFoundException { + Class clazz = Class.forName("com.baeldung.java.reflection.Goat"); + + assertEquals("Goat", clazz.getSimpleName()); + assertEquals("com.baeldung.java.reflection.Goat", clazz.getName()); + assertEquals("com.baeldung.java.reflection.Goat", clazz.getCanonicalName()); + } + + @Test + public void givenClass_whenRecognisesModifiers_thenCorrect() + throws ClassNotFoundException { + Class goatClass = Class.forName("com.baeldung.java.reflection.Goat"); + Class animalClass = Class.forName("com.baeldung.java.reflection.Animal"); + int goatMods = goatClass.getModifiers(); + int animalMods = animalClass.getModifiers(); + + assertTrue(Modifier.isPublic(goatMods)); + assertTrue(Modifier.isAbstract(animalMods)); + assertTrue(Modifier.isPublic(animalMods)); + } + + @Test + public void givenClass_whenGetsPackageInfo_thenCorrect() { + Goat goat = new Goat("goat"); + Class goatClass = goat.getClass(); + Package pkg = goatClass.getPackage(); + + assertEquals("com.baeldung.java.reflection", pkg.getName()); + } + + @Test + public void givenClass_whenGetsSuperClass_thenCorrect() { + Goat goat = new Goat("goat"); + String str = "any string"; + + Class goatClass = goat.getClass(); + Class goatSuperClass = goatClass.getSuperclass(); + + assertEquals("Animal", goatSuperClass.getSimpleName()); + assertEquals("Object", str.getClass().getSuperclass().getSimpleName()); + + } + + @Test + public void givenClass_whenGetsImplementedInterfaces_thenCorrect() + throws ClassNotFoundException { + Class goatClass = Class.forName("com.baeldung.java.reflection.Goat"); + Class animalClass = Class.forName("com.baeldung.java.reflection.Animal"); + Class[] goatInterfaces = goatClass.getInterfaces(); + Class[] animalInterfaces = animalClass.getInterfaces(); + + assertEquals(1, goatInterfaces.length); + assertEquals(1, animalInterfaces.length); + assertEquals("Locomotion", goatInterfaces[0].getSimpleName()); + assertEquals("Eating", animalInterfaces[0].getSimpleName()); + } + + @Test + public void givenClass_whenGetsConstructor_thenCorrect() + throws ClassNotFoundException { + Class goatClass = Class.forName("com.baeldung.java.reflection.Goat"); + Constructor[] constructors = goatClass.getConstructors(); + + assertEquals(1, constructors.length); + assertEquals("com.baeldung.java.reflection.Goat", constructors[0].getName()); + } + + @Test + public void givenClass_whenGetsFields_thenCorrect() + throws ClassNotFoundException { + Class animalClass = Class.forName("com.baeldung.java.reflection.Animal"); + Field[] fields = animalClass.getDeclaredFields(); + + List actualFields = getFieldNames(fields); + + assertEquals(2, actualFields.size()); + assertTrue(actualFields.containsAll(Arrays.asList("name", "CATEGORY"))); + } + + @Test + public void givenClass_whenGetsMethods_thenCorrect() + throws ClassNotFoundException { + Class animalClass = Class.forName("com.baeldung.java.reflection.Animal"); + Method[] methods = animalClass.getDeclaredMethods(); + List actualMethods = getMethodNames(methods); + + assertEquals(4, actualMethods.size()); + assertTrue(actualMethods.containsAll(Arrays.asList("getName", + "setName", "getSound", "makeSound"))); + } + + @Test + public void givenClass_whenGetsAllConstructors_thenCorrect() + throws ClassNotFoundException { + Class birdClass = Class.forName("com.baeldung.java.reflection.Bird"); + Constructor[] constructors = birdClass.getConstructors(); + + assertEquals(3, constructors.length); + } + + @Test + public void givenClass_whenGetsEachConstructorByParamTypes_thenCorrect() + throws Exception { + Class birdClass = Class.forName("com.baeldung.java.reflection.Bird"); + Constructor cons1 = birdClass.getConstructor(); + Constructor cons2 = birdClass.getConstructor(String.class); + Constructor cons3 = birdClass.getConstructor(String.class, + boolean.class); + } + + @Test + public void givenClass_whenInstantiatesObjectsAtRuntime_thenCorrect() + throws Exception { + Class birdClass = Class.forName("com.baeldung.java.reflection.Bird"); + + Constructor cons1 = birdClass.getConstructor(); + Constructor cons2 = birdClass.getConstructor(String.class); + Constructor cons3 = birdClass.getConstructor(String.class, + boolean.class); + + Bird bird1 = (Bird) cons1.newInstance(); + Bird bird2 = (Bird) cons2.newInstance("Weaver bird"); + Bird bird3 = (Bird) cons3.newInstance("dove", true); + + assertEquals("bird", bird1.getName()); + assertEquals("Weaver bird", bird2.getName()); + assertEquals("dove", bird3.getName()); + assertFalse(bird1.walks()); + assertTrue(bird3.walks()); + } + + @Test + public void givenClass_whenGetsPublicFields_thenCorrect() + throws ClassNotFoundException { + Class birdClass = Class.forName("com.baeldung.java.reflection.Bird"); + Field[] fields = birdClass.getFields(); + assertEquals(1, fields.length); + assertEquals("CATEGORY", fields[0].getName()); + + } + + @Test + public void givenClass_whenGetsPublicFieldByName_thenCorrect() + throws Exception { + Class birdClass = Class.forName("com.baeldung.java.reflection.Bird"); + Field field = birdClass.getField("CATEGORY"); + assertEquals("CATEGORY", field.getName()); + + } + + @Test + public void givenClass_whenGetsDeclaredFields_thenCorrect() + throws ClassNotFoundException { + Class birdClass = Class.forName("com.baeldung.java.reflection.Bird"); + Field[] fields = birdClass.getDeclaredFields(); + assertEquals(1, fields.length); + assertEquals("walks", fields[0].getName()); + } + + @Test + public void givenClass_whenGetsFieldsByName_thenCorrect() + throws Exception { + Class birdClass = Class.forName("com.baeldung.java.reflection.Bird"); + Field field = birdClass.getDeclaredField("walks"); + assertEquals("walks", field.getName()); + + } + + @Test + public void givenClassField_whenGetsType_thenCorrect() + throws Exception { + Field field = Class.forName("com.baeldung.java.reflection.Bird") + .getDeclaredField("walks"); + Class fieldClass = field.getType(); + assertEquals("boolean", fieldClass.getSimpleName()); + } + + @Test + public void givenClassField_whenSetsAndGetsValue_thenCorrect() + throws Exception { + Class birdClass = Class.forName("com.baeldung.java.reflection.Bird"); + Bird bird = (Bird) birdClass.newInstance(); + Field field = birdClass.getDeclaredField("walks"); + field.setAccessible(true); + + assertFalse(field.getBoolean(bird)); + assertFalse(bird.walks()); + + field.set(bird, true); + + assertTrue(field.getBoolean(bird)); + assertTrue(bird.walks()); + + } + + @Test + public void givenClassField_whenGetsAndSetsWithNull_thenCorrect() + throws Exception { + Class birdClass = Class.forName("com.baeldung.java.reflection.Bird"); + Field field = birdClass.getField("CATEGORY"); + field.setAccessible(true); + + assertEquals("domestic", field.get(null)); + } + + @Test + public void givenClass_whenGetsAllPublicMethods_thenCorrect() + throws ClassNotFoundException { + Class birdClass = Class.forName("com.baeldung.java.reflection.Bird"); + Method[] methods = birdClass.getMethods(); + List methodNames = getMethodNames(methods); + + assertTrue(methodNames.containsAll(Arrays + .asList("equals", "notifyAll", "hashCode", + "walks", "eats", "toString"))); + + } + + @Test + public void givenClass_whenGetsOnlyDeclaredMethods_thenCorrect() + throws ClassNotFoundException { + Class birdClass = Class.forName("com.baeldung.java.reflection.Bird"); + List actualMethodNames = getMethodNames(birdClass.getDeclaredMethods()); + + List expectedMethodNames = Arrays.asList("setWalks", "walks", "getSound", "eats"); + + assertEquals(expectedMethodNames.size(), actualMethodNames.size()); + assertTrue(expectedMethodNames.containsAll(actualMethodNames)); + assertTrue(actualMethodNames.containsAll(expectedMethodNames)); + + } + + @Test + public void givenMethodName_whenGetsMethod_thenCorrect() + throws Exception { + Class birdClass = Class.forName("com.baeldung.java.reflection.Bird"); + Method walksMethod = birdClass.getDeclaredMethod("walks"); + Method setWalksMethod = birdClass.getDeclaredMethod("setWalks", + boolean.class); + + assertFalse(walksMethod.isAccessible()); + assertFalse(setWalksMethod.isAccessible()); + + walksMethod.setAccessible(true); + setWalksMethod.setAccessible(true); + + assertTrue(walksMethod.isAccessible()); + assertTrue(setWalksMethod.isAccessible()); + + } + + @Test + public void givenMethod_whenInvokes_thenCorrect() + throws Exception { + Class birdClass = Class.forName("com.baeldung.java.reflection.Bird"); + Bird bird = (Bird) birdClass.newInstance(); + Method setWalksMethod = birdClass.getDeclaredMethod("setWalks", + boolean.class); + Method walksMethod = birdClass.getDeclaredMethod("walks"); + boolean walks = (boolean) walksMethod.invoke(bird); + + assertFalse(walks); + assertFalse(bird.walks()); + + setWalksMethod.invoke(bird, true); + boolean walks2 = (boolean) walksMethod.invoke(bird); + + assertTrue(walks2); + assertTrue(bird.walks()); + + } + + private static List getMethodNames(Method[] methods) { + return Stream.of(methods) + .map((Method::getName)) + .collect(toList()); + } + + private static List getFieldNames(Field[] fields) { + return Stream.of(fields) + .map(Field::getName) + .collect(toList()); + } + +} From 32231b1fb48afd27c7d072f6772a080c2d78df09 Mon Sep 17 00:00:00 2001 From: Alex Theedom Date: Sun, 4 Sep 2016 08:04:06 +0100 Subject: [PATCH 061/265] Remove Reflection module from pom --- pom.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/pom.xml b/pom.xml index f27f4c4a7a..65354e5daf 100644 --- a/pom.xml +++ b/pom.xml @@ -117,7 +117,6 @@ xstream dozer orika - reflection dozer orika From 6bb724d828d0201f2b11b72971a2a5008ab72504 Mon Sep 17 00:00:00 2001 From: eugenp Date: Sun, 4 Sep 2016 10:37:27 +0300 Subject: [PATCH 062/265] fixing the pom (and sorting the modules a bit) --- pom.xml | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/pom.xml b/pom.xml index 65354e5daf..9819214605 100644 --- a/pom.xml +++ b/pom.xml @@ -1,5 +1,5 @@ + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 com.baeldung parent-modules @@ -16,14 +16,16 @@ assertj apache-cxf - apache-fop + autovalue-tutorial + cdi core-java core-java-8 couchbase-sdk-intro couchbase-sdk-spring-service + dozer dependency-injection deltaspike @@ -33,9 +35,12 @@ guava guava18 guava19 + handling-spring-static-resources httpclient + immutables + jackson javaxval jjwt @@ -44,16 +49,23 @@ json json-path junit5 - mockito - mocks jee7schedule + + log4j + + mockito + mocks + mutation-testing + + orika + querydsl + rest-assured rest-testing resteasy - log4j spring-all spring-akka @@ -106,19 +118,15 @@ spring-security-x509 spring-thymeleaf spring-zuul + spring-mvc-velocity + jsf xml lombok redis - - mutation-testing - spring-mvc-velocity xstream - dozer - orika - dozer - orika + From 98ffbc1f374df7a8b584ed3e95d1047477700730 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Sun, 4 Sep 2016 10:02:09 +0200 Subject: [PATCH 063/265] Refactor ArrayList examples --- .../java/collections/ArrayListTest.java | 23 +++++++++---------- .../java/com/baeldung/reflection/Animal.java | 4 ---- 2 files changed, 11 insertions(+), 16 deletions(-) diff --git a/core-java/src/test/java/org/baeldung/java/collections/ArrayListTest.java b/core-java/src/test/java/org/baeldung/java/collections/ArrayListTest.java index 4996a1f0a2..d7a69c42c7 100644 --- a/core-java/src/test/java/org/baeldung/java/collections/ArrayListTest.java +++ b/core-java/src/test/java/org/baeldung/java/collections/ArrayListTest.java @@ -1,25 +1,28 @@ package org.baeldung.java.collections; +import com.google.common.collect.Sets; import org.junit.Before; import org.junit.Test; import java.util.*; import java.util.stream.*; +import static java.util.stream.Collectors.toList; +import static java.util.stream.Collectors.toSet; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.core.IsNot.not; import static org.junit.Assert.*; public class ArrayListTest { - List stringsToSearch; + private List stringsToSearch; @Before public void setUp() { List xs = LongStream.range(0, 16) .boxed() .map(Long::toHexString) - .collect(Collectors.toList()); + .collect(toList()); stringsToSearch = new ArrayList<>(xs); stringsToSearch.addAll(xs); } @@ -33,7 +36,7 @@ public class ArrayListTest { @Test public void givenCollection_whenProvideItToArrayListCtor_thenArrayListIsPopulatedWithItsElements() { Collection numbers = - IntStream.range(0, 10).boxed().collect(Collectors.toSet()); + IntStream.range(0, 10).boxed().collect(toSet()); List xs = new ArrayList<>(numbers); assertEquals(10, xs.size()); @@ -54,7 +57,7 @@ public class ArrayListTest { @Test public void givenCollection_whenAddToArrayList_thenIsAdded() { List xs = new ArrayList<>(Arrays.asList(1L, 2L, 3L)); - Collection ys = LongStream.range(4, 10).boxed().collect(Collectors.toList()); + Collection ys = LongStream.range(4, 10).boxed().collect(toList()); xs.addAll(0, ys); assertThat(Arrays.asList(4L, 5L, 6L, 7L, 8L, 9L, 1L, 2L, 3L), equalTo(xs)); @@ -89,7 +92,7 @@ public class ArrayListTest { List result = stringsToSearch .stream() .filter(matchingStrings::contains) - .collect(Collectors.toList()); + .collect(toList()); assertEquals(6, result.size()); } @@ -104,9 +107,7 @@ public class ArrayListTest { @Test public void givenIndex_whenRemove_thenCorrectElementRemoved() { - List xs = new ArrayList<>( - IntStream.range(0, 10).boxed().collect(Collectors.toList()) - ); + List xs = IntStream.range(0, 10).boxed().collect(toList()); Collections.reverse(xs); xs.remove(0); @@ -118,9 +119,7 @@ public class ArrayListTest { @Test public void givenListIterator_whenReverseTraversal_thenRetrieveElementsInOppositeOrder() { - List xs = new ArrayList<>( - IntStream.range(0, 10).boxed().collect(Collectors.toList()) - ); + List xs = IntStream.range(0, 10).boxed().collect(toList()); ListIterator it = xs.listIterator(xs.size()); List result = new ArrayList<>(xs.size()); while (it.hasPrevious()) { @@ -134,7 +133,7 @@ public class ArrayListTest { @Test public void givenCondition_whenIterateArrayList_thenRemoveAllElementsSatisfyingCondition() { Set matchingStrings - = new HashSet<>(Arrays.asList("a", "b", "c", "d", "e", "f")); + = Sets.newHashSet("a", "b", "c", "d", "e", "f"); Iterator it = stringsToSearch.iterator(); while (it.hasNext()) { diff --git a/reflection/src/main/java/com/baeldung/reflection/Animal.java b/reflection/src/main/java/com/baeldung/reflection/Animal.java index f35f3b626c..364246ae64 100644 --- a/reflection/src/main/java/com/baeldung/reflection/Animal.java +++ b/reflection/src/main/java/com/baeldung/reflection/Animal.java @@ -18,10 +18,6 @@ public abstract class Animal implements Eating { this.name = name; } - public String makeSound() { - return getSound(); - } - protected abstract String getSound(); } From c68e1bfbc8f2cd46015308d5c0a638cf4ff81408 Mon Sep 17 00:00:00 2001 From: anton-k11 Date: Sun, 4 Sep 2016 13:30:35 +0300 Subject: [PATCH 064/265] Java 9 new features (#660) * initial push for core-java-9 tutorials * Fixed Maven build with experimental java 9 Maven compiler plug-in. Minor code changes * Running maven build and changes to some of tests. * Fixed maven build and modifications ot some tests * Removing unnecessary files --- core-java-9/.gitignore | 13 ++ core-java-9/README.md | 5 + core-java-9/pom.xml | 102 ++++++++++++++ core-java-9/src/main/java/.gitignore | 13 ++ .../java9/language/PrivateInterface.java | 23 ++++ .../baeldung/java9/process/ProcessUtils.java | 44 ++++++ .../baeldung/java9/process/ServiceMain.java | 22 +++ core-java-9/src/main/resources/logback.xml | 16 +++ .../java9/MultiResultionImageTest.java | 48 +++++++ .../httpclient/SimpleHttpRequestsTest.java | 126 ++++++++++++++++++ .../baeldung/java9/language/DiamondTest.java | 36 +++++ .../java9/language/PrivateInterfaceTest.java | 15 +++ .../java9/language/TryWithResourcesTest.java | 70 ++++++++++ .../baeldung/java9/process/ProcessApi.java | 112 ++++++++++++++++ core-java-9/src/test/resources/.gitignore | 13 ++ pom.xml | 1 + 16 files changed, 659 insertions(+) create mode 100644 core-java-9/.gitignore create mode 100644 core-java-9/README.md create mode 100644 core-java-9/pom.xml create mode 100644 core-java-9/src/main/java/.gitignore create mode 100644 core-java-9/src/main/java/com/baeldung/java9/language/PrivateInterface.java create mode 100644 core-java-9/src/main/java/com/baeldung/java9/process/ProcessUtils.java create mode 100644 core-java-9/src/main/java/com/baeldung/java9/process/ServiceMain.java create mode 100644 core-java-9/src/main/resources/logback.xml create mode 100644 core-java-9/src/test/java/com/baeldung/java9/MultiResultionImageTest.java create mode 100644 core-java-9/src/test/java/com/baeldung/java9/httpclient/SimpleHttpRequestsTest.java create mode 100644 core-java-9/src/test/java/com/baeldung/java9/language/DiamondTest.java create mode 100644 core-java-9/src/test/java/com/baeldung/java9/language/PrivateInterfaceTest.java create mode 100644 core-java-9/src/test/java/com/baeldung/java9/language/TryWithResourcesTest.java create mode 100644 core-java-9/src/test/java/com/baeldung/java9/process/ProcessApi.java create mode 100644 core-java-9/src/test/resources/.gitignore diff --git a/core-java-9/.gitignore b/core-java-9/.gitignore new file mode 100644 index 0000000000..83c05e60c8 --- /dev/null +++ b/core-java-9/.gitignore @@ -0,0 +1,13 @@ +*.class + +#folders# +/target +/neoDb* +/data +/src/main/webapp/WEB-INF/classes +*/META-INF/* + +# Packaged files # +*.jar +*.war +*.ear \ No newline at end of file diff --git a/core-java-9/README.md b/core-java-9/README.md new file mode 100644 index 0000000000..b5d4dbef95 --- /dev/null +++ b/core-java-9/README.md @@ -0,0 +1,5 @@ +========= + +## Core Java 9 Examples + +http://inprogress.baeldung.com/java-9-new-features/ \ No newline at end of file diff --git a/core-java-9/pom.xml b/core-java-9/pom.xml new file mode 100644 index 0000000000..b29838d283 --- /dev/null +++ b/core-java-9/pom.xml @@ -0,0 +1,102 @@ + + 4.0.0 + com.baeldung + core-java9 + 0.2-SNAPSHOT + + core-java9 + + + + apache.snapshots + http://repository.apache.org/snapshots/ + + + + + + + org.slf4j + slf4j-api + ${org.slf4j.version} + + + + + + org.hamcrest + hamcrest-library + ${org.hamcrest.version} + test + + + + junit + junit + ${junit.version} + test + + + + org.mockito + mockito-core + ${mockito.version} + test + + + + + + core-java-9 + + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + 1.9 + 1.9 + + true + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + + + + + + + + 1.7.13 + 1.0.13 + + + + + 3.6-jigsaw-SNAPSHOT + + + 2.19.1 + + + 1.3 + 4.12 + 1.10.19 + + + diff --git a/core-java-9/src/main/java/.gitignore b/core-java-9/src/main/java/.gitignore new file mode 100644 index 0000000000..83c05e60c8 --- /dev/null +++ b/core-java-9/src/main/java/.gitignore @@ -0,0 +1,13 @@ +*.class + +#folders# +/target +/neoDb* +/data +/src/main/webapp/WEB-INF/classes +*/META-INF/* + +# Packaged files # +*.jar +*.war +*.ear \ No newline at end of file diff --git a/core-java-9/src/main/java/com/baeldung/java9/language/PrivateInterface.java b/core-java-9/src/main/java/com/baeldung/java9/language/PrivateInterface.java new file mode 100644 index 0000000000..fd6a496b18 --- /dev/null +++ b/core-java-9/src/main/java/com/baeldung/java9/language/PrivateInterface.java @@ -0,0 +1,23 @@ +package com.baeldung.java9.language; + +public interface PrivateInterface { + + private static String staticPrivate() { + return "static private"; + } + + private String instancePrivate() { + return "instance private"; + } + + public default void check(){ + String result = staticPrivate(); + if (!result.equals("static private")) + throw new AssertionError("Incorrect result for static private interface method"); + PrivateInterface pvt = new PrivateInterface() { + }; + result = pvt.instancePrivate(); + if (!result.equals("instance private")) + throw new AssertionError("Incorrect result for instance private interface method"); + } +} diff --git a/core-java-9/src/main/java/com/baeldung/java9/process/ProcessUtils.java b/core-java-9/src/main/java/com/baeldung/java9/process/ProcessUtils.java new file mode 100644 index 0000000000..d6682bd0c8 --- /dev/null +++ b/core-java-9/src/main/java/com/baeldung/java9/process/ProcessUtils.java @@ -0,0 +1,44 @@ +package com.baeldung.java9.process; + +import java.io.File; +import java.io.IOException; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; +import java.time.Duration; +import java.time.Instant; +import java.util.stream.Stream; + + +public class ProcessUtils { + + public static String getClassPath(){ + String cp = System.getProperty("java.class.path"); + System.out.println("ClassPath is "+cp); + return cp; + } + + public static File getJavaCmd() throws IOException{ + String javaHome = System.getProperty("java.home"); + File javaCmd; + if(System.getProperty("os.name").startsWith("Win")){ + javaCmd = new File(javaHome, "bin/java.exe"); + }else{ + javaCmd = new File(javaHome, "bin/java"); + } + if(javaCmd.canExecute()){ + return javaCmd; + }else{ + throw new UnsupportedOperationException(javaCmd.getCanonicalPath() + " is not executable"); + } + } + + public static String getMainClass(){ + return System.getProperty("sun.java.command"); + } + + public static String getSystemProperties(){ + StringBuilder sb = new StringBuilder(); + System.getProperties().forEach((s1, s2) -> sb.append(s1 +" - "+ s2) ); + return sb.toString(); + } +} diff --git a/core-java-9/src/main/java/com/baeldung/java9/process/ServiceMain.java b/core-java-9/src/main/java/com/baeldung/java9/process/ServiceMain.java new file mode 100644 index 0000000000..458f746496 --- /dev/null +++ b/core-java-9/src/main/java/com/baeldung/java9/process/ServiceMain.java @@ -0,0 +1,22 @@ +package com.baeldung.java9.process; + +import java.util.Optional; + +public class ServiceMain { + + public static void main(String[] args) throws InterruptedException { + ProcessHandle thisProcess = ProcessHandle.current(); + long pid = thisProcess.getPid(); + + + Optional opArgs = Optional.ofNullable(args); + String procName = opArgs.map(str -> str.length > 0 ? str[0] : null).orElse(System.getProperty("sun.java.command")); + + for (int i = 0; i < 10000; i++) { + System.out.println("Process " + procName + " with ID " + pid + " is running!"); + Thread.sleep(10000); + } + + } + +} diff --git a/core-java-9/src/main/resources/logback.xml b/core-java-9/src/main/resources/logback.xml new file mode 100644 index 0000000000..eefdc7a337 --- /dev/null +++ b/core-java-9/src/main/resources/logback.xml @@ -0,0 +1,16 @@ + + + + + web - %date [%thread] %-5level %logger{36} - %message%n + + + + + + + + + + + \ No newline at end of file diff --git a/core-java-9/src/test/java/com/baeldung/java9/MultiResultionImageTest.java b/core-java-9/src/test/java/com/baeldung/java9/MultiResultionImageTest.java new file mode 100644 index 0000000000..d6c16b91bc --- /dev/null +++ b/core-java-9/src/test/java/com/baeldung/java9/MultiResultionImageTest.java @@ -0,0 +1,48 @@ +package com.baeldung.java9; + +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertSame; + +import java.awt.Image; +import java.awt.image.BaseMultiResolutionImage; +import java.awt.image.BufferedImage; +import java.awt.image.MultiResolutionImage; +import java.util.List; + +import org.junit.Test; + +public class MultiResultionImageTest { + + + @Test + public void baseMultiResImageTest() { + int baseIndex = 1; + int length = 4; + BufferedImage[] resolutionVariants = new BufferedImage[length]; + for (int i = 0; i < length; i++) { + resolutionVariants[i] = createImage(i); + } + MultiResolutionImage bmrImage = new BaseMultiResolutionImage(baseIndex, resolutionVariants); + List rvImageList = bmrImage.getResolutionVariants(); + assertEquals("MultiResoltion Image shoudl contain the same number of resolution variants!", rvImageList.size(), length); + + for (int i = 0; i < length; i++) { + int imageSize = getSize(i); + Image testRVImage = bmrImage.getResolutionVariant(imageSize, imageSize); + assertSame("Images should be the same", testRVImage, resolutionVariants[i]); + } + + } + + private static int getSize(int i) { + return 8 * (i + 1); + } + + + private static BufferedImage createImage(int i) { + return new BufferedImage(getSize(i), getSize(i), + BufferedImage.TYPE_INT_RGB); + } + +} diff --git a/core-java-9/src/test/java/com/baeldung/java9/httpclient/SimpleHttpRequestsTest.java b/core-java-9/src/test/java/com/baeldung/java9/httpclient/SimpleHttpRequestsTest.java new file mode 100644 index 0000000000..ab28b0a805 --- /dev/null +++ b/core-java-9/src/test/java/com/baeldung/java9/httpclient/SimpleHttpRequestsTest.java @@ -0,0 +1,126 @@ +package com.baeldung.java9.httpclient; + + + +import static java.net.HttpURLConnection.HTTP_OK; +import static org.junit.Assert.assertTrue; + +import java.io.IOException; +import java.net.CookieManager; +import java.net.CookiePolicy; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.http.HttpClient; +import java.net.http.HttpHeaders; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.security.NoSuchAlgorithmException; +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; + +import javax.net.ssl.SSLContext; +import javax.net.ssl.SSLParameters; + +import org.junit.Before; +import org.junit.Test; + +public class SimpleHttpRequestsTest { + + private URI httpURI; + + @Before + public void init() throws URISyntaxException { + httpURI = new URI("http://www.baeldung.com/"); + } + + @Test + public void quickGet() throws IOException, InterruptedException, URISyntaxException { + HttpRequest request = HttpRequest.create( httpURI ).GET(); + HttpResponse response = request.response(); + int responseStatusCode = response.statusCode(); + String responseBody = response.body(HttpResponse.asString()); + assertTrue("Get response status code is bigger then 400", responseStatusCode < 400); + } + + @Test + public void asynchronousGet() throws URISyntaxException, IOException, InterruptedException, ExecutionException{ + HttpRequest request = HttpRequest.create(httpURI).GET(); + long before = System.currentTimeMillis(); + CompletableFuture futureResponse = request.responseAsync(); + futureResponse.thenAccept( response -> { + String responseBody = response.body(HttpResponse.asString()); + }); + HttpResponse resp = futureResponse.get(); + HttpHeaders hs = resp.headers(); + assertTrue("There should be more then 1 header.", hs.map().size() >1); + } + + @Test + public void postMehtod() throws URISyntaxException, IOException, InterruptedException { + HttpRequest.Builder requestBuilder = HttpRequest.create(httpURI); + requestBuilder.body(HttpRequest.fromString("param1=foo,param2=bar")).followRedirects(HttpClient.Redirect.SECURE); + HttpRequest request = requestBuilder.POST(); + HttpResponse response = request.response(); + int statusCode = response.statusCode(); + assertTrue("HTTP return code", statusCode == HTTP_OK); + } + + @Test + public void configureHttpClient() throws NoSuchAlgorithmException, URISyntaxException, IOException, InterruptedException{ + CookieManager cManager = new CookieManager(); + cManager.setCookiePolicy(CookiePolicy.ACCEPT_ORIGINAL_SERVER); + + SSLParameters sslParam = new SSLParameters (new String[] { "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256" }, new String[] { "TLSv1.2" }); + + HttpClient.Builder hcBuilder = HttpClient.create(); + hcBuilder.cookieManager(cManager).sslContext(SSLContext.getDefault()).sslParameters(sslParam); + HttpClient httpClient = hcBuilder.build(); + HttpRequest.Builder reqBuilder = httpClient.request(new URI("https://www.facebook.com")); + + HttpRequest request = reqBuilder.followRedirects(HttpClient.Redirect.ALWAYS).GET(); + HttpResponse response = request.response(); + int statusCode = response.statusCode(); + assertTrue("HTTP return code", statusCode == HTTP_OK); + } + + SSLParameters getDefaultSSLParameters() throws NoSuchAlgorithmException{ + SSLParameters sslP1 = SSLContext.getDefault().getSupportedSSLParameters(); + String [] proto = sslP1.getApplicationProtocols(); + String [] cifers = sslP1.getCipherSuites(); + System.out.println(printStringArr(proto)); + System.out.println(printStringArr(cifers)); + return sslP1; + } + + String printStringArr(String ... args ){ + if(args == null){ + return null; + } + StringBuilder sb = new StringBuilder(); + for (String s : args){ + sb.append(s); + sb.append("\n"); + } + return sb.toString(); + } + + String printHeaders(HttpHeaders h){ + if(h == null){ + return null; + } + + StringBuilder sb = new StringBuilder(); + Map> hMap = h.map(); + for(String k : hMap.keySet()){ + sb.append(k).append(":"); + List l = hMap.get(k); + if( l != null ){ + l.forEach( s -> { sb.append(s).append(","); } ); + } + sb.append("\n"); + } + return sb.toString(); + } +} diff --git a/core-java-9/src/test/java/com/baeldung/java9/language/DiamondTest.java b/core-java-9/src/test/java/com/baeldung/java9/language/DiamondTest.java new file mode 100644 index 0000000000..33da6486f4 --- /dev/null +++ b/core-java-9/src/test/java/com/baeldung/java9/language/DiamondTest.java @@ -0,0 +1,36 @@ +package com.baeldung.java9.language; + +import org.junit.Test; + +public class DiamondTest { + + static class FooClass { + FooClass(X x) { + } + + FooClass(X x, Z z) { + } + } + + @Test + public void diamondTest() { + FooClass fc = new FooClass<>(1) { + }; + FooClass fc0 = new FooClass<>(1) { + }; + FooClass fc1 = new FooClass<>(1) { + }; + FooClass fc2 = new FooClass<>(1) { + }; + + FooClass fc3 = new FooClass<>(1, "") { + }; + FooClass fc4 = new FooClass<>(1, "") { + }; + FooClass fc5 = new FooClass<>(1, "") { + }; + FooClass fc6 = new FooClass<>(1, "") { + }; + + } +} diff --git a/core-java-9/src/test/java/com/baeldung/java9/language/PrivateInterfaceTest.java b/core-java-9/src/test/java/com/baeldung/java9/language/PrivateInterfaceTest.java new file mode 100644 index 0000000000..29ef3930f8 --- /dev/null +++ b/core-java-9/src/test/java/com/baeldung/java9/language/PrivateInterfaceTest.java @@ -0,0 +1,15 @@ +package com.baeldung.java9.language; + +import com.baeldung.java9.language.PrivateInterface; +import org.junit.Test; + +public class PrivateInterfaceTest { + + @Test + public void test() { + PrivateInterface piClass = new PrivateInterface() { + }; + piClass.check(); + } + +} diff --git a/core-java-9/src/test/java/com/baeldung/java9/language/TryWithResourcesTest.java b/core-java-9/src/test/java/com/baeldung/java9/language/TryWithResourcesTest.java new file mode 100644 index 0000000000..687dfbc390 --- /dev/null +++ b/core-java-9/src/test/java/com/baeldung/java9/language/TryWithResourcesTest.java @@ -0,0 +1,70 @@ +package com.baeldung.java9.language; + +import static org.junit.Assert.assertEquals; +import org.junit.Test; + +public class TryWithResourcesTest { + + static int closeCount = 0; + + static class MyAutoCloseable implements AutoCloseable{ + final FinalWrapper finalWrapper = new FinalWrapper(); + + public void close() { + closeCount++; + } + + static class FinalWrapper { + public final AutoCloseable finalCloseable = new AutoCloseable() { + @Override + public void close() throws Exception { + closeCount++; + } + }; + } + } + + @Test + public void tryWithResourcesTest() { + MyAutoCloseable mac = new MyAutoCloseable(); + + try (mac) { + assertEquals("Expected and Actual does not match", 0, closeCount); + } + + try (mac.finalWrapper.finalCloseable) { + assertEquals("Expected and Actual does not match", 1, closeCount); + } catch (Exception ex) { + } + + try (new MyAutoCloseable() { }.finalWrapper.finalCloseable) { + assertEquals("Expected and Actual does not match", 2, closeCount); + } catch (Exception ex) { + } + + try ((closeCount > 0 ? mac : new MyAutoCloseable()).finalWrapper.finalCloseable) { + assertEquals("Expected and Actual does not match", 3, closeCount); + } catch (Exception ex) { + } + + try { + throw new CloseableException(); + } catch (CloseableException ex) { + try (ex) { + assertEquals("Expected and Actual does not match", 4, closeCount); + } + } + assertEquals("Expected and Actual does not match", 5, closeCount); + } + + + static class CloseableException extends Exception implements AutoCloseable { + @Override + public void close() { + closeCount++; + } + } + +} + + diff --git a/core-java-9/src/test/java/com/baeldung/java9/process/ProcessApi.java b/core-java-9/src/test/java/com/baeldung/java9/process/ProcessApi.java new file mode 100644 index 0000000000..419516cb64 --- /dev/null +++ b/core-java-9/src/test/java/com/baeldung/java9/process/ProcessApi.java @@ -0,0 +1,112 @@ +package com.baeldung.java9.process; + +import java.io.IOException; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; +import java.time.Duration; +import java.time.Instant; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import java.util.concurrent.CompletableFuture; +import java.util.stream.Stream; + +import org.junit.Before; +import org.junit.Test; + +import junit.framework.Assert; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +public class ProcessApi { + + + @Before + public void init() { + + } + + @Test + public void processInfoExample()throws NoSuchAlgorithmException{ + ProcessHandle self = ProcessHandle.current(); + long PID = self.getPid(); + ProcessHandle.Info procInfo = self.info(); + Optional args = procInfo.arguments(); + Optional cmd = procInfo.commandLine(); + Optional startTime = procInfo.startInstant(); + Optional cpuUsage = procInfo.totalCpuDuration(); + + waistCPU(); + System.out.println("Args "+ args); + System.out.println("Command " +cmd.orElse("EmptyCmd")); + System.out.println("Start time: "+ startTime.get().toString()); + System.out.println(cpuUsage.get().toMillis()); + + Stream allProc = ProcessHandle.current().children(); + allProc.forEach(p -> { + System.out.println("Proc "+ p.getPid()); + }); + + } + + @Test + public void createAndDestroyProcess() throws IOException, InterruptedException{ + int numberOfChildProcesses = 5; + for(int i=0; i < numberOfChildProcesses; i++){ + createNewJVM(ServiceMain.class, i).getPid(); + } + + Stream childProc = ProcessHandle.current().children(); + assertEquals( childProc.count(), numberOfChildProcesses); + + childProc = ProcessHandle.current().children(); + childProc.forEach(processHandle -> { + assertTrue("Process "+ processHandle.getPid() +" should be alive!", processHandle.isAlive()); + CompletableFuture onProcExit = processHandle.onExit(); + onProcExit.thenAccept(procHandle -> { + System.out.println("Process with PID "+ procHandle.getPid() + " has stopped"); + }); + }); + + Thread.sleep(10000); + + childProc = ProcessHandle.current().children(); + childProc.forEach(procHandle -> { + assertTrue("Could not kill process "+procHandle.getPid(), procHandle.destroy()); + }); + + Thread.sleep(5000); + + childProc = ProcessHandle.current().children(); + childProc.forEach(procHandle -> { + assertFalse("Process "+ procHandle.getPid() +" should not be alive!", procHandle.isAlive()); + }); + + } + + private Process createNewJVM(Class mainClass, int number) throws IOException{ + ArrayList cmdParams = new ArrayList(5); + cmdParams.add(ProcessUtils.getJavaCmd().getAbsolutePath()); + cmdParams.add("-cp"); + cmdParams.add(ProcessUtils.getClassPath()); + cmdParams.add(mainClass.getName()); + cmdParams.add("Service "+ number); + ProcessBuilder myService = new ProcessBuilder(cmdParams); + myService.inheritIO(); + return myService.start(); + } + + private void waistCPU() throws NoSuchAlgorithmException{ + ArrayList randArr = new ArrayList(4096); + SecureRandom sr = SecureRandom.getInstanceStrong(); + Duration somecpu = Duration.ofMillis(4200L); + Instant end = Instant.now().plus(somecpu); + while (Instant.now().isBefore(end)) { + //System.out.println(sr.nextInt()); + randArr.add( sr.nextInt() ); + } + } + +} diff --git a/core-java-9/src/test/resources/.gitignore b/core-java-9/src/test/resources/.gitignore new file mode 100644 index 0000000000..83c05e60c8 --- /dev/null +++ b/core-java-9/src/test/resources/.gitignore @@ -0,0 +1,13 @@ +*.class + +#folders# +/target +/neoDb* +/data +/src/main/webapp/WEB-INF/classes +*/META-INF/* + +# Packaged files # +*.jar +*.war +*.ear \ No newline at end of file diff --git a/pom.xml b/pom.xml index 9819214605..a0cb779843 100644 --- a/pom.xml +++ b/pom.xml @@ -22,6 +22,7 @@ cdi core-java core-java-8 + core-java-9 couchbase-sdk-intro couchbase-sdk-spring-service From 4c561c3e2ebfd7d391281bdfa267ba94f78fa015 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Sun, 4 Sep 2016 12:49:49 +0200 Subject: [PATCH 065/265] Update pom.xml --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index a0cb779843..6395fcd49b 100644 --- a/pom.xml +++ b/pom.xml @@ -22,7 +22,7 @@ cdi core-java core-java-8 - core-java-9 + couchbase-sdk-intro couchbase-sdk-spring-service From 491a4b1f95e1ea117c22fc07b47a678a689fec4f Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Sun, 4 Sep 2016 19:18:58 +0300 Subject: [PATCH 066/265] BAEL-10 custom model, dao, service, userdetails service, controller and views for register and login, configurations --- ....eclipse.wst.common.project.facet.core.xml | 2 +- spring-jpa/.springBeans | 16 ++++ spring-jpa/pom.xml | 81 +++++++++++++++++ .../org/baeldung/custom/config/MvcConfig.java | 42 +++++++++ .../config/PersistenceDerbyJPAConfig.java | 87 +++++++++++++++++++ .../custom/config/SecSecurityConfig.java | 75 ++++++++++++++++ .../baeldung/persistence/model/MyUser.java | 76 ++++++++++++++++ .../multiple/dao/user/MyUserDAO.java | 40 +++++++++ .../persistence/service/MyUserService.java | 48 ++++++++++ .../security/MyUserDetailsService.java | 36 ++++++++ .../org/baeldung/security/UserController.java | 52 +++++++++++ .../main/java/org/baeldung/web/MyUserDto.java | 41 +++++++++ .../resources/persistence-derby.properties | 10 +++ .../webapp/WEB-INF/mvc-dispatcher-servlet.xml | 86 ++++++++++++++++++ .../src/main/webapp/WEB-INF/views/index.jsp | 35 ++++++++ .../src/main/webapp/WEB-INF/views/login.jsp | 29 +++++++ .../main/webapp/WEB-INF/views/register.jsp | 24 +++++ spring-jpa/src/main/webapp/WEB-INF/web.xml | 50 +++++++++++ 18 files changed, 829 insertions(+), 1 deletion(-) create mode 100644 spring-jpa/.springBeans create mode 100644 spring-jpa/src/main/java/org/baeldung/custom/config/MvcConfig.java create mode 100644 spring-jpa/src/main/java/org/baeldung/custom/config/PersistenceDerbyJPAConfig.java create mode 100644 spring-jpa/src/main/java/org/baeldung/custom/config/SecSecurityConfig.java create mode 100644 spring-jpa/src/main/java/org/baeldung/persistence/model/MyUser.java create mode 100644 spring-jpa/src/main/java/org/baeldung/persistence/multiple/dao/user/MyUserDAO.java create mode 100644 spring-jpa/src/main/java/org/baeldung/persistence/service/MyUserService.java create mode 100644 spring-jpa/src/main/java/org/baeldung/security/MyUserDetailsService.java create mode 100644 spring-jpa/src/main/java/org/baeldung/security/UserController.java create mode 100644 spring-jpa/src/main/java/org/baeldung/web/MyUserDto.java create mode 100644 spring-jpa/src/main/resources/persistence-derby.properties create mode 100644 spring-jpa/src/main/webapp/WEB-INF/mvc-dispatcher-servlet.xml create mode 100644 spring-jpa/src/main/webapp/WEB-INF/views/index.jsp create mode 100644 spring-jpa/src/main/webapp/WEB-INF/views/login.jsp create mode 100644 spring-jpa/src/main/webapp/WEB-INF/views/register.jsp create mode 100644 spring-jpa/src/main/webapp/WEB-INF/web.xml diff --git a/spring-jpa/.settings/org.eclipse.wst.common.project.facet.core.xml b/spring-jpa/.settings/org.eclipse.wst.common.project.facet.core.xml index b1c99d7726..a8a65de481 100644 --- a/spring-jpa/.settings/org.eclipse.wst.common.project.facet.core.xml +++ b/spring-jpa/.settings/org.eclipse.wst.common.project.facet.core.xml @@ -1,7 +1,7 @@ - + diff --git a/spring-jpa/.springBeans b/spring-jpa/.springBeans new file mode 100644 index 0000000000..85bcd37cff --- /dev/null +++ b/spring-jpa/.springBeans @@ -0,0 +1,16 @@ + + + 1 + + + + + + + src/main/webapp/WEB-INF/mvc-dispatcher-servlet.xml + + + + + + diff --git a/spring-jpa/pom.xml b/spring-jpa/pom.xml index 25dd960435..531cfe3468 100644 --- a/spring-jpa/pom.xml +++ b/spring-jpa/pom.xml @@ -6,6 +6,7 @@ 0.1-SNAPSHOT spring-jpa + war @@ -115,6 +116,78 @@ test + + org.springframework + spring-core + ${org.springframework.version} + + + org.springframework + spring-web + ${org.springframework.version} + + + org.springframework + spring-webmvc + ${org.springframework.version} + + + + javax.servlet + servlet-api + 3.0-alpha-1 + + + org.springframework.security + spring-security-core + ${org.springframework.security.version} + + + org.springframework.security + spring-security-web + ${org.springframework.security.version} + + + org.springframework.security + spring-security-config + ${org.springframework.security.version} + + + + org.apache.derby + derby + 10.12.1.1 + + + org.apache.derby + derbyclient + 10.12.1.1 + + + org.apache.derby + derbynet + 10.12.1.1 + + + org.apache.derby + derbytools + 10.12.1.1 + + + taglibs + standard + 1.1.2 + + + org.springframework.security + spring-security-taglibs + 4.1.3.RELEASE + + + javax.servlet.jsp.jstl + jstl-api + 1.2 + @@ -138,6 +211,12 @@ + + org.apache.maven.plugins + maven-war-plugin + ${maven-war-plugin.version} + + org.apache.maven.plugins maven-surefire-plugin @@ -180,6 +259,7 @@ 4.2.5.RELEASE + 4.0.4.RELEASE 3.20.0-GA @@ -210,6 +290,7 @@ 3.5.1 + 2.6 2.19.1 2.7 1.4.18 diff --git a/spring-jpa/src/main/java/org/baeldung/custom/config/MvcConfig.java b/spring-jpa/src/main/java/org/baeldung/custom/config/MvcConfig.java new file mode 100644 index 0000000000..4a9e737a92 --- /dev/null +++ b/spring-jpa/src/main/java/org/baeldung/custom/config/MvcConfig.java @@ -0,0 +1,42 @@ +package org.baeldung.custom.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.ViewResolver; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; +import org.springframework.web.servlet.view.InternalResourceViewResolver; +import org.springframework.web.servlet.view.JstlView; + +@EnableWebMvc +@Configuration +@ComponentScan(basePackages = { "org.baeldung.security" }) +public class MvcConfig extends WebMvcConfigurerAdapter { + + public MvcConfig() { + super(); + } + + @Override + public void addViewControllers(final ViewControllerRegistry registry) { + super.addViewControllers(registry); + + registry.addViewController("/"); + registry.addViewController("/index"); + registry.addViewController("/login"); + registry.addViewController("/register"); + } + + @Bean + public ViewResolver viewResolver() { + final InternalResourceViewResolver bean = new InternalResourceViewResolver(); + + bean.setViewClass(JstlView.class); + bean.setPrefix("/WEB-INF/view/"); + bean.setSuffix(".jsp"); + + return bean; + } +} diff --git a/spring-jpa/src/main/java/org/baeldung/custom/config/PersistenceDerbyJPAConfig.java b/spring-jpa/src/main/java/org/baeldung/custom/config/PersistenceDerbyJPAConfig.java new file mode 100644 index 0000000000..19bf952e70 --- /dev/null +++ b/spring-jpa/src/main/java/org/baeldung/custom/config/PersistenceDerbyJPAConfig.java @@ -0,0 +1,87 @@ +package org.baeldung.custom.config; + +import java.util.Properties; + +import javax.persistence.EntityManagerFactory; +import javax.sql.DataSource; + +import org.baeldung.persistence.multiple.dao.user.MyUserDAO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.PropertySource; +import org.springframework.core.env.Environment; +import org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor; +import org.springframework.jdbc.datasource.DriverManagerDataSource; +import org.springframework.orm.jpa.JpaTransactionManager; +import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; +import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter; +import org.springframework.transaction.PlatformTransactionManager; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +import com.google.common.base.Preconditions; + +@Configuration +@EnableTransactionManagement +@PropertySource({ "classpath:persistence-derby.properties" }) +public class PersistenceDerbyJPAConfig { + + @Autowired + private Environment env; + + public PersistenceDerbyJPAConfig() { + super(); + } + + // beans + + @Bean + public LocalContainerEntityManagerFactoryBean myEmf() { + final LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean(); + em.setDataSource(dataSource()); + em.setPackagesToScan(new String[] { "org.baeldung.persistence.model" }); + + final HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); + em.setJpaVendorAdapter(vendorAdapter); + em.setJpaProperties(additionalProperties()); + + return em; + } + + @Bean + public DataSource dataSource() { + final DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(Preconditions.checkNotNull(env.getProperty("jdbc.driverClassName"))); + dataSource.setUrl(Preconditions.checkNotNull(env.getProperty("jdbc.url"))); + dataSource.setUsername(Preconditions.checkNotNull(env.getProperty("jdbc.user"))); + dataSource.setPassword(Preconditions.checkNotNull(env.getProperty("jdbc.pass"))); + + return dataSource; + } + + @Bean + public PlatformTransactionManager transactionManager(final EntityManagerFactory emf) { + final JpaTransactionManager transactionManager = new JpaTransactionManager(); + transactionManager.setEntityManagerFactory(emf); + return transactionManager; + } + + @Bean + public PersistenceExceptionTranslationPostProcessor exceptionTranslation() { + return new PersistenceExceptionTranslationPostProcessor(); + } + + final Properties additionalProperties() { + final Properties hibernateProperties = new Properties(); + hibernateProperties.setProperty("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto")); + hibernateProperties.setProperty("hibernate.dialect", env.getProperty("hibernate.dialect")); + // hibernateProperties.setProperty("hibernate.globally_quoted_identifiers", "true"); + return hibernateProperties; + } + + @Bean + public MyUserDAO myUserDAO() { + final MyUserDAO myUserDAO = new MyUserDAO(); + return myUserDAO; + } +} \ No newline at end of file diff --git a/spring-jpa/src/main/java/org/baeldung/custom/config/SecSecurityConfig.java b/spring-jpa/src/main/java/org/baeldung/custom/config/SecSecurityConfig.java new file mode 100644 index 0000000000..d20674844a --- /dev/null +++ b/spring-jpa/src/main/java/org/baeldung/custom/config/SecSecurityConfig.java @@ -0,0 +1,75 @@ +package org.baeldung.custom.config; + +import org.baeldung.persistence.service.MyUserService; +import org.baeldung.security.MyUserDetailsService; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Profile; +import org.springframework.security.authentication.dao.DaoAuthenticationProvider; +import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.security.crypto.password.PasswordEncoder; + +@Configuration +@EnableWebSecurity +@Profile("!https") +public class SecSecurityConfig extends WebSecurityConfigurerAdapter { + + public SecSecurityConfig() { + super(); + } + + @Override + protected void configure(final AuthenticationManagerBuilder auth) throws Exception { + // @formatter:off + auth.authenticationProvider(authenticationProvider()); + // @formatter:on + } + + @Override + protected void configure(final HttpSecurity http) throws Exception { + // @formatter:off + http + .csrf().disable() + .authorizeRequests() + .antMatchers("/*").permitAll() + .and() + .formLogin() + .loginPage("/login") + .loginProcessingUrl("/login") + .defaultSuccessUrl("/",true) + .failureUrl("/login?error=true") + .and() + .logout() + .logoutUrl("/logout") + .deleteCookies("JSESSIONID") + .logoutSuccessUrl("/"); + // @formatter:on + } + + @Bean + public DaoAuthenticationProvider authenticationProvider() { + final DaoAuthenticationProvider authProvider = new DaoAuthenticationProvider(); + authProvider.setUserDetailsService(myUserDetailsService()); + authProvider.setPasswordEncoder(encoder()); + return authProvider; + } + + @Bean + public PasswordEncoder encoder() { + return new BCryptPasswordEncoder(11); + } + + @Bean + public MyUserDetailsService myUserDetailsService() { + return new MyUserDetailsService(); + } + + @Bean + public MyUserService myUserService() { + return new MyUserService(); + } +} diff --git a/spring-jpa/src/main/java/org/baeldung/persistence/model/MyUser.java b/spring-jpa/src/main/java/org/baeldung/persistence/model/MyUser.java new file mode 100644 index 0000000000..0a097f2782 --- /dev/null +++ b/spring-jpa/src/main/java/org/baeldung/persistence/model/MyUser.java @@ -0,0 +1,76 @@ +package org.baeldung.persistence.model; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Table; + +@Entity +@Table(schema = "spring_custom_user_service") +public class MyUser { + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private int id; + + private String name; + + @Column(unique = true, nullable = false) + private String username; + + @Column(nullable = false) + private String password; + + private boolean enabled; + + public MyUser() { + } + + public int getId() { + return id; + } + + public void setId(final int id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(final String name) { + this.name = name; + } + + public String getUsername() { + return username; + } + + public void setUsername(final String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(final String password) { + this.password = password; + } + + public boolean isEnabled() { + return enabled; + } + + public void setEnabled(final boolean enabled) { + this.enabled = enabled; + } + + @Override + public String toString() { + return "MyUser [name=" + name + ", username=" + username + ", password=" + password + ", enabled=" + enabled + "]"; + } + +} diff --git a/spring-jpa/src/main/java/org/baeldung/persistence/multiple/dao/user/MyUserDAO.java b/spring-jpa/src/main/java/org/baeldung/persistence/multiple/dao/user/MyUserDAO.java new file mode 100644 index 0000000000..1de8c61442 --- /dev/null +++ b/spring-jpa/src/main/java/org/baeldung/persistence/multiple/dao/user/MyUserDAO.java @@ -0,0 +1,40 @@ +package org.baeldung.persistence.multiple.dao.user; + +import java.util.List; + +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import javax.persistence.Query; + +import org.baeldung.persistence.model.MyUser; +import org.springframework.stereotype.Repository; + +@Repository +public class MyUserDAO { + + @PersistenceContext + private EntityManager entityManager; + + public MyUser findByUsername(final String username) { + final Query query = entityManager.createQuery("from MyUser where username=:username", MyUser.class); + query.setParameter("username", username); + final List result = query.getResultList(); + if (result != null && result.size() > 0) { + return result.get(0); + } else + return null; + } + + public MyUser save(final MyUser user) { + entityManager.persist(user); + return user; + } + + public EntityManager getEntityManager() { + return entityManager; + } + + public void setEntityManager(final EntityManager entityManager) { + this.entityManager = entityManager; + } +} diff --git a/spring-jpa/src/main/java/org/baeldung/persistence/service/MyUserService.java b/spring-jpa/src/main/java/org/baeldung/persistence/service/MyUserService.java new file mode 100644 index 0000000000..a382e92664 --- /dev/null +++ b/spring-jpa/src/main/java/org/baeldung/persistence/service/MyUserService.java @@ -0,0 +1,48 @@ +package org.baeldung.persistence.service; + +import javax.transaction.Transactional; + +import org.baeldung.persistence.model.MyUser; +import org.baeldung.persistence.multiple.dao.user.MyUserDAO; +import org.baeldung.web.MyUserDto; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.stereotype.Service; + +@Service +@Transactional +public class MyUserService { + + @Autowired + private PasswordEncoder passwordEncoder; + + @Autowired + MyUserDAO myUserDAO; + + public MyUser registerNewUserAccount(final MyUserDto accountDto) throws Exception { + if (usernameExists(accountDto.getUsername())) { + throw new Exception("There is an account with that username: " + accountDto.getUsername()); + } + final MyUser user = new MyUser(); + + user.setUsername(accountDto.getUsername()); + user.setPassword(passwordEncoder.encode(accountDto.getPassword())); + user.setName(accountDto.getName()); + user.setEnabled(true); + return myUserDAO.save(user); + } + + public MyUser getUserByUsername(final String username) { + final MyUser user = myUserDAO.findByUsername(username); + return user; + } + + private boolean usernameExists(final String username) { + final MyUser user = myUserDAO.findByUsername(username); + if (user != null) { + return true; + } + return false; + } + +} diff --git a/spring-jpa/src/main/java/org/baeldung/security/MyUserDetailsService.java b/spring-jpa/src/main/java/org/baeldung/security/MyUserDetailsService.java new file mode 100644 index 0000000000..0299d7cdcf --- /dev/null +++ b/spring-jpa/src/main/java/org/baeldung/security/MyUserDetailsService.java @@ -0,0 +1,36 @@ +package org.baeldung.security; + +import java.util.ArrayList; +import java.util.Collection; + +import org.baeldung.persistence.model.MyUser; +import org.baeldung.persistence.multiple.dao.user.MyUserDAO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.stereotype.Service; + +@Service("userDetailsService") +public class MyUserDetailsService implements UserDetailsService { + + @Autowired + MyUserDAO myUserDAO; + + @Override + public UserDetails loadUserByUsername(final String username) throws UsernameNotFoundException { + final MyUser user = myUserDAO.findByUsername(username); + + if (user == null) { + throw new UsernameNotFoundException("No user found with username: " + username); + } + else { + final Collection authorities = new ArrayList<>(); + authorities.add(new SimpleGrantedAuthority("ROLE_USER")); + return new org.springframework.security.core.userdetails.User(user.getUsername(), user.getPassword(), user.isEnabled(), true, true, true, authorities); + } + } + +} diff --git a/spring-jpa/src/main/java/org/baeldung/security/UserController.java b/spring-jpa/src/main/java/org/baeldung/security/UserController.java new file mode 100644 index 0000000000..8664816a32 --- /dev/null +++ b/spring-jpa/src/main/java/org/baeldung/security/UserController.java @@ -0,0 +1,52 @@ +package org.baeldung.security; + +import javax.annotation.Resource; + +import org.baeldung.persistence.service.MyUserService; +import org.baeldung.web.MyUserDto; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; + +@Controller +public class UserController { + + @Resource + MyUserService myUserService; + + @RequestMapping(value = "/register", method = RequestMethod.POST) + public String registerUserAccount(final MyUserDto accountDto, final Model model) { + final Authentication auth = SecurityContextHolder.getContext().getAuthentication(); + model.addAttribute("name", auth.getName()); + try { + myUserService.registerNewUserAccount(accountDto); + model.addAttribute("message", "Registration successful"); + return "index"; + } + catch(final Exception exc){ + model.addAttribute("message", "Registration failed"); + + return "index"; + } + } + + @RequestMapping(value = "/", method = RequestMethod.GET) + public String getHomepage(final Model model) { + final Authentication auth = SecurityContextHolder.getContext().getAuthentication(); + model.addAttribute("name", auth.getName()); + return "index"; + } + + @RequestMapping(value = "/register", method = RequestMethod.GET) + public String getRegister() { + return "register"; + } + + @RequestMapping(value = "/login", method = RequestMethod.GET) + public String getLogin() { + return "login"; + } +} diff --git a/spring-jpa/src/main/java/org/baeldung/web/MyUserDto.java b/spring-jpa/src/main/java/org/baeldung/web/MyUserDto.java new file mode 100644 index 0000000000..ec95ec43bf --- /dev/null +++ b/spring-jpa/src/main/java/org/baeldung/web/MyUserDto.java @@ -0,0 +1,41 @@ +package org.baeldung.web; + +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; + +public class MyUserDto { + @NotNull + @Size(min = 1) + private String username; + + @NotNull + @Size(min = 1) + private String name; + + private String password; + + public String getUsername() { + return username; + } + + public void setUsername(final String username) { + this.username = username; + } + + public String getName() { + return name; + } + + public void setName(final String name) { + this.name = name; + } + + public String getPassword() { + return password; + } + + public void setPassword(final String password) { + this.password = password; + } + +} diff --git a/spring-jpa/src/main/resources/persistence-derby.properties b/spring-jpa/src/main/resources/persistence-derby.properties new file mode 100644 index 0000000000..2e2dee983b --- /dev/null +++ b/spring-jpa/src/main/resources/persistence-derby.properties @@ -0,0 +1,10 @@ +# jdbc.X +jdbc.driverClassName=org.apache.derby.jdbc.EmbeddedDriver +jdbc.url=jdbc:derby:memory:spring_custom_user_service;create=true +jdbc.user=tutorialuser +jdbc.pass=tutorialpass + +# hibernate.X +hibernate.dialect=org.hibernate.dialect.DerbyDialect +hibernate.show_sql=false +hibernate.hbm2ddl.auto=create \ No newline at end of file diff --git a/spring-jpa/src/main/webapp/WEB-INF/mvc-dispatcher-servlet.xml b/spring-jpa/src/main/webapp/WEB-INF/mvc-dispatcher-servlet.xml new file mode 100644 index 0000000000..2b33a1384a --- /dev/null +++ b/spring-jpa/src/main/webapp/WEB-INF/mvc-dispatcher-servlet.xml @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + /WEB-INF/views/ + + + .jsp + + + + + + + + + + + + + + + ${hibernate.hbm2ddl.auto} + ${hibernate.dialect} + + + + + + + + + + + + + + + + + + + diff --git a/spring-jpa/src/main/webapp/WEB-INF/views/index.jsp b/spring-jpa/src/main/webapp/WEB-INF/views/index.jsp new file mode 100644 index 0000000000..0c89257cd2 --- /dev/null +++ b/spring-jpa/src/main/webapp/WEB-INF/views/index.jsp @@ -0,0 +1,35 @@ +<%@ page language="java" contentType="text/html; charset=ISO-8859-1" + pageEncoding="ISO-8859-1"%> +<%@ taglib prefix="c" + uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %> + + + + + +Welcome! + + + + + + + +Register +

+ +Login + +

+${message } +

+ +Hello, ${name }! +
+
+Logout +
+ + + \ No newline at end of file diff --git a/spring-jpa/src/main/webapp/WEB-INF/views/login.jsp b/spring-jpa/src/main/webapp/WEB-INF/views/login.jsp new file mode 100644 index 0000000000..29431f426d --- /dev/null +++ b/spring-jpa/src/main/webapp/WEB-INF/views/login.jsp @@ -0,0 +1,29 @@ +<%@ taglib prefix="c" + uri="http://java.sun.com/jsp/jstl/core" %> + + + + + +

Login

+ +
+ + + + + + + + + + + + + +
User:
Password:
+ +
+ Username or password invalid! + + \ No newline at end of file diff --git a/spring-jpa/src/main/webapp/WEB-INF/views/register.jsp b/spring-jpa/src/main/webapp/WEB-INF/views/register.jsp new file mode 100644 index 0000000000..68b3ac14b0 --- /dev/null +++ b/spring-jpa/src/main/webapp/WEB-INF/views/register.jsp @@ -0,0 +1,24 @@ +<%@ page language="java" contentType="text/html; charset=ISO-8859-1" + pageEncoding="ISO-8859-1"%> +<%@ taglib prefix="c" + uri="http://java.sun.com/jsp/jstl/core" %> + + + + +Welcome! + + + + + +Register here:

+
+Username:
+Password:
+Name:

+ +
+ + + \ No newline at end of file diff --git a/spring-jpa/src/main/webapp/WEB-INF/web.xml b/spring-jpa/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000000..2eb6e88c31 --- /dev/null +++ b/spring-jpa/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,50 @@ + + + + Spring MVC Application + + + + contextClass + + org.springframework.web.context.support.AnnotationConfigWebApplicationContext + + + + contextConfigLocation + org.baeldung.custom.config + + + + org.springframework.web.context.ContextLoaderListener + + + + + mvc-dispatcher + org.springframework.web.servlet.DispatcherServlet + 1 + + + mvc-dispatcher + / + + + + + springSecurityFilterChain + org.springframework.web.filter.DelegatingFilterProxy + + + springSecurityFilterChain + /* + + + + index.jsp + + + \ No newline at end of file From ff3d29a8f30b44c9ff16e4b6e0fba96711412dea Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Sun, 4 Sep 2016 19:44:26 +0300 Subject: [PATCH 067/265] fix conflict with existing tests --- .../baeldung/custom/config/PersistenceDerbyJPAConfig.java | 2 +- .../java/org/baeldung/custom/config/SecSecurityConfig.java | 2 +- .../java/org/baeldung/security/MyUserDetailsService.java | 2 +- .../src/main/java/org/baeldung/security/UserController.java | 2 +- .../multiple/dao/user => user/dao}/MyUserDAO.java | 2 +- .../{persistence => user}/service/MyUserService.java | 4 ++-- .../src/main/webapp/WEB-INF/mvc-dispatcher-servlet.xml | 2 +- spring-jpa/src/main/webapp/WEB-INF/web.xml | 5 +++-- 8 files changed, 11 insertions(+), 10 deletions(-) rename spring-jpa/src/main/java/org/baeldung/{persistence/multiple/dao/user => user/dao}/MyUserDAO.java (95%) rename spring-jpa/src/main/java/org/baeldung/{persistence => user}/service/MyUserService.java (93%) diff --git a/spring-jpa/src/main/java/org/baeldung/custom/config/PersistenceDerbyJPAConfig.java b/spring-jpa/src/main/java/org/baeldung/custom/config/PersistenceDerbyJPAConfig.java index 19bf952e70..812709111d 100644 --- a/spring-jpa/src/main/java/org/baeldung/custom/config/PersistenceDerbyJPAConfig.java +++ b/spring-jpa/src/main/java/org/baeldung/custom/config/PersistenceDerbyJPAConfig.java @@ -5,7 +5,7 @@ import java.util.Properties; import javax.persistence.EntityManagerFactory; import javax.sql.DataSource; -import org.baeldung.persistence.multiple.dao.user.MyUserDAO; +import org.baeldung.user.dao.MyUserDAO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; diff --git a/spring-jpa/src/main/java/org/baeldung/custom/config/SecSecurityConfig.java b/spring-jpa/src/main/java/org/baeldung/custom/config/SecSecurityConfig.java index d20674844a..44df02980f 100644 --- a/spring-jpa/src/main/java/org/baeldung/custom/config/SecSecurityConfig.java +++ b/spring-jpa/src/main/java/org/baeldung/custom/config/SecSecurityConfig.java @@ -1,7 +1,7 @@ package org.baeldung.custom.config; -import org.baeldung.persistence.service.MyUserService; import org.baeldung.security.MyUserDetailsService; +import org.baeldung.user.service.MyUserService; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Profile; diff --git a/spring-jpa/src/main/java/org/baeldung/security/MyUserDetailsService.java b/spring-jpa/src/main/java/org/baeldung/security/MyUserDetailsService.java index 0299d7cdcf..21e3985bac 100644 --- a/spring-jpa/src/main/java/org/baeldung/security/MyUserDetailsService.java +++ b/spring-jpa/src/main/java/org/baeldung/security/MyUserDetailsService.java @@ -4,7 +4,7 @@ import java.util.ArrayList; import java.util.Collection; import org.baeldung.persistence.model.MyUser; -import org.baeldung.persistence.multiple.dao.user.MyUserDAO; +import org.baeldung.user.dao.MyUserDAO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; diff --git a/spring-jpa/src/main/java/org/baeldung/security/UserController.java b/spring-jpa/src/main/java/org/baeldung/security/UserController.java index 8664816a32..b1c96e72c0 100644 --- a/spring-jpa/src/main/java/org/baeldung/security/UserController.java +++ b/spring-jpa/src/main/java/org/baeldung/security/UserController.java @@ -2,7 +2,7 @@ package org.baeldung.security; import javax.annotation.Resource; -import org.baeldung.persistence.service.MyUserService; +import org.baeldung.user.service.MyUserService; import org.baeldung.web.MyUserDto; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; diff --git a/spring-jpa/src/main/java/org/baeldung/persistence/multiple/dao/user/MyUserDAO.java b/spring-jpa/src/main/java/org/baeldung/user/dao/MyUserDAO.java similarity index 95% rename from spring-jpa/src/main/java/org/baeldung/persistence/multiple/dao/user/MyUserDAO.java rename to spring-jpa/src/main/java/org/baeldung/user/dao/MyUserDAO.java index 1de8c61442..5741d19bf2 100644 --- a/spring-jpa/src/main/java/org/baeldung/persistence/multiple/dao/user/MyUserDAO.java +++ b/spring-jpa/src/main/java/org/baeldung/user/dao/MyUserDAO.java @@ -1,4 +1,4 @@ -package org.baeldung.persistence.multiple.dao.user; +package org.baeldung.user.dao; import java.util.List; diff --git a/spring-jpa/src/main/java/org/baeldung/persistence/service/MyUserService.java b/spring-jpa/src/main/java/org/baeldung/user/service/MyUserService.java similarity index 93% rename from spring-jpa/src/main/java/org/baeldung/persistence/service/MyUserService.java rename to spring-jpa/src/main/java/org/baeldung/user/service/MyUserService.java index a382e92664..866ac88f29 100644 --- a/spring-jpa/src/main/java/org/baeldung/persistence/service/MyUserService.java +++ b/spring-jpa/src/main/java/org/baeldung/user/service/MyUserService.java @@ -1,9 +1,9 @@ -package org.baeldung.persistence.service; +package org.baeldung.user.service; import javax.transaction.Transactional; import org.baeldung.persistence.model.MyUser; -import org.baeldung.persistence.multiple.dao.user.MyUserDAO; +import org.baeldung.user.dao.MyUserDAO; import org.baeldung.web.MyUserDto; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.crypto.password.PasswordEncoder; diff --git a/spring-jpa/src/main/webapp/WEB-INF/mvc-dispatcher-servlet.xml b/spring-jpa/src/main/webapp/WEB-INF/mvc-dispatcher-servlet.xml index 2b33a1384a..47082453b9 100644 --- a/spring-jpa/src/main/webapp/WEB-INF/mvc-dispatcher-servlet.xml +++ b/spring-jpa/src/main/webapp/WEB-INF/mvc-dispatcher-servlet.xml @@ -40,7 +40,7 @@ - + diff --git a/spring-jpa/src/main/webapp/WEB-INF/web.xml b/spring-jpa/src/main/webapp/WEB-INF/web.xml index 2eb6e88c31..b526774179 100644 --- a/spring-jpa/src/main/webapp/WEB-INF/web.xml +++ b/spring-jpa/src/main/webapp/WEB-INF/web.xml @@ -6,7 +6,8 @@ Spring MVC Application - + + mvc-dispatcher From 6a25a24eaebb08e792d52c945ca9216216f7d95d Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Sun, 4 Sep 2016 20:44:10 +0300 Subject: [PATCH 068/265] fix issues after merge --- .../.settings/org.eclipse.wst.common.project.facet.core.xml | 5 +++-- spring-jpa/pom.xml | 2 +- .../baeldung/custom/config/PersistenceDerbyJPAConfig.java | 2 ++ .../main/java/org/baeldung/user/service/MyUserService.java | 3 +-- spring-jpa/src/main/resources/persistence-derby.properties | 4 +++- .../src/main/webapp/WEB-INF/mvc-dispatcher-servlet.xml | 4 +++- 6 files changed, 13 insertions(+), 7 deletions(-) diff --git a/spring-jpa/.settings/org.eclipse.wst.common.project.facet.core.xml b/spring-jpa/.settings/org.eclipse.wst.common.project.facet.core.xml index a8a65de481..5f3c0f7702 100644 --- a/spring-jpa/.settings/org.eclipse.wst.common.project.facet.core.xml +++ b/spring-jpa/.settings/org.eclipse.wst.common.project.facet.core.xml @@ -1,7 +1,8 @@ - + - + + diff --git a/spring-jpa/pom.xml b/spring-jpa/pom.xml index 9d497774ca..71dd3df270 100644 --- a/spring-jpa/pom.xml +++ b/spring-jpa/pom.xml @@ -268,7 +268,7 @@ - 4.0.4.RELEASE + 4.1.3.RELEASE 4.3.2.RELEASE 3.20.0-GA diff --git a/spring-jpa/src/main/java/org/baeldung/custom/config/PersistenceDerbyJPAConfig.java b/spring-jpa/src/main/java/org/baeldung/custom/config/PersistenceDerbyJPAConfig.java index 812709111d..6be7053b78 100644 --- a/spring-jpa/src/main/java/org/baeldung/custom/config/PersistenceDerbyJPAConfig.java +++ b/spring-jpa/src/main/java/org/baeldung/custom/config/PersistenceDerbyJPAConfig.java @@ -75,6 +75,8 @@ public class PersistenceDerbyJPAConfig { final Properties hibernateProperties = new Properties(); hibernateProperties.setProperty("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto")); hibernateProperties.setProperty("hibernate.dialect", env.getProperty("hibernate.dialect")); + hibernateProperties.setProperty("hibernate.cache.use_second_level_cache", env.getProperty("hibernate.cache.use_second_level_cache")); + hibernateProperties.setProperty("hibernate.cache.use_query_cache", env.getProperty("hibernate.cache.use_query_cache")); // hibernateProperties.setProperty("hibernate.globally_quoted_identifiers", "true"); return hibernateProperties; } diff --git a/spring-jpa/src/main/java/org/baeldung/user/service/MyUserService.java b/spring-jpa/src/main/java/org/baeldung/user/service/MyUserService.java index 866ac88f29..edbb1651a3 100644 --- a/spring-jpa/src/main/java/org/baeldung/user/service/MyUserService.java +++ b/spring-jpa/src/main/java/org/baeldung/user/service/MyUserService.java @@ -1,13 +1,12 @@ package org.baeldung.user.service; -import javax.transaction.Transactional; - import org.baeldung.persistence.model.MyUser; import org.baeldung.user.dao.MyUserDAO; import org.baeldung.web.MyUserDto; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; @Service @Transactional diff --git a/spring-jpa/src/main/resources/persistence-derby.properties b/spring-jpa/src/main/resources/persistence-derby.properties index 2e2dee983b..e808fdc288 100644 --- a/spring-jpa/src/main/resources/persistence-derby.properties +++ b/spring-jpa/src/main/resources/persistence-derby.properties @@ -7,4 +7,6 @@ jdbc.pass=tutorialpass # hibernate.X hibernate.dialect=org.hibernate.dialect.DerbyDialect hibernate.show_sql=false -hibernate.hbm2ddl.auto=create \ No newline at end of file +hibernate.hbm2ddl.auto=create +hibernate.cache.use_second_level_cache=false +hibernate.cache.use_query_cache=false \ No newline at end of file diff --git a/spring-jpa/src/main/webapp/WEB-INF/mvc-dispatcher-servlet.xml b/spring-jpa/src/main/webapp/WEB-INF/mvc-dispatcher-servlet.xml index 47082453b9..25d1d4d22f 100644 --- a/spring-jpa/src/main/webapp/WEB-INF/mvc-dispatcher-servlet.xml +++ b/spring-jpa/src/main/webapp/WEB-INF/mvc-dispatcher-servlet.xml @@ -5,7 +5,7 @@ xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:security="http://www.springframework.org/schema/security" xmlns:tx="http://www.springframework.org/schema/tx" - xsi:schemaLocation="http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-4.0.xsd + xsi:schemaLocation="http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-4.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd @@ -65,6 +65,8 @@ ${hibernate.hbm2ddl.auto} ${hibernate.dialect} + ${hibernate.cache.use_second_level_cache} + ${hibernate.cache.use_query_cache} From 3d7ccfd56d48a54db36c8d1050f92380e4b98e1d Mon Sep 17 00:00:00 2001 From: slavisa-baeldung Date: Mon, 5 Sep 2016 06:09:37 +0200 Subject: [PATCH 069/265] BAEL-305 - front controller pattern source --- .../front-controller-pattern/pom.xml | 43 ++++++++++++++++++ .../controller/FrontControllerServlet.java | 45 +++++++++++++++++++ .../controller/commands/FrontCommand.java | 32 +++++++++++++ .../controller/commands/SearchCommand.java | 21 +++++++++ .../controller/commands/UnknownCommand.java | 11 +++++ .../patterns/front/controller/data/Book.java | 40 +++++++++++++++++ .../front/controller/data/Bookshelf.java | 15 +++++++ .../front/controller/data/BookshelfImpl.java | 24 ++++++++++ .../main/webapp/WEB-INF/jsp/book-found.jsp | 12 +++++ .../main/webapp/WEB-INF/jsp/book-notfound.jsp | 10 +++++ .../src/main/webapp/WEB-INF/jsp/unknown.jsp | 9 ++++ .../src/main/webapp/WEB-INF/web.xml | 15 +++++++ enterprise-patterns/pom.xml | 35 +++++++++++++++ pom.xml | 2 + 14 files changed, 314 insertions(+) create mode 100644 enterprise-patterns/front-controller-pattern/pom.xml create mode 100644 enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/FrontControllerServlet.java create mode 100644 enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/FrontCommand.java create mode 100644 enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/SearchCommand.java create mode 100644 enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/UnknownCommand.java create mode 100644 enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Book.java create mode 100644 enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Bookshelf.java create mode 100644 enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/BookshelfImpl.java create mode 100644 enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/book-found.jsp create mode 100644 enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/book-notfound.jsp create mode 100644 enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/unknown.jsp create mode 100644 enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/web.xml create mode 100644 enterprise-patterns/pom.xml diff --git a/enterprise-patterns/front-controller-pattern/pom.xml b/enterprise-patterns/front-controller-pattern/pom.xml new file mode 100644 index 0000000000..dbcd4f1b1d --- /dev/null +++ b/enterprise-patterns/front-controller-pattern/pom.xml @@ -0,0 +1,43 @@ + + + 4.0.0 + + front-controller-pattern + war + + + enterprise-patterns-parent + com.baeldung.enterprise.patterns + 1.0.0-SNAPSHOT + + + + + javax.servlet + javax.servlet-api + 3.1.0 + provided + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org.eclipse.jetty + jetty-maven-plugin + 9.4.0.M1 + + + /front-controller + + + + + + diff --git a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/FrontControllerServlet.java b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/FrontControllerServlet.java new file mode 100644 index 0000000000..4dfc12c050 --- /dev/null +++ b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/FrontControllerServlet.java @@ -0,0 +1,45 @@ +package com.baeldung.enterprise.patterns.front.controller; + +import com.baeldung.enterprise.patterns.front.controller.commands.FrontCommand; +import com.baeldung.enterprise.patterns.front.controller.commands.UnknownCommand; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +public class FrontControllerServlet extends HttpServlet { + @Override + protected void doGet( + HttpServletRequest request, + HttpServletResponse response + ) throws ServletException, IOException { + FrontCommand command = getCommand(request); + command.init(getServletContext(), request, response); + command.process(); + } + + private FrontCommand getCommand(HttpServletRequest request) { + try { + return (FrontCommand) getCommandClass(request) + .asSubclass(FrontCommand.class) + .newInstance(); + } catch (Exception e) { + throw new RuntimeException("Failed to get command!", e); + } + } + + private Class getCommandClass(HttpServletRequest request) { + try { + return Class.forName( + String.format( + "com.baeldung.enterprise.patterns.front.controller.commands.%sCommand", + request.getParameter("command") + ) + ); + } catch (ClassNotFoundException e) { + return UnknownCommand.class; + } + } +} diff --git a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/FrontCommand.java b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/FrontCommand.java new file mode 100644 index 0000000000..12a008faeb --- /dev/null +++ b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/FrontCommand.java @@ -0,0 +1,32 @@ +package com.baeldung.enterprise.patterns.front.controller.commands; + +import javax.servlet.RequestDispatcher; +import javax.servlet.ServletContext; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +public abstract class FrontCommand { + protected ServletContext context; + protected HttpServletRequest request; + protected HttpServletResponse response; + + public void init( + ServletContext servletContext, + HttpServletRequest servletRequest, + HttpServletResponse servletResponse + ) { + this.context = servletContext; + this.request = servletRequest; + this.response = servletResponse; + } + + public abstract void process() throws ServletException, IOException; + + protected void forward(String target) throws ServletException, IOException { + target = String.format("/WEB-INF/jsp/%s.jsp", target); + RequestDispatcher dispatcher = context.getRequestDispatcher(target); + dispatcher.forward(request, response); + } +} diff --git a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/SearchCommand.java b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/SearchCommand.java new file mode 100644 index 0000000000..0c5bd64bbc --- /dev/null +++ b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/SearchCommand.java @@ -0,0 +1,21 @@ +package com.baeldung.enterprise.patterns.front.controller.commands; + +import com.baeldung.enterprise.patterns.front.controller.data.Book; +import com.baeldung.enterprise.patterns.front.controller.data.BookshelfImpl; + +import javax.servlet.ServletException; +import java.io.IOException; + +public class SearchCommand extends FrontCommand { + @Override + public void process() throws ServletException, IOException { + Book book = new BookshelfImpl().getInstance() + .findByTitle(request.getParameter("title")); + if (book != null) { + request.setAttribute("book", book); + forward("book-found"); + } else { + forward("book-notfound"); + } + } +} diff --git a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/UnknownCommand.java b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/UnknownCommand.java new file mode 100644 index 0000000000..90103c8f42 --- /dev/null +++ b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/UnknownCommand.java @@ -0,0 +1,11 @@ +package com.baeldung.enterprise.patterns.front.controller.commands; + +import javax.servlet.ServletException; +import java.io.IOException; + +public class UnknownCommand extends FrontCommand { + @Override + public void process() throws ServletException, IOException { + forward("unknown"); + } +} diff --git a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Book.java b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Book.java new file mode 100644 index 0000000000..634e05c3a0 --- /dev/null +++ b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Book.java @@ -0,0 +1,40 @@ +package com.baeldung.enterprise.patterns.front.controller.data; + +public class Book { + private String author; + private String title; + private Double price; + + public Book() { + } + + public Book(String author, String title, Double price) { + this.author = author; + this.title = title; + this.price = price; + } + + public String getAuthor() { + return author; + } + + public void setAuthor(String author) { + this.author = author; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public Double getPrice() { + return price; + } + + public void setPrice(Double price) { + this.price = price; + } +} diff --git a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Bookshelf.java b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Bookshelf.java new file mode 100644 index 0000000000..524e000bd9 --- /dev/null +++ b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Bookshelf.java @@ -0,0 +1,15 @@ +package com.baeldung.enterprise.patterns.front.controller.data; + +public interface Bookshelf { + + default void init() { + add(new Book("Wilson, Robert Anton & Shea, Robert", "Illuminati", 9.99)); + add(new Book("Fowler, Martin", "Patterns of Enterprise Application Architecture", 27.88)); + } + + Bookshelf getInstance(); + + boolean add(E book); + + Book findByTitle(String title); +} diff --git a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/BookshelfImpl.java b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/BookshelfImpl.java new file mode 100644 index 0000000000..3862418857 --- /dev/null +++ b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/BookshelfImpl.java @@ -0,0 +1,24 @@ +package com.baeldung.enterprise.patterns.front.controller.data; + +import java.util.ArrayList; + +public class BookshelfImpl extends ArrayList implements Bookshelf { + private static Bookshelf INSTANCE; + + @Override + public Bookshelf getInstance() { + if (INSTANCE == null) { + INSTANCE = new BookshelfImpl(); + INSTANCE.init(); + } + return INSTANCE; + } + + @Override + public Book findByTitle(String title) { + return this.stream() + .filter(book -> book.getTitle().toLowerCase().contains(title.toLowerCase())) + .findFirst() + .orElse(null); + } +} diff --git a/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/book-found.jsp b/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/book-found.jsp new file mode 100644 index 0000000000..42e08b4a46 --- /dev/null +++ b/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/book-found.jsp @@ -0,0 +1,12 @@ + + + + Bookshelf: Title found + + +

Our Bookshelf contains this title:

+

${book.getTitle()}

+

Author: ${book.getAuthor()}

+ + + diff --git a/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/book-notfound.jsp b/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/book-notfound.jsp new file mode 100644 index 0000000000..2f8ac01755 --- /dev/null +++ b/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/book-notfound.jsp @@ -0,0 +1,10 @@ + + + + Bookshelf: Title not found + + +

Our Bookshelf doesn't contains this title:

+

${param.get("title")}

+ + diff --git a/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/unknown.jsp b/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/unknown.jsp new file mode 100644 index 0000000000..b52b2de8d5 --- /dev/null +++ b/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/unknown.jsp @@ -0,0 +1,9 @@ + + + + Bookshelf: Command unknown + + +

Sorry, this command is not known!

+ + diff --git a/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/web.xml b/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000000..77113db09b --- /dev/null +++ b/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,15 @@ + + + + front-controller + com.baeldung.enterprise.patterns.front.controller.FrontControllerServlet + + + front-controller + / + + diff --git a/enterprise-patterns/pom.xml b/enterprise-patterns/pom.xml new file mode 100644 index 0000000000..2fba12547f --- /dev/null +++ b/enterprise-patterns/pom.xml @@ -0,0 +1,35 @@ + + + 4.0.0 + + com.baeldung.enterprise.patterns + enterprise-patterns-parent + pom + + front-controller-pattern + + + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.5.1 + + 1.8 + 1.8 + + + + + + diff --git a/pom.xml b/pom.xml index 6395fcd49b..db3fa8a21c 100644 --- a/pom.xml +++ b/pom.xml @@ -29,6 +29,8 @@ dozer dependency-injection deltaspike + + enterprise-patterns gson From 6913a968e5ac649cea2163c0a8cd5c02d110f7e0 Mon Sep 17 00:00:00 2001 From: slavisa-baeldung Date: Mon, 5 Sep 2016 06:38:28 +0200 Subject: [PATCH 070/265] BAEL-305 - adding plantuml --- .../src/main/resources/front controller.png | Bin 0 -> 9492 bytes .../src/main/resources/front controller.puml | 22 ++++++++++++++++++ 2 files changed, 22 insertions(+) create mode 100644 enterprise-patterns/front-controller-pattern/src/main/resources/front controller.png create mode 100644 enterprise-patterns/front-controller-pattern/src/main/resources/front controller.puml diff --git a/enterprise-patterns/front-controller-pattern/src/main/resources/front controller.png b/enterprise-patterns/front-controller-pattern/src/main/resources/front controller.png new file mode 100644 index 0000000000000000000000000000000000000000..bd475bf3f32a2a82cc0d5d31acc3e09344109f1f GIT binary patch literal 9492 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 AbstractCommand +AbstractCommand <|-- ConcreteCommand1 +AbstractCommand <|-- ConcreteCommand2 + +@enduml \ No newline at end of file From fc1bb6b7b1cb1e66587198cb84fd1710e2d29164 Mon Sep 17 00:00:00 2001 From: Egima profile Date: Mon, 5 Sep 2016 10:20:45 +0300 Subject: [PATCH 071/265] made changes to java reflection (#667) --- .../java/reflection/ReflectionTest.java | 28 +- reflection/pom.xml | 30 -- .../java/com/baeldung/reflection/Animal.java | 23 -- .../java/com/baeldung/reflection/Bird.java | 36 -- .../java/com/baeldung/reflection/Eating.java | 5 - .../java/com/baeldung/reflection/Goat.java | 24 -- .../com/baeldung/reflection/Locomotion.java | 5 - .../java/com/baeldung/reflection/Person.java | 6 - .../baeldung/reflection/ReflectionTest.java | 323 ------------------ 9 files changed, 14 insertions(+), 466 deletions(-) delete mode 100644 reflection/pom.xml delete mode 100644 reflection/src/main/java/com/baeldung/reflection/Animal.java delete mode 100644 reflection/src/main/java/com/baeldung/reflection/Bird.java delete mode 100644 reflection/src/main/java/com/baeldung/reflection/Eating.java delete mode 100644 reflection/src/main/java/com/baeldung/reflection/Goat.java delete mode 100644 reflection/src/main/java/com/baeldung/reflection/Locomotion.java delete mode 100644 reflection/src/main/java/com/baeldung/reflection/Person.java delete mode 100644 reflection/src/test/java/com/baeldung/reflection/ReflectionTest.java diff --git a/core-java/src/test/java/com/baeldung/java/reflection/ReflectionTest.java b/core-java/src/test/java/com/baeldung/java/reflection/ReflectionTest.java index 6a0ad7d34f..6639096ad1 100644 --- a/core-java/src/test/java/com/baeldung/java/reflection/ReflectionTest.java +++ b/core-java/src/test/java/com/baeldung/java/reflection/ReflectionTest.java @@ -8,9 +8,7 @@ import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.util.Arrays; import java.util.List; -import java.util.stream.Stream; - -import static java.util.stream.Collectors.toList; +import java.util.ArrayList; import static org.junit.Assert.*; public class ReflectionTest { @@ -24,7 +22,6 @@ public class ReflectionTest { assertTrue(Arrays.asList("name", "age") .containsAll(actualFieldNames)); - } @Test @@ -311,16 +308,19 @@ public class ReflectionTest { } - private static List getMethodNames(Method[] methods) { - return Stream.of(methods) - .map((Method::getName)) - .collect(toList()); - } + private static List getFieldNames(Field[] fields) { + List fieldNames = new ArrayList<>(); + for (Field field : fields) + fieldNames.add(field.getName()); + return fieldNames; - private static List getFieldNames(Field[] fields) { - return Stream.of(fields) - .map(Field::getName) - .collect(toList()); - } + } + + private static List getMethodNames(Method[] methods) { + List methodNames = new ArrayList<>(); + for (Method method : methods) + methodNames.add(method.getName()); + return methodNames; + } } diff --git a/reflection/pom.xml b/reflection/pom.xml deleted file mode 100644 index 10a6d7df0c..0000000000 --- a/reflection/pom.xml +++ /dev/null @@ -1,30 +0,0 @@ - - 4.0.0 - com.baeldung - reflection - 1.0 - reflection - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.3 - - 8 - 8 - - - - - - - junit - junit - 4.3 - test - - - - diff --git a/reflection/src/main/java/com/baeldung/reflection/Animal.java b/reflection/src/main/java/com/baeldung/reflection/Animal.java deleted file mode 100644 index 364246ae64..0000000000 --- a/reflection/src/main/java/com/baeldung/reflection/Animal.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.baeldung.reflection; - -public abstract class Animal implements Eating { - - public static final String CATEGORY = "domestic"; - - private String name; - - public Animal(String name) { - this.name = name; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - protected abstract String getSound(); - -} diff --git a/reflection/src/main/java/com/baeldung/reflection/Bird.java b/reflection/src/main/java/com/baeldung/reflection/Bird.java deleted file mode 100644 index f5bb0f9b19..0000000000 --- a/reflection/src/main/java/com/baeldung/reflection/Bird.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.baeldung.reflection; - -public class Bird extends Animal { - private boolean walks; - - public Bird() { - super("bird"); - } - - public Bird(String name, boolean walks) { - super(name); - setWalks(walks); - } - - public Bird(String name) { - super(name); - } - - @Override - public String eats() { - return "grains"; - } - - @Override - protected String getSound() { - return "chaps"; - } - - public boolean walks() { - return walks; - } - - public void setWalks(boolean walks) { - this.walks = walks; - } -} diff --git a/reflection/src/main/java/com/baeldung/reflection/Eating.java b/reflection/src/main/java/com/baeldung/reflection/Eating.java deleted file mode 100644 index c959becf00..0000000000 --- a/reflection/src/main/java/com/baeldung/reflection/Eating.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.baeldung.reflection; - -public interface Eating { - String eats(); -} diff --git a/reflection/src/main/java/com/baeldung/reflection/Goat.java b/reflection/src/main/java/com/baeldung/reflection/Goat.java deleted file mode 100644 index 086d09d543..0000000000 --- a/reflection/src/main/java/com/baeldung/reflection/Goat.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.baeldung.reflection; - -public class Goat extends Animal implements Locomotion { - - public Goat(String name) { - super(name); - } - - @Override - protected String getSound() { - return "bleat"; - } - - @Override - public String getLocomotion() { - return "walks"; - } - - @Override - public String eats() { - return "grass"; - } - -} diff --git a/reflection/src/main/java/com/baeldung/reflection/Locomotion.java b/reflection/src/main/java/com/baeldung/reflection/Locomotion.java deleted file mode 100644 index 230fd9a466..0000000000 --- a/reflection/src/main/java/com/baeldung/reflection/Locomotion.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.baeldung.reflection; - -public interface Locomotion { - String getLocomotion(); -} diff --git a/reflection/src/main/java/com/baeldung/reflection/Person.java b/reflection/src/main/java/com/baeldung/reflection/Person.java deleted file mode 100644 index 1a1fafef93..0000000000 --- a/reflection/src/main/java/com/baeldung/reflection/Person.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.baeldung.reflection; - -public class Person { - private String name; - private int age; -} diff --git a/reflection/src/test/java/com/baeldung/reflection/ReflectionTest.java b/reflection/src/test/java/com/baeldung/reflection/ReflectionTest.java deleted file mode 100644 index 180ea38098..0000000000 --- a/reflection/src/test/java/com/baeldung/reflection/ReflectionTest.java +++ /dev/null @@ -1,323 +0,0 @@ -package com.baeldung.reflection; - -import org.junit.Test; - -import java.lang.reflect.*; -import java.util.Arrays; -import java.util.List; -import java.util.stream.Stream; - -import static java.util.stream.Collectors.toList; -import static org.junit.Assert.*; - -public class ReflectionTest { - - @Test - public void givenObject_whenGetsFieldNamesAtRuntime_thenCorrect() { - Object person = new Person(); - Field[] fields = person.getClass().getDeclaredFields(); - - List actualFieldNames = getFieldNames(fields); - - assertTrue(Arrays.asList("name", "age") - .containsAll(actualFieldNames)); - - } - - @Test - public void givenObject_whenGetsClassName_thenCorrect() { - Object goat = new Goat("goat"); - Class clazz = goat.getClass(); - - assertEquals("Goat", clazz.getSimpleName()); - assertEquals("com.baeldung.reflection.Goat", clazz.getName()); - assertEquals("com.baeldung.reflection.Goat", clazz.getCanonicalName()); - } - - @Test - public void givenClassName_whenCreatesObject_thenCorrect() - throws ClassNotFoundException { - Class clazz = Class.forName("com.baeldung.reflection.Goat"); - - assertEquals("Goat", clazz.getSimpleName()); - assertEquals("com.baeldung.reflection.Goat", clazz.getName()); - assertEquals("com.baeldung.reflection.Goat", clazz.getCanonicalName()); - } - - @Test - public void givenClass_whenRecognisesModifiers_thenCorrect() - throws ClassNotFoundException { - Class goatClass = Class.forName("com.baeldung.reflection.Goat"); - Class animalClass = Class.forName("com.baeldung.reflection.Animal"); - int goatMods = goatClass.getModifiers(); - int animalMods = animalClass.getModifiers(); - - assertTrue(Modifier.isPublic(goatMods)); - assertTrue(Modifier.isAbstract(animalMods)); - assertTrue(Modifier.isPublic(animalMods)); - } - - @Test - public void givenClass_whenGetsPackageInfo_thenCorrect() { - Goat goat = new Goat("goat"); - Class goatClass = goat.getClass(); - Package pkg = goatClass.getPackage(); - - assertEquals("com.baeldung.reflection", pkg.getName()); - } - - @Test - public void givenClass_whenGetsSuperClass_thenCorrect() { - Goat goat = new Goat("goat"); - String str = "any string"; - - Class goatClass = goat.getClass(); - Class goatSuperClass = goatClass.getSuperclass(); - - assertEquals("Animal", goatSuperClass.getSimpleName()); - assertEquals("Object", str.getClass().getSuperclass().getSimpleName()); - - } - - @Test - public void givenClass_whenGetsImplementedInterfaces_thenCorrect() - throws ClassNotFoundException { - Class goatClass = Class.forName("com.baeldung.reflection.Goat"); - Class animalClass = Class.forName("com.baeldung.reflection.Animal"); - Class[] goatInterfaces = goatClass.getInterfaces(); - Class[] animalInterfaces = animalClass.getInterfaces(); - - assertEquals(1, goatInterfaces.length); - assertEquals(1, animalInterfaces.length); - assertEquals("Locomotion", goatInterfaces[0].getSimpleName()); - assertEquals("Eating", animalInterfaces[0].getSimpleName()); - } - - @Test - public void givenClass_whenGetsConstructor_thenCorrect() - throws ClassNotFoundException { - Class goatClass = Class.forName("com.baeldung.reflection.Goat"); - Constructor[] constructors = goatClass.getConstructors(); - - assertEquals(1, constructors.length); - assertEquals("com.baeldung.reflection.Goat", constructors[0].getName()); - } - - @Test - public void givenClass_whenGetsFields_thenCorrect() - throws ClassNotFoundException { - Class animalClass = Class.forName("com.baeldung.reflection.Animal"); - Field[] fields = animalClass.getDeclaredFields(); - - List actualFields = getFieldNames(fields); - - assertEquals(2, actualFields.size()); - assertTrue(actualFields.containsAll(Arrays.asList("name", "CATEGORY"))); - } - - @Test - public void givenClass_whenGetsMethods_thenCorrect() - throws ClassNotFoundException { - Class animalClass = Class.forName("com.baeldung.reflection.Animal"); - Method[] methods = animalClass.getDeclaredMethods(); - List actualMethods = getMethodNames(methods); - - assertEquals(4, actualMethods.size()); - assertTrue(actualMethods.containsAll(Arrays.asList("getName", - "setName", "getSound", "makeSound"))); - } - - @Test - public void givenClass_whenGetsAllConstructors_thenCorrect() - throws ClassNotFoundException { - Class birdClass = Class.forName("com.baeldung.reflection.Bird"); - Constructor[] constructors = birdClass.getConstructors(); - - assertEquals(3, constructors.length); - } - - @Test - public void givenClass_whenGetsEachConstructorByParamTypes_thenCorrect() - throws Exception { - Class birdClass = Class.forName("com.baeldung.reflection.Bird"); - Constructor cons1 = birdClass.getConstructor(); - Constructor cons2 = birdClass.getConstructor(String.class); - Constructor cons3 = birdClass.getConstructor(String.class, - boolean.class); - } - - @Test - public void givenClass_whenInstantiatesObjectsAtRuntime_thenCorrect() - throws Exception { - Class birdClass = Class.forName("com.baeldung.reflection.Bird"); - - Constructor cons1 = birdClass.getConstructor(); - Constructor cons2 = birdClass.getConstructor(String.class); - Constructor cons3 = birdClass.getConstructor(String.class, - boolean.class); - - Bird bird1 = (Bird) cons1.newInstance(); - Bird bird2 = (Bird) cons2.newInstance("Weaver bird"); - Bird bird3 = (Bird) cons3.newInstance("dove", true); - - assertEquals("bird", bird1.getName()); - assertEquals("Weaver bird", bird2.getName()); - assertEquals("dove", bird3.getName()); - assertFalse(bird1.walks()); - assertTrue(bird3.walks()); - } - - @Test - public void givenClass_whenGetsPublicFields_thenCorrect() - throws ClassNotFoundException { - Class birdClass = Class.forName("com.baeldung.reflection.Bird"); - Field[] fields = birdClass.getFields(); - assertEquals(1, fields.length); - assertEquals("CATEGORY", fields[0].getName()); - - } - - @Test - public void givenClass_whenGetsPublicFieldByName_thenCorrect() - throws Exception { - Class birdClass = Class.forName("com.baeldung.reflection.Bird"); - Field field = birdClass.getField("CATEGORY"); - assertEquals("CATEGORY", field.getName()); - - } - - @Test - public void givenClass_whenGetsDeclaredFields_thenCorrect() - throws ClassNotFoundException { - Class birdClass = Class.forName("com.baeldung.reflection.Bird"); - Field[] fields = birdClass.getDeclaredFields(); - assertEquals(1, fields.length); - assertEquals("walks", fields[0].getName()); - } - - @Test - public void givenClass_whenGetsFieldsByName_thenCorrect() - throws Exception { - Class birdClass = Class.forName("com.baeldung.reflection.Bird"); - Field field = birdClass.getDeclaredField("walks"); - assertEquals("walks", field.getName()); - - } - - @Test - public void givenClassField_whenGetsType_thenCorrect() - throws Exception { - Field field = Class.forName("com.baeldung.reflection.Bird") - .getDeclaredField("walks"); - Class fieldClass = field.getType(); - assertEquals("boolean", fieldClass.getSimpleName()); - } - - @Test - public void givenClassField_whenSetsAndGetsValue_thenCorrect() - throws Exception { - Class birdClass = Class.forName("com.baeldung.reflection.Bird"); - Bird bird = (Bird) birdClass.newInstance(); - Field field = birdClass.getDeclaredField("walks"); - field.setAccessible(true); - - assertFalse(field.getBoolean(bird)); - assertFalse(bird.walks()); - - field.set(bird, true); - - assertTrue(field.getBoolean(bird)); - assertTrue(bird.walks()); - - } - - @Test - public void givenClassField_whenGetsAndSetsWithNull_thenCorrect() - throws Exception { - Class birdClass = Class.forName("com.baeldung.reflection.Bird"); - Field field = birdClass.getField("CATEGORY"); - field.setAccessible(true); - - assertEquals("domestic", field.get(null)); - } - - @Test - public void givenClass_whenGetsAllPublicMethods_thenCorrect() - throws ClassNotFoundException { - Class birdClass = Class.forName("com.baeldung.reflection.Bird"); - Method[] methods = birdClass.getMethods(); - List methodNames = getMethodNames(methods); - - assertTrue(methodNames.containsAll(Arrays - .asList("equals", "notifyAll", "hashCode", - "walks", "eats", "toString"))); - - } - - @Test - public void givenClass_whenGetsOnlyDeclaredMethods_thenCorrect() - throws ClassNotFoundException { - Class birdClass = Class.forName("com.baeldung.reflection.Bird"); - List actualMethodNames = getMethodNames(birdClass.getDeclaredMethods()); - - List expectedMethodNames = Arrays.asList("setWalks", "walks", "getSound", "eats"); - - assertEquals(expectedMethodNames.size(), actualMethodNames.size()); - assertTrue(expectedMethodNames.containsAll(actualMethodNames)); - assertTrue(actualMethodNames.containsAll(expectedMethodNames)); - - } - - @Test - public void givenMethodName_whenGetsMethod_thenCorrect() - throws Exception { - Class birdClass = Class.forName("com.baeldung.reflection.Bird"); - Method walksMethod = birdClass.getDeclaredMethod("walks"); - Method setWalksMethod = birdClass.getDeclaredMethod("setWalks", - boolean.class); - - assertFalse(walksMethod.isAccessible()); - assertFalse(setWalksMethod.isAccessible()); - - walksMethod.setAccessible(true); - setWalksMethod.setAccessible(true); - - assertTrue(walksMethod.isAccessible()); - assertTrue(setWalksMethod.isAccessible()); - - } - - @Test - public void givenMethod_whenInvokes_thenCorrect() - throws Exception { - Class birdClass = Class.forName("com.baeldung.reflection.Bird"); - Bird bird = (Bird) birdClass.newInstance(); - Method setWalksMethod = birdClass.getDeclaredMethod("setWalks", - boolean.class); - Method walksMethod = birdClass.getDeclaredMethod("walks"); - boolean walks = (boolean) walksMethod.invoke(bird); - - assertFalse(walks); - assertFalse(bird.walks()); - - setWalksMethod.invoke(bird, true); - boolean walks2 = (boolean) walksMethod.invoke(bird); - - assertTrue(walks2); - assertTrue(bird.walks()); - - } - - private static List getMethodNames(Method[] methods) { - return Stream.of(methods) - .map((Method::getName)) - .collect(toList()); - } - - private static List getFieldNames(Field[] fields) { - return Stream.of(fields) - .map(Field::getName) - .collect(toList()); - } - -} From 3534c71f74164f0233125465140176065d554c20 Mon Sep 17 00:00:00 2001 From: Ivan Paolillo Date: Mon, 5 Sep 2016 10:25:07 +0200 Subject: [PATCH 072/265] Add batch processing example --- .../batch-job/.mvn/wrapper/maven-wrapper.jar | Bin 0 -> 49502 bytes .../.mvn/wrapper/maven-wrapper.properties | 1 + spring-cloud-data-flow/batch-job/mvnw | 233 ++++++++++++++++++ spring-cloud-data-flow/batch-job/mvnw.cmd | 145 +++++++++++ spring-cloud-data-flow/batch-job/pom.xml | 74 ++++++ .../spring/cloud/BatchJobApplication.java | 16 ++ .../spring/cloud/JobConfiguration.java | 38 +++ .../src/main/resources/application.properties | 0 spring-cloud-data-flow/pom.xml | 1 + 9 files changed, 508 insertions(+) create mode 100644 spring-cloud-data-flow/batch-job/.mvn/wrapper/maven-wrapper.jar create mode 100644 spring-cloud-data-flow/batch-job/.mvn/wrapper/maven-wrapper.properties create mode 100644 spring-cloud-data-flow/batch-job/mvnw create mode 100644 spring-cloud-data-flow/batch-job/mvnw.cmd create mode 100644 spring-cloud-data-flow/batch-job/pom.xml create mode 100644 spring-cloud-data-flow/batch-job/src/main/java/org/baeldung/spring/cloud/BatchJobApplication.java create mode 100644 spring-cloud-data-flow/batch-job/src/main/java/org/baeldung/spring/cloud/JobConfiguration.java create mode 100644 spring-cloud-data-flow/batch-job/src/main/resources/application.properties diff --git a/spring-cloud-data-flow/batch-job/.mvn/wrapper/maven-wrapper.jar b/spring-cloud-data-flow/batch-job/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..5fd4d5023f1463b5ba3970e33c460c1eb26d748d GIT binary patch literal 49502 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%0A$pwhjXzyA0ZzErH{1@M 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 OJOEd-=rxTO#Qy`$*1Hh^ literal 0 HcmV?d00001 diff --git a/spring-cloud-data-flow/batch-job/.mvn/wrapper/maven-wrapper.properties b/spring-cloud-data-flow/batch-job/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000000..c954cec91c --- /dev/null +++ b/spring-cloud-data-flow/batch-job/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1 @@ +distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.3.9/apache-maven-3.3.9-bin.zip diff --git a/spring-cloud-data-flow/batch-job/mvnw b/spring-cloud-data-flow/batch-job/mvnw new file mode 100644 index 0000000000..a1ba1bf554 --- /dev/null +++ b/spring-cloud-data-flow/batch-job/mvnw @@ -0,0 +1,233 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Maven2 Start Up Batch script +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# M2_HOME - location of maven2's installed home dir +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "`uname`" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # + # Look for the Apple JDKs first to preserve the existing behaviour, and then look + # for the new JDKs provided by Oracle. + # + if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK ] ; then + # + # Apple JDKs + # + export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home + fi + + if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Java/JavaVirtualMachines/CurrentJDK ] ; then + # + # Apple JDKs + # + export JAVA_HOME=/System/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home + fi + + if [ -z "$JAVA_HOME" ] && [ -L "/Library/Java/JavaVirtualMachines/CurrentJDK" ] ; then + # + # Oracle JDKs + # + export JAVA_HOME=/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home + fi + + if [ -z "$JAVA_HOME" ] && [ -x "/usr/libexec/java_home" ]; then + # + # Apple JDKs + # + export JAVA_HOME=`/usr/libexec/java_home` + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=`java-config --jre-home` + fi +fi + +if [ -z "$M2_HOME" ] ; then + ## resolve links - $0 may be a link to maven's home + PRG="$0" + + # need this for relative symlinks + while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Migwn, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" + # TODO classpath? +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`which java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` +fi + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + local basedir=$(pwd) + local wdir=$(pwd) + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + wdir=$(cd "$wdir/.."; pwd) + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-$(find_maven_basedir)} +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" +export MAVEN_CMD_LINE_ARGS + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} "$@" diff --git a/spring-cloud-data-flow/batch-job/mvnw.cmd b/spring-cloud-data-flow/batch-job/mvnw.cmd new file mode 100644 index 0000000000..2b934e89dd --- /dev/null +++ b/spring-cloud-data-flow/batch-job/mvnw.cmd @@ -0,0 +1,145 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven2 Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +set MAVEN_CMD_LINE_ARGS=%* + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" + +set WRAPPER_JAR="".\.mvn\wrapper\maven-wrapper.jar"" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CMD_LINE_ARGS% +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%" == "on" pause + +if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% + +exit /B %ERROR_CODE% \ No newline at end of file diff --git a/spring-cloud-data-flow/batch-job/pom.xml b/spring-cloud-data-flow/batch-job/pom.xml new file mode 100644 index 0000000000..2ddb9d85a3 --- /dev/null +++ b/spring-cloud-data-flow/batch-job/pom.xml @@ -0,0 +1,74 @@ + + + 4.0.0 + + org.baeldung.spring.cloud + batch-job + 0.0.1-SNAPSHOT + jar + + batch-job + Demo project for Spring Boot + + + org.springframework.boot + spring-boot-starter-parent + 1.4.0.RELEASE + + + + + UTF-8 + UTF-8 + 1.8 + + + + + org.springframework.cloud + spring-cloud-task-starter + 1.0.1.RELEASE + + + + org.springframework.boot + spring-boot-starter-batch + + + + com.h2database + h2 + runtime + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.cloud + spring-cloud-dependencies + Brixton.SR5 + pom + import + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + diff --git a/spring-cloud-data-flow/batch-job/src/main/java/org/baeldung/spring/cloud/BatchJobApplication.java b/spring-cloud-data-flow/batch-job/src/main/java/org/baeldung/spring/cloud/BatchJobApplication.java new file mode 100644 index 0000000000..f717f0f644 --- /dev/null +++ b/spring-cloud-data-flow/batch-job/src/main/java/org/baeldung/spring/cloud/BatchJobApplication.java @@ -0,0 +1,16 @@ +package org.baeldung.spring.cloud; + +import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.task.configuration.EnableTask; + +@EnableTask +@EnableBatchProcessing +@SpringBootApplication +public class BatchJobApplication { + + public static void main(String[] args) { + SpringApplication.run(BatchJobApplication.class, args); + } +} diff --git a/spring-cloud-data-flow/batch-job/src/main/java/org/baeldung/spring/cloud/JobConfiguration.java b/spring-cloud-data-flow/batch-job/src/main/java/org/baeldung/spring/cloud/JobConfiguration.java new file mode 100644 index 0000000000..dc6a5e2827 --- /dev/null +++ b/spring-cloud-data-flow/batch-job/src/main/java/org/baeldung/spring/cloud/JobConfiguration.java @@ -0,0 +1,38 @@ +package org.baeldung.spring.cloud; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import org.springframework.batch.core.Job; +import org.springframework.batch.core.StepContribution; +import org.springframework.batch.core.configuration.annotation.JobBuilderFactory; +import org.springframework.batch.core.configuration.annotation.StepBuilderFactory; +import org.springframework.batch.core.scope.context.ChunkContext; +import org.springframework.batch.core.step.tasklet.Tasklet; +import org.springframework.batch.repeat.RepeatStatus; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class JobConfiguration { + + private static final Log logger = LogFactory.getLog(JobConfiguration.class); + + @Autowired + public JobBuilderFactory jobBuilderFactory; + + @Autowired + public StepBuilderFactory stepBuilderFactory; + + @Bean + public Job job() { + return jobBuilderFactory.get("job").start(stepBuilderFactory.get("jobStep1").tasklet(new Tasklet() { + @Override + public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception { + logger.info("Job was run"); + return RepeatStatus.FINISHED; + } + }).build()).build(); + } +} diff --git a/spring-cloud-data-flow/batch-job/src/main/resources/application.properties b/spring-cloud-data-flow/batch-job/src/main/resources/application.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/spring-cloud-data-flow/pom.xml b/spring-cloud-data-flow/pom.xml index 9651c0b826..509c185d61 100644 --- a/spring-cloud-data-flow/pom.xml +++ b/spring-cloud-data-flow/pom.xml @@ -10,5 +10,6 @@ time-source time-processor log-sink + batch-job
From 15dd97b485e03c9bf24a6ed18958cd59904482fa Mon Sep 17 00:00:00 2001 From: Egima profile Date: Mon, 5 Sep 2016 13:12:30 +0300 Subject: [PATCH 073/265] removed redundant makeSound sound method of abstract class Animal (#668) * made changes to java reflection * removed redundant method makeSound in Animal abstract class --- .../src/main/java/com/baeldung/java/reflection/Animal.java | 4 ---- .../java/com/baeldung/java/reflection/ReflectionTest.java | 2 +- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/core-java/src/main/java/com/baeldung/java/reflection/Animal.java b/core-java/src/main/java/com/baeldung/java/reflection/Animal.java index 2107c7522d..3f36243c29 100644 --- a/core-java/src/main/java/com/baeldung/java/reflection/Animal.java +++ b/core-java/src/main/java/com/baeldung/java/reflection/Animal.java @@ -18,10 +18,6 @@ public abstract class Animal implements Eating { this.name = name; } - public String makeSound() { - return getSound(); - } - protected abstract String getSound(); } diff --git a/core-java/src/test/java/com/baeldung/java/reflection/ReflectionTest.java b/core-java/src/test/java/com/baeldung/java/reflection/ReflectionTest.java index 6639096ad1..a12a2f205f 100644 --- a/core-java/src/test/java/com/baeldung/java/reflection/ReflectionTest.java +++ b/core-java/src/test/java/com/baeldung/java/reflection/ReflectionTest.java @@ -124,7 +124,7 @@ public class ReflectionTest { assertEquals(4, actualMethods.size()); assertTrue(actualMethods.containsAll(Arrays.asList("getName", - "setName", "getSound", "makeSound"))); + "setName", "getSound"))); } @Test From 130595f8cc6d0c03a488786169fcf60c74596ad8 Mon Sep 17 00:00:00 2001 From: Zeger Hendrikse Date: Mon, 5 Sep 2016 17:50:18 +0200 Subject: [PATCH 074/265] Minor modifications to make code compliant --- java-cassandra/pom.xml | 68 +++++++++---------- .../cassandra/java/client/domain/Book.java | 3 +- 2 files changed, 35 insertions(+), 36 deletions(-) diff --git a/java-cassandra/pom.xml b/java-cassandra/pom.xml index 3866f2a1d5..ad38eeaa0a 100644 --- a/java-cassandra/pom.xml +++ b/java-cassandra/pom.xml @@ -4,12 +4,12 @@ cassandra-java-client 1.0.0-SNAPSHOT - cassandra-java-client - - - UTF-8 - - + cassandra-java-client + + + UTF-8 + + 1.7.21 1.1.7 @@ -25,26 +25,26 @@ 3.0.3 - + - - - - com.datastax.cassandra - cassandra-driver-core - ${cassandra-driver-core.version} - true - - - - - org.cassandraunit - cassandra-unit - 2.2.2.1 - - - - + + + + com.datastax.cassandra + cassandra-driver-core + ${cassandra-driver-core.version} + true + + + + + org.cassandraunit + cassandra-unit + 2.2.2.1 + + + + org.slf4j @@ -69,15 +69,15 @@ ${org.slf4j.version} - - junit - junit - ${junit.version} - test - - - - + + junit + junit + ${junit.version} + test + + + + java-cassandra diff --git a/java-cassandra/src/main/java/com/baeldung/cassandra/java/client/domain/Book.java b/java-cassandra/src/main/java/com/baeldung/cassandra/java/client/domain/Book.java index 25ff9e2f22..e6c7753eb3 100644 --- a/java-cassandra/src/main/java/com/baeldung/cassandra/java/client/domain/Book.java +++ b/java-cassandra/src/main/java/com/baeldung/cassandra/java/client/domain/Book.java @@ -14,8 +14,7 @@ public class Book { private String publisher; - public Book() { - + Book() { } public Book(UUID id, String title, String author, String subject) { From b62b5a37ab66bfffb8c3dc8802fbe50156597220 Mon Sep 17 00:00:00 2001 From: DOHA Date: Mon, 5 Sep 2016 19:47:58 +0200 Subject: [PATCH 075/265] add possession relationship --- .../dao/user/PossessionRepository.java | 8 ++ .../multiple/model/user/Possession.java | 86 +++++++++++++++++++ .../persistence/multiple/model/user/User.java | 14 +++ .../service/JpaMultipleDBIntegrationTest.java | 20 ++++- 4 files changed, 125 insertions(+), 3 deletions(-) create mode 100644 spring-jpa/src/main/java/org/baeldung/persistence/multiple/dao/user/PossessionRepository.java create mode 100644 spring-jpa/src/main/java/org/baeldung/persistence/multiple/model/user/Possession.java diff --git a/spring-jpa/src/main/java/org/baeldung/persistence/multiple/dao/user/PossessionRepository.java b/spring-jpa/src/main/java/org/baeldung/persistence/multiple/dao/user/PossessionRepository.java new file mode 100644 index 0000000000..34913632d8 --- /dev/null +++ b/spring-jpa/src/main/java/org/baeldung/persistence/multiple/dao/user/PossessionRepository.java @@ -0,0 +1,8 @@ +package org.baeldung.persistence.multiple.dao.user; + +import org.baeldung.persistence.multiple.model.user.Possession; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface PossessionRepository extends JpaRepository { + +} diff --git a/spring-jpa/src/main/java/org/baeldung/persistence/multiple/model/user/Possession.java b/spring-jpa/src/main/java/org/baeldung/persistence/multiple/model/user/Possession.java new file mode 100644 index 0000000000..97b5803d73 --- /dev/null +++ b/spring-jpa/src/main/java/org/baeldung/persistence/multiple/model/user/Possession.java @@ -0,0 +1,86 @@ +package org.baeldung.persistence.multiple.model.user; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Table; + +@Entity +@Table(schema = "spring_jpa_user") +public class Possession { + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private long id; + + private String name; + + public Possession() { + super(); + } + + public Possession(final String name) { + super(); + + this.name = name; + } + + public long getId() { + return id; + } + + public void setId(final int id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(final String name) { + this.name = name; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = (prime * result) + (int) (id ^ (id >>> 32)); + result = (prime * result) + ((name == null) ? 0 : name.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final Possession other = (Possession) obj; + if (id != other.id) { + return false; + } + if (name == null) { + if (other.name != null) { + return false; + } + } else if (!name.equals(other.name)) { + return false; + } + return true; + } + + @Override + public String toString() { + final StringBuilder builder = new StringBuilder(); + builder.append("Possesion [id=").append(id).append(", name=").append(name).append("]"); + return builder.toString(); + } + +} diff --git a/spring-jpa/src/main/java/org/baeldung/persistence/multiple/model/user/User.java b/spring-jpa/src/main/java/org/baeldung/persistence/multiple/model/user/User.java index 305568bad8..1c6399dc44 100644 --- a/spring-jpa/src/main/java/org/baeldung/persistence/multiple/model/user/User.java +++ b/spring-jpa/src/main/java/org/baeldung/persistence/multiple/model/user/User.java @@ -1,10 +1,13 @@ package org.baeldung.persistence.multiple.model.user; +import java.util.List; + import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; +import javax.persistence.OneToMany; import javax.persistence.Table; @Entity @@ -22,6 +25,9 @@ public class User { private int age; + @OneToMany + List possessionList; + public User() { super(); } @@ -58,6 +64,14 @@ public class User { this.age = age; } + public List getPossessionList() { + return possessionList; + } + + public void setPossessionList(List possessionList) { + this.possessionList = possessionList; + } + @Override public String toString() { final StringBuilder builder = new StringBuilder(); diff --git a/spring-jpa/src/test/java/org/baeldung/persistence/service/JpaMultipleDBIntegrationTest.java b/spring-jpa/src/test/java/org/baeldung/persistence/service/JpaMultipleDBIntegrationTest.java index 7e6b2722fa..f20af34057 100644 --- a/spring-jpa/src/test/java/org/baeldung/persistence/service/JpaMultipleDBIntegrationTest.java +++ b/spring-jpa/src/test/java/org/baeldung/persistence/service/JpaMultipleDBIntegrationTest.java @@ -1,14 +1,18 @@ package org.baeldung.persistence.service; import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; +import java.util.Arrays; + import org.baeldung.config.ProductConfig; import org.baeldung.config.UserConfig; import org.baeldung.persistence.multiple.dao.product.ProductRepository; +import org.baeldung.persistence.multiple.dao.user.PossessionRepository; import org.baeldung.persistence.multiple.dao.user.UserRepository; import org.baeldung.persistence.multiple.model.product.Product; +import org.baeldung.persistence.multiple.model.user.Possession; import org.baeldung.persistence.multiple.model.user.User; import org.junit.Test; import org.junit.runner.RunWith; @@ -16,15 +20,20 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataIntegrityViolationException; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.transaction.annotation.EnableTransactionManagement; import org.springframework.transaction.annotation.Transactional; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { UserConfig.class, ProductConfig.class }) +@EnableTransactionManagement public class JpaMultipleDBIntegrationTest { @Autowired private UserRepository userRepository; + @Autowired + private PossessionRepository possessionRepository; + @Autowired private ProductRepository productRepository; @@ -37,9 +46,14 @@ public class JpaMultipleDBIntegrationTest { user.setName("John"); user.setEmail("john@test.com"); user.setAge(20); + Possession p = new Possession("sample"); + p = possessionRepository.save(p); + user.setPossessionList(Arrays.asList(p)); user = userRepository.save(user); - - assertNotNull(userRepository.findOne(user.getId())); + final User result = userRepository.findOne(user.getId()); + assertNotNull(result); + System.out.println(result.getPossessionList()); + assertTrue(result.getPossessionList().size() == 1); } @Test From 0b5184a358e1d94097dc9c956ed1a4febe6ad9c1 Mon Sep 17 00:00:00 2001 From: Tim Schimandle Date: Mon, 5 Sep 2016 17:40:29 -0600 Subject: [PATCH 076/265] BAEL-314 adding changes to the POM structure so that each project can run in isolation --- .../application-config/discovery.properties | 5 --- .../application-config/gateway.properties | 2 - .../part-1/config/pom.xml | 41 +++++++++++++++---- .../part-1/discovery/pom.xml | 41 +++++++++++++++---- .../part-1/gateway/pom.xml | 39 ++++++++++++++---- .../part-1/resource/pom.xml | 40 ++++++++++++++---- spring-cloud/spring-cloud-integration/pom.xml | 36 ---------------- 7 files changed, 132 insertions(+), 72 deletions(-) diff --git a/spring-cloud/spring-cloud-integration/part-1/application-config/discovery.properties b/spring-cloud/spring-cloud-integration/part-1/application-config/discovery.properties index 40764d0ddb..7f3df86c7e 100644 --- a/spring-cloud/spring-cloud-integration/part-1/application-config/discovery.properties +++ b/spring-cloud/spring-cloud-integration/part-1/application-config/discovery.properties @@ -6,8 +6,3 @@ eureka.instance.hostname=localhost eureka.client.serviceUrl.defaultZone=http://localhost:8082/eureka/ eureka.client.register-with-eureka=false eureka.client.fetch-registry=false - -#management.context-path=/manage -#eureka.instance.status-page-url-path=${management.context-path}/info -#eureka.instance.health-check-url-path=${management.context-path}/health - diff --git a/spring-cloud/spring-cloud-integration/part-1/application-config/gateway.properties b/spring-cloud/spring-cloud-integration/part-1/application-config/gateway.properties index 8385c2c395..77faec8421 100644 --- a/spring-cloud/spring-cloud-integration/part-1/application-config/gateway.properties +++ b/spring-cloud/spring-cloud-integration/part-1/application-config/gateway.properties @@ -8,5 +8,3 @@ eureka.client.serviceUrl.defaultZone=http://localhost:8082/eureka/ zuul.routes.resource.path=/resource/** hystrix.command.resource.execution.isolation.thread.timeoutInMilliseconds: 5000 -logging.level.org.springframework.cloud.netflix.zuul=debug - diff --git a/spring-cloud/spring-cloud-integration/part-1/config/pom.xml b/spring-cloud/spring-cloud-integration/part-1/config/pom.xml index c64b3626b1..0cb217acfb 100644 --- a/spring-cloud/spring-cloud-integration/part-1/config/pom.xml +++ b/spring-cloud/spring-cloud-integration/part-1/config/pom.xml @@ -4,17 +4,17 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - - com.baeldung.spring.cloud - part-1 - 1.0.0-SNAPSHOT - - config 1.0.0-SNAPSHOT + + org.springframework.boot + spring-boot-starter-parent + 1.4.0.RELEASE + + + - org.springframework.cloud spring-cloud-config-server @@ -23,5 +23,32 @@ org.springframework.cloud spring-cloud-starter-eureka + + org.springframework.boot + spring-boot-starter-test + test + + + + + + org.springframework.cloud + spring-cloud-dependencies + Brixton.RELEASE + pom + import + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-integration/part-1/discovery/pom.xml b/spring-cloud/spring-cloud-integration/part-1/discovery/pom.xml index 6fe5d807f8..ee7c589549 100644 --- a/spring-cloud/spring-cloud-integration/part-1/discovery/pom.xml +++ b/spring-cloud/spring-cloud-integration/part-1/discovery/pom.xml @@ -4,17 +4,17 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - - com.baeldung.spring.cloud - part-1 - 1.0.0-SNAPSHOT - - discovery 1.0.0-SNAPSHOT + + org.springframework.boot + spring-boot-starter-parent + 1.4.0.RELEASE + + + - org.springframework.cloud spring-cloud-starter-config @@ -23,6 +23,31 @@ org.springframework.cloud spring-cloud-starter-eureka-server + + org.springframework.boot + spring-boot-starter-test + test + - + + + + + org.springframework.cloud + spring-cloud-dependencies + Brixton.RELEASE + pom + import + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-integration/part-1/gateway/pom.xml b/spring-cloud/spring-cloud-integration/part-1/gateway/pom.xml index 40f1884004..8e56d0fd35 100644 --- a/spring-cloud/spring-cloud-integration/part-1/gateway/pom.xml +++ b/spring-cloud/spring-cloud-integration/part-1/gateway/pom.xml @@ -4,15 +4,16 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - - com.baeldung.spring.cloud - part-1 - 1.0.0-SNAPSHOT - - gateway 1.0.0-SNAPSHOT + + org.springframework.boot + spring-boot-starter-parent + 1.4.0.RELEASE + + + org.springframework.cloud @@ -26,7 +27,31 @@ org.springframework.cloud spring-cloud-starter-zuul + + org.springframework.boot + spring-boot-starter-test + test + - + + + + org.springframework.cloud + spring-cloud-dependencies + Brixton.RELEASE + pom + import + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-integration/part-1/resource/pom.xml b/spring-cloud/spring-cloud-integration/part-1/resource/pom.xml index f1a17918ef..78112fa3e0 100644 --- a/spring-cloud/spring-cloud-integration/part-1/resource/pom.xml +++ b/spring-cloud/spring-cloud-integration/part-1/resource/pom.xml @@ -4,15 +4,16 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - - com.baeldung.spring.cloud - part-1 - 1.0.0-SNAPSHOT - - resource 1.0.0-SNAPSHOT + + org.springframework.boot + spring-boot-starter-parent + 1.4.0.RELEASE + + + org.springframework.cloud @@ -26,6 +27,31 @@ org.springframework.boot spring-boot-starter-web + + org.springframework.boot + spring-boot-starter-test + test + - + + + + + org.springframework.cloud + spring-cloud-dependencies + Brixton.RELEASE + pom + import + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-integration/pom.xml b/spring-cloud/spring-cloud-integration/pom.xml index 922875df14..1d56995009 100644 --- a/spring-cloud/spring-cloud-integration/pom.xml +++ b/spring-cloud/spring-cloud-integration/pom.xml @@ -12,40 +12,4 @@ part-1 - - - org.springframework.boot - spring-boot-starter-parent - 1.4.0.RELEASE - - - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - - org.springframework.cloud - spring-cloud-dependencies - Brixton.RELEASE - pom - import - - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - \ No newline at end of file From 6b7b8be33309ecc101fcff0dfae4a4f7412c8059 Mon Sep 17 00:00:00 2001 From: anton-k11 Date: Tue, 6 Sep 2016 08:56:29 +0300 Subject: [PATCH 077/265] Comment out the new project until Java 9 is available on the build server. --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index cbe3055dbe..60f33c4e2a 100644 --- a/pom.xml +++ b/pom.xml @@ -18,7 +18,7 @@ apache-fop core-java core-java-8 - core-java-9 + couchbase-sdk-intro couchbase-sdk-spring-service From 9c1b87d3e579328d6f40a3fc4cf5fabb28b86545 Mon Sep 17 00:00:00 2001 From: Zeger Hendrikse Date: Tue, 6 Sep 2016 21:57:58 +0200 Subject: [PATCH 078/265] src/main/java/com/baeldung/cassandra/java/client/CassandraClient.java --- .../cassandra/java/client/repository/KeyspaceRepository.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/java-cassandra/src/main/java/com/baeldung/cassandra/java/client/repository/KeyspaceRepository.java b/java-cassandra/src/main/java/com/baeldung/cassandra/java/client/repository/KeyspaceRepository.java index 1b42a6ec21..f15558f040 100644 --- a/java-cassandra/src/main/java/com/baeldung/cassandra/java/client/repository/KeyspaceRepository.java +++ b/java-cassandra/src/main/java/com/baeldung/cassandra/java/client/repository/KeyspaceRepository.java @@ -1,8 +1,5 @@ package com.baeldung.cassandra.java.client.repository; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import com.datastax.driver.core.Session; /** @@ -10,8 +7,6 @@ import com.datastax.driver.core.Session; * */ public class KeyspaceRepository { - private static final Logger LOG = LoggerFactory.getLogger(KeyspaceRepository.class); - private Session session; public KeyspaceRepository(Session session) { From 657d1a507f25b8e7f1163c76e109735002843315 Mon Sep 17 00:00:00 2001 From: Kiran Date: Tue, 6 Sep 2016 21:16:06 -0400 Subject: [PATCH 079/265] Add files via upload --- spring-mvc-tiles/pom.xml | 99 +++++++++++++++++++ .../springmvc/ApplicationConfiguration.java | 47 +++++++++ .../springmvc/ApplicationController.java | 27 +++++ .../springmvc/ApplicationInitializer.java | 22 +++++ .../WEB-INF/views/pages/apachetiles.jsp | 12 +++ .../main/webapp/WEB-INF/views/pages/home.jsp | 12 +++ .../webapp/WEB-INF/views/pages/springmvc.jsp | 12 +++ .../views/tiles/layouts/defaultLayout.jsp | 25 +++++ .../views/tiles/templates/defaultFooter.jsp | 2 + .../views/tiles/templates/defaultHeader.jsp | 3 + .../views/tiles/templates/defaultMenu.jsp | 8 ++ .../main/webapp/WEB-INF/views/tiles/tiles.xml | 34 +++++++ .../src/main/webapp/static/css/app.css | 36 +++++++ 13 files changed, 339 insertions(+) create mode 100644 spring-mvc-tiles/pom.xml create mode 100644 spring-mvc-tiles/src/main/java/com/baeldung/tiles/springmvc/ApplicationConfiguration.java create mode 100644 spring-mvc-tiles/src/main/java/com/baeldung/tiles/springmvc/ApplicationController.java create mode 100644 spring-mvc-tiles/src/main/java/com/baeldung/tiles/springmvc/ApplicationInitializer.java create mode 100644 spring-mvc-tiles/src/main/webapp/WEB-INF/views/pages/apachetiles.jsp create mode 100644 spring-mvc-tiles/src/main/webapp/WEB-INF/views/pages/home.jsp create mode 100644 spring-mvc-tiles/src/main/webapp/WEB-INF/views/pages/springmvc.jsp create mode 100644 spring-mvc-tiles/src/main/webapp/WEB-INF/views/tiles/layouts/defaultLayout.jsp create mode 100644 spring-mvc-tiles/src/main/webapp/WEB-INF/views/tiles/templates/defaultFooter.jsp create mode 100644 spring-mvc-tiles/src/main/webapp/WEB-INF/views/tiles/templates/defaultHeader.jsp create mode 100644 spring-mvc-tiles/src/main/webapp/WEB-INF/views/tiles/templates/defaultMenu.jsp create mode 100644 spring-mvc-tiles/src/main/webapp/WEB-INF/views/tiles/tiles.xml create mode 100644 spring-mvc-tiles/src/main/webapp/static/css/app.css diff --git a/spring-mvc-tiles/pom.xml b/spring-mvc-tiles/pom.xml new file mode 100644 index 0000000000..abbb9a2870 --- /dev/null +++ b/spring-mvc-tiles/pom.xml @@ -0,0 +1,99 @@ + + 4.0.0 + com.baeldung + spring-mvc-tiles + 0.0.1-SNAPSHOT + war + spring-mvc-tiles + Integrating Spring MVC with Apache Tiles + + + 4.3.2.RELEASE + 3.0.5 + + + + + + org.springframework + spring-core + ${springframework.version} + + + org.springframework + spring-web + ${springframework.version} + + + org.springframework + spring-webmvc + ${springframework.version} + + + + org.apache.tiles + tiles-core + ${apachetiles.version} + + + org.apache.tiles + tiles-api + ${apachetiles.version} + + + org.apache.tiles + tiles-servlet + ${apachetiles.version} + + + org.apache.tiles + tiles-jsp + ${apachetiles.version} + + + + + javax.servlet + javax.servlet-api + 3.1.0 + + + javax.servlet.jsp + javax.servlet.jsp-api + 2.3.1 + + + javax.servlet + jstl + 1.2 + + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.2 + + 1.7 + 1.7 + + + + org.apache.maven.plugins + maven-war-plugin + 2.4 + + src/main/webapp + spring-mvc-tiles + false + + + + + spring-mvc-tiles + + \ No newline at end of file diff --git a/spring-mvc-tiles/src/main/java/com/baeldung/tiles/springmvc/ApplicationConfiguration.java b/spring-mvc-tiles/src/main/java/com/baeldung/tiles/springmvc/ApplicationConfiguration.java new file mode 100644 index 0000000000..1ae6d1b23c --- /dev/null +++ b/spring-mvc-tiles/src/main/java/com/baeldung/tiles/springmvc/ApplicationConfiguration.java @@ -0,0 +1,47 @@ +package com.baeldung.tiles.springmvc; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; +import org.springframework.web.servlet.config.annotation.ViewResolverRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; +import org.springframework.web.servlet.view.tiles3.TilesConfigurer; +import org.springframework.web.servlet.view.tiles3.TilesViewResolver; + +@Configuration +@EnableWebMvc +@ComponentScan(basePackages = "com.baeldung.tiles.springmvc") +public class ApplicationConfiguration extends WebMvcConfigurerAdapter { + + /** + * Configure TilesConfigurer. + */ + @Bean + public TilesConfigurer tilesConfigurer() { + TilesConfigurer tilesConfigurer = new TilesConfigurer(); + tilesConfigurer.setDefinitions(new String[] { "/WEB-INF/views/**/tiles.xml" }); + tilesConfigurer.setCheckRefresh(true); + return tilesConfigurer; + } + + /** + * Configure ViewResolvers to deliver views. + */ + @Override + public void configureViewResolvers(ViewResolverRegistry registry) { + TilesViewResolver viewResolver = new TilesViewResolver(); + registry.viewResolver(viewResolver); + } + + /** + * Configure ResourceHandlers to serve static resources + */ + + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + registry.addResourceHandler("/static/**").addResourceLocations("/static/"); + } + +} diff --git a/spring-mvc-tiles/src/main/java/com/baeldung/tiles/springmvc/ApplicationController.java b/spring-mvc-tiles/src/main/java/com/baeldung/tiles/springmvc/ApplicationController.java new file mode 100644 index 0000000000..b85ad54587 --- /dev/null +++ b/spring-mvc-tiles/src/main/java/com/baeldung/tiles/springmvc/ApplicationController.java @@ -0,0 +1,27 @@ +package com.baeldung.tiles.springmvc; + +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; + + +@Controller +@RequestMapping("/") +public class ApplicationController { + + @RequestMapping(value = { "/"}, method = RequestMethod.GET) + public String homePage(ModelMap model) { + return "home"; + } + + @RequestMapping(value = { "/apachetiles"}, method = RequestMethod.GET) + public String productsPage(ModelMap model) { + return "apachetiles"; + } + + @RequestMapping(value = { "/springmvc"}, method = RequestMethod.GET) + public String contactUsPage(ModelMap model) { + return "springmvc"; + } +} diff --git a/spring-mvc-tiles/src/main/java/com/baeldung/tiles/springmvc/ApplicationInitializer.java b/spring-mvc-tiles/src/main/java/com/baeldung/tiles/springmvc/ApplicationInitializer.java new file mode 100644 index 0000000000..ababe0ae07 --- /dev/null +++ b/spring-mvc-tiles/src/main/java/com/baeldung/tiles/springmvc/ApplicationInitializer.java @@ -0,0 +1,22 @@ +package com.baeldung.tiles.springmvc; + +import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; + +public class ApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { + + @Override + protected Class[] getRootConfigClasses() { + return new Class[] { ApplicationConfiguration.class }; + } + + @Override + protected Class[] getServletConfigClasses() { + return null; + } + + @Override + protected String[] getServletMappings() { + return new String[] { "/" }; + } + +} diff --git a/spring-mvc-tiles/src/main/webapp/WEB-INF/views/pages/apachetiles.jsp b/spring-mvc-tiles/src/main/webapp/WEB-INF/views/pages/apachetiles.jsp new file mode 100644 index 0000000000..9936957c04 --- /dev/null +++ b/spring-mvc-tiles/src/main/webapp/WEB-INF/views/pages/apachetiles.jsp @@ -0,0 +1,12 @@ +<%@ page language="java" contentType="text/html; charset=ISO-8859-1" + pageEncoding="ISO-8859-1"%> + + + + +Apache Tiles + + +

Tiles with Spring MVC Demo

+ + \ No newline at end of file diff --git a/spring-mvc-tiles/src/main/webapp/WEB-INF/views/pages/home.jsp b/spring-mvc-tiles/src/main/webapp/WEB-INF/views/pages/home.jsp new file mode 100644 index 0000000000..b501d4968e --- /dev/null +++ b/spring-mvc-tiles/src/main/webapp/WEB-INF/views/pages/home.jsp @@ -0,0 +1,12 @@ +<%@ page language="java" contentType="text/html; charset=ISO-8859-1" + pageEncoding="ISO-8859-1"%> + + + + +Home + + +

Welcome to Apache Tiles integration with Spring MVC

+ + \ No newline at end of file diff --git a/spring-mvc-tiles/src/main/webapp/WEB-INF/views/pages/springmvc.jsp b/spring-mvc-tiles/src/main/webapp/WEB-INF/views/pages/springmvc.jsp new file mode 100644 index 0000000000..209b1004de --- /dev/null +++ b/spring-mvc-tiles/src/main/webapp/WEB-INF/views/pages/springmvc.jsp @@ -0,0 +1,12 @@ +<%@ page language="java" contentType="text/html; charset=ISO-8859-1" + pageEncoding="ISO-8859-1"%> + + + + +Spring MVC + + +

Spring MVC configured to work with Apache Tiles

+ + \ No newline at end of file diff --git a/spring-mvc-tiles/src/main/webapp/WEB-INF/views/tiles/layouts/defaultLayout.jsp b/spring-mvc-tiles/src/main/webapp/WEB-INF/views/tiles/layouts/defaultLayout.jsp new file mode 100644 index 0000000000..9b727473f9 --- /dev/null +++ b/spring-mvc-tiles/src/main/webapp/WEB-INF/views/tiles/layouts/defaultLayout.jsp @@ -0,0 +1,25 @@ +<%@ page language="java" contentType="text/html; charset=ISO-8859-1" + pageEncoding="ISO-8859-1"%> +<%@ page isELIgnored="false"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%> + + + + + +<tiles:getAsString name="title" /> + + + + +
+ + +
+ +
+ +
+ + \ No newline at end of file diff --git a/spring-mvc-tiles/src/main/webapp/WEB-INF/views/tiles/templates/defaultFooter.jsp b/spring-mvc-tiles/src/main/webapp/WEB-INF/views/tiles/templates/defaultFooter.jsp new file mode 100644 index 0000000000..3849cc5230 --- /dev/null +++ b/spring-mvc-tiles/src/main/webapp/WEB-INF/views/tiles/templates/defaultFooter.jsp @@ -0,0 +1,2 @@ + +
copyright © Baeldung
diff --git a/spring-mvc-tiles/src/main/webapp/WEB-INF/views/tiles/templates/defaultHeader.jsp b/spring-mvc-tiles/src/main/webapp/WEB-INF/views/tiles/templates/defaultHeader.jsp new file mode 100644 index 0000000000..8a878c857d --- /dev/null +++ b/spring-mvc-tiles/src/main/webapp/WEB-INF/views/tiles/templates/defaultHeader.jsp @@ -0,0 +1,3 @@ +
+

Welcome to Spring MVC integration with Apache Tiles

+
\ No newline at end of file diff --git a/spring-mvc-tiles/src/main/webapp/WEB-INF/views/tiles/templates/defaultMenu.jsp b/spring-mvc-tiles/src/main/webapp/WEB-INF/views/tiles/templates/defaultMenu.jsp new file mode 100644 index 0000000000..fdfbdc8a14 --- /dev/null +++ b/spring-mvc-tiles/src/main/webapp/WEB-INF/views/tiles/templates/defaultMenu.jsp @@ -0,0 +1,8 @@ + \ No newline at end of file diff --git a/spring-mvc-tiles/src/main/webapp/WEB-INF/views/tiles/tiles.xml b/spring-mvc-tiles/src/main/webapp/WEB-INF/views/tiles/tiles.xml new file mode 100644 index 0000000000..789fbd809a --- /dev/null +++ b/spring-mvc-tiles/src/main/webapp/WEB-INF/views/tiles/tiles.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-mvc-tiles/src/main/webapp/static/css/app.css b/spring-mvc-tiles/src/main/webapp/static/css/app.css new file mode 100644 index 0000000000..9976e5406e --- /dev/null +++ b/spring-mvc-tiles/src/main/webapp/static/css/app.css @@ -0,0 +1,36 @@ +.flex-container { + display: -webkit-flex; + display: flex; + -webkit-flex-flow: row wrap; + flex-flow: row wrap; + text-align: center; +} + +.flex-container > * { + padding: 15px; + -webkit-flex: 1 100%; + flex: 1 100%; +} + +.article { + text-align: left; +} + +header {background: black;color:white;} +footer {background: #aaa;color:white;} +.nav {background:#eee;} + +.nav ul { + list-style-type: none; + padding: 0; +} + +.nav ul a { + text-decoration: none; +} + +@media all and (min-width: 768px) { + .nav {text-align:left;-webkit-flex: 1 auto;flex:1 auto;-webkit-order:1;order:1;} + .article {-webkit-flex:5 0px;flex:5 0px;-webkit-order:2;order:2;} + footer {-webkit-order:3;order:3;} +} \ No newline at end of file From 739502694fd0192a24581762e999b1ad31ea3358 Mon Sep 17 00:00:00 2001 From: maverick Date: Wed, 7 Sep 2016 09:30:34 +0530 Subject: [PATCH 080/265] md5 changes --- core-java/pom.xml | 341 +++++++++--------- .../org/baeldung/java/md5/JavaMD5Test.java | 90 +++++ 2 files changed, 265 insertions(+), 166 deletions(-) create mode 100644 core-java/src/test/java/org/baeldung/java/md5/JavaMD5Test.java diff --git a/core-java/pom.xml b/core-java/pom.xml index bc533607e7..802436e606 100644 --- a/core-java/pom.xml +++ b/core-java/pom.xml @@ -1,205 +1,214 @@ - - 4.0.0 - com.baeldung - core-java - 0.1.0-SNAPSHOT + + 4.0.0 + com.baeldung + core-java + 0.1.0-SNAPSHOT - core-java + core-java - + - - - net.sourceforge.collections - collections-generic - 4.01 - - - com.google.guava - guava - ${guava.version} - + + + net.sourceforge.collections + collections-generic + 4.01 + + + com.google.guava + guava + ${guava.version} + - - org.apache.commons - commons-collections4 - 4.0 - + + org.apache.commons + commons-collections4 + 4.0 + - - commons-io - commons-io - 2.4 - + + commons-io + commons-io + 2.4 + - - org.apache.commons - commons-lang3 - ${commons-lang3.version} - + + org.apache.commons + commons-lang3 + ${commons-lang3.version} + - - org.apache.commons - commons-math3 - 3.3 - + + org.apache.commons + commons-math3 + 3.3 + - + - + - - com.fasterxml.jackson.core - jackson-databind - ${jackson.version} - + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + - + - - org.slf4j - slf4j-api - ${org.slf4j.version} - - - ch.qos.logback - logback-classic - ${logback.version} - - - - org.slf4j - jcl-over-slf4j - ${org.slf4j.version} - - - - org.slf4j - log4j-over-slf4j - ${org.slf4j.version} - + + org.slf4j + slf4j-api + ${org.slf4j.version} + + + ch.qos.logback + logback-classic + ${logback.version} + + + + org.slf4j + jcl-over-slf4j + ${org.slf4j.version} + + + + org.slf4j + log4j-over-slf4j + ${org.slf4j.version} + - + - - junit - junit - ${junit.version} - test - + + junit + junit + ${junit.version} + test + - - org.hamcrest - hamcrest-core - ${org.hamcrest.version} - test - - - org.hamcrest - hamcrest-library - ${org.hamcrest.version} - test - + + org.hamcrest + hamcrest-core + ${org.hamcrest.version} + test + + + org.hamcrest + hamcrest-library + ${org.hamcrest.version} + test + - - org.assertj - assertj-core - ${assertj.version} - test - + + org.assertj + assertj-core + ${assertj.version} + test + - - org.testng - testng - ${testng.version} - test - + + org.testng + testng + ${testng.version} + test + - - org.mockito - mockito-core - ${mockito.version} - test - + + org.mockito + mockito-core + ${mockito.version} + test + - + + + commons-codec + commons-codec + 1.10 + - - core-java - - - src/main/resources - true - - - + - - org.apache.maven.plugins - maven-compiler-plugin - ${maven-compiler-plugin.version} - - 1.8 - 1.8 - - + + core-java + + + src/main/resources + true + + - - org.apache.maven.plugins - maven-surefire-plugin - ${maven-surefire-plugin.version} - - - **/*IntegrationTest.java - - - + - + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + 1.8 + 1.8 + + - + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + + **/*IntegrationTest.java + + + - - - 4.3.11.Final - 5.1.38 +
- - 2.7.2 +
- - 1.7.13 - 1.1.3 + + + 4.3.11.Final + 5.1.38 - - 5.1.3.Final + + 2.7.2 - - 19.0 - 3.4 + + 1.7.13 + 1.1.3 - - 1.3 - 4.12 - 1.10.19 - 6.8 - 3.5.1 + + 5.1.3.Final - 4.4.1 - 4.5 + + 19.0 + 3.4 - 2.9.0 + + 1.3 + 4.12 + 1.10.19 + 6.8 + 3.5.1 - - 3.5.1 - 2.6 - 2.19.1 - 2.7 - 1.4.18 + 4.4.1 + 4.5 - + 2.9.0 + + + 3.5.1 + 2.6 + 2.19.1 + 2.7 + 1.4.18 + + \ No newline at end of file diff --git a/core-java/src/test/java/org/baeldung/java/md5/JavaMD5Test.java b/core-java/src/test/java/org/baeldung/java/md5/JavaMD5Test.java new file mode 100644 index 0000000000..83f1fb33b6 --- /dev/null +++ b/core-java/src/test/java/org/baeldung/java/md5/JavaMD5Test.java @@ -0,0 +1,90 @@ +package org.baeldung.java.md5; + +import static org.junit.Assert.*; + +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +import javax.xml.bind.DatatypeConverter; + +import org.apache.commons.codec.digest.DigestUtils; +import org.junit.Before; +import org.junit.Test; + +import com.google.common.hash.HashCode; +import com.google.common.hash.Hashing; + +import java.io.File; +import java.io.IOException; +import java.nio.*; +import static org.assertj.core.api.Assertions.assertThat; + + +public class JavaMD5Test { + + + String filename = "src/test/resources/test_md5.txt"; + String checksum = "5EB63BBBE01EEED093CB22BB8F5ACDC3"; + + String hash = "35454B055CC325EA1AF2126E27707052"; + String password = "ILoveJava"; + + + + @Test + public void givenPassword_whenHashing_thenVerifying() throws NoSuchAlgorithmException { + String hash = "35454B055CC325EA1AF2126E27707052"; + String password = "ILoveJava"; + + MessageDigest md = MessageDigest.getInstance("MD5"); + md.update(password.getBytes()); + byte[] digest = md.digest(); + String myHash = DatatypeConverter.printHexBinary(digest).toUpperCase(); + + assertThat(myHash.equals(hash)).isTrue(); + } + + @Test + public void givenFile_generatingChecksum_thenVerifying() throws NoSuchAlgorithmException, IOException { + String filename = "src/test/resources/test_md5.txt"; + String checksum = "5EB63BBBE01EEED093CB22BB8F5ACDC3"; + + MessageDigest md = MessageDigest.getInstance("MD5"); + md.update(Files.readAllBytes(Paths.get(filename))); + byte[] digest = md.digest(); + String myChecksum = DatatypeConverter + .printHexBinary(digest).toUpperCase(); + + assertThat(myChecksum.equals(checksum)).isTrue(); + } + + @Test + public void givenPassword_whenHashingUsingCommons_thenVerifying() { + String hash = "35454B055CC325EA1AF2126E27707052"; + String password = "ILoveJava"; + + String md5Hex = DigestUtils + .md5Hex(password).toUpperCase(); + + assertThat(md5Hex.equals(hash)).isTrue(); + } + + + @Test + public void givenFile_whenChecksumUsingGuava_thenVerifying() throws IOException { + String filename = "src/test/resources/test_md5.txt"; + String checksum = "5EB63BBBE01EEED093CB22BB8F5ACDC3"; + + HashCode hash = com.google.common.io.Files + .hash(new File(filename), Hashing.md5()); + String myChecksum = hash.toString() + .toUpperCase(); + + assertThat(myChecksum.equals(checksum)).isTrue(); + } + + +} From 113afd40d404e026507067f767f82e4503c06db9 Mon Sep 17 00:00:00 2001 From: maibin Date: Wed, 7 Sep 2016 08:14:26 +0200 Subject: [PATCH 081/265] Advanced Handler Interceptors (#672) * Expression-Based Access Control PermitAll, hasRole, hasAnyRole etc. I modified classes regards to Security * Added test cases for Spring Security Expressions * Handler Interceptor - logging example * Test for logger interceptor * Removed conflicted part * UserInterceptor (adding user information to model) * Spring Handler Interceptor - session timers --- .../org/baeldung/spring/ListenerConfig.java | 16 ++++++ .../java/org/baeldung/spring/WebConfig.java | 5 +- .../interceptor/SessionTimerInterceptor.java | 57 +++++++++++++++++++ .../SessionTimerInterceptorTest.java | 56 ++++++++++++++++++ 4 files changed, 133 insertions(+), 1 deletion(-) create mode 100644 spring-security-rest-full/src/main/java/org/baeldung/spring/ListenerConfig.java create mode 100644 spring-security-rest-full/src/main/java/org/baeldung/web/interceptor/SessionTimerInterceptor.java create mode 100644 spring-security-rest-full/src/test/java/org/baeldung/web/interceptor/SessionTimerInterceptorTest.java diff --git a/spring-security-rest-full/src/main/java/org/baeldung/spring/ListenerConfig.java b/spring-security-rest-full/src/main/java/org/baeldung/spring/ListenerConfig.java new file mode 100644 index 0000000000..80af01aeeb --- /dev/null +++ b/spring-security-rest-full/src/main/java/org/baeldung/spring/ListenerConfig.java @@ -0,0 +1,16 @@ +package org.baeldung.spring; + +import javax.servlet.ServletContext; +import javax.servlet.ServletException; + +import org.springframework.web.WebApplicationInitializer; +import org.springframework.web.context.request.RequestContextListener; + +public class ListenerConfig implements WebApplicationInitializer { + + @Override + public void onStartup(ServletContext sc) throws ServletException { + // Manages the lifecycle of the root application context + sc.addListener(new RequestContextListener()); + } +} \ No newline at end of file diff --git a/spring-security-rest-full/src/main/java/org/baeldung/spring/WebConfig.java b/spring-security-rest-full/src/main/java/org/baeldung/spring/WebConfig.java index fa8bdddb4e..57e9b32a62 100644 --- a/spring-security-rest-full/src/main/java/org/baeldung/spring/WebConfig.java +++ b/spring-security-rest-full/src/main/java/org/baeldung/spring/WebConfig.java @@ -1,6 +1,7 @@ package org.baeldung.spring; import org.baeldung.web.interceptor.LoggerInterceptor; +import org.baeldung.web.interceptor.SessionTimerInterceptor; import org.baeldung.web.interceptor.UserInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; @@ -15,7 +16,7 @@ import org.springframework.web.servlet.view.InternalResourceViewResolver; @Configuration @ComponentScan("org.baeldung.web") @EnableWebMvc -public class WebConfig extends WebMvcConfigurerAdapter { +public class WebConfig extends WebMvcConfigurerAdapter{ public WebConfig() { super(); @@ -42,5 +43,7 @@ public class WebConfig extends WebMvcConfigurerAdapter { public void addInterceptors(final InterceptorRegistry registry) { registry.addInterceptor(new LoggerInterceptor()); registry.addInterceptor(new UserInterceptor()); + registry.addInterceptor(new SessionTimerInterceptor()); } + } \ No newline at end of file diff --git a/spring-security-rest-full/src/main/java/org/baeldung/web/interceptor/SessionTimerInterceptor.java b/spring-security-rest-full/src/main/java/org/baeldung/web/interceptor/SessionTimerInterceptor.java new file mode 100644 index 0000000000..8d967ed1ef --- /dev/null +++ b/spring-security-rest-full/src/main/java/org/baeldung/web/interceptor/SessionTimerInterceptor.java @@ -0,0 +1,57 @@ +package org.baeldung.web.interceptor; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.web.servlet.ModelAndView; +import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; + +public class SessionTimerInterceptor extends HandlerInterceptorAdapter { + + private static Logger log = LoggerFactory.getLogger(SessionTimerInterceptor.class); + + private static final long MAX_INACTIVE_SESSION_TIME = 5 * 10000; + + @Autowired + private HttpSession session; + + /** + * Executed before actual handler is executed + **/ + @Override + public boolean preHandle(final HttpServletRequest request, final HttpServletResponse response, final Object handler) + throws Exception { + log.info("Pre handle method - check handling start time"); + long startTime = System.currentTimeMillis(); + request.setAttribute("executionTime", startTime); + if (UserInterceptor.isUserLogged()) { + session = request.getSession(); + log.info("Who is logged in: " + SecurityContextHolder.getContext().getAuthentication().getName()); + log.info("Time since last request in this session: " + + (System.currentTimeMillis() - request.getSession().getLastAccessedTime()) + " ms"); + if (System.currentTimeMillis() - session.getLastAccessedTime() > MAX_INACTIVE_SESSION_TIME) { + log.warn("Logging out, due to inactive session"); + SecurityContextHolder.clearContext(); + request.logout(); + response.sendRedirect("/spring-security-rest-full/logout"); + } + } + return true; + } + + /** + * Executed before after handler is executed + **/ + @Override + public void postHandle(final HttpServletRequest request, final HttpServletResponse response, final Object handler, + final ModelAndView model) throws Exception { + log.info("Post handle method - check execution time of handling"); + long startTime = (Long) request.getAttribute("executionTime"); + log.info("Execution time for handling the request was: " + (System.currentTimeMillis() - startTime) + " ms"); + } +} diff --git a/spring-security-rest-full/src/test/java/org/baeldung/web/interceptor/SessionTimerInterceptorTest.java b/spring-security-rest-full/src/test/java/org/baeldung/web/interceptor/SessionTimerInterceptorTest.java new file mode 100644 index 0000000000..a29de04bb4 --- /dev/null +++ b/spring-security-rest-full/src/test/java/org/baeldung/web/interceptor/SessionTimerInterceptorTest.java @@ -0,0 +1,56 @@ +package org.baeldung.web.interceptor; + +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +import javax.servlet.http.HttpSession; + +import org.baeldung.spring.PersistenceConfig; +import org.baeldung.spring.SecurityWithoutCsrfConfig; +import org.baeldung.spring.WebConfig; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.MockitoAnnotations; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.mock.web.MockHttpSession; +import org.springframework.security.test.context.support.WithMockUser; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.web.WebAppConfiguration; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.context.WebApplicationContext; + +@RunWith(SpringJUnit4ClassRunner.class) +@WebAppConfiguration +@Transactional +@ContextConfiguration(classes = { SecurityWithoutCsrfConfig.class, PersistenceConfig.class, WebConfig.class }) +@WithMockUser(username = "admin", roles = { "USER", "ADMIN" }) +public class SessionTimerInterceptorTest { + + @Autowired + WebApplicationContext wac; + + private MockMvc mockMvc; + + @Before + public void setup() { + MockitoAnnotations.initMocks(this); + mockMvc = MockMvcBuilders.webAppContextSetup(wac).build(); + } + + /** + * After execution of HTTP GET logs from interceptor will be displayed in + * the console + */ + @Test + public void testInterceptors() throws Exception { + HttpSession session = mockMvc.perform(get("/auth/admin")).andExpect(status().is2xxSuccessful()).andReturn() + .getRequest().getSession(); + Thread.sleep(51000); + mockMvc.perform(get("/auth/admin").session((MockHttpSession) session)).andExpect(status().is2xxSuccessful()); + } + +} From 15d45cffd66a9a326d5f539508661ee6ab4000fa Mon Sep 17 00:00:00 2001 From: Nancy Bosecker Date: Wed, 7 Sep 2016 21:39:27 -0700 Subject: [PATCH 082/265] updated code/tests based on feedback (#676) --- .../equalshashcode/entities/ComplexClass.java | 100 +++++++++--------- .../entities/PrimitiveClass.java | 84 +++++++-------- .../equalshashcode/entities/Rectangle.java | 98 +++++++++-------- .../equalshashcode/entities/Shape.java | 4 +- .../equalshashcode/entities/Square.java | 79 ++++++++------ .../entities/ComplexClassTest.java | 49 ++++----- .../entities/PrimitiveClassTest.java | 31 +++--- .../entities/SquareClassTest.java | 37 +++---- 8 files changed, 236 insertions(+), 246 deletions(-) diff --git a/eclipse/src/main/java/org/baeldung/equalshashcode/entities/ComplexClass.java b/eclipse/src/main/java/org/baeldung/equalshashcode/entities/ComplexClass.java index f8c85ab8b5..3f7723facd 100644 --- a/eclipse/src/main/java/org/baeldung/equalshashcode/entities/ComplexClass.java +++ b/eclipse/src/main/java/org/baeldung/equalshashcode/entities/ComplexClass.java @@ -5,63 +5,59 @@ import java.util.HashSet; public class ComplexClass { - private ArrayList genericArrayList; - private HashSet integerHashSet; + private ArrayList genericArrayList; + private HashSet integerHashSet; - public ComplexClass(ArrayList genericArrayList, - HashSet integerHashSet) { - super(); - this.genericArrayList = genericArrayList; - this.integerHashSet = integerHashSet; - } + public ComplexClass(ArrayList genericArrayList, HashSet integerHashSet) { + super(); + this.genericArrayList = genericArrayList; + this.integerHashSet = integerHashSet; + } - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime - * result - + ((genericArrayList == null) ? 0 : genericArrayList.hashCode()); - result = prime * result - + ((integerHashSet == null) ? 0 : integerHashSet.hashCode()); - return result; - } + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((genericArrayList == null) ? 0 : genericArrayList.hashCode()); + result = prime * result + ((integerHashSet == null) ? 0 : integerHashSet.hashCode()); + return result; + } - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (!(obj instanceof ComplexClass)) - return false; - ComplexClass other = (ComplexClass) obj; - if (genericArrayList == null) { - if (other.genericArrayList != null) - return false; - } else if (!genericArrayList.equals(other.genericArrayList)) - return false; - if (integerHashSet == null) { - if (other.integerHashSet != null) - return false; - } else if (!integerHashSet.equals(other.integerHashSet)) - return false; - return true; - } + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (!(obj instanceof ComplexClass)) + return false; + ComplexClass other = (ComplexClass) obj; + if (genericArrayList == null) { + if (other.genericArrayList != null) + return false; + } else if (!genericArrayList.equals(other.genericArrayList)) + return false; + if (integerHashSet == null) { + if (other.integerHashSet != null) + return false; + } else if (!integerHashSet.equals(other.integerHashSet)) + return false; + return true; + } - protected ArrayList getGenericArrayList() { - return genericArrayList; - } + protected ArrayList getGenericArrayList() { + return genericArrayList; + } - protected void setGenericArrayList(ArrayList genericArrayList) { - this.genericArrayList = genericArrayList; - } + protected void setGenericArrayList(ArrayList genericArrayList) { + this.genericArrayList = genericArrayList; + } - protected HashSet getIntegerHashSet() { - return integerHashSet; - } + protected HashSet getIntegerHashSet() { + return integerHashSet; + } - protected void setIntegerHashSet(HashSet integerHashSet) { - this.integerHashSet = integerHashSet; - } + protected void setIntegerHashSet(HashSet integerHashSet) { + this.integerHashSet = integerHashSet; + } } diff --git a/eclipse/src/main/java/org/baeldung/equalshashcode/entities/PrimitiveClass.java b/eclipse/src/main/java/org/baeldung/equalshashcode/entities/PrimitiveClass.java index 6cd4af5fdb..ebe005688c 100644 --- a/eclipse/src/main/java/org/baeldung/equalshashcode/entities/PrimitiveClass.java +++ b/eclipse/src/main/java/org/baeldung/equalshashcode/entities/PrimitiveClass.java @@ -2,53 +2,53 @@ package org.baeldung.equalshashcode.entities; public class PrimitiveClass { - private boolean primitiveBoolean; - private int primitiveInt; + private boolean primitiveBoolean; + private int primitiveInt; - public PrimitiveClass(boolean primitiveBoolean, int primitiveInt) { - super(); - this.primitiveBoolean = primitiveBoolean; - this.primitiveInt = primitiveInt; - } + public PrimitiveClass(boolean primitiveBoolean, int primitiveInt) { + super(); + this.primitiveBoolean = primitiveBoolean; + this.primitiveInt = primitiveInt; + } - protected boolean isPrimitiveBoolean() { - return primitiveBoolean; - } + protected boolean isPrimitiveBoolean() { + return primitiveBoolean; + } - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + (primitiveBoolean ? 1231 : 1237); - result = prime * result + primitiveInt; - return result; - } + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + (primitiveBoolean ? 1231 : 1237); + result = prime * result + primitiveInt; + return result; + } - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - PrimitiveClass other = (PrimitiveClass) obj; - if (primitiveBoolean != other.primitiveBoolean) - return false; - if (primitiveInt != other.primitiveInt) - return false; - return true; - } + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + PrimitiveClass other = (PrimitiveClass) obj; + if (primitiveBoolean != other.primitiveBoolean) + return false; + if (primitiveInt != other.primitiveInt) + return false; + return true; + } - protected void setPrimitiveBoolean(boolean primitiveBoolean) { - this.primitiveBoolean = primitiveBoolean; - } + protected void setPrimitiveBoolean(boolean primitiveBoolean) { + this.primitiveBoolean = primitiveBoolean; + } - protected int getPrimitiveInt() { - return primitiveInt; - } + protected int getPrimitiveInt() { + return primitiveInt; + } - protected void setPrimitiveInt(int primitiveInt) { - this.primitiveInt = primitiveInt; - } + protected void setPrimitiveInt(int primitiveInt) { + this.primitiveInt = primitiveInt; + } } diff --git a/eclipse/src/main/java/org/baeldung/equalshashcode/entities/Rectangle.java b/eclipse/src/main/java/org/baeldung/equalshashcode/entities/Rectangle.java index 61d20cbb05..315ef41a12 100644 --- a/eclipse/src/main/java/org/baeldung/equalshashcode/entities/Rectangle.java +++ b/eclipse/src/main/java/org/baeldung/equalshashcode/entities/Rectangle.java @@ -1,62 +1,60 @@ package org.baeldung.equalshashcode.entities; public class Rectangle extends Shape { - private double width; - private double length; + private double width; + private double length; - public Rectangle(double width, double length) { - this.width = width; - this.length = length; - } + public Rectangle(double width, double length) { + this.width = width; + this.length = length; + } - @Override - public double area() { - // A = w * l - return width * length; - } + @Override + public double area() { + // A = w * l + return width * length; + } - @Override - public double perimeter() { - // P = 2(w + l) - return 2 * (width + length); - } + @Override + public double perimeter() { + // P = 2(w + l) + return 2 * (width + length); + } - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - long temp; - temp = Double.doubleToLongBits(length); - result = prime * result + (int) (temp ^ (temp >>> 32)); - temp = Double.doubleToLongBits(width); - result = prime * result + (int) (temp ^ (temp >>> 32)); - return result; - } + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + long temp; + temp = Double.doubleToLongBits(length); + result = prime * result + (int) (temp ^ (temp >>> 32)); + temp = Double.doubleToLongBits(width); + result = prime * result + (int) (temp ^ (temp >>> 32)); + return result; + } - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - Rectangle other = (Rectangle) obj; - if (Double.doubleToLongBits(length) != Double - .doubleToLongBits(other.length)) - return false; - if (Double.doubleToLongBits(width) != Double - .doubleToLongBits(other.width)) - return false; - return true; - } + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Rectangle other = (Rectangle) obj; + if (Double.doubleToLongBits(length) != Double.doubleToLongBits(other.length)) + return false; + if (Double.doubleToLongBits(width) != Double.doubleToLongBits(other.width)) + return false; + return true; + } - protected double getWidth() { - return width; - } + protected double getWidth() { + return width; + } - protected double getLength() { - return length; - } + protected double getLength() { + return length; + } } \ No newline at end of file diff --git a/eclipse/src/main/java/org/baeldung/equalshashcode/entities/Shape.java b/eclipse/src/main/java/org/baeldung/equalshashcode/entities/Shape.java index 7f779e6ef2..3bfc81da8f 100644 --- a/eclipse/src/main/java/org/baeldung/equalshashcode/entities/Shape.java +++ b/eclipse/src/main/java/org/baeldung/equalshashcode/entities/Shape.java @@ -1,7 +1,7 @@ package org.baeldung.equalshashcode.entities; public abstract class Shape { - public abstract double area(); + public abstract double area(); - public abstract double perimeter(); + public abstract double perimeter(); } diff --git a/eclipse/src/main/java/org/baeldung/equalshashcode/entities/Square.java b/eclipse/src/main/java/org/baeldung/equalshashcode/entities/Square.java index 0bebc1e380..f11e34f0ba 100644 --- a/eclipse/src/main/java/org/baeldung/equalshashcode/entities/Square.java +++ b/eclipse/src/main/java/org/baeldung/equalshashcode/entities/Square.java @@ -4,44 +4,55 @@ import java.awt.Color; public class Square extends Rectangle { - Color color; + Color color; - public Square(double width, Color color) { - super(width, width); - this.color = color; - } + public Square(double width, Color color) { + super(width, width); + this.color = color; + } - @Override - public int hashCode() { - final int prime = 31; - int result = super.hashCode(); - result = prime * result + ((color == null) ? 0 : color.hashCode()); - return result; - } + /* (non-Javadoc) + * @see java.lang.Object#hashCode() + */ + @Override + public int hashCode() { + final int prime = 31; + int result = super.hashCode(); + result = prime * result + ((color == null) ? 0 : color.hashCode()); + return result; + } - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (!super.equals(obj)) - return false; - if (getClass() != obj.getClass()) - return false; - Square other = (Square) obj; - if (color == null) { - if (other.color != null) - return false; - } else if (!color.equals(other.color)) - return false; - return true; - } + /* (non-Javadoc) + * @see java.lang.Object#equals(java.lang.Object) + */ + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (!super.equals(obj)) { + return false; + } + if (!(obj instanceof Square)) { + return false; + } + Square other = (Square) obj; + if (color == null) { + if (other.color != null) { + return false; + } + } else if (!color.equals(other.color)) { + return false; + } + return true; + } - protected Color getColor() { - return color; - } + protected Color getColor() { + return color; + } - protected void setColor(Color color) { - this.color = color; - } + protected void setColor(Color color) { + this.color = color; + } } diff --git a/eclipse/src/test/java/org/baeldung/equalshashcode/entities/ComplexClassTest.java b/eclipse/src/test/java/org/baeldung/equalshashcode/entities/ComplexClassTest.java index 2cca44bb9e..09123e988b 100644 --- a/eclipse/src/test/java/org/baeldung/equalshashcode/entities/ComplexClassTest.java +++ b/eclipse/src/test/java/org/baeldung/equalshashcode/entities/ComplexClassTest.java @@ -8,32 +8,27 @@ import org.junit.Test; public class ComplexClassTest { - @Test - public void testEqualsAndHashcodes() { - - ArrayList strArrayList = new ArrayList(); - strArrayList.add("abc"); - strArrayList.add("def"); - ComplexClass aObject = new ComplexClass(strArrayList, new HashSet(45,67)); - ComplexClass bObject = new ComplexClass(strArrayList, new HashSet(45,67)); - ComplexClass cObject = new ComplexClass(strArrayList, new HashSet(45,67)); - - ArrayList strArrayListD = new ArrayList(); - strArrayListD.add("lmn"); - strArrayListD.add("pqr"); - ComplexClass dObject = new ComplexClass(strArrayListD, new HashSet(45,67)); - - // equals() - Assert.assertTrue(aObject.equals(aObject)); - Assert.assertTrue(aObject.equals(bObject) && bObject.equals(aObject)); - Assert.assertTrue(aObject.equals(bObject)); - Assert.assertTrue(bObject.equals(cObject)); - Assert.assertTrue(aObject.equals(cObject)); - // hashCode() - Assert.assertTrue(aObject.hashCode() == bObject.hashCode()); - // non-equal objects are not equals() and have different hashCode() - Assert.assertFalse(aObject.equals(dObject)); - Assert.assertFalse(aObject.hashCode() == dObject.hashCode()); - } + @Test + public void testEqualsAndHashcodes() { + + ArrayList strArrayList = new ArrayList(); + strArrayList.add("abc"); + strArrayList.add("def"); + ComplexClass aObject = new ComplexClass(strArrayList, new HashSet(45, 67)); + ComplexClass bObject = new ComplexClass(strArrayList, new HashSet(45, 67)); + + ArrayList strArrayListD = new ArrayList(); + strArrayListD.add("lmn"); + strArrayListD.add("pqr"); + ComplexClass dObject = new ComplexClass(strArrayListD, new HashSet(45, 67)); + + // equals() + Assert.assertTrue(aObject.equals(bObject) && bObject.equals(aObject)); + // hashCode() + Assert.assertTrue(aObject.hashCode() == bObject.hashCode()); + // non-equal objects are not equals() and have different hashCode() + Assert.assertFalse(aObject.equals(dObject)); + Assert.assertFalse(aObject.hashCode() == dObject.hashCode()); + } } diff --git a/eclipse/src/test/java/org/baeldung/equalshashcode/entities/PrimitiveClassTest.java b/eclipse/src/test/java/org/baeldung/equalshashcode/entities/PrimitiveClassTest.java index 009753d1ae..feb04d65ff 100644 --- a/eclipse/src/test/java/org/baeldung/equalshashcode/entities/PrimitiveClassTest.java +++ b/eclipse/src/test/java/org/baeldung/equalshashcode/entities/PrimitiveClassTest.java @@ -5,25 +5,20 @@ import org.junit.Test; public class PrimitiveClassTest { - @Test - public void testTwoEqualsObjects() { + @Test + public void testTwoEqualsObjects() { - PrimitiveClass aObject = new PrimitiveClass(false, 2); - PrimitiveClass bObject = new PrimitiveClass(false, 2); - PrimitiveClass cObject = new PrimitiveClass(false, 2); - PrimitiveClass dObject = new PrimitiveClass(true, 2); + PrimitiveClass aObject = new PrimitiveClass(false, 2); + PrimitiveClass bObject = new PrimitiveClass(false, 2); + PrimitiveClass dObject = new PrimitiveClass(true, 2); - // equals() - Assert.assertTrue(aObject.equals(aObject)); - Assert.assertTrue(aObject.equals(bObject) && bObject.equals(aObject)); - Assert.assertTrue(aObject.equals(bObject)); - Assert.assertTrue(bObject.equals(cObject)); - Assert.assertTrue(aObject.equals(cObject)); - // hashCode() - Assert.assertTrue(aObject.hashCode() == bObject.hashCode()); - // non-equal objects are not equals() and have different hashCode() - Assert.assertFalse(aObject.equals(dObject)); - Assert.assertFalse(aObject.hashCode() == dObject.hashCode()); - } + // equals() + Assert.assertTrue(aObject.equals(bObject) && bObject.equals(aObject)); + // hashCode() + Assert.assertTrue(aObject.hashCode() == bObject.hashCode()); + // non-equal objects are not equals() and have different hashCode() + Assert.assertFalse(aObject.equals(dObject)); + Assert.assertFalse(aObject.hashCode() == dObject.hashCode()); + } } diff --git a/eclipse/src/test/java/org/baeldung/equalshashcode/entities/SquareClassTest.java b/eclipse/src/test/java/org/baeldung/equalshashcode/entities/SquareClassTest.java index 1290f57c6d..53ca199405 100644 --- a/eclipse/src/test/java/org/baeldung/equalshashcode/entities/SquareClassTest.java +++ b/eclipse/src/test/java/org/baeldung/equalshashcode/entities/SquareClassTest.java @@ -7,26 +7,21 @@ import org.junit.Test; public class SquareClassTest { - @Test - public void testEqualsAndHashcodes() { - - Square aObject = new Square(10, Color.BLUE); - Square bObject = new Square(10, Color.BLUE); - Square cObject = new Square(10, Color.BLUE); - - Square dObject = new Square(20, Color.BLUE); - - // equals() - Assert.assertTrue(aObject.equals(aObject)); - Assert.assertTrue(aObject.equals(bObject) && bObject.equals(aObject)); - Assert.assertTrue(aObject.equals(bObject)); - Assert.assertTrue(bObject.equals(cObject)); - Assert.assertTrue(aObject.equals(cObject)); - // hashCode() - Assert.assertTrue(aObject.hashCode() == bObject.hashCode()); - // non-equal objects are not equals() and have different hashCode() - Assert.assertFalse(aObject.equals(dObject)); - Assert.assertFalse(aObject.hashCode() == dObject.hashCode()); - } + @Test + public void testEqualsAndHashcodes() { + + Square aObject = new Square(10, Color.BLUE); + Square bObject = new Square(10, Color.BLUE); + + Square dObject = new Square(20, Color.BLUE); + + // equals() + Assert.assertTrue(aObject.equals(bObject) && bObject.equals(aObject)); + // hashCode() + Assert.assertTrue(aObject.hashCode() == bObject.hashCode()); + // non-equal objects are not equals() and have different hashCode() + Assert.assertFalse(aObject.equals(dObject)); + Assert.assertFalse(aObject.hashCode() == dObject.hashCode()); + } } From 7ba9a1288b2a5a3ff25ee004b27b71be413e9b7c Mon Sep 17 00:00:00 2001 From: zinch84 Date: Thu, 8 Sep 2016 11:04:55 +0300 Subject: [PATCH 083/265] Array list demo (#677) * Create ArrayList demo * Update code samples according to the article --- .../java/org/baeldung/java/collections/ArrayListTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core-java/src/test/java/org/baeldung/java/collections/ArrayListTest.java b/core-java/src/test/java/org/baeldung/java/collections/ArrayListTest.java index d7a69c42c7..e93acf9a32 100644 --- a/core-java/src/test/java/org/baeldung/java/collections/ArrayListTest.java +++ b/core-java/src/test/java/org/baeldung/java/collections/ArrayListTest.java @@ -57,8 +57,8 @@ public class ArrayListTest { @Test public void givenCollection_whenAddToArrayList_thenIsAdded() { List xs = new ArrayList<>(Arrays.asList(1L, 2L, 3L)); - Collection ys = LongStream.range(4, 10).boxed().collect(toList()); - xs.addAll(0, ys); + LongStream.range(4, 10).boxed() + .collect(collectingAndThen(toList(), ys -> xs.addAll(0, ys))); assertThat(Arrays.asList(4L, 5L, 6L, 7L, 8L, 9L, 1L, 2L, 3L), equalTo(xs)); } From 314c211fa2c91a5c6f0eac1964701897d2a9cd19 Mon Sep 17 00:00:00 2001 From: zinch84 Date: Sat, 10 Sep 2016 16:50:35 +0300 Subject: [PATCH 084/265] Array list demo (#679) * Create ArrayList demo * Update code samples according to the article * Use toCollection(ArrayList::new) instead of toList() --- .../org/baeldung/java/collections/ArrayListTest.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/core-java/src/test/java/org/baeldung/java/collections/ArrayListTest.java b/core-java/src/test/java/org/baeldung/java/collections/ArrayListTest.java index e93acf9a32..7a80d802e9 100644 --- a/core-java/src/test/java/org/baeldung/java/collections/ArrayListTest.java +++ b/core-java/src/test/java/org/baeldung/java/collections/ArrayListTest.java @@ -7,8 +7,7 @@ import org.junit.Test; import java.util.*; import java.util.stream.*; -import static java.util.stream.Collectors.toList; -import static java.util.stream.Collectors.toSet; +import static java.util.stream.Collectors.*; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.core.IsNot.not; import static org.junit.Assert.*; @@ -22,7 +21,7 @@ public class ArrayListTest { List xs = LongStream.range(0, 16) .boxed() .map(Long::toHexString) - .collect(toList()); + .collect(toCollection(ArrayList::new)); stringsToSearch = new ArrayList<>(xs); stringsToSearch.addAll(xs); } @@ -92,7 +91,7 @@ public class ArrayListTest { List result = stringsToSearch .stream() .filter(matchingStrings::contains) - .collect(toList()); + .collect(toCollection(ArrayList::new)); assertEquals(6, result.size()); } @@ -107,7 +106,7 @@ public class ArrayListTest { @Test public void givenIndex_whenRemove_thenCorrectElementRemoved() { - List xs = IntStream.range(0, 10).boxed().collect(toList()); + List xs = IntStream.range(0, 10).boxed().collect(toCollection(ArrayList::new)); Collections.reverse(xs); xs.remove(0); @@ -119,7 +118,7 @@ public class ArrayListTest { @Test public void givenListIterator_whenReverseTraversal_thenRetrieveElementsInOppositeOrder() { - List xs = IntStream.range(0, 10).boxed().collect(toList()); + List xs = IntStream.range(0, 10).boxed().collect(toCollection(ArrayList::new)); ListIterator it = xs.listIterator(xs.size()); List result = new ArrayList<>(xs.size()); while (it.hasPrevious()) { From e6d11e531caa6c8e5ae82900d9ba3e37cd8ca65b Mon Sep 17 00:00:00 2001 From: Francesco Papagno Date: Sun, 11 Sep 2016 15:26:18 +0200 Subject: [PATCH 085/265] Created project "spring-mvc-web-vs-initializer" for the web.xml vs Initializer article. (#663) * Created spring-mvc-web-vs-initializer project * Code style check --- spring-mvc-web-vs-initializer/.gitignore | 13 ++ spring-mvc-web-vs-initializer/pom.xml | 201 ++++++++++++++++++ .../org/baeldung/config/AppInitializer.java | 26 +++ .../java/org/baeldung/config/MvcConfig.java | 25 +++ .../controller/java/JavaController.java | 18 ++ .../controller/xml/XmlController.java | 18 ++ .../src/main/resources/mvc-configuration.xml | 20 ++ .../main/webapp/WEB-INF/view/from-java.jsp | 7 + .../src/main/webapp/WEB-INF/view/from-xml.jsp | 7 + .../src/main/webapp/WEB-INF/web.xml | 24 +++ .../baeldung/controller/JavaServletTest.java | 45 ++++ .../baeldung/controller/XmlServletTest.java | 44 ++++ 12 files changed, 448 insertions(+) create mode 100644 spring-mvc-web-vs-initializer/.gitignore create mode 100644 spring-mvc-web-vs-initializer/pom.xml create mode 100644 spring-mvc-web-vs-initializer/src/main/java/org/baeldung/config/AppInitializer.java create mode 100644 spring-mvc-web-vs-initializer/src/main/java/org/baeldung/config/MvcConfig.java create mode 100644 spring-mvc-web-vs-initializer/src/main/java/org/baeldung/controller/java/JavaController.java create mode 100644 spring-mvc-web-vs-initializer/src/main/java/org/baeldung/controller/xml/XmlController.java create mode 100644 spring-mvc-web-vs-initializer/src/main/resources/mvc-configuration.xml create mode 100644 spring-mvc-web-vs-initializer/src/main/webapp/WEB-INF/view/from-java.jsp create mode 100644 spring-mvc-web-vs-initializer/src/main/webapp/WEB-INF/view/from-xml.jsp create mode 100644 spring-mvc-web-vs-initializer/src/main/webapp/WEB-INF/web.xml create mode 100644 spring-mvc-web-vs-initializer/src/test/java/org/baeldung/controller/JavaServletTest.java create mode 100644 spring-mvc-web-vs-initializer/src/test/java/org/baeldung/controller/XmlServletTest.java diff --git a/spring-mvc-web-vs-initializer/.gitignore b/spring-mvc-web-vs-initializer/.gitignore new file mode 100644 index 0000000000..83c05e60c8 --- /dev/null +++ b/spring-mvc-web-vs-initializer/.gitignore @@ -0,0 +1,13 @@ +*.class + +#folders# +/target +/neoDb* +/data +/src/main/webapp/WEB-INF/classes +*/META-INF/* + +# Packaged files # +*.jar +*.war +*.ear \ No newline at end of file diff --git a/spring-mvc-web-vs-initializer/pom.xml b/spring-mvc-web-vs-initializer/pom.xml new file mode 100644 index 0000000000..0d735e7188 --- /dev/null +++ b/spring-mvc-web-vs-initializer/pom.xml @@ -0,0 +1,201 @@ + + 4.0.0 + com.baeldung + spring-mvc-web-vs-initializer + 0.1-SNAPSHOT + + spring-mvc-web-vs-initializer + war + + + org.springframework.boot + spring-boot-starter-parent + 1.3.6.RELEASE + + + + + com.fasterxml.jackson.core + jackson-databind + + + + + + org.springframework + spring-web + + + org.springframework + spring-webmvc + + + org.springframework + spring-context + + + + + + javax.servlet + javax.servlet-api + provided + + + + javax.servlet + jstl + runtime + + + + + + com.google.guava + guava + ${guava.version} + + + + + + org.slf4j + slf4j-api + + + ch.qos.logback + logback-classic + + + + org.slf4j + jcl-over-slf4j + + + + org.slf4j + log4j-over-slf4j + + + + + + org.springframework + spring-test + test + + + + junit + junit + test + + + + org.assertj + assertj-core + 3.5.1 + test + + + + org.hamcrest + hamcrest-core + test + + + org.hamcrest + hamcrest-library + test + + + + org.mockito + mockito-core + test + + + + org.easymock + easymock + 3.4 + test + + + + + + + + + + org.springframework + spring-framework-bom + ${org.springframework.version} + pom + import + + + + org.springframework + spring-core + ${org.springframework.version} + + + + + + + + spring-mvc-web-vs-initializer + + + src/main/resources + true + + + + + + + + 4.3.1.RELEASE + 4.0.4.RELEASE + 3.20.0-GA + 1.2 + + + 4.3.11.Final + 5.1.38 + + + 1.7.13 + 1.1.3 + + + 5.2.2.Final + + + 19.0 + 3.4 + + + 1.3 + 4.12 + 1.10.19 + + 4.4.1 + 4.5 + + 2.9.0 + + + 3.5.1 + 2.6 + 2.19.1 + 2.7 + 1.4.18 + + + + \ No newline at end of file diff --git a/spring-mvc-web-vs-initializer/src/main/java/org/baeldung/config/AppInitializer.java b/spring-mvc-web-vs-initializer/src/main/java/org/baeldung/config/AppInitializer.java new file mode 100644 index 0000000000..21e33820ca --- /dev/null +++ b/spring-mvc-web-vs-initializer/src/main/java/org/baeldung/config/AppInitializer.java @@ -0,0 +1,26 @@ +package org.baeldung.config; + +import org.springframework.web.WebApplicationInitializer; +import org.springframework.web.context.ContextLoaderListener; +import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; +import org.springframework.web.servlet.DispatcherServlet; + +import javax.servlet.ServletContext; +import javax.servlet.ServletException; +import javax.servlet.ServletRegistration; + +public class AppInitializer implements WebApplicationInitializer { + + @Override + public void onStartup(ServletContext container) throws ServletException { + AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext(); + context.setConfigLocation("org.baeldung.config"); + + container.addListener(new ContextLoaderListener(context)); + + ServletRegistration.Dynamic dispatcher = container.addServlet("java-servlet", new DispatcherServlet(context)); + dispatcher.setLoadOnStartup(1); + dispatcher.addMapping("/java-servlet/*"); + } + +} diff --git a/spring-mvc-web-vs-initializer/src/main/java/org/baeldung/config/MvcConfig.java b/spring-mvc-web-vs-initializer/src/main/java/org/baeldung/config/MvcConfig.java new file mode 100644 index 0000000000..d460113458 --- /dev/null +++ b/spring-mvc-web-vs-initializer/src/main/java/org/baeldung/config/MvcConfig.java @@ -0,0 +1,25 @@ +package org.baeldung.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.ViewResolver; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; +import org.springframework.web.servlet.view.InternalResourceViewResolver; + +@Configuration +@EnableWebMvc +@ComponentScan(basePackages = "org.baeldung.controller.java") +public class MvcConfig extends WebMvcConfigurerAdapter { + + @Bean + public ViewResolver viewResolver() { + InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); + viewResolver.setPrefix("/WEB-INF/view/"); + viewResolver.setSuffix(".jsp"); + + return viewResolver; + } + +} diff --git a/spring-mvc-web-vs-initializer/src/main/java/org/baeldung/controller/java/JavaController.java b/spring-mvc-web-vs-initializer/src/main/java/org/baeldung/controller/java/JavaController.java new file mode 100644 index 0000000000..c979c88b34 --- /dev/null +++ b/spring-mvc-web-vs-initializer/src/main/java/org/baeldung/controller/java/JavaController.java @@ -0,0 +1,18 @@ +package org.baeldung.controller.java; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.servlet.ModelAndView; + +@Controller +public class JavaController { + + @RequestMapping(value = "/endpoint") + public ModelAndView handleRequestFromJavaConfiguredServlet() { + ModelAndView mv = new ModelAndView(); + mv.setViewName("from-java"); + + return mv; + } + +} \ No newline at end of file diff --git a/spring-mvc-web-vs-initializer/src/main/java/org/baeldung/controller/xml/XmlController.java b/spring-mvc-web-vs-initializer/src/main/java/org/baeldung/controller/xml/XmlController.java new file mode 100644 index 0000000000..bdefc1781c --- /dev/null +++ b/spring-mvc-web-vs-initializer/src/main/java/org/baeldung/controller/xml/XmlController.java @@ -0,0 +1,18 @@ +package org.baeldung.controller.xml; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.servlet.ModelAndView; + +@Controller +public class XmlController { + + @RequestMapping(value = "/endpoint") + public ModelAndView handleRequestFromXmlConfiguredServlet() { + ModelAndView mv = new ModelAndView(); + mv.setViewName("from-xml"); + + return mv; + } + +} \ No newline at end of file diff --git a/spring-mvc-web-vs-initializer/src/main/resources/mvc-configuration.xml b/spring-mvc-web-vs-initializer/src/main/resources/mvc-configuration.xml new file mode 100644 index 0000000000..7505614c99 --- /dev/null +++ b/spring-mvc-web-vs-initializer/src/main/resources/mvc-configuration.xml @@ -0,0 +1,20 @@ + + + + + + + + + /WEB-INF/view/ + + + .jsp + + + + \ No newline at end of file diff --git a/spring-mvc-web-vs-initializer/src/main/webapp/WEB-INF/view/from-java.jsp b/spring-mvc-web-vs-initializer/src/main/webapp/WEB-INF/view/from-java.jsp new file mode 100644 index 0000000000..e54d7520dc --- /dev/null +++ b/spring-mvc-web-vs-initializer/src/main/webapp/WEB-INF/view/from-java.jsp @@ -0,0 +1,7 @@ + + + + +

Java

+ + \ No newline at end of file diff --git a/spring-mvc-web-vs-initializer/src/main/webapp/WEB-INF/view/from-xml.jsp b/spring-mvc-web-vs-initializer/src/main/webapp/WEB-INF/view/from-xml.jsp new file mode 100644 index 0000000000..986010c183 --- /dev/null +++ b/spring-mvc-web-vs-initializer/src/main/webapp/WEB-INF/view/from-xml.jsp @@ -0,0 +1,7 @@ + + + + +

XML

+ + \ No newline at end of file diff --git a/spring-mvc-web-vs-initializer/src/main/webapp/WEB-INF/web.xml b/spring-mvc-web-vs-initializer/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000000..9bebc263be --- /dev/null +++ b/spring-mvc-web-vs-initializer/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,24 @@ + + + + xml-servlet + + org.springframework.web.servlet.DispatcherServlet + + 1 + + contextConfigLocation + classpath*:mvc-configuration.xml + + + + + xml-servlet + /xml-servlet/* + + + diff --git a/spring-mvc-web-vs-initializer/src/test/java/org/baeldung/controller/JavaServletTest.java b/spring-mvc-web-vs-initializer/src/test/java/org/baeldung/controller/JavaServletTest.java new file mode 100644 index 0000000000..99b5ef8c2f --- /dev/null +++ b/spring-mvc-web-vs-initializer/src/test/java/org/baeldung/controller/JavaServletTest.java @@ -0,0 +1,45 @@ +package org.baeldung.controller; + +import org.baeldung.config.MvcConfig; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.web.AnnotationConfigWebContextLoader; +import org.springframework.test.context.web.WebAppConfiguration; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.context.WebApplicationContext; +import org.springframework.web.servlet.ModelAndView; + + +@RunWith(SpringJUnit4ClassRunner.class) +@WebAppConfiguration +@ContextConfiguration(loader=AnnotationConfigWebContextLoader.class, classes = MvcConfig.class) +public class JavaServletTest { + + private MockMvc mockMvc; + + @Autowired + private WebApplicationContext wac; + + @Before + public void setUp() { + this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build(); + } + + @Test + public void testJavaEndpoint() throws Exception { + ModelAndView mv = this.mockMvc.perform(MockMvcRequestBuilders.get("/endpoint")) + .andReturn() + .getModelAndView(); + + // validate view name + Assert.assertSame(mv.getViewName(), "from-java"); + } + +} diff --git a/spring-mvc-web-vs-initializer/src/test/java/org/baeldung/controller/XmlServletTest.java b/spring-mvc-web-vs-initializer/src/test/java/org/baeldung/controller/XmlServletTest.java new file mode 100644 index 0000000000..e7695e36c0 --- /dev/null +++ b/spring-mvc-web-vs-initializer/src/test/java/org/baeldung/controller/XmlServletTest.java @@ -0,0 +1,44 @@ +package org.baeldung.controller; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.web.GenericXmlWebContextLoader; +import org.springframework.test.context.web.WebAppConfiguration; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.context.WebApplicationContext; +import org.springframework.web.servlet.ModelAndView; + + +@RunWith(SpringJUnit4ClassRunner.class) +@WebAppConfiguration +@ContextConfiguration(loader=GenericXmlWebContextLoader.class, locations = "classpath*:mvc-configuration.xml") +public class XmlServletTest { + + private MockMvc mockMvc; + + @Autowired + private WebApplicationContext wac; + + @Before + public void setUp() { + this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build(); + } + + @Test + public void testXmlEndpoint() throws Exception { + ModelAndView mv = this.mockMvc.perform(MockMvcRequestBuilders.get("/endpoint")) + .andReturn() + .getModelAndView(); + + // validate view name + Assert.assertSame(mv.getViewName(), "from-xml"); + } + +} From f2c52d6cfcf42bc0f83a4be5383f75d3daf8f246 Mon Sep 17 00:00:00 2001 From: DOHA Date: Mon, 12 Sep 2016 12:55:46 +0200 Subject: [PATCH 086/265] fix spring-rest configuration --- spring-rest/pom.xml | 22 ++++++++++------ .../java/org/baeldung/config/WebConfig.java | 5 ++++ .../web/controller/FooController.java | 1 - .../src/main/webapp/WEB-INF/api-servlet.xml | 7 +++++- spring-rest/src/main/webapp/WEB-INF/web.xml | 4 +-- ...MessageConvertersIntegrationTestsCase.java | 25 ------------------- 6 files changed, 27 insertions(+), 37 deletions(-) diff --git a/spring-rest/pom.xml b/spring-rest/pom.xml index e28f7e7e33..0c0d6219dd 100644 --- a/spring-rest/pom.xml +++ b/spring-rest/pom.xml @@ -15,10 +15,7 @@ - - org.springframework.boot - spring-boot-starter-security - + org.springframework.boot spring-boot-starter-thymeleaf @@ -74,6 +71,11 @@ com.fasterxml.jackson.core jackson-databind + + + com.fasterxml.jackson.dataformat + jackson-dataformat-xml + com.thoughtworks.xstream @@ -146,11 +148,19 @@ spring-test + + com.jayway.restassured + rest-assured + ${rest-assured.version} + + + com.google.protobuf protobuf-java 2.6.1 + com.esotericsoftware kryo @@ -231,10 +241,6 @@ 4.3.11.Final 5.1.39 - - - 2.7.2 - 5.2.2.Final diff --git a/spring-rest/src/main/java/org/baeldung/config/WebConfig.java b/spring-rest/src/main/java/org/baeldung/config/WebConfig.java index d5cd6e1eae..d116148f09 100644 --- a/spring-rest/src/main/java/org/baeldung/config/WebConfig.java +++ b/spring-rest/src/main/java/org/baeldung/config/WebConfig.java @@ -15,6 +15,11 @@ import org.springframework.oxm.xstream.XStreamMarshaller; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; +/* + * Please note that main web configuration is in src/main/webapp/WEB-INF/api-servlet.xml + * + */ + @Configuration @EnableWebMvc @ComponentScan({ "org.baeldung.web" }) diff --git a/spring-rest/src/main/java/org/baeldung/web/controller/FooController.java b/spring-rest/src/main/java/org/baeldung/web/controller/FooController.java index 386c64bb09..dd1e3ca222 100644 --- a/spring-rest/src/main/java/org/baeldung/web/controller/FooController.java +++ b/spring-rest/src/main/java/org/baeldung/web/controller/FooController.java @@ -35,7 +35,6 @@ public class FooController { @ResponseStatus(HttpStatus.OK) @ResponseBody public Foo updateFoo(@PathVariable("id") final String id, @RequestBody final Foo foo) { - System.out.println(foo); return foo; } diff --git a/spring-rest/src/main/webapp/WEB-INF/api-servlet.xml b/spring-rest/src/main/webapp/WEB-INF/api-servlet.xml index 5afc637ece..c08faaf70d 100644 --- a/spring-rest/src/main/webapp/WEB-INF/api-servlet.xml +++ b/spring-rest/src/main/webapp/WEB-INF/api-servlet.xml @@ -8,7 +8,12 @@ - + + + + + + diff --git a/spring-rest/src/main/webapp/WEB-INF/web.xml b/spring-rest/src/main/webapp/WEB-INF/web.xml index 01e7620c44..a439de8a05 100644 --- a/spring-rest/src/main/webapp/WEB-INF/web.xml +++ b/spring-rest/src/main/webapp/WEB-INF/web.xml @@ -8,7 +8,7 @@ Spring MVC Application - + contextClass org.springframework.web.context.support.AnnotationConfigWebApplicationContext @@ -18,7 +18,7 @@ contextConfigLocation org.baeldung.config - + org.springframework.web.context.ContextLoaderListener diff --git a/spring-rest/src/test/java/org/baeldung/web/test/SpringHttpMessageConvertersIntegrationTestsCase.java b/spring-rest/src/test/java/org/baeldung/web/test/SpringHttpMessageConvertersIntegrationTestsCase.java index 1536f14bc8..1dfe509c09 100644 --- a/spring-rest/src/test/java/org/baeldung/web/test/SpringHttpMessageConvertersIntegrationTestsCase.java +++ b/spring-rest/src/test/java/org/baeldung/web/test/SpringHttpMessageConvertersIntegrationTestsCase.java @@ -3,9 +3,7 @@ package org.baeldung.web.test; import static org.hamcrest.Matchers.notNullValue; import static org.junit.Assert.assertThat; -import java.util.ArrayList; import java.util.Arrays; -import java.util.List; import org.baeldung.config.converter.KryoHttpMessageConverter; import org.baeldung.web.dto.Foo; @@ -17,11 +15,7 @@ import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; -import org.springframework.http.converter.HttpMessageConverter; -import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.http.converter.protobuf.ProtobufHttpMessageConverter; -import org.springframework.http.converter.xml.MarshallingHttpMessageConverter; -import org.springframework.oxm.xstream.XStreamMarshaller; import org.springframework.web.client.RestTemplate; /** @@ -50,7 +44,6 @@ public class SpringHttpMessageConvertersIntegrationTestsCase { final String URI = BASE_URI + "foos/{id}"; final RestTemplate restTemplate = new RestTemplate(); - restTemplate.setMessageConverters(getMessageConverters()); final HttpHeaders headers = new HttpHeaders(); headers.setAccept(Arrays.asList(MediaType.APPLICATION_XML)); @@ -67,7 +60,6 @@ public class SpringHttpMessageConvertersIntegrationTestsCase { final String URI = BASE_URI + "foos/{id}"; final RestTemplate restTemplate = new RestTemplate(); - restTemplate.setMessageConverters(getMessageConverters()); final HttpHeaders headers = new HttpHeaders(); headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON)); @@ -83,7 +75,6 @@ public class SpringHttpMessageConvertersIntegrationTestsCase { public void givenConsumingXml_whenWritingTheFoo_thenCorrect() { final String URI = BASE_URI + "foos/{id}"; final RestTemplate restTemplate = new RestTemplate(); - restTemplate.setMessageConverters(getMessageConverters()); final Foo resource = new Foo(4, "jason"); final HttpHeaders headers = new HttpHeaders(); @@ -129,20 +120,4 @@ public class SpringHttpMessageConvertersIntegrationTestsCase { assertThat(resource, notNullValue()); } - // UTIL - - private List> getMessageConverters() { - final List> converters = new ArrayList>(); - - final MarshallingHttpMessageConverter xmlConverter = new MarshallingHttpMessageConverter(); - final XStreamMarshaller xstreamMarshaller = new XStreamMarshaller(); - xmlConverter.setMarshaller(xstreamMarshaller); - xmlConverter.setUnmarshaller(xstreamMarshaller); - - converters.add(xmlConverter); - converters.add(new MappingJackson2HttpMessageConverter()); - - return converters; - } - } From 0c12104b830cf20fdfa33249bf51eb833b4ff288 Mon Sep 17 00:00:00 2001 From: DOHA Date: Mon, 12 Sep 2016 14:28:53 +0200 Subject: [PATCH 087/265] add live test --- .../web/test/RequestMappingLiveTest.java | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 spring-rest/src/test/java/org/baeldung/web/test/RequestMappingLiveTest.java diff --git a/spring-rest/src/test/java/org/baeldung/web/test/RequestMappingLiveTest.java b/spring-rest/src/test/java/org/baeldung/web/test/RequestMappingLiveTest.java new file mode 100644 index 0000000000..fd349f1e44 --- /dev/null +++ b/spring-rest/src/test/java/org/baeldung/web/test/RequestMappingLiveTest.java @@ -0,0 +1,62 @@ +package org.baeldung.web.test; + +import static org.hamcrest.Matchers.equalTo; + +import org.junit.Test; + +import com.jayway.restassured.RestAssured; + +public class RequestMappingLiveTest { + private static String BASE_URI = "http://localhost:8080/spring-rest/ex/"; + + @Test + public void givenSimplePath_whenGetFoos_thenOk() { + RestAssured.given().accept("text/html").get(BASE_URI + "foos").then().assertThat().body(equalTo("Simple Get some Foos")); + } + + @Test + public void whenPostFoos_thenOk() { + RestAssured.given().accept("text/html").post(BASE_URI + "foos").then().assertThat().body(equalTo("Post some Foos")); + } + + @Test + public void givenOneHeader_whenGetFoos_thenOk() { + RestAssured.given().accept("text/html").header("key", "val").get(BASE_URI + "foos").then().assertThat().body(equalTo("Get some Foos with Header")); + } + + @Test + public void givenMultipleHeaders_whenGetFoos_thenOk() { + RestAssured.given().accept("text/html").headers("key1", "val1", "key2", "val2").get(BASE_URI + "foos").then().assertThat().body(equalTo("Get some Foos with Header")); + } + + @Test + public void givenAcceptHeader_whenGetFoos_thenOk() { + RestAssured.given().accept("application/json").get(BASE_URI + "foos").then().assertThat().body(equalTo("Get some Foos with Header New")); + } + + @Test + public void givenPathVariable_whenGetFoos_thenOk() { + RestAssured.given().accept("text/html").get(BASE_URI + "foos/1").then().assertThat().body(equalTo("Get a specific Foo with id=1")); + } + + @Test + public void givenMultiplePathVariable_whenGetFoos_thenOk() { + RestAssured.given().accept("text/html").get(BASE_URI + "foos/1/bar/2").then().assertThat().body(equalTo("Get a specific Bar with id=2 from a Foo with id=1")); + } + + @Test + public void givenPathVariable_whenGetBars_thenOk() { + RestAssured.given().accept("text/html").get(BASE_URI + "bars/1").then().assertThat().body(equalTo("Get a specific Bar with id=1")); + } + + @Test + public void givenParams_whenGetBars_thenOk() { + RestAssured.given().accept("text/html").get(BASE_URI + "bars?id=100&second=something").then().assertThat().body(equalTo("Get a specific Bar with id=100")); + } + + @Test + public void whenGetFoosOrBars_thenOk() { + RestAssured.given().accept("text/html").get(BASE_URI + "advanced/foos").then().assertThat().body(equalTo("Advanced - Get some Foos or Bars")); + RestAssured.given().accept("text/html").get(BASE_URI + "advanced/bars").then().assertThat().body(equalTo("Advanced - Get some Foos or Bars")); + } +} From 73fde40da0b9db4fd20c5327814a3dfa1e77d94f Mon Sep 17 00:00:00 2001 From: sanketmeghani Date: Mon, 12 Sep 2016 22:52:53 +0530 Subject: [PATCH 088/265] Adding version number for maven compiler plugin --- flyway-migration/pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/flyway-migration/pom.xml b/flyway-migration/pom.xml index e3e29cd43f..6e9d683a0e 100644 --- a/flyway-migration/pom.xml +++ b/flyway-migration/pom.xml @@ -23,6 +23,7 @@ org.apache.maven.plugins maven-compiler-plugin + 3.5.1 1.8 1.8 From 3d66a5f28a04a05be41f184d8b62a33b4066b753 Mon Sep 17 00:00:00 2001 From: sanketmeghani Date: Mon, 12 Sep 2016 22:53:09 +0530 Subject: [PATCH 089/265] Adding second migration for department table --- .../db/migration/V2_0__create_department_schema.sql | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 flyway-migration/db/migration/V2_0__create_department_schema.sql diff --git a/flyway-migration/db/migration/V2_0__create_department_schema.sql b/flyway-migration/db/migration/V2_0__create_department_schema.sql new file mode 100644 index 0000000000..2b9d3364a5 --- /dev/null +++ b/flyway-migration/db/migration/V2_0__create_department_schema.sql @@ -0,0 +1,8 @@ +CREATE TABLE IF NOT EXISTS `department` ( + +`id` int NOT NULL AUTO_INCREMENT PRIMARY KEY, +`name` varchar(20) + +)ENGINE=InnoDB DEFAULT CHARSET=UTF8; + +ALTER TABLE `employee` ADD `dept_id` int AFTER `email`; \ No newline at end of file From d9a7757602670a70ad46908cfb7172afe65d0fbd Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Mon, 12 Sep 2016 22:02:51 +0200 Subject: [PATCH 090/265] Reformat code --- .../java/collections/ArrayListTest.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/core-java/src/test/java/org/baeldung/java/collections/ArrayListTest.java b/core-java/src/test/java/org/baeldung/java/collections/ArrayListTest.java index 7a80d802e9..9cafa179ab 100644 --- a/core-java/src/test/java/org/baeldung/java/collections/ArrayListTest.java +++ b/core-java/src/test/java/org/baeldung/java/collections/ArrayListTest.java @@ -19,9 +19,9 @@ public class ArrayListTest { @Before public void setUp() { List xs = LongStream.range(0, 16) - .boxed() - .map(Long::toHexString) - .collect(toCollection(ArrayList::new)); + .boxed() + .map(Long::toHexString) + .collect(toCollection(ArrayList::new)); stringsToSearch = new ArrayList<>(xs); stringsToSearch.addAll(xs); } @@ -35,7 +35,7 @@ public class ArrayListTest { @Test public void givenCollection_whenProvideItToArrayListCtor_thenArrayListIsPopulatedWithItsElements() { Collection numbers = - IntStream.range(0, 10).boxed().collect(toSet()); + IntStream.range(0, 10).boxed().collect(toSet()); List xs = new ArrayList<>(numbers); assertEquals(10, xs.size()); @@ -57,7 +57,7 @@ public class ArrayListTest { public void givenCollection_whenAddToArrayList_thenIsAdded() { List xs = new ArrayList<>(Arrays.asList(1L, 2L, 3L)); LongStream.range(4, 10).boxed() - .collect(collectingAndThen(toList(), ys -> xs.addAll(0, ys))); + .collect(collectingAndThen(toCollection(ArrayList::new), ys -> xs.addAll(0, ys))); assertThat(Arrays.asList(4L, 5L, 6L, 7L, 8L, 9L, 1L, 2L, 3L), equalTo(xs)); } @@ -89,9 +89,9 @@ public class ArrayListTest { Set matchingStrings = new HashSet<>(Arrays.asList("a", "c", "9")); List result = stringsToSearch - .stream() - .filter(matchingStrings::contains) - .collect(toCollection(ArrayList::new)); + .stream() + .filter(matchingStrings::contains) + .collect(toCollection(ArrayList::new)); assertEquals(6, result.size()); } @@ -132,7 +132,7 @@ public class ArrayListTest { @Test public void givenCondition_whenIterateArrayList_thenRemoveAllElementsSatisfyingCondition() { Set matchingStrings - = Sets.newHashSet("a", "b", "c", "d", "e", "f"); + = Sets.newHashSet("a", "b", "c", "d", "e", "f"); Iterator it = stringsToSearch.iterator(); while (it.hasNext()) { From a2c86d0a8dd5a13ccd03e5ff08b22dbb5bc23319 Mon Sep 17 00:00:00 2001 From: DOHA Date: Tue, 13 Sep 2016 12:08:45 +0200 Subject: [PATCH 091/265] add xml config --- spring-rest/src/main/webapp/WEB-INF/api-servlet.xml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/spring-rest/src/main/webapp/WEB-INF/api-servlet.xml b/spring-rest/src/main/webapp/WEB-INF/api-servlet.xml index c08faaf70d..21136b62c6 100644 --- a/spring-rest/src/main/webapp/WEB-INF/api-servlet.xml +++ b/spring-rest/src/main/webapp/WEB-INF/api-servlet.xml @@ -10,10 +10,22 @@ + + + + + From 0835118e854c3c82d0743f99af81b7261ae1cb50 Mon Sep 17 00:00:00 2001 From: Egima profile Date: Tue, 13 Sep 2016 18:52:27 +0300 Subject: [PATCH 092/265] added play-framework project (#678) * made changes to java reflection * removed redundant method makeSound in Animal abstract class * added project for play-framework article --- play-framework/student-api/.gitignore | 8 + play-framework/student-api/LICENSE | 8 + play-framework/student-api/README | 49 +++ play-framework/student-api/app/Filters.java | 46 ++ play-framework/student-api/app/Module.java | 31 ++ .../app/controllers/AsyncController.java | 60 +++ .../app/controllers/CountController.java | 35 ++ .../app/controllers/HomeController.java | 23 + .../app/controllers/StudentController.java | 56 +++ .../app/filters/ExampleFilter.java | 45 ++ .../student-api/app/models/Student.java | 47 +++ .../student-api/app/models/StudentStore.java | 52 +++ .../app/services/ApplicationTimer.java | 50 +++ .../app/services/AtomicCounter.java | 26 ++ .../student-api/app/services/Counter.java | 13 + play-framework/student-api/app/util/Util.java | 17 + .../student-api/app/views/index.scala.html | 20 + .../student-api/app/views/main.scala.html | 23 + play-framework/student-api/bin/activator | 397 ++++++++++++++++++ play-framework/student-api/bin/activator.bat | 248 +++++++++++ play-framework/student-api/build.sbt | 13 + .../student-api/conf/application.conf | 353 ++++++++++++++++ play-framework/student-api/conf/logback.xml | 41 ++ play-framework/student-api/conf/routes | 12 + .../libexec/activator-launch-1.3.10.jar | Bin 0 -> 1206790 bytes .../student-api/project/build.properties | 4 + .../student-api/project/plugins.sbt | 21 + .../student-api/public/images/favicon.png | Bin 0 -> 687 bytes .../student-api/public/javascripts/hello.js | 3 + .../student-api/public/stylesheets/main.css | 0 .../student-api/test/ApplicationTest.java | 45 ++ .../student-api/test/IntegrationTest.java | 25 ++ 32 files changed, 1771 insertions(+) create mode 100644 play-framework/student-api/.gitignore create mode 100644 play-framework/student-api/LICENSE create mode 100644 play-framework/student-api/README create mode 100644 play-framework/student-api/app/Filters.java create mode 100644 play-framework/student-api/app/Module.java create mode 100644 play-framework/student-api/app/controllers/AsyncController.java create mode 100644 play-framework/student-api/app/controllers/CountController.java create mode 100644 play-framework/student-api/app/controllers/HomeController.java create mode 100644 play-framework/student-api/app/controllers/StudentController.java create mode 100644 play-framework/student-api/app/filters/ExampleFilter.java create mode 100644 play-framework/student-api/app/models/Student.java create mode 100644 play-framework/student-api/app/models/StudentStore.java create mode 100644 play-framework/student-api/app/services/ApplicationTimer.java create mode 100644 play-framework/student-api/app/services/AtomicCounter.java create mode 100644 play-framework/student-api/app/services/Counter.java create mode 100644 play-framework/student-api/app/util/Util.java create mode 100644 play-framework/student-api/app/views/index.scala.html create mode 100644 play-framework/student-api/app/views/main.scala.html create mode 100644 play-framework/student-api/bin/activator create mode 100644 play-framework/student-api/bin/activator.bat create mode 100644 play-framework/student-api/build.sbt create mode 100644 play-framework/student-api/conf/application.conf create mode 100644 play-framework/student-api/conf/logback.xml create mode 100644 play-framework/student-api/conf/routes create mode 100644 play-framework/student-api/libexec/activator-launch-1.3.10.jar create mode 100644 play-framework/student-api/project/build.properties create mode 100644 play-framework/student-api/project/plugins.sbt create mode 100644 play-framework/student-api/public/images/favicon.png create mode 100644 play-framework/student-api/public/javascripts/hello.js create mode 100644 play-framework/student-api/public/stylesheets/main.css create mode 100644 play-framework/student-api/test/ApplicationTest.java create mode 100644 play-framework/student-api/test/IntegrationTest.java diff --git a/play-framework/student-api/.gitignore b/play-framework/student-api/.gitignore new file mode 100644 index 0000000000..eb372fc719 --- /dev/null +++ b/play-framework/student-api/.gitignore @@ -0,0 +1,8 @@ +logs +target +/.idea +/.idea_modules +/.classpath +/.project +/.settings +/RUNNING_PID diff --git a/play-framework/student-api/LICENSE b/play-framework/student-api/LICENSE new file mode 100644 index 0000000000..4baedcb95f --- /dev/null +++ b/play-framework/student-api/LICENSE @@ -0,0 +1,8 @@ +This software is licensed under the Apache 2 license, quoted below. + +Licensed under the Apache License, Version 2.0 (the "License"); you may not use this project except in compliance with +the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0. + +Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific +language governing permissions and limitations under the License. \ No newline at end of file diff --git a/play-framework/student-api/README b/play-framework/student-api/README new file mode 100644 index 0000000000..f21d092edf --- /dev/null +++ b/play-framework/student-api/README @@ -0,0 +1,49 @@ +This is your new Play application +================================= + +This file will be packaged with your application when using `activator dist`. + +There are several demonstration files available in this template. + +Controllers +=========== + +- HomeController.java: + + Shows how to handle simple HTTP requests. + +- AsyncController.java: + + Shows how to do asynchronous programming when handling a request. + +- CountController.java: + + Shows how to inject a component into a controller and use the component when + handling requests. + +Components +========== + +- Module.java: + + Shows how to use Guice to bind all the components needed by your application. + +- Counter.java: + + An example of a component that contains state, in this case a simple counter. + +- ApplicationTimer.java: + + An example of a component that starts when the application starts and stops + when the application stops. + +Filters +======= + +- Filters.java: + + Creates the list of HTTP filters used by your application. + +- ExampleFilter.java + + A simple filter that adds a header to every response. \ No newline at end of file diff --git a/play-framework/student-api/app/Filters.java b/play-framework/student-api/app/Filters.java new file mode 100644 index 0000000000..255de8ca93 --- /dev/null +++ b/play-framework/student-api/app/Filters.java @@ -0,0 +1,46 @@ +import javax.inject.*; +import play.*; +import play.mvc.EssentialFilter; +import play.http.HttpFilters; +import play.mvc.*; + +import filters.ExampleFilter; + +/** + * This class configures filters that run on every request. This + * class is queried by Play to get a list of filters. + * + * Play will automatically use filters from any class called + * Filters that is placed the root package. You can load filters + * from a different class by adding a `play.http.filters` setting to + * the application.conf configuration file. + */ +@Singleton +public class Filters implements HttpFilters { + + private final Environment env; + private final EssentialFilter exampleFilter; + + /** + * @param env Basic environment settings for the current application. + * @param exampleFilter A demonstration filter that adds a header to + */ + @Inject + public Filters(Environment env, ExampleFilter exampleFilter) { + this.env = env; + this.exampleFilter = exampleFilter; + } + + @Override + public EssentialFilter[] filters() { + // Use the example filter if we're running development mode. If + // we're running in production or test mode then don't use any + // filters at all. + if (env.mode().equals(Mode.DEV)) { + return new EssentialFilter[] { exampleFilter }; + } else { + return new EssentialFilter[] {}; + } + } + +} diff --git a/play-framework/student-api/app/Module.java b/play-framework/student-api/app/Module.java new file mode 100644 index 0000000000..6e7d1766ef --- /dev/null +++ b/play-framework/student-api/app/Module.java @@ -0,0 +1,31 @@ +import com.google.inject.AbstractModule; +import java.time.Clock; + +import services.ApplicationTimer; +import services.AtomicCounter; +import services.Counter; + +/** + * This class is a Guice module that tells Guice how to bind several + * different types. This Guice module is created when the Play + * application starts. + * + * Play will automatically use any class called `Module` that is in + * the root package. You can create modules in other locations by + * adding `play.modules.enabled` settings to the `application.conf` + * configuration file. + */ +public class Module extends AbstractModule { + + @Override + public void configure() { + // Use the system clock as the default implementation of Clock + bind(Clock.class).toInstance(Clock.systemDefaultZone()); + // Ask Guice to create an instance of ApplicationTimer when the + // application starts. + bind(ApplicationTimer.class).asEagerSingleton(); + // Set AtomicCounter as the implementation for Counter. + bind(Counter.class).to(AtomicCounter.class); + } + +} diff --git a/play-framework/student-api/app/controllers/AsyncController.java b/play-framework/student-api/app/controllers/AsyncController.java new file mode 100644 index 0000000000..33cd112837 --- /dev/null +++ b/play-framework/student-api/app/controllers/AsyncController.java @@ -0,0 +1,60 @@ +package controllers; + +import akka.actor.ActorSystem; +import javax.inject.*; +import play.*; +import play.mvc.*; +import java.util.concurrent.Executor; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.CompletionStage; +import java.util.concurrent.TimeUnit; +import scala.concurrent.duration.Duration; +import scala.concurrent.ExecutionContextExecutor; + +/** + * This controller contains an action that demonstrates how to write + * simple asynchronous code in a controller. It uses a timer to + * asynchronously delay sending a response for 1 second. + * + * @param actorSystem We need the {@link ActorSystem}'s + * {@link Scheduler} to run code after a delay. + * @param exec We need a Java {@link Executor} to apply the result + * of the {@link CompletableFuture} and a Scala + * {@link ExecutionContext} so we can use the Akka {@link Scheduler}. + * An {@link ExecutionContextExecutor} implements both interfaces. + */ +@Singleton +public class AsyncController extends Controller { + + private final ActorSystem actorSystem; + private final ExecutionContextExecutor exec; + + @Inject + public AsyncController(ActorSystem actorSystem, ExecutionContextExecutor exec) { + this.actorSystem = actorSystem; + this.exec = exec; + } + + /** + * An action that returns a plain text message after a delay + * of 1 second. + * + * The configuration in the routes file means that this method + * will be called when the application receives a GET request with + * a path of /message. + */ + public CompletionStage message() { + return getFutureMessage(1, TimeUnit.SECONDS).thenApplyAsync(Results::ok, exec); + } + + private CompletionStage getFutureMessage(long time, TimeUnit timeUnit) { + CompletableFuture future = new CompletableFuture<>(); + actorSystem.scheduler().scheduleOnce( + Duration.create(time, timeUnit), + () -> future.complete("Hi!"), + exec + ); + return future; + } + +} diff --git a/play-framework/student-api/app/controllers/CountController.java b/play-framework/student-api/app/controllers/CountController.java new file mode 100644 index 0000000000..02fcb15f8e --- /dev/null +++ b/play-framework/student-api/app/controllers/CountController.java @@ -0,0 +1,35 @@ +package controllers; + +import javax.inject.*; +import play.*; +import play.mvc.*; + +import services.Counter; + +/** + * This controller demonstrates how to use dependency injection to + * bind a component into a controller class. The class contains an + * action that shows an incrementing count to users. The {@link Counter} + * object is injected by the Guice dependency injection system. + */ +@Singleton +public class CountController extends Controller { + + private final Counter counter; + + @Inject + public CountController(Counter counter) { + this.counter = counter; + } + + /** + * An action that responds with the {@link Counter}'s current + * count. The result is plain text. This action is mapped to + * GET requests with a path of /count + * requests by an entry in the routes config file. + */ + public Result count() { + return ok(Integer.toString(counter.nextCount())); + } + +} diff --git a/play-framework/student-api/app/controllers/HomeController.java b/play-framework/student-api/app/controllers/HomeController.java new file mode 100644 index 0000000000..6a79856eb4 --- /dev/null +++ b/play-framework/student-api/app/controllers/HomeController.java @@ -0,0 +1,23 @@ +package controllers; + +import play.mvc.*; + +import views.html.*; + +/** + * This controller contains an action to handle HTTP requests + * to the application's home page. + */ +public class HomeController extends Controller { + + /** + * An action that renders an HTML page with a welcome message. + * The configuration in the routes file means that + * this method will be called when the application receives a + * GET request with a path of /. + */ + public Result index() { + return ok(index.render("Your new application is ready.")); + } + +} diff --git a/play-framework/student-api/app/controllers/StudentController.java b/play-framework/student-api/app/controllers/StudentController.java new file mode 100644 index 0000000000..0adedfa432 --- /dev/null +++ b/play-framework/student-api/app/controllers/StudentController.java @@ -0,0 +1,56 @@ +package controllers; +import models.*; +import util.*; +import play.mvc.*; +import play.libs.Json; +import play.libs.Json.*; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import java.util.List; + +public class StudentController extends Controller { + public Result create() { + JsonNode json = request().body().asJson(); + if(json == null) + return badRequest(Util.createResponse("Expecting Json data",false)); + Student student=StudentStore.getInstance().addStudent((Student)Json.fromJson(json,Student.class)); + JsonNode jsonObject=Json.toJson(student); + return created(Util.createResponse(jsonObject,true)); + } + public Result update() { + JsonNode json = request().body().asJson(); + if(json == null) + return badRequest(Util.createResponse("Expecting Json data",false)); + Student student=StudentStore.getInstance().updateStudent((Student)Json.fromJson(json,Student.class)); + if(student==null){ + return notFound(Util.createResponse("Student not found",false)); + } + + JsonNode jsonObject=Json.toJson(student); + return ok(Util.createResponse(jsonObject,true)); + } + public Result retrieve(int id) { + Student student=StudentStore.getInstance().getStudent(id); + if(student==null){ + return notFound(Util.createResponse("Student with id:"+id+" not found",false)); + } + JsonNode jsonObjects=Json.toJson(student); + return ok(Util.createResponse(jsonObjects,true)); + } + public Result listStudents() { + List result=StudentStore.getInstance().getAllStudents(); + ObjectMapper mapper = new ObjectMapper(); + + JsonNode jsonData=mapper.convertValue(result, JsonNode.class); + return ok(Util.createResponse(jsonData,true)); + + } + public Result delete(int id) { + boolean status=StudentStore.getInstance().deleteStudent(id); + if(!status){ + return notFound(Util.createResponse("Student with id:"+id+" not found",false)); + } + return ok(Util.createResponse("Student with id:"+id+" deleted",true)); + } + +} diff --git a/play-framework/student-api/app/filters/ExampleFilter.java b/play-framework/student-api/app/filters/ExampleFilter.java new file mode 100644 index 0000000000..67a6a36cc3 --- /dev/null +++ b/play-framework/student-api/app/filters/ExampleFilter.java @@ -0,0 +1,45 @@ +package filters; + +import akka.stream.Materializer; +import java.util.concurrent.CompletionStage; +import java.util.concurrent.Executor; +import java.util.function.Function; +import javax.inject.*; +import play.mvc.*; +import play.mvc.Http.RequestHeader; + + +/** + * This is a simple filter that adds a header to all requests. It's + * added to the application's list of filters by the + * {@link Filters} class. + */ +@Singleton +public class ExampleFilter extends Filter { + + private final Executor exec; + + /** + * @param mat This object is needed to handle streaming of requests + * and responses. + * @param exec This class is needed to execute code asynchronously. + * It is used below by the thenAsyncApply method. + */ + @Inject + public ExampleFilter(Materializer mat, Executor exec) { + super(mat); + this.exec = exec; + } + + @Override + public CompletionStage apply( + Function> next, + RequestHeader requestHeader) { + + return next.apply(requestHeader).thenApplyAsync( + result -> result.withHeader("X-ExampleFilter", "foo"), + exec + ); + } + +} diff --git a/play-framework/student-api/app/models/Student.java b/play-framework/student-api/app/models/Student.java new file mode 100644 index 0000000000..dc539767bd --- /dev/null +++ b/play-framework/student-api/app/models/Student.java @@ -0,0 +1,47 @@ +package models; +public class Student { + private String firstName; + private String lastName; + private int age; + private int id; + public Student(){} + public Student(String firstName, String lastName, int age) { + super(); + this.firstName = firstName; + this.lastName = lastName; + this.age = age; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public int getAge() { + return age; + } + + public void setAge(int age) { + this.age = age; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + +} diff --git a/play-framework/student-api/app/models/StudentStore.java b/play-framework/student-api/app/models/StudentStore.java new file mode 100644 index 0000000000..3290e141cd --- /dev/null +++ b/play-framework/student-api/app/models/StudentStore.java @@ -0,0 +1,52 @@ +package models; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class StudentStore { + private static StudentStore instance; + private Map students = new HashMap<>(); + + public static StudentStore getInstance() { + if (instance == null) + instance = new StudentStore(); + return instance; + } + + public Student addStudent(Student student) { + int id = students.size() + 1; + student.setId(id); + students.put(id, student); + return student; + } + + public Student getStudent(int id) { + if (students.containsKey(id)) + return students.get(id); + return null; + } + + public List getAllStudents() { + return new ArrayList(students.values()); + } + + public Student updateStudent(Student student) { + int id=student.getId(); + if (students.containsKey(id)) { + student.setId(id); + students.put(id, student); + return student; + } + return null; + } + + public boolean deleteStudent(int id) { + + if (!students.containsKey(id)) + return false; + students.remove(id); + return true; + + } +} \ No newline at end of file diff --git a/play-framework/student-api/app/services/ApplicationTimer.java b/play-framework/student-api/app/services/ApplicationTimer.java new file mode 100644 index 0000000000..a951562b1d --- /dev/null +++ b/play-framework/student-api/app/services/ApplicationTimer.java @@ -0,0 +1,50 @@ +package services; + +import java.time.Clock; +import java.time.Instant; +import java.util.concurrent.CompletableFuture; +import javax.inject.*; +import play.Logger; +import play.inject.ApplicationLifecycle; + +/** + * This class demonstrates how to run code when the + * application starts and stops. It starts a timer when the + * application starts. When the application stops it prints out how + * long the application was running for. + * + * This class is registered for Guice dependency injection in the + * {@link Module} class. We want the class to start when the application + * starts, so it is registered as an "eager singleton". See the code + * in the {@link Module} class to see how this happens. + * + * This class needs to run code when the server stops. It uses the + * application's {@link ApplicationLifecycle} to register a stop hook. + */ +@Singleton +public class ApplicationTimer { + + private final Clock clock; + private final ApplicationLifecycle appLifecycle; + private final Instant start; + + @Inject + public ApplicationTimer(Clock clock, ApplicationLifecycle appLifecycle) { + this.clock = clock; + this.appLifecycle = appLifecycle; + // This code is called when the application starts. + start = clock.instant(); + Logger.info("ApplicationTimer demo: Starting application at " + start); + + // When the application starts, register a stop hook with the + // ApplicationLifecycle object. The code inside the stop hook will + // be run when the application stops. + appLifecycle.addStopHook(() -> { + Instant stop = clock.instant(); + Long runningTime = stop.getEpochSecond() - start.getEpochSecond(); + Logger.info("ApplicationTimer demo: Stopping application at " + clock.instant() + " after " + runningTime + "s."); + return CompletableFuture.completedFuture(null); + }); + } + +} diff --git a/play-framework/student-api/app/services/AtomicCounter.java b/play-framework/student-api/app/services/AtomicCounter.java new file mode 100644 index 0000000000..41f741cbf7 --- /dev/null +++ b/play-framework/student-api/app/services/AtomicCounter.java @@ -0,0 +1,26 @@ +package services; + +import java.util.concurrent.atomic.AtomicInteger; +import javax.inject.*; + +/** + * This class is a concrete implementation of the {@link Counter} trait. + * It is configured for Guice dependency injection in the {@link Module} + * class. + * + * This class has a {@link Singleton} annotation because we need to make + * sure we only use one counter per application. Without this + * annotation we would get a new instance every time a {@link Counter} is + * injected. + */ +@Singleton +public class AtomicCounter implements Counter { + + private final AtomicInteger atomicCounter = new AtomicInteger(); + + @Override + public int nextCount() { + return atomicCounter.getAndIncrement(); + } + +} diff --git a/play-framework/student-api/app/services/Counter.java b/play-framework/student-api/app/services/Counter.java new file mode 100644 index 0000000000..dadad8b09d --- /dev/null +++ b/play-framework/student-api/app/services/Counter.java @@ -0,0 +1,13 @@ +package services; + +/** + * This interface demonstrates how to create a component that is injected + * into a controller. The interface represents a counter that returns a + * incremented number each time it is called. + * + * The {@link Modules} class binds this interface to the + * {@link AtomicCounter} implementation. + */ +public interface Counter { + int nextCount(); +} diff --git a/play-framework/student-api/app/util/Util.java b/play-framework/student-api/app/util/Util.java new file mode 100644 index 0000000000..3718b50677 --- /dev/null +++ b/play-framework/student-api/app/util/Util.java @@ -0,0 +1,17 @@ +package util; +import com.fasterxml.jackson.databind.node.ObjectNode; +import play.libs.Json; +import play.libs.Json.*; +import com.fasterxml.jackson.databind.JsonNode; + +public class Util{ + public static ObjectNode createResponse(Object response,boolean ok){ + ObjectNode result = Json.newObject(); + result.put("isSuccessfull", ok); + if(response instanceof String) + result.put("body",(String)response); + else result.put("body",(JsonNode)response); + + return result; + } +} \ No newline at end of file diff --git a/play-framework/student-api/app/views/index.scala.html b/play-framework/student-api/app/views/index.scala.html new file mode 100644 index 0000000000..4539f5a10b --- /dev/null +++ b/play-framework/student-api/app/views/index.scala.html @@ -0,0 +1,20 @@ +@* + * This template takes a single argument, a String containing a + * message to display. + *@ +@(message: String) + +@* + * Call the `main` template with two arguments. The first + * argument is a `String` with the title of the page, the second + * argument is an `Html` object containing the body of the page. + *@ +@main("Welcome to Play") { + + @* + * Get an `Html` object by calling the built-in Play welcome + * template and passing a `String` message. + *@ + @play20.welcome(message, style = "Java") + +} diff --git a/play-framework/student-api/app/views/main.scala.html b/play-framework/student-api/app/views/main.scala.html new file mode 100644 index 0000000000..9414f4be6e --- /dev/null +++ b/play-framework/student-api/app/views/main.scala.html @@ -0,0 +1,23 @@ +@* + * This template is called from the `index` template. This template + * handles the rendering of the page header and body tags. It takes + * two arguments, a `String` for the title of the page and an `Html` + * object to insert into the body of the page. + *@ +@(title: String)(content: Html) + + + + + @* Here's where we render the page title `String`. *@ + @title + + + + + + @* And here's where we render the `Html` object containing + * the page content. *@ + @content + + diff --git a/play-framework/student-api/bin/activator b/play-framework/student-api/bin/activator new file mode 100644 index 0000000000..a8b11d482f --- /dev/null +++ b/play-framework/student-api/bin/activator @@ -0,0 +1,397 @@ +#!/usr/bin/env bash + +### ------------------------------- ### +### Helper methods for BASH scripts ### +### ------------------------------- ### + +realpath () { +( + TARGET_FILE="$1" + FIX_CYGPATH="$2" + + cd "$(dirname "$TARGET_FILE")" + TARGET_FILE=$(basename "$TARGET_FILE") + + COUNT=0 + while [ -L "$TARGET_FILE" -a $COUNT -lt 100 ] + do + TARGET_FILE=$(readlink "$TARGET_FILE") + cd "$(dirname "$TARGET_FILE")" + TARGET_FILE=$(basename "$TARGET_FILE") + COUNT=$(($COUNT + 1)) + done + + # make sure we grab the actual windows path, instead of cygwin's path. + if [[ "x$FIX_CYGPATH" != "x" ]]; then + echo "$(cygwinpath "$(pwd -P)/$TARGET_FILE")" + else + echo "$(pwd -P)/$TARGET_FILE" + fi +) +} + + +# Uses uname to detect if we're in the odd cygwin environment. +is_cygwin() { + local os=$(uname -s) + case "$os" in + CYGWIN*) return 0 ;; + *) return 1 ;; + esac +} + +# TODO - Use nicer bash-isms here. +CYGWIN_FLAG=$(if is_cygwin; then echo true; else echo false; fi) + + +# This can fix cygwin style /cygdrive paths so we get the +# windows style paths. +cygwinpath() { + local file="$1" + if [[ "$CYGWIN_FLAG" == "true" ]]; then + echo $(cygpath -w $file) + else + echo $file + fi +} + +# Make something URI friendly +make_url() { + url="$1" + local nospaces=${url// /%20} + if is_cygwin; then + echo "/${nospaces//\\//}" + else + echo "$nospaces" + fi +} + +declare -a residual_args +declare -a java_args +declare -a scalac_args +declare -a sbt_commands +declare java_cmd=java +declare java_version +declare -r real_script_path="$(realpath "$0")" +declare -r sbt_home="$(realpath "$(dirname "$(dirname "$real_script_path")")")" +declare -r sbt_bin_dir="$(dirname "$real_script_path")" +declare -r app_version="1.3.10" + +declare -r script_name=activator +declare -r java_opts=( "${ACTIVATOR_OPTS[@]}" "${SBT_OPTS[@]}" "${JAVA_OPTS[@]}" "${java_opts[@]}" ) +userhome="$HOME" +if is_cygwin; then + # cygwin sets home to something f-d up, set to real windows homedir + userhome="$USERPROFILE" +fi +declare -r activator_user_home_dir="${userhome}/.activator" +declare -r java_opts_config_home="${activator_user_home_dir}/activatorconfig.txt" +declare -r java_opts_config_version="${activator_user_home_dir}/${app_version}/activatorconfig.txt" + +echoerr () { + echo 1>&2 "$@" +} +vlog () { + [[ $verbose || $debug ]] && echoerr "$@" +} +dlog () { + [[ $debug ]] && echoerr "$@" +} + +jar_file () { + echo "$(cygwinpath "${sbt_home}/libexec/activator-launch-${app_version}.jar")" +} + +acquire_sbt_jar () { + sbt_jar="$(jar_file)" + + if [[ ! -f "$sbt_jar" ]]; then + echoerr "Could not find launcher jar: $sbt_jar" + exit 2 + fi +} + +execRunner () { + # print the arguments one to a line, quoting any containing spaces + [[ $verbose || $debug ]] && echo "# Executing command line:" && { + for arg; do + if printf "%s\n" "$arg" | grep -q ' '; then + printf "\"%s\"\n" "$arg" + else + printf "%s\n" "$arg" + fi + done + echo "" + } + + # THis used to be exec, but we loose the ability to re-hook stty then + # for cygwin... Maybe we should flag the feature here... + "$@" +} + +addJava () { + dlog "[addJava] arg = '$1'" + java_args=( "${java_args[@]}" "$1" ) +} +addSbt () { + dlog "[addSbt] arg = '$1'" + sbt_commands=( "${sbt_commands[@]}" "$1" ) +} +addResidual () { + dlog "[residual] arg = '$1'" + residual_args=( "${residual_args[@]}" "$1" ) +} +addDebugger () { + addJava "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=$1" +} + +get_mem_opts () { + # if we detect any of these settings in ${JAVA_OPTS} we need to NOT output our settings. + # The reason is the Xms/Xmx, if they don't line up, cause errors. + if [[ "${JAVA_OPTS}" == *-Xmx* ]] || [[ "${JAVA_OPTS}" == *-Xms* ]] || [[ "${JAVA_OPTS}" == *-XX:MaxPermSize* ]] || [[ "${JAVA_OPTS}" == *-XX:MaxMetaspaceSize* ]] || [[ "${JAVA_OPTS}" == *-XX:ReservedCodeCacheSize* ]]; then + echo "" + else + # a ham-fisted attempt to move some memory settings in concert + # so they need not be messed around with individually. + local mem=${1:-1024} + local codecache=$(( $mem / 8 )) + (( $codecache > 128 )) || codecache=128 + (( $codecache < 512 )) || codecache=512 + local class_metadata_size=$(( $codecache * 2 )) + local class_metadata_opt=$([[ "$java_version" < "1.8" ]] && echo "MaxPermSize" || echo "MaxMetaspaceSize") + + echo "-Xms${mem}m -Xmx${mem}m -XX:ReservedCodeCacheSize=${codecache}m -XX:${class_metadata_opt}=${class_metadata_size}m" + fi +} + +require_arg () { + local type="$1" + local opt="$2" + local arg="$3" + if [[ -z "$arg" ]] || [[ "${arg:0:1}" == "-" ]]; then + echo "$opt requires <$type> argument" + exit 1 + fi +} + +is_function_defined() { + declare -f "$1" > /dev/null +} + +# If we're *not* running in a terminal, and we don't have any arguments, then we need to add the 'ui' parameter +detect_terminal_for_ui() { + [[ ! -t 0 ]] && [[ "${#residual_args}" == "0" ]] && { + addResidual "ui" + } + # SPECIAL TEST FOR MAC + [[ "$(uname)" == "Darwin" ]] && [[ "$HOME" == "$PWD" ]] && [[ "${#residual_args}" == "0" ]] && { + echo "Detected MAC OSX launched script...." + echo "Swapping to UI" + addResidual "ui" + } +} + +process_args () { + while [[ $# -gt 0 ]]; do + case "$1" in + -h|-help) usage; exit 1 ;; + -v|-verbose) verbose=1 && shift ;; + -d|-debug) debug=1 && shift ;; + + -ivy) require_arg path "$1" "$2" && addJava "-Dsbt.ivy.home=$2" && shift 2 ;; + -mem) require_arg integer "$1" "$2" && sbt_mem="$2" && shift 2 ;; + -jvm-debug) require_arg port "$1" "$2" && addDebugger $2 && shift 2 ;; + -batch) exec &1 | awk -F '"' '/version/ {print $2}') + vlog "[process_args] java_version = '$java_version'" +} + +# Detect that we have java installed. +checkJava() { + local required_version="$1" + # Now check to see if it's a good enough version + if [[ "$java_version" == "" ]]; then + echo + echo No java installations was detected. + echo Please go to http://www.java.com/getjava/ and download + echo + exit 1 + elif [[ ! "$java_version" > "$required_version" ]]; then + echo + echo The java installation you have is not up to date + echo $script_name requires at least version $required_version+, you have + echo version $java_version + echo + echo Please go to http://www.java.com/getjava/ and download + echo a valid Java Runtime and install before running $script_name. + echo + exit 1 + fi +} + + +run() { + # no jar? download it. + [[ -f "$sbt_jar" ]] || acquire_sbt_jar "$sbt_version" || { + # still no jar? uh-oh. + echo "Download failed. Obtain the sbt-launch.jar manually and place it at $sbt_jar" + exit 1 + } + + # process the combined args, then reset "$@" to the residuals + process_args "$@" + detect_terminal_for_ui + set -- "${residual_args[@]}" + argumentCount=$# + + # TODO - java check should be configurable... + checkJava "1.6" + + #If we're in cygwin, we should use the windows config, and terminal hacks + if [[ "$CYGWIN_FLAG" == "true" ]]; then + stty -icanon min 1 -echo > /dev/null 2>&1 + addJava "-Djline.terminal=jline.UnixTerminal" + addJava "-Dsbt.cygwin=true" + fi + + # run sbt + execRunner "$java_cmd" \ + "-Dactivator.home=$(make_url "$sbt_home")" \ + ${SBT_OPTS:-$default_sbt_opts} \ + $(get_mem_opts $sbt_mem) \ + ${JAVA_OPTS} \ + ${java_args[@]} \ + -jar "$sbt_jar" \ + "${sbt_commands[@]}" \ + "${residual_args[@]}" + + exit_code=$? + + # Clean up the terminal from cygwin hacks. + if [[ "$CYGWIN_FLAG" == "true" ]]; then + stty icanon echo > /dev/null 2>&1 + fi + exit $exit_code +} + + +declare -r noshare_opts="-Dsbt.global.base=project/.sbtboot -Dsbt.boot.directory=project/.boot -Dsbt.ivy.home=project/.ivy" +declare -r sbt_opts_file=".sbtopts" +declare -r etc_sbt_opts_file="${sbt_home}/conf/sbtopts" +declare -r win_sbt_opts_file="${sbt_home}/conf/sbtconfig.txt" + +usage() { + cat < path to global settings/plugins directory (default: ~/.sbt) + -sbt-boot path to shared boot directory (default: ~/.sbt/boot in 0.11 series) + -ivy path to local Ivy repository (default: ~/.ivy2) + -mem set memory options (default: $sbt_mem, which is $(get_mem_opts $sbt_mem)) + -no-share use all local caches; no sharing + -no-global uses global caches, but does not use global ~/.sbt directory. + -jvm-debug Turn on JVM debugging, open at the given port. + -batch Disable interactive mode + + # sbt version (default: from project/build.properties if present, else latest release) + -sbt-version use the specified version of sbt + -sbt-jar use the specified jar as the sbt launcher + -sbt-rc use an RC version of sbt + -sbt-snapshot use a snapshot version of sbt + + # java version (default: java from PATH, currently $(java -version 2>&1 | grep version)) + -java-home alternate JAVA_HOME + + # jvm options and output control + JAVA_OPTS environment variable, if unset uses "$java_opts" + SBT_OPTS environment variable, if unset uses "$default_sbt_opts" + ACTIVATOR_OPTS Environment variable, if unset uses "" + .sbtopts if this file exists in the current directory, it is + prepended to the runner args + /etc/sbt/sbtopts if this file exists, it is prepended to the runner args + -Dkey=val pass -Dkey=val directly to the java runtime + -J-X pass option -X directly to the java runtime + (-J is stripped) + -S-X add -X to sbt's scalacOptions (-S is stripped) + +In the case of duplicated or conflicting options, the order above +shows precedence: JAVA_OPTS lowest, command line options highest. +EOM +} + + + +process_my_args () { + while [[ $# -gt 0 ]]; do + case "$1" in + -no-colors) addJava "-Dsbt.log.noformat=true" && shift ;; + -no-share) addJava "$noshare_opts" && shift ;; + -no-global) addJava "-Dsbt.global.base=$(pwd)/project/.sbtboot" && shift ;; + -sbt-boot) require_arg path "$1" "$2" && addJava "-Dsbt.boot.directory=$2" && shift 2 ;; + -sbt-dir) require_arg path "$1" "$2" && addJava "-Dsbt.global.base=$2" && shift 2 ;; + -debug-inc) addJava "-Dxsbt.inc.debug=true" && shift ;; + -batch) exec ^&1') do ( + if %%~j==java set JAVAINSTALLED=1 + if %%~j==openjdk set JAVAINSTALLED=1 +) + +rem Detect the same thing about javac +if "%_JAVACCMD%"=="" ( + if not "%JAVA_HOME%"=="" ( + if exist "%JAVA_HOME%\bin\javac.exe" set "_JAVACCMD=%JAVA_HOME%\bin\javac.exe" + ) +) +if "%_JAVACCMD%"=="" set _JAVACCMD=javac +for /F %%j in ('"%_JAVACCMD%" -version 2^>^&1') do ( + if %%~j==javac set JAVACINSTALLED=1 +) + +rem BAT has no logical or, so we do it OLD SCHOOL! Oppan Redmond Style +set JAVAOK=true +if not defined JAVAINSTALLED set JAVAOK=false +if not defined JAVACINSTALLED set JAVAOK=false + +if "%JAVAOK%"=="false" ( + echo. + echo A Java JDK is not installed or can't be found. + if not "%JAVA_HOME%"=="" ( + echo JAVA_HOME = "%JAVA_HOME%" + ) + echo. + echo Please go to + echo http://www.oracle.com/technetwork/java/javase/downloads/index.html + echo and download a valid Java JDK and install before running Activator. + echo. + echo If you think this message is in error, please check + echo your environment variables to see if "java.exe" and "javac.exe" are + echo available via JAVA_HOME or PATH. + echo. + if defined DOUBLECLICKED pause + exit /B 1 +) + +rem Check what Java version is being used to determine what memory options to use +for /f "tokens=3" %%g in ('java -version 2^>^&1 ^| findstr /i "version"') do ( + set JAVA_VERSION=%%g +) + +rem Strips away the " characters +set JAVA_VERSION=%JAVA_VERSION:"=% + +rem TODO Check if there are existing mem settings in JAVA_OPTS/CFG_OPTS and use those instead of the below +for /f "delims=. tokens=1-3" %%v in ("%JAVA_VERSION%") do ( + set MAJOR=%%v + set MINOR=%%w + set BUILD=%%x + + set META_SIZE=-XX:MetaspaceSize=64M -XX:MaxMetaspaceSize=256M + if "!MINOR!" LSS "8" ( + set META_SIZE=-XX:PermSize=64M -XX:MaxPermSize=256M + ) + + set MEM_OPTS=!META_SIZE! + ) + +rem We use the value of the JAVA_OPTS environment variable if defined, rather than the config. +set _JAVA_OPTS=%JAVA_OPTS% +if "%_JAVA_OPTS%"=="" set _JAVA_OPTS=%CFG_OPTS% + +set DEBUG_OPTS= + +rem Loop through the arguments, building remaining args in args variable +set args= +:argsloop +if not "%~1"=="" ( + rem Checks if the argument contains "-D" and if true, adds argument 1 with 2 and puts an equal sign between them. + rem This is done since batch considers "=" to be a delimiter so we need to circumvent this behavior with a small hack. + set arg1=%~1 + if "!arg1:~0,2!"=="-D" ( + set "args=%args% "%~1"="%~2"" + shift + shift + goto argsloop + ) + + if "%~1"=="-jvm-debug" ( + if not "%~2"=="" ( + rem This piece of magic somehow checks that an argument is a number + for /F "delims=0123456789" %%i in ("%~2") do ( + set var="%%i" + ) + if defined var ( + rem Not a number, assume no argument given and default to 9999 + set JPDA_PORT=9999 + ) else ( + rem Port was given, shift arguments + set JPDA_PORT=%~2 + shift + ) + ) else ( + set JPDA_PORT=9999 + ) + shift + + set DEBUG_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=!JPDA_PORT! + goto argsloop + ) + rem else + set "args=%args% "%~1"" + shift + goto argsloop +) + +:run + +if "!args!"=="" ( + if defined DOUBLECLICKED ( + set CMDS="ui" + ) else set CMDS=!args! +) else set CMDS=!args! + +rem We add a / in front, so we get file:///C: instead of file://C: +rem Java considers the later a UNC path. +rem We also attempt a solid effort at making it URI friendly. +rem We don't even bother with UNC paths. +set JAVA_FRIENDLY_HOME_1=/!ACTIVATOR_HOME:\=/! +set JAVA_FRIENDLY_HOME=/!JAVA_FRIENDLY_HOME_1: =%%20! + +rem Checks if the command contains spaces to know if it should be wrapped in quotes or not +set NON_SPACED_CMD=%_JAVACMD: =% +if "%_JAVACMD%"=="%NON_SPACED_CMD%" %_JAVACMD% %DEBUG_OPTS% %MEM_OPTS% %ACTIVATOR_OPTS% %SBT_OPTS% %_JAVA_OPTS% "-Dactivator.home=%JAVA_FRIENDLY_HOME%" -jar "%ACTIVATOR_HOME%\libexec\%ACTIVATOR_LAUNCH_JAR%" %CMDS% +if NOT "%_JAVACMD%"=="%NON_SPACED_CMD%" "%_JAVACMD%" %DEBUG_OPTS% %MEM_OPTS% %ACTIVATOR_OPTS% %SBT_OPTS% %_JAVA_OPTS% "-Dactivator.home=%JAVA_FRIENDLY_HOME%" -jar "%ACTIVATOR_HOME%\libexec\%ACTIVATOR_LAUNCH_JAR%" %CMDS% + +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end + +@endlocal + +exit /B %ERROR_CODE% diff --git a/play-framework/student-api/build.sbt b/play-framework/student-api/build.sbt new file mode 100644 index 0000000000..0f5ea736f6 --- /dev/null +++ b/play-framework/student-api/build.sbt @@ -0,0 +1,13 @@ +name := """student-api""" + +version := "1.0-SNAPSHOT" + +lazy val root = (project in file(".")).enablePlugins(PlayJava) + +scalaVersion := "2.11.7" + +libraryDependencies ++= Seq( + javaJdbc, + cache, + javaWs +) diff --git a/play-framework/student-api/conf/application.conf b/play-framework/student-api/conf/application.conf new file mode 100644 index 0000000000..489d3f9b3e --- /dev/null +++ b/play-framework/student-api/conf/application.conf @@ -0,0 +1,353 @@ +# This is the main configuration file for the application. +# https://www.playframework.com/documentation/latest/ConfigFile +# ~~~~~ +# Play uses HOCON as its configuration file format. HOCON has a number +# of advantages over other config formats, but there are two things that +# can be used when modifying settings. +# +# You can include other configuration files in this main application.conf file: +#include "extra-config.conf" +# +# You can declare variables and substitute for them: +#mykey = ${some.value} +# +# And if an environment variable exists when there is no other subsitution, then +# HOCON will fall back to substituting environment variable: +#mykey = ${JAVA_HOME} + +## Akka +# https://www.playframework.com/documentation/latest/ScalaAkka#Configuration +# https://www.playframework.com/documentation/latest/JavaAkka#Configuration +# ~~~~~ +# Play uses Akka internally and exposes Akka Streams and actors in Websockets and +# other streaming HTTP responses. +akka { + # "akka.log-config-on-start" is extraordinarly useful because it log the complete + # configuration at INFO level, including defaults and overrides, so it s worth + # putting at the very top. + # + # Put the following in your conf/logback.xml file: + # + # + # + # And then uncomment this line to debug the configuration. + # + #log-config-on-start = true +} + +## Secret key +# http://www.playframework.com/documentation/latest/ApplicationSecret +# ~~~~~ +# The secret key is used to sign Play's session cookie. +# This must be changed for production, but we don't recommend you change it in this file. +play.crypto.secret = "changeme" + +## Modules +# https://www.playframework.com/documentation/latest/Modules +# ~~~~~ +# Control which modules are loaded when Play starts. Note that modules are +# the replacement for "GlobalSettings", which are deprecated in 2.5.x. +# Please see https://www.playframework.com/documentation/latest/GlobalSettings +# for more information. +# +# You can also extend Play functionality by using one of the publically available +# Play modules: https://playframework.com/documentation/latest/ModuleDirectory +play.modules { + # By default, Play will load any class called Module that is defined + # in the root package (the "app" directory), or you can define them + # explicitly below. + # If there are any built-in modules that you want to disable, you can list them here. + #enabled += my.application.Module + + # If there are any built-in modules that you want to disable, you can list them here. + #disabled += "" +} + +## IDE +# https://www.playframework.com/documentation/latest/IDE +# ~~~~~ +# Depending on your IDE, you can add a hyperlink for errors that will jump you +# directly to the code location in the IDE in dev mode. The following line makes +# use of the IntelliJ IDEA REST interface: +#play.editor="http://localhost:63342/api/file/?file=%s&line=%s" + +## Internationalisation +# https://www.playframework.com/documentation/latest/JavaI18N +# https://www.playframework.com/documentation/latest/ScalaI18N +# ~~~~~ +# Play comes with its own i18n settings, which allow the user's preferred language +# to map through to internal messages, or allow the language to be stored in a cookie. +play.i18n { + # The application languages + langs = [ "en" ] + + # Whether the language cookie should be secure or not + #langCookieSecure = true + + # Whether the HTTP only attribute of the cookie should be set to true + #langCookieHttpOnly = true +} + +## Play HTTP settings +# ~~~~~ +play.http { + ## Router + # https://www.playframework.com/documentation/latest/JavaRouting + # https://www.playframework.com/documentation/latest/ScalaRouting + # ~~~~~ + # Define the Router object to use for this application. + # This router will be looked up first when the application is starting up, + # so make sure this is the entry point. + # Furthermore, it's assumed your route file is named properly. + # So for an application router like `my.application.Router`, + # you may need to define a router file `conf/my.application.routes`. + # Default to Routes in the root package (aka "apps" folder) (and conf/routes) + #router = my.application.Router + + ## Action Creator + # https://www.playframework.com/documentation/latest/JavaActionCreator + # ~~~~~ + #actionCreator = null + + ## ErrorHandler + # https://www.playframework.com/documentation/latest/JavaRouting + # https://www.playframework.com/documentation/latest/ScalaRouting + # ~~~~~ + # If null, will attempt to load a class called ErrorHandler in the root package, + #errorHandler = null + + ## Filters + # https://www.playframework.com/documentation/latest/ScalaHttpFilters + # https://www.playframework.com/documentation/latest/JavaHttpFilters + # ~~~~~ + # Filters run code on every request. They can be used to perform + # common logic for all your actions, e.g. adding common headers. + # Defaults to "Filters" in the root package (aka "apps" folder) + # Alternatively you can explicitly register a class here. + #filters = my.application.Filters + + ## Session & Flash + # https://www.playframework.com/documentation/latest/JavaSessionFlash + # https://www.playframework.com/documentation/latest/ScalaSessionFlash + # ~~~~~ + session { + # Sets the cookie to be sent only over HTTPS. + #secure = true + + # Sets the cookie to be accessed only by the server. + #httpOnly = true + + # Sets the max-age field of the cookie to 5 minutes. + # NOTE: this only sets when the browser will discard the cookie. Play will consider any + # cookie value with a valid signature to be a valid session forever. To implement a server side session timeout, + # you need to put a timestamp in the session and check it at regular intervals to possibly expire it. + #maxAge = 300 + + # Sets the domain on the session cookie. + #domain = "example.com" + } + + flash { + # Sets the cookie to be sent only over HTTPS. + #secure = true + + # Sets the cookie to be accessed only by the server. + #httpOnly = true + } +} + +## Netty Provider +# https://www.playframework.com/documentation/latest/SettingsNetty +# ~~~~~ +play.server.netty { + # Whether the Netty wire should be logged + #log.wire = true + + # If you run Play on Linux, you can use Netty's native socket transport + # for higher performance with less garbage. + #transport = "native" +} + +## WS (HTTP Client) +# https://www.playframework.com/documentation/latest/ScalaWS#Configuring-WS +# ~~~~~ +# The HTTP client primarily used for REST APIs. The default client can be +# configured directly, but you can also create different client instances +# with customized settings. You must enable this by adding to build.sbt: +# +# libraryDependencies += ws // or javaWs if using java +# +play.ws { + # Sets HTTP requests not to follow 302 requests + #followRedirects = false + + # Sets the maximum number of open HTTP connections for the client. + #ahc.maxConnectionsTotal = 50 + + ## WS SSL + # https://www.playframework.com/documentation/latest/WsSSL + # ~~~~~ + ssl { + # Configuring HTTPS with Play WS does not require programming. You can + # set up both trustManager and keyManager for mutual authentication, and + # turn on JSSE debugging in development with a reload. + #debug.handshake = true + #trustManager = { + # stores = [ + # { type = "JKS", path = "exampletrust.jks" } + # ] + #} + } +} + +## Cache +# https://www.playframework.com/documentation/latest/JavaCache +# https://www.playframework.com/documentation/latest/ScalaCache +# ~~~~~ +# Play comes with an integrated cache API that can reduce the operational +# overhead of repeated requests. You must enable this by adding to build.sbt: +# +# libraryDependencies += cache +# +play.cache { + # If you want to bind several caches, you can bind the individually + #bindCaches = ["db-cache", "user-cache", "session-cache"] +} + +## Filters +# https://www.playframework.com/documentation/latest/Filters +# ~~~~~ +# There are a number of built-in filters that can be enabled and configured +# to give Play greater security. You must enable this by adding to build.sbt: +# +# libraryDependencies += filters +# +play.filters { + ## CORS filter configuration + # https://www.playframework.com/documentation/latest/CorsFilter + # ~~~~~ + # CORS is a protocol that allows web applications to make requests from the browser + # across different domains. + # NOTE: You MUST apply the CORS configuration before the CSRF filter, as CSRF has + # dependencies on CORS settings. + cors { + # Filter paths by a whitelist of path prefixes + #pathPrefixes = ["/some/path", ...] + + # The allowed origins. If null, all origins are allowed. + #allowedOrigins = ["http://www.example.com"] + + # The allowed HTTP methods. If null, all methods are allowed + #allowedHttpMethods = ["GET", "POST"] + } + + ## CSRF Filter + # https://www.playframework.com/documentation/latest/ScalaCsrf#Applying-a-global-CSRF-filter + # https://www.playframework.com/documentation/latest/JavaCsrf#Applying-a-global-CSRF-filter + # ~~~~~ + # Play supports multiple methods for verifying that a request is not a CSRF request. + # The primary mechanism is a CSRF token. This token gets placed either in the query string + # or body of every form submitted, and also gets placed in the users session. + # Play then verifies that both tokens are present and match. + csrf { + # Sets the cookie to be sent only over HTTPS + #cookie.secure = true + + # Defaults to CSRFErrorHandler in the root package. + #errorHandler = MyCSRFErrorHandler + } + + ## Security headers filter configuration + # https://www.playframework.com/documentation/latest/SecurityHeaders + # ~~~~~ + # Defines security headers that prevent XSS attacks. + # If enabled, then all options are set to the below configuration by default: + headers { + # The X-Frame-Options header. If null, the header is not set. + #frameOptions = "DENY" + + # The X-XSS-Protection header. If null, the header is not set. + #xssProtection = "1; mode=block" + + # The X-Content-Type-Options header. If null, the header is not set. + #contentTypeOptions = "nosniff" + + # The X-Permitted-Cross-Domain-Policies header. If null, the header is not set. + #permittedCrossDomainPolicies = "master-only" + + # The Content-Security-Policy header. If null, the header is not set. + #contentSecurityPolicy = "default-src 'self'" + } + + ## Allowed hosts filter configuration + # https://www.playframework.com/documentation/latest/AllowedHostsFilter + # ~~~~~ + # Play provides a filter that lets you configure which hosts can access your application. + # This is useful to prevent cache poisoning attacks. + hosts { + # Allow requests to example.com, its subdomains, and localhost:9000. + #allowed = [".example.com", "localhost:9000"] + } +} + +## Evolutions +# https://www.playframework.com/documentation/latest/Evolutions +# ~~~~~ +# Evolutions allows database scripts to be automatically run on startup in dev mode +# for database migrations. You must enable this by adding to build.sbt: +# +# libraryDependencies += evolutions +# +play.evolutions { + # You can disable evolutions for a specific datasource if necessary + #db.default.enabled = false +} + +## Database Connection Pool +# https://www.playframework.com/documentation/latest/SettingsJDBC +# ~~~~~ +# Play doesn't require a JDBC database to run, but you can easily enable one. +# +# libraryDependencies += jdbc +# +play.db { + # The combination of these two settings results in "db.default" as the + # default JDBC pool: + #config = "db" + #default = "default" + + # Play uses HikariCP as the default connection pool. You can override + # settings by changing the prototype: + prototype { + # Sets a fixed JDBC connection pool size of 50 + #hikaricp.minimumIdle = 50 + #hikaricp.maximumPoolSize = 50 + } +} + +## JDBC Datasource +# https://www.playframework.com/documentation/latest/JavaDatabase +# https://www.playframework.com/documentation/latest/ScalaDatabase +# ~~~~~ +# Once JDBC datasource is set up, you can work with several different +# database options: +# +# Slick (Scala preferred option): https://www.playframework.com/documentation/latest/PlaySlick +# JPA (Java preferred option): https://playframework.com/documentation/latest/JavaJPA +# EBean: https://playframework.com/documentation/latest/JavaEbean +# Anorm: https://www.playframework.com/documentation/latest/ScalaAnorm +# +db { + # You can declare as many datasources as you want. + # By convention, the default datasource is named `default` + + # https://www.playframework.com/documentation/latest/Developing-with-the-H2-Database + #default.driver = org.h2.Driver + #default.url = "jdbc:h2:mem:play" + #default.username = sa + #default.password = "" + + # You can turn on SQL logging for any datasource + # https://www.playframework.com/documentation/latest/Highlights25#Logging-SQL-statements + #default.logSql=true +} diff --git a/play-framework/student-api/conf/logback.xml b/play-framework/student-api/conf/logback.xml new file mode 100644 index 0000000000..86ec12c0af --- /dev/null +++ b/play-framework/student-api/conf/logback.xml @@ -0,0 +1,41 @@ + + + + + + + ${application.home:-.}/logs/application.log + + %date [%level] from %logger in %thread - %message%n%xException + + + + + + %coloredLevel %logger{15} - %message%n%xException{10} + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/play-framework/student-api/conf/routes b/play-framework/student-api/conf/routes new file mode 100644 index 0000000000..ab55792683 --- /dev/null +++ b/play-framework/student-api/conf/routes @@ -0,0 +1,12 @@ +# Routes +# This file defines all application routes (Higher priority routes first) +# ~~~~ + +GET / controllers.StudentController.listStudents() +POST /:id controllers.StudentController.retrieve(id:Int) +POST / controllers.StudentController.create() +PUT / controllers.StudentController.update() +DELETE /:id controllers.StudentController.delete(id:Int) + +# Map static resources from the /public folder to the /assets URL path +GET /assets/*file controllers.Assets.versioned(path="/public", file: Asset) diff --git a/play-framework/student-api/libexec/activator-launch-1.3.10.jar b/play-framework/student-api/libexec/activator-launch-1.3.10.jar new file mode 100644 index 0000000000000000000000000000000000000000..69050e7decce1da12207fe83f49afb1d26308acb GIT binary patch literal 1206790 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෼r~5(jyj8wH+RW- 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
  • cvo@>>KRA_ewqv=Wf=+zw@*R)auUuj>~FxBG# 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≠mUT4^gVSLIYPY(10O20 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%0D^~N4=L&Csc`hjNM)gX(^N7l|9&I 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%0D_4 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%0Dc+*Iir|$5g)tjq9S^{e4KSx7O-rHkCbrk)FO{-} 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�f#)5F{Hxyrc!4$O&gkOL}qw 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%0A5i%qjRz7Z0tR;E0NETJwv(85V^qp;G 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≥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 literal 0 HcmV?d00001 diff --git a/play-framework/student-api/project/build.properties b/play-framework/student-api/project/build.properties new file mode 100644 index 0000000000..6d9fa6badb --- /dev/null +++ b/play-framework/student-api/project/build.properties @@ -0,0 +1,4 @@ +#Activator-generated Properties +#Wed Sep 07 12:29:40 EAT 2016 +template.uuid=c373963b-f5ad-433b-8e74-178e7ae25b1c +sbt.version=0.13.11 diff --git a/play-framework/student-api/project/plugins.sbt b/play-framework/student-api/project/plugins.sbt new file mode 100644 index 0000000000..51c5b2a35a --- /dev/null +++ b/play-framework/student-api/project/plugins.sbt @@ -0,0 +1,21 @@ +// The Play plugin +addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.5.6") + +// Web plugins +addSbtPlugin("com.typesafe.sbt" % "sbt-coffeescript" % "1.0.0") +addSbtPlugin("com.typesafe.sbt" % "sbt-less" % "1.1.0") +addSbtPlugin("com.typesafe.sbt" % "sbt-jshint" % "1.0.3") +addSbtPlugin("com.typesafe.sbt" % "sbt-rjs" % "1.0.7") +addSbtPlugin("com.typesafe.sbt" % "sbt-digest" % "1.1.0") +addSbtPlugin("com.typesafe.sbt" % "sbt-mocha" % "1.1.0") +addSbtPlugin("org.irundaia.sbt" % "sbt-sassify" % "1.4.2") + +// Play enhancer - this automatically generates getters/setters for public fields +// and rewrites accessors of these fields to use the getters/setters. Remove this +// plugin if you prefer not to have this feature, or disable on a per project +// basis using disablePlugins(PlayEnhancer) in your build.sbt +addSbtPlugin("com.typesafe.sbt" % "sbt-play-enhancer" % "1.1.0") + +// Play Ebean support, to enable, uncomment this line, and enable in your build.sbt using +// enablePlugins(PlayEbean). +// addSbtPlugin("com.typesafe.sbt" % "sbt-play-ebean" % "1.0.0") diff --git a/play-framework/student-api/public/images/favicon.png b/play-framework/student-api/public/images/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..c7d92d2ae47434d9a61c90bc205e099b673b9dd5 GIT binary patch literal 687 zcmV;g0#N;lP)ezT{T_ZJ?}AL z5NC{NW(ESID=>(O3&Eg8 zmA9J&6c`h4_f6L;=bU>_H8aNG`kfvCj9zomNt)?O;rzWqZs0LEt%1WB218%1fo9uB zsW^yhBR7C(mqN%GEK9&msg0~ zWY?#bf4q8G-~2KttQZ($odJvy&_-~f?9*ThK@fwR$U^1)p*8=_+^3BXx0$i1BC8XC zr21u6D5nVK&^!dOAw&|1E;qC3uFNj3*Jj#&%Oje@0D-nhfmM*o%^5f}-pxQ07(95H z3|LoV>V19w#rLgmRmtVy9!T3M3FUE3><0T8&b3yEsWcLW`0(=1+qsqc(k(ymBLK0h zK!6(6$7MX~M`-QA2$wk7n(7hhkJ}4Rwi-Vd(_ZFX1Yk7TXuB0IJYpo@kLb2G8m)E{ z`9v=!hi}fOytKckfN^C@6+Z*+MVI9-W_p@_3yyR#UYc0FTpD}i#k>c!wYCS)4v@E$ zchZCo=zV@)`v^$;V18ixdjFMY#q^2$wEX%{f(XD8POnsn$bpbClpC@hPxjzyO>pY|*pF3UU2tYcCN?rUk{Sskej70Mmu9vPwMYhO1m{AxAt(zqDT|0jP7FaX=6 V`?~}E4H^Id002ovPDHLkV1hC)G==~G literal 0 HcmV?d00001 diff --git a/play-framework/student-api/public/javascripts/hello.js b/play-framework/student-api/public/javascripts/hello.js new file mode 100644 index 0000000000..02ee13c7ca --- /dev/null +++ b/play-framework/student-api/public/javascripts/hello.js @@ -0,0 +1,3 @@ +if (window.console) { + console.log("Welcome to your Play application's JavaScript!"); +} diff --git a/play-framework/student-api/public/stylesheets/main.css b/play-framework/student-api/public/stylesheets/main.css new file mode 100644 index 0000000000..e69de29bb2 diff --git a/play-framework/student-api/test/ApplicationTest.java b/play-framework/student-api/test/ApplicationTest.java new file mode 100644 index 0000000000..3d7c4875aa --- /dev/null +++ b/play-framework/student-api/test/ApplicationTest.java @@ -0,0 +1,45 @@ +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.fasterxml.jackson.databind.JsonNode; +import org.junit.*; + +import play.mvc.*; +import play.test.*; +import play.data.DynamicForm; +import play.data.validation.ValidationError; +import play.data.validation.Constraints.RequiredValidator; +import play.i18n.Lang; +import play.libs.F; +import play.libs.F.*; +import play.twirl.api.Content; + +import static play.test.Helpers.*; +import static org.junit.Assert.*; + + +/** + * + * Simple (JUnit) tests that can call all parts of a play app. + * If you are interested in mocking a whole application, see the wiki for more details. + * + */ +public class ApplicationTest { + + @Test + public void simpleCheck() { + int a = 1 + 1; + assertEquals(2, a); + } + + @Test + public void renderTemplate() { + Content html = views.html.index.render("Your new application is ready."); + assertEquals("text/html", html.contentType()); + assertTrue(html.body().contains("Your new application is ready.")); + } + + +} diff --git a/play-framework/student-api/test/IntegrationTest.java b/play-framework/student-api/test/IntegrationTest.java new file mode 100644 index 0000000000..c53c71e124 --- /dev/null +++ b/play-framework/student-api/test/IntegrationTest.java @@ -0,0 +1,25 @@ +import org.junit.*; + +import play.mvc.*; +import play.test.*; + +import static play.test.Helpers.*; +import static org.junit.Assert.*; + +import static org.fluentlenium.core.filter.FilterConstructor.*; + +public class IntegrationTest { + + /** + * add your integration test here + * in this example we just check if the welcome page is being shown + */ + @Test + public void test() { + running(testServer(3333, fakeApplication(inMemoryDatabase())), HTMLUNIT, browser -> { + browser.goTo("http://localhost:3333"); + assertTrue(browser.pageSource().contains("Your new application is ready.")); + }); + } + +} From 2da3ca4e7cf6a131bbbc47fa826b99970a983e08 Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Tue, 13 Sep 2016 23:20:44 +0300 Subject: [PATCH 093/265] update MyUser and User constructor --- .../baeldung/persistence/model/MyUser.java | 26 ------------------- .../security/MyUserDetailsService.java | 3 ++- .../baeldung/user/service/MyUserService.java | 2 -- .../main/java/org/baeldung/web/MyUserDto.java | 14 +--------- .../main/webapp/WEB-INF/views/register.jsp | 1 - 5 files changed, 3 insertions(+), 43 deletions(-) diff --git a/spring-jpa/src/main/java/org/baeldung/persistence/model/MyUser.java b/spring-jpa/src/main/java/org/baeldung/persistence/model/MyUser.java index 0a097f2782..804d391641 100644 --- a/spring-jpa/src/main/java/org/baeldung/persistence/model/MyUser.java +++ b/spring-jpa/src/main/java/org/baeldung/persistence/model/MyUser.java @@ -15,16 +15,12 @@ public class MyUser { @GeneratedValue(strategy = GenerationType.AUTO) private int id; - private String name; - @Column(unique = true, nullable = false) private String username; @Column(nullable = false) private String password; - private boolean enabled; - public MyUser() { } @@ -36,14 +32,6 @@ public class MyUser { this.id = id; } - public String getName() { - return name; - } - - public void setName(final String name) { - this.name = name; - } - public String getUsername() { return username; } @@ -59,18 +47,4 @@ public class MyUser { public void setPassword(final String password) { this.password = password; } - - public boolean isEnabled() { - return enabled; - } - - public void setEnabled(final boolean enabled) { - this.enabled = enabled; - } - - @Override - public String toString() { - return "MyUser [name=" + name + ", username=" + username + ", password=" + password + ", enabled=" + enabled + "]"; - } - } diff --git a/spring-jpa/src/main/java/org/baeldung/security/MyUserDetailsService.java b/spring-jpa/src/main/java/org/baeldung/security/MyUserDetailsService.java index 21e3985bac..4c02f53d20 100644 --- a/spring-jpa/src/main/java/org/baeldung/security/MyUserDetailsService.java +++ b/spring-jpa/src/main/java/org/baeldung/security/MyUserDetailsService.java @@ -8,6 +8,7 @@ import org.baeldung.user.dao.MyUserDAO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; @@ -29,7 +30,7 @@ public class MyUserDetailsService implements UserDetailsService { else { final Collection authorities = new ArrayList<>(); authorities.add(new SimpleGrantedAuthority("ROLE_USER")); - return new org.springframework.security.core.userdetails.User(user.getUsername(), user.getPassword(), user.isEnabled(), true, true, true, authorities); + return new User(user.getUsername(), user.getPassword(), authorities); } } diff --git a/spring-jpa/src/main/java/org/baeldung/user/service/MyUserService.java b/spring-jpa/src/main/java/org/baeldung/user/service/MyUserService.java index edbb1651a3..f4705f3193 100644 --- a/spring-jpa/src/main/java/org/baeldung/user/service/MyUserService.java +++ b/spring-jpa/src/main/java/org/baeldung/user/service/MyUserService.java @@ -26,8 +26,6 @@ public class MyUserService { user.setUsername(accountDto.getUsername()); user.setPassword(passwordEncoder.encode(accountDto.getPassword())); - user.setName(accountDto.getName()); - user.setEnabled(true); return myUserDAO.save(user); } diff --git a/spring-jpa/src/main/java/org/baeldung/web/MyUserDto.java b/spring-jpa/src/main/java/org/baeldung/web/MyUserDto.java index ec95ec43bf..c572208913 100644 --- a/spring-jpa/src/main/java/org/baeldung/web/MyUserDto.java +++ b/spring-jpa/src/main/java/org/baeldung/web/MyUserDto.java @@ -8,10 +8,6 @@ public class MyUserDto { @Size(min = 1) private String username; - @NotNull - @Size(min = 1) - private String name; - private String password; public String getUsername() { @@ -21,15 +17,7 @@ public class MyUserDto { public void setUsername(final String username) { this.username = username; } - - public String getName() { - return name; - } - - public void setName(final String name) { - this.name = name; - } - + public String getPassword() { return password; } diff --git a/spring-jpa/src/main/webapp/WEB-INF/views/register.jsp b/spring-jpa/src/main/webapp/WEB-INF/views/register.jsp index 68b3ac14b0..e6e9d373a0 100644 --- a/spring-jpa/src/main/webapp/WEB-INF/views/register.jsp +++ b/spring-jpa/src/main/webapp/WEB-INF/views/register.jsp @@ -16,7 +16,6 @@ Register here:

    Username:
    Password:
    -Name:

    From 141b943dc805bf114e82582bc32588e38ba32f35 Mon Sep 17 00:00:00 2001 From: Ivan Paolillo Date: Wed, 14 Sep 2016 11:14:50 +0200 Subject: [PATCH 094/265] Fix to batch processing example --- .../batch-job/.mvn/wrapper/maven-wrapper.jar | Bin 49502 -> 0 bytes .../.mvn/wrapper/maven-wrapper.properties | 1 - .../spring/cloud/BatchJobApplicationTests.java | 16 ++++++++++++++++ 3 files changed, 16 insertions(+), 1 deletion(-) delete mode 100644 spring-cloud-data-flow/batch-job/.mvn/wrapper/maven-wrapper.jar delete mode 100644 spring-cloud-data-flow/batch-job/.mvn/wrapper/maven-wrapper.properties create mode 100644 spring-cloud-data-flow/batch-job/src/test/java/org/baeldung/spring/cloud/BatchJobApplicationTests.java diff --git a/spring-cloud-data-flow/batch-job/.mvn/wrapper/maven-wrapper.jar b/spring-cloud-data-flow/batch-job/.mvn/wrapper/maven-wrapper.jar deleted file mode 100644 index 5fd4d5023f1463b5ba3970e33c460c1eb26d748d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49502 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%0A$pwhjXzyA0ZzErH{1@M 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 OJOEd-=rxTO#Qy`$*1Hh^ diff --git a/spring-cloud-data-flow/batch-job/.mvn/wrapper/maven-wrapper.properties b/spring-cloud-data-flow/batch-job/.mvn/wrapper/maven-wrapper.properties deleted file mode 100644 index c954cec91c..0000000000 --- a/spring-cloud-data-flow/batch-job/.mvn/wrapper/maven-wrapper.properties +++ /dev/null @@ -1 +0,0 @@ -distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.3.9/apache-maven-3.3.9-bin.zip diff --git a/spring-cloud-data-flow/batch-job/src/test/java/org/baeldung/spring/cloud/BatchJobApplicationTests.java b/spring-cloud-data-flow/batch-job/src/test/java/org/baeldung/spring/cloud/BatchJobApplicationTests.java new file mode 100644 index 0000000000..5f18ec75c4 --- /dev/null +++ b/spring-cloud-data-flow/batch-job/src/test/java/org/baeldung/spring/cloud/BatchJobApplicationTests.java @@ -0,0 +1,16 @@ +package org.baeldung.spring.cloud; + +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 BatchJobApplicationTests { + + @Test + public void contextLoads() { + } + +} From 1c02296a0f6b0040f56f9eed55c7f25cbcb25ed9 Mon Sep 17 00:00:00 2001 From: Ivan Paolillo Date: Wed, 14 Sep 2016 15:43:01 +0200 Subject: [PATCH 095/265] Removed some unneeded file --- spring-cloud-data-flow/batch-job/mvnw | 233 ------------------ spring-cloud-data-flow/batch-job/mvnw.cmd | 145 ----------- .../.mvn/wrapper/maven-wrapper.jar | Bin 49502 -> 0 bytes .../.mvn/wrapper/maven-wrapper.properties | 1 - spring-cloud-data-flow/data-flow-server/mvnw | 233 ------------------ .../data-flow-server/mvnw.cmd | 145 ----------- .../.mvn/wrapper/maven-wrapper.jar | Bin 49502 -> 0 bytes .../.mvn/wrapper/maven-wrapper.properties | 1 - spring-cloud-data-flow/data-flow-shell/mvnw | 233 ------------------ .../data-flow-shell/mvnw.cmd | 145 ----------- .../log-sink/.mvn/wrapper/maven-wrapper.jar | Bin 49502 -> 0 bytes .../.mvn/wrapper/maven-wrapper.properties | 1 - spring-cloud-data-flow/log-sink/mvnw | 233 ------------------ spring-cloud-data-flow/log-sink/mvnw.cmd | 145 ----------- .../.mvn/wrapper/maven-wrapper.jar | Bin 49502 -> 0 bytes .../.mvn/wrapper/maven-wrapper.properties | 1 - spring-cloud-data-flow/time-processor/mvnw | 233 ------------------ .../time-processor/mvnw.cmd | 145 ----------- .../.mvn/wrapper/maven-wrapper.jar | Bin 49502 -> 0 bytes .../.mvn/wrapper/maven-wrapper.properties | 1 - spring-cloud-data-flow/time-source/mvnw | 233 ------------------ spring-cloud-data-flow/time-source/mvnw.cmd | 145 ----------- 22 files changed, 2273 deletions(-) delete mode 100644 spring-cloud-data-flow/batch-job/mvnw delete mode 100644 spring-cloud-data-flow/batch-job/mvnw.cmd delete mode 100644 spring-cloud-data-flow/data-flow-server/.mvn/wrapper/maven-wrapper.jar delete mode 100644 spring-cloud-data-flow/data-flow-server/.mvn/wrapper/maven-wrapper.properties delete mode 100644 spring-cloud-data-flow/data-flow-server/mvnw delete mode 100644 spring-cloud-data-flow/data-flow-server/mvnw.cmd delete mode 100644 spring-cloud-data-flow/data-flow-shell/.mvn/wrapper/maven-wrapper.jar delete mode 100644 spring-cloud-data-flow/data-flow-shell/.mvn/wrapper/maven-wrapper.properties delete mode 100644 spring-cloud-data-flow/data-flow-shell/mvnw delete mode 100644 spring-cloud-data-flow/data-flow-shell/mvnw.cmd delete mode 100644 spring-cloud-data-flow/log-sink/.mvn/wrapper/maven-wrapper.jar delete mode 100644 spring-cloud-data-flow/log-sink/.mvn/wrapper/maven-wrapper.properties delete mode 100644 spring-cloud-data-flow/log-sink/mvnw delete mode 100644 spring-cloud-data-flow/log-sink/mvnw.cmd delete mode 100644 spring-cloud-data-flow/time-processor/.mvn/wrapper/maven-wrapper.jar delete mode 100644 spring-cloud-data-flow/time-processor/.mvn/wrapper/maven-wrapper.properties delete mode 100644 spring-cloud-data-flow/time-processor/mvnw delete mode 100644 spring-cloud-data-flow/time-processor/mvnw.cmd delete mode 100644 spring-cloud-data-flow/time-source/.mvn/wrapper/maven-wrapper.jar delete mode 100644 spring-cloud-data-flow/time-source/.mvn/wrapper/maven-wrapper.properties delete mode 100644 spring-cloud-data-flow/time-source/mvnw delete mode 100644 spring-cloud-data-flow/time-source/mvnw.cmd diff --git a/spring-cloud-data-flow/batch-job/mvnw b/spring-cloud-data-flow/batch-job/mvnw deleted file mode 100644 index a1ba1bf554..0000000000 --- a/spring-cloud-data-flow/batch-job/mvnw +++ /dev/null @@ -1,233 +0,0 @@ -#!/bin/sh -# ---------------------------------------------------------------------------- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# ---------------------------------------------------------------------------- - -# ---------------------------------------------------------------------------- -# Maven2 Start Up Batch script -# -# Required ENV vars: -# ------------------ -# JAVA_HOME - location of a JDK home dir -# -# Optional ENV vars -# ----------------- -# M2_HOME - location of maven2's installed home dir -# MAVEN_OPTS - parameters passed to the Java VM when running Maven -# e.g. to debug Maven itself, use -# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -# MAVEN_SKIP_RC - flag to disable loading of mavenrc files -# ---------------------------------------------------------------------------- - -if [ -z "$MAVEN_SKIP_RC" ] ; then - - if [ -f /etc/mavenrc ] ; then - . /etc/mavenrc - fi - - if [ -f "$HOME/.mavenrc" ] ; then - . "$HOME/.mavenrc" - fi - -fi - -# OS specific support. $var _must_ be set to either true or false. -cygwin=false; -darwin=false; -mingw=false -case "`uname`" in - CYGWIN*) cygwin=true ;; - MINGW*) mingw=true;; - Darwin*) darwin=true - # - # Look for the Apple JDKs first to preserve the existing behaviour, and then look - # for the new JDKs provided by Oracle. - # - if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK ] ; then - # - # Apple JDKs - # - export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home - fi - - if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Java/JavaVirtualMachines/CurrentJDK ] ; then - # - # Apple JDKs - # - export JAVA_HOME=/System/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home - fi - - if [ -z "$JAVA_HOME" ] && [ -L "/Library/Java/JavaVirtualMachines/CurrentJDK" ] ; then - # - # Oracle JDKs - # - export JAVA_HOME=/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home - fi - - if [ -z "$JAVA_HOME" ] && [ -x "/usr/libexec/java_home" ]; then - # - # Apple JDKs - # - export JAVA_HOME=`/usr/libexec/java_home` - fi - ;; -esac - -if [ -z "$JAVA_HOME" ] ; then - if [ -r /etc/gentoo-release ] ; then - JAVA_HOME=`java-config --jre-home` - fi -fi - -if [ -z "$M2_HOME" ] ; then - ## resolve links - $0 may be a link to maven's home - PRG="$0" - - # need this for relative symlinks - while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG="`dirname "$PRG"`/$link" - fi - done - - saveddir=`pwd` - - M2_HOME=`dirname "$PRG"`/.. - - # make it fully qualified - M2_HOME=`cd "$M2_HOME" && pwd` - - cd "$saveddir" - # echo Using m2 at $M2_HOME -fi - -# For Cygwin, ensure paths are in UNIX format before anything is touched -if $cygwin ; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --unix "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --unix "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --unix "$CLASSPATH"` -fi - -# For Migwn, ensure paths are in UNIX format before anything is touched -if $mingw ; then - [ -n "$M2_HOME" ] && - M2_HOME="`(cd "$M2_HOME"; pwd)`" - [ -n "$JAVA_HOME" ] && - JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" - # TODO classpath? -fi - -if [ -z "$JAVA_HOME" ]; then - javaExecutable="`which javac`" - if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then - # readlink(1) is not available as standard on Solaris 10. - readLink=`which readlink` - if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then - if $darwin ; then - javaHome="`dirname \"$javaExecutable\"`" - javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" - else - javaExecutable="`readlink -f \"$javaExecutable\"`" - fi - javaHome="`dirname \"$javaExecutable\"`" - javaHome=`expr "$javaHome" : '\(.*\)/bin'` - JAVA_HOME="$javaHome" - export JAVA_HOME - fi - fi -fi - -if [ -z "$JAVACMD" ] ; then - if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - else - JAVACMD="`which java`" - fi -fi - -if [ ! -x "$JAVACMD" ] ; then - echo "Error: JAVA_HOME is not defined correctly." >&2 - echo " We cannot execute $JAVACMD" >&2 - exit 1 -fi - -if [ -z "$JAVA_HOME" ] ; then - echo "Warning: JAVA_HOME environment variable is not set." -fi - -CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher - -# For Cygwin, switch paths to Windows format before running java -if $cygwin; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --path --windows "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --windows "$CLASSPATH"` -fi - -# traverses directory structure from process work directory to filesystem root -# first directory with .mvn subdirectory is considered project base directory -find_maven_basedir() { - local basedir=$(pwd) - local wdir=$(pwd) - while [ "$wdir" != '/' ] ; do - if [ -d "$wdir"/.mvn ] ; then - basedir=$wdir - break - fi - wdir=$(cd "$wdir/.."; pwd) - done - echo "${basedir}" -} - -# concatenates all lines of a file -concat_lines() { - if [ -f "$1" ]; then - echo "$(tr -s '\n' ' ' < "$1")" - fi -} - -export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-$(find_maven_basedir)} -MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" - -# Provide a "standardized" way to retrieve the CLI args that will -# work with both Windows and non-Windows executions. -MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" -export MAVEN_CMD_LINE_ARGS - -WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -exec "$JAVACMD" \ - $MAVEN_OPTS \ - -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ - "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ - ${WRAPPER_LAUNCHER} "$@" diff --git a/spring-cloud-data-flow/batch-job/mvnw.cmd b/spring-cloud-data-flow/batch-job/mvnw.cmd deleted file mode 100644 index 2b934e89dd..0000000000 --- a/spring-cloud-data-flow/batch-job/mvnw.cmd +++ /dev/null @@ -1,145 +0,0 @@ -@REM ---------------------------------------------------------------------------- -@REM Licensed to the Apache Software Foundation (ASF) under one -@REM or more contributor license agreements. See the NOTICE file -@REM distributed with this work for additional information -@REM regarding copyright ownership. The ASF licenses this file -@REM to you under the Apache License, Version 2.0 (the -@REM "License"); you may not use this file except in compliance -@REM with the License. You may obtain a copy of the License at -@REM -@REM http://www.apache.org/licenses/LICENSE-2.0 -@REM -@REM Unless required by applicable law or agreed to in writing, -@REM software distributed under the License is distributed on an -@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -@REM KIND, either express or implied. See the License for the -@REM specific language governing permissions and limitations -@REM under the License. -@REM ---------------------------------------------------------------------------- - -@REM ---------------------------------------------------------------------------- -@REM Maven2 Start Up Batch script -@REM -@REM Required ENV vars: -@REM JAVA_HOME - location of a JDK home dir -@REM -@REM Optional ENV vars -@REM M2_HOME - location of maven2's installed home dir -@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands -@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending -@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven -@REM e.g. to debug Maven itself, use -@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files -@REM ---------------------------------------------------------------------------- - -@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' -@echo off -@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' -@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% - -@REM set %HOME% to equivalent of $HOME -if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") - -@REM Execute a user defined script before this one -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre -@REM check for pre script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" -if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" -:skipRcPre - -@setlocal - -set ERROR_CODE=0 - -@REM To isolate internal variables from possible post scripts, we use another setlocal -@setlocal - -@REM ==== START VALIDATION ==== -if not "%JAVA_HOME%" == "" goto OkJHome - -echo. -echo Error: JAVA_HOME not found in your environment. >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -:OkJHome -if exist "%JAVA_HOME%\bin\java.exe" goto init - -echo. -echo Error: JAVA_HOME is set to an invalid directory. >&2 -echo JAVA_HOME = "%JAVA_HOME%" >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -@REM ==== END VALIDATION ==== - -:init - -set MAVEN_CMD_LINE_ARGS=%* - -@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". -@REM Fallback to current working directory if not found. - -set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% -IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir - -set EXEC_DIR=%CD% -set WDIR=%EXEC_DIR% -:findBaseDir -IF EXIST "%WDIR%"\.mvn goto baseDirFound -cd .. -IF "%WDIR%"=="%CD%" goto baseDirNotFound -set WDIR=%CD% -goto findBaseDir - -:baseDirFound -set MAVEN_PROJECTBASEDIR=%WDIR% -cd "%EXEC_DIR%" -goto endDetectBaseDir - -:baseDirNotFound -set MAVEN_PROJECTBASEDIR=%EXEC_DIR% -cd "%EXEC_DIR%" - -:endDetectBaseDir - -IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig - -@setlocal EnableExtensions EnableDelayedExpansion -for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a -@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% - -:endReadAdditionalConfig - -SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" - -set WRAPPER_JAR="".\.mvn\wrapper\maven-wrapper.jar"" -set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CMD_LINE_ARGS% -if ERRORLEVEL 1 goto error -goto end - -:error -set ERROR_CODE=1 - -:end -@endlocal & set ERROR_CODE=%ERROR_CODE% - -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost -@REM check for post script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" -if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" -:skipRcPost - -@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' -if "%MAVEN_BATCH_PAUSE%" == "on" pause - -if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% - -exit /B %ERROR_CODE% \ No newline at end of file diff --git a/spring-cloud-data-flow/data-flow-server/.mvn/wrapper/maven-wrapper.jar b/spring-cloud-data-flow/data-flow-server/.mvn/wrapper/maven-wrapper.jar deleted file mode 100644 index 5fd4d5023f1463b5ba3970e33c460c1eb26d748d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49502 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%0A$pwhjXzyA0ZzErH{1@M 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 OJOEd-=rxTO#Qy`$*1Hh^ diff --git a/spring-cloud-data-flow/data-flow-server/.mvn/wrapper/maven-wrapper.properties b/spring-cloud-data-flow/data-flow-server/.mvn/wrapper/maven-wrapper.properties deleted file mode 100644 index c954cec91c..0000000000 --- a/spring-cloud-data-flow/data-flow-server/.mvn/wrapper/maven-wrapper.properties +++ /dev/null @@ -1 +0,0 @@ -distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.3.9/apache-maven-3.3.9-bin.zip diff --git a/spring-cloud-data-flow/data-flow-server/mvnw b/spring-cloud-data-flow/data-flow-server/mvnw deleted file mode 100644 index a1ba1bf554..0000000000 --- a/spring-cloud-data-flow/data-flow-server/mvnw +++ /dev/null @@ -1,233 +0,0 @@ -#!/bin/sh -# ---------------------------------------------------------------------------- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# ---------------------------------------------------------------------------- - -# ---------------------------------------------------------------------------- -# Maven2 Start Up Batch script -# -# Required ENV vars: -# ------------------ -# JAVA_HOME - location of a JDK home dir -# -# Optional ENV vars -# ----------------- -# M2_HOME - location of maven2's installed home dir -# MAVEN_OPTS - parameters passed to the Java VM when running Maven -# e.g. to debug Maven itself, use -# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -# MAVEN_SKIP_RC - flag to disable loading of mavenrc files -# ---------------------------------------------------------------------------- - -if [ -z "$MAVEN_SKIP_RC" ] ; then - - if [ -f /etc/mavenrc ] ; then - . /etc/mavenrc - fi - - if [ -f "$HOME/.mavenrc" ] ; then - . "$HOME/.mavenrc" - fi - -fi - -# OS specific support. $var _must_ be set to either true or false. -cygwin=false; -darwin=false; -mingw=false -case "`uname`" in - CYGWIN*) cygwin=true ;; - MINGW*) mingw=true;; - Darwin*) darwin=true - # - # Look for the Apple JDKs first to preserve the existing behaviour, and then look - # for the new JDKs provided by Oracle. - # - if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK ] ; then - # - # Apple JDKs - # - export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home - fi - - if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Java/JavaVirtualMachines/CurrentJDK ] ; then - # - # Apple JDKs - # - export JAVA_HOME=/System/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home - fi - - if [ -z "$JAVA_HOME" ] && [ -L "/Library/Java/JavaVirtualMachines/CurrentJDK" ] ; then - # - # Oracle JDKs - # - export JAVA_HOME=/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home - fi - - if [ -z "$JAVA_HOME" ] && [ -x "/usr/libexec/java_home" ]; then - # - # Apple JDKs - # - export JAVA_HOME=`/usr/libexec/java_home` - fi - ;; -esac - -if [ -z "$JAVA_HOME" ] ; then - if [ -r /etc/gentoo-release ] ; then - JAVA_HOME=`java-config --jre-home` - fi -fi - -if [ -z "$M2_HOME" ] ; then - ## resolve links - $0 may be a link to maven's home - PRG="$0" - - # need this for relative symlinks - while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG="`dirname "$PRG"`/$link" - fi - done - - saveddir=`pwd` - - M2_HOME=`dirname "$PRG"`/.. - - # make it fully qualified - M2_HOME=`cd "$M2_HOME" && pwd` - - cd "$saveddir" - # echo Using m2 at $M2_HOME -fi - -# For Cygwin, ensure paths are in UNIX format before anything is touched -if $cygwin ; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --unix "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --unix "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --unix "$CLASSPATH"` -fi - -# For Migwn, ensure paths are in UNIX format before anything is touched -if $mingw ; then - [ -n "$M2_HOME" ] && - M2_HOME="`(cd "$M2_HOME"; pwd)`" - [ -n "$JAVA_HOME" ] && - JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" - # TODO classpath? -fi - -if [ -z "$JAVA_HOME" ]; then - javaExecutable="`which javac`" - if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then - # readlink(1) is not available as standard on Solaris 10. - readLink=`which readlink` - if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then - if $darwin ; then - javaHome="`dirname \"$javaExecutable\"`" - javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" - else - javaExecutable="`readlink -f \"$javaExecutable\"`" - fi - javaHome="`dirname \"$javaExecutable\"`" - javaHome=`expr "$javaHome" : '\(.*\)/bin'` - JAVA_HOME="$javaHome" - export JAVA_HOME - fi - fi -fi - -if [ -z "$JAVACMD" ] ; then - if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - else - JAVACMD="`which java`" - fi -fi - -if [ ! -x "$JAVACMD" ] ; then - echo "Error: JAVA_HOME is not defined correctly." >&2 - echo " We cannot execute $JAVACMD" >&2 - exit 1 -fi - -if [ -z "$JAVA_HOME" ] ; then - echo "Warning: JAVA_HOME environment variable is not set." -fi - -CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher - -# For Cygwin, switch paths to Windows format before running java -if $cygwin; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --path --windows "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --windows "$CLASSPATH"` -fi - -# traverses directory structure from process work directory to filesystem root -# first directory with .mvn subdirectory is considered project base directory -find_maven_basedir() { - local basedir=$(pwd) - local wdir=$(pwd) - while [ "$wdir" != '/' ] ; do - if [ -d "$wdir"/.mvn ] ; then - basedir=$wdir - break - fi - wdir=$(cd "$wdir/.."; pwd) - done - echo "${basedir}" -} - -# concatenates all lines of a file -concat_lines() { - if [ -f "$1" ]; then - echo "$(tr -s '\n' ' ' < "$1")" - fi -} - -export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-$(find_maven_basedir)} -MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" - -# Provide a "standardized" way to retrieve the CLI args that will -# work with both Windows and non-Windows executions. -MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" -export MAVEN_CMD_LINE_ARGS - -WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -exec "$JAVACMD" \ - $MAVEN_OPTS \ - -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ - "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ - ${WRAPPER_LAUNCHER} "$@" diff --git a/spring-cloud-data-flow/data-flow-server/mvnw.cmd b/spring-cloud-data-flow/data-flow-server/mvnw.cmd deleted file mode 100644 index 2b934e89dd..0000000000 --- a/spring-cloud-data-flow/data-flow-server/mvnw.cmd +++ /dev/null @@ -1,145 +0,0 @@ -@REM ---------------------------------------------------------------------------- -@REM Licensed to the Apache Software Foundation (ASF) under one -@REM or more contributor license agreements. See the NOTICE file -@REM distributed with this work for additional information -@REM regarding copyright ownership. The ASF licenses this file -@REM to you under the Apache License, Version 2.0 (the -@REM "License"); you may not use this file except in compliance -@REM with the License. You may obtain a copy of the License at -@REM -@REM http://www.apache.org/licenses/LICENSE-2.0 -@REM -@REM Unless required by applicable law or agreed to in writing, -@REM software distributed under the License is distributed on an -@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -@REM KIND, either express or implied. See the License for the -@REM specific language governing permissions and limitations -@REM under the License. -@REM ---------------------------------------------------------------------------- - -@REM ---------------------------------------------------------------------------- -@REM Maven2 Start Up Batch script -@REM -@REM Required ENV vars: -@REM JAVA_HOME - location of a JDK home dir -@REM -@REM Optional ENV vars -@REM M2_HOME - location of maven2's installed home dir -@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands -@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending -@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven -@REM e.g. to debug Maven itself, use -@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files -@REM ---------------------------------------------------------------------------- - -@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' -@echo off -@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' -@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% - -@REM set %HOME% to equivalent of $HOME -if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") - -@REM Execute a user defined script before this one -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre -@REM check for pre script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" -if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" -:skipRcPre - -@setlocal - -set ERROR_CODE=0 - -@REM To isolate internal variables from possible post scripts, we use another setlocal -@setlocal - -@REM ==== START VALIDATION ==== -if not "%JAVA_HOME%" == "" goto OkJHome - -echo. -echo Error: JAVA_HOME not found in your environment. >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -:OkJHome -if exist "%JAVA_HOME%\bin\java.exe" goto init - -echo. -echo Error: JAVA_HOME is set to an invalid directory. >&2 -echo JAVA_HOME = "%JAVA_HOME%" >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -@REM ==== END VALIDATION ==== - -:init - -set MAVEN_CMD_LINE_ARGS=%* - -@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". -@REM Fallback to current working directory if not found. - -set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% -IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir - -set EXEC_DIR=%CD% -set WDIR=%EXEC_DIR% -:findBaseDir -IF EXIST "%WDIR%"\.mvn goto baseDirFound -cd .. -IF "%WDIR%"=="%CD%" goto baseDirNotFound -set WDIR=%CD% -goto findBaseDir - -:baseDirFound -set MAVEN_PROJECTBASEDIR=%WDIR% -cd "%EXEC_DIR%" -goto endDetectBaseDir - -:baseDirNotFound -set MAVEN_PROJECTBASEDIR=%EXEC_DIR% -cd "%EXEC_DIR%" - -:endDetectBaseDir - -IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig - -@setlocal EnableExtensions EnableDelayedExpansion -for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a -@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% - -:endReadAdditionalConfig - -SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" - -set WRAPPER_JAR="".\.mvn\wrapper\maven-wrapper.jar"" -set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CMD_LINE_ARGS% -if ERRORLEVEL 1 goto error -goto end - -:error -set ERROR_CODE=1 - -:end -@endlocal & set ERROR_CODE=%ERROR_CODE% - -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost -@REM check for post script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" -if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" -:skipRcPost - -@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' -if "%MAVEN_BATCH_PAUSE%" == "on" pause - -if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% - -exit /B %ERROR_CODE% \ No newline at end of file diff --git a/spring-cloud-data-flow/data-flow-shell/.mvn/wrapper/maven-wrapper.jar b/spring-cloud-data-flow/data-flow-shell/.mvn/wrapper/maven-wrapper.jar deleted file mode 100644 index 5fd4d5023f1463b5ba3970e33c460c1eb26d748d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49502 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%0A$pwhjXzyA0ZzErH{1@M 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 OJOEd-=rxTO#Qy`$*1Hh^ diff --git a/spring-cloud-data-flow/data-flow-shell/.mvn/wrapper/maven-wrapper.properties b/spring-cloud-data-flow/data-flow-shell/.mvn/wrapper/maven-wrapper.properties deleted file mode 100644 index c954cec91c..0000000000 --- a/spring-cloud-data-flow/data-flow-shell/.mvn/wrapper/maven-wrapper.properties +++ /dev/null @@ -1 +0,0 @@ -distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.3.9/apache-maven-3.3.9-bin.zip diff --git a/spring-cloud-data-flow/data-flow-shell/mvnw b/spring-cloud-data-flow/data-flow-shell/mvnw deleted file mode 100644 index a1ba1bf554..0000000000 --- a/spring-cloud-data-flow/data-flow-shell/mvnw +++ /dev/null @@ -1,233 +0,0 @@ -#!/bin/sh -# ---------------------------------------------------------------------------- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# ---------------------------------------------------------------------------- - -# ---------------------------------------------------------------------------- -# Maven2 Start Up Batch script -# -# Required ENV vars: -# ------------------ -# JAVA_HOME - location of a JDK home dir -# -# Optional ENV vars -# ----------------- -# M2_HOME - location of maven2's installed home dir -# MAVEN_OPTS - parameters passed to the Java VM when running Maven -# e.g. to debug Maven itself, use -# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -# MAVEN_SKIP_RC - flag to disable loading of mavenrc files -# ---------------------------------------------------------------------------- - -if [ -z "$MAVEN_SKIP_RC" ] ; then - - if [ -f /etc/mavenrc ] ; then - . /etc/mavenrc - fi - - if [ -f "$HOME/.mavenrc" ] ; then - . "$HOME/.mavenrc" - fi - -fi - -# OS specific support. $var _must_ be set to either true or false. -cygwin=false; -darwin=false; -mingw=false -case "`uname`" in - CYGWIN*) cygwin=true ;; - MINGW*) mingw=true;; - Darwin*) darwin=true - # - # Look for the Apple JDKs first to preserve the existing behaviour, and then look - # for the new JDKs provided by Oracle. - # - if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK ] ; then - # - # Apple JDKs - # - export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home - fi - - if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Java/JavaVirtualMachines/CurrentJDK ] ; then - # - # Apple JDKs - # - export JAVA_HOME=/System/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home - fi - - if [ -z "$JAVA_HOME" ] && [ -L "/Library/Java/JavaVirtualMachines/CurrentJDK" ] ; then - # - # Oracle JDKs - # - export JAVA_HOME=/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home - fi - - if [ -z "$JAVA_HOME" ] && [ -x "/usr/libexec/java_home" ]; then - # - # Apple JDKs - # - export JAVA_HOME=`/usr/libexec/java_home` - fi - ;; -esac - -if [ -z "$JAVA_HOME" ] ; then - if [ -r /etc/gentoo-release ] ; then - JAVA_HOME=`java-config --jre-home` - fi -fi - -if [ -z "$M2_HOME" ] ; then - ## resolve links - $0 may be a link to maven's home - PRG="$0" - - # need this for relative symlinks - while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG="`dirname "$PRG"`/$link" - fi - done - - saveddir=`pwd` - - M2_HOME=`dirname "$PRG"`/.. - - # make it fully qualified - M2_HOME=`cd "$M2_HOME" && pwd` - - cd "$saveddir" - # echo Using m2 at $M2_HOME -fi - -# For Cygwin, ensure paths are in UNIX format before anything is touched -if $cygwin ; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --unix "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --unix "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --unix "$CLASSPATH"` -fi - -# For Migwn, ensure paths are in UNIX format before anything is touched -if $mingw ; then - [ -n "$M2_HOME" ] && - M2_HOME="`(cd "$M2_HOME"; pwd)`" - [ -n "$JAVA_HOME" ] && - JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" - # TODO classpath? -fi - -if [ -z "$JAVA_HOME" ]; then - javaExecutable="`which javac`" - if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then - # readlink(1) is not available as standard on Solaris 10. - readLink=`which readlink` - if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then - if $darwin ; then - javaHome="`dirname \"$javaExecutable\"`" - javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" - else - javaExecutable="`readlink -f \"$javaExecutable\"`" - fi - javaHome="`dirname \"$javaExecutable\"`" - javaHome=`expr "$javaHome" : '\(.*\)/bin'` - JAVA_HOME="$javaHome" - export JAVA_HOME - fi - fi -fi - -if [ -z "$JAVACMD" ] ; then - if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - else - JAVACMD="`which java`" - fi -fi - -if [ ! -x "$JAVACMD" ] ; then - echo "Error: JAVA_HOME is not defined correctly." >&2 - echo " We cannot execute $JAVACMD" >&2 - exit 1 -fi - -if [ -z "$JAVA_HOME" ] ; then - echo "Warning: JAVA_HOME environment variable is not set." -fi - -CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher - -# For Cygwin, switch paths to Windows format before running java -if $cygwin; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --path --windows "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --windows "$CLASSPATH"` -fi - -# traverses directory structure from process work directory to filesystem root -# first directory with .mvn subdirectory is considered project base directory -find_maven_basedir() { - local basedir=$(pwd) - local wdir=$(pwd) - while [ "$wdir" != '/' ] ; do - if [ -d "$wdir"/.mvn ] ; then - basedir=$wdir - break - fi - wdir=$(cd "$wdir/.."; pwd) - done - echo "${basedir}" -} - -# concatenates all lines of a file -concat_lines() { - if [ -f "$1" ]; then - echo "$(tr -s '\n' ' ' < "$1")" - fi -} - -export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-$(find_maven_basedir)} -MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" - -# Provide a "standardized" way to retrieve the CLI args that will -# work with both Windows and non-Windows executions. -MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" -export MAVEN_CMD_LINE_ARGS - -WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -exec "$JAVACMD" \ - $MAVEN_OPTS \ - -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ - "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ - ${WRAPPER_LAUNCHER} "$@" diff --git a/spring-cloud-data-flow/data-flow-shell/mvnw.cmd b/spring-cloud-data-flow/data-flow-shell/mvnw.cmd deleted file mode 100644 index 2b934e89dd..0000000000 --- a/spring-cloud-data-flow/data-flow-shell/mvnw.cmd +++ /dev/null @@ -1,145 +0,0 @@ -@REM ---------------------------------------------------------------------------- -@REM Licensed to the Apache Software Foundation (ASF) under one -@REM or more contributor license agreements. See the NOTICE file -@REM distributed with this work for additional information -@REM regarding copyright ownership. The ASF licenses this file -@REM to you under the Apache License, Version 2.0 (the -@REM "License"); you may not use this file except in compliance -@REM with the License. You may obtain a copy of the License at -@REM -@REM http://www.apache.org/licenses/LICENSE-2.0 -@REM -@REM Unless required by applicable law or agreed to in writing, -@REM software distributed under the License is distributed on an -@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -@REM KIND, either express or implied. See the License for the -@REM specific language governing permissions and limitations -@REM under the License. -@REM ---------------------------------------------------------------------------- - -@REM ---------------------------------------------------------------------------- -@REM Maven2 Start Up Batch script -@REM -@REM Required ENV vars: -@REM JAVA_HOME - location of a JDK home dir -@REM -@REM Optional ENV vars -@REM M2_HOME - location of maven2's installed home dir -@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands -@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending -@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven -@REM e.g. to debug Maven itself, use -@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files -@REM ---------------------------------------------------------------------------- - -@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' -@echo off -@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' -@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% - -@REM set %HOME% to equivalent of $HOME -if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") - -@REM Execute a user defined script before this one -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre -@REM check for pre script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" -if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" -:skipRcPre - -@setlocal - -set ERROR_CODE=0 - -@REM To isolate internal variables from possible post scripts, we use another setlocal -@setlocal - -@REM ==== START VALIDATION ==== -if not "%JAVA_HOME%" == "" goto OkJHome - -echo. -echo Error: JAVA_HOME not found in your environment. >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -:OkJHome -if exist "%JAVA_HOME%\bin\java.exe" goto init - -echo. -echo Error: JAVA_HOME is set to an invalid directory. >&2 -echo JAVA_HOME = "%JAVA_HOME%" >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -@REM ==== END VALIDATION ==== - -:init - -set MAVEN_CMD_LINE_ARGS=%* - -@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". -@REM Fallback to current working directory if not found. - -set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% -IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir - -set EXEC_DIR=%CD% -set WDIR=%EXEC_DIR% -:findBaseDir -IF EXIST "%WDIR%"\.mvn goto baseDirFound -cd .. -IF "%WDIR%"=="%CD%" goto baseDirNotFound -set WDIR=%CD% -goto findBaseDir - -:baseDirFound -set MAVEN_PROJECTBASEDIR=%WDIR% -cd "%EXEC_DIR%" -goto endDetectBaseDir - -:baseDirNotFound -set MAVEN_PROJECTBASEDIR=%EXEC_DIR% -cd "%EXEC_DIR%" - -:endDetectBaseDir - -IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig - -@setlocal EnableExtensions EnableDelayedExpansion -for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a -@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% - -:endReadAdditionalConfig - -SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" - -set WRAPPER_JAR="".\.mvn\wrapper\maven-wrapper.jar"" -set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CMD_LINE_ARGS% -if ERRORLEVEL 1 goto error -goto end - -:error -set ERROR_CODE=1 - -:end -@endlocal & set ERROR_CODE=%ERROR_CODE% - -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost -@REM check for post script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" -if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" -:skipRcPost - -@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' -if "%MAVEN_BATCH_PAUSE%" == "on" pause - -if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% - -exit /B %ERROR_CODE% \ No newline at end of file diff --git a/spring-cloud-data-flow/log-sink/.mvn/wrapper/maven-wrapper.jar b/spring-cloud-data-flow/log-sink/.mvn/wrapper/maven-wrapper.jar deleted file mode 100644 index 5fd4d5023f1463b5ba3970e33c460c1eb26d748d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49502 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%0A$pwhjXzyA0ZzErH{1@M z22-6b1SQ!SMNyqj_7MXE2cwcEm)W)YwB)ji`3Y^5ABx--A11WB3mBQB<7K!~``j&@ z8PKJ^KSa>#M(rar$h}aBFuNI9sB5uAquDlzKW+hYB&WKf9i&+q$j5P;sz2u$f`uHS zaX8$!@N2b81<<0w<{CpXzQGqSZRpfVb3R%bjsw-Kl}2UH>}1M?MLA#ojYaagiYL!P z$_@7yOl~PbidzJ8yx{Jz9&4NS99(R5R&lf~X_{xjXj|tuvPgvzbyC}#ABy^+H+FN0 z8p5U!{kxOvdv3fr35|Kb`J(eXzo*GvF6`_5GI)&6EW}&OGp=!8n`W0mr_o~Xq-t?% z_pDDfIW#L^DmX?q#mA%Jz-f86KG`^7V|1zdA#4#<=}91g$#@J`gOqMu+7H&yMdNIt zp02(*8z*i{Zu;#S#uP#q!6oNjQzC|?>fgzorE(d+S#iv4$if+$-4$8&eo zuSZJ1>R2HJ^3T9dr{tn+#JMGv#x@&C$EZapW9)uhp0`rDsISKrv`~3j)08JZlP&}HwA!z^~-?Ma(x0_AS{@r z8!(Z}5d8+5f7`r3pw_a=Z`!0r6r4%OAGYBoq3T7^xI@9xG3prNo>`}k>@VAQk>(=DIy(szD&6@u?YVdC|pJLT@lx{=IZ; zIkO4)YWp*Dpp$`H$Ok#yf;yBmHvTb@)4j)jVNF-O?$nD25z7)I!cWQ|Yt zeS<_C{i|BS4HICD=}T(|)@vd(v!?P4t4>APo7`K5RJvcTpr_KgWeB~zMLknrKMgpx zyN-EI%es5e)FNho=}qGu$`98v(QDPUMUGrY4tq>?x$md>qgNO0@aAQLMLr8XD8z%; z2Osn1D>N^22w4Xb8{~fi^i~SthAo7%ZjNb)ikgj0_AsXqF_0+W6E_doOUi0uV6Lvg z98Xk#>IK|-YHx!XV64==b(nYKMEyqPF?D)yxE=~;LS?LI_0)|1!T3ZtLa?(qd|YlXdI-e$W z(3J*FbOe3cSXvDaTHU^Hqpf2i8aH+ZzqY$cFFIH;fxMtW^(AmiMkBtb9esujw?rte zoo&0%Afb~VBn6A1@R1!OFJ0)6)Fn72x{}7n z+b#5gMommvlyz7c@XE`{ zXj(%~zhQne`$UZ5#&JH0g={XdiEKUyUZwIMH1rZTl%r@(dsvBg5PwEk^<+f_Yd~a@ z%+u%0@?lPzTD>!bR(}RQoc>?JwI|dTEmoL`T?7B zYl^`d{9)rW)|4&_Uc3J=RW25@?ygT$C4l-nsr+B0>HjK~{|+nFYWkm77qP!iX}31a z^$Mj&DlEuh+s(y*%1DHpDT`(sv4|FUgw5IwR_k{lz0o=zIzuCNz|(LMNJwongUHy#|&`T5_TnHLo4d+5bE zo*yU%b=5~wR@CN3YB0To^mV?3SuD~%_?Q{LQ+U){I8r*?&}iWNtji=w&GuF9t~=Q2 z$1cFAw1BTAh23~s$Ht$w!S2!8I;ONwQnAJ;-P4$qOx-7&)dWgIoy-8{>qC8LE?LhJ zR-L4qCha@z*X+j|V<+C(v)-UZmK0CYB?5`xkI)g2KgKl-q&7(tjcrhp5ZaBma4wAd zn`{j>KNPG>Q$xr7zxX}iRo=M#@?>}?F`Sv+j6>G9tN!g@14LUf(YfA4e=z+4f zNpL4g?eJK`S${tcfA{wbn({8i+$wMaLhSJo`-Yp@G2i0Yq~@wdyFxoVH$w9{5Ql2t zFdKG?0$ zV7nmYC@PSsDhnELrvd8}+T=C6ZcR?`uapdWLc2eaww5vKtjQQgbvEr^)ga?IF;@1(?PAE8Xx5`Ej&qg|)5L}yQA1<^}Y zp7WZpk%}L9gMMyB^(mFrl&2Ng$@#Ox3@Z6r%eJ`sGDQbT0a9ruO`T|71C;oCFwTVT zaTnu)eVKURM`1QuvrBhj;1e>1TEZW54sKUfx0Z=N*;Jpdh~Aj-3WB zR|EYVGDxSvnjeA?xxGF41Wj?~loVahklw|zJ=v3pOEVZFJG^TvR z-tJN5m;wZp!E7=z;5J*Oaq%2bc|Jw!{|O+*sja+B(0D2_X`c2)nVkzP1S~LOj~xs!@>aN z3$K2^pW}@R-70K!X&s4DHHoV&BmGWTG4vi9P1H$JxmD|t_V{GlHZv(`yJ234IVuSr z~!;~#ublS8qdL8SJG@XRCwWhkZyg_EKH(sB2}QQSv4W}|CT0ntD_4Eyp519d1%yKvc33|`yW9QzeJ4*XLP7@l=td+bwxSL~jCf-ny)IDC^~u5s)E-y^FdtU?)hkN{82Y{Lo)bCWcBOx;Jbw;)Pg9bWQQTY-3RWehpok!>D>Sa2EcEOS@ua)#G3I+GxL_ra^92Y!}tMX zwAp*Fv-aAarn`ME7N#Uyim%ynre6u?KS15L#$#rKZSgLnXx;g8TP9suMpO055p278 z%o-6eT(3gdIVFN}Gb3k$zbTyrHYel1x6OxETsk&h0E?&}KUA4>2mi0len7~*;{Io~ znf+tX?|;&u^`Bk-KYtx6Rb6!y7F)kP<5OGX(;)+Re0Y;asCLP;3yO#p>BRy*>lC$}LiEEUGJHB!a=&3CddUu?Qw>{{zm)83wYRy%i}UV2s| z9e>ZXHzuMV#R1yJZato0-F|Jl_w2sUjAw@FzM=DxH}vM>dlB&bQ!>51aGc}&WAH`b z6M6iG$AyJIAJ7-c0+(;pf=2=!B=%yoM1i9r==Q+}CK3uW%##U1rP~mwjUb8PLsi8Q zq!aTLLYK4HQ$vN1sU;d3XW{oFA{u@1$tduWmdOqc(~AqWq+`V)G&?YOOwAK20x>{q zOgII2&A_FXPzVtgrD80Y5J+_SEmyUcdM2N%q);|ZF_m z)6PBcOcAAy3kN*`8ac%zPH3^61_zn6_2FT#NCOWYx>ezqZzCC;tzM%pJC^gFAFcTs ze6C3WE-a*=nt8tErPG9zfPRn$QHqB7aHe8x3w&rWT(0F54<2uBJDYtbB}y|@9V6T( zmM!t}T5SuwxyTCma14&l|yiQRw5Pn|OiDBkx z?4tUGrIVsC9zs=F{W>zl9XeknEc+~Mz7zCnefUPUF8iF?A)QJK8=84#-TLLxq?BTM z=VYjYW%TOhrBp>3D@K{vStlEUt%e{HRc=766AQ+s7V_F|1A!)P3?y*=gUgbZO;O39 zX*BC((-XbnoaRGxxhRQRVKCDG9|qC6?7TwCz{A{OZp$Wu(~0DFo(w^P3f>4gr8@P^ zl8`!vA=_fvwTZc%-Z42}m>Q;KQ~&v;ipZzbA2;}Peg*v}TlKRmU%4WNN<%qb!cLo= zoSx;XBrv4}ErykT!)z)Qar4o?(q6!mpWLNFe~Nz0S@yI{1)Lxt<0K=Q$~>*HH+Wbp zQ~fx0aup_lZb|e6*@IJOJjw~Ypiwdq69&Y2vthfGq6u1!Joy%;v;~4`B@B*S(}}i- zmZc^*aHOK(dd(geOKg)P+J4+*eThk;P@wRjvm}e)h|#EpsV9YoqqRW{)ABhRlvGA* zL$&k5w*_-X1ITCwXiH=)=5lzjxY5tQJTBrv<{dM7$98pdK%i;RGZtiJKaSGCji7w)aNrHu_9_IPGHS-mMN5AheTn_ia^YdunCzcp2ap8eI-RQEm zj(q7_CT)o|w_noPm@MVqIjv%H4Bdo6*9*!Zj)bLx!p9POp(`$dj1QW`V=;=|`Gx8QST=OnK5jlJX3!KBz>v7j$&5b5YrhIArRVL)1C^o{@DJ}*mk*s=< zDK{e2f%fG)mK_Mz*x@#ahOO)cQQ#VH+8Wef>NKWcu4J>PIc3iz8y6PwCmY|UQ(O3!B;HtsE&jvyv^XjL7Env5#i zH4-k5GzPr-%36#%+Hvw1*UiOIk3b7F^|1dPi!-i7C^ZWp~_KI%D!sGYb@@zXa?*{XfjZ~%Y^mT!kaK_>K8 z_jL78^ zS0eRdqZ0v~WWow1CE;vDBh#{w9R4JgB!})W9N{{D=p-RMnehZ#pH*ABzDP46ryZkt z4ek|LHS{CDhTTMQa3a5fO9OLg?y$+#Gi2}Fv>QD-+ZEQKX2Fv{jr~miXz1ZpPcXvJ zNvQT@kQbBz_Y4Kg)*`E2t;tPh5_7tSGvL-|-A`lgHX3uVG4jLev9>YCZUeNNzioL? z;OBD{z+=Gs3+*ph)#bO#7IHl|rOFfvpK%cF>W??Q!Nh&B@hByD&}g|>a?GJ4uhX3g zPJXKKAh&zWv&wITO66G{PuGLsxpWSqaadFsv>_vQt?LVslVob7wylsa+O`IYWySoO z$tw#v7=&7ZGZqS}N!c##5-bC%>ze*s0H9J%d|!JgE#uZ|k1_bAn*x(Y%r{c=(HLwNkPZOUT#@j4{YfG#@=49YJ{?7? zddbK}G-@Dod&^Vf`GOo)G|`n@kq?Z=o84x{889+?F*dQz(kr@9lQ-TXhGN`)^-Li1 zb}xO2W(FvB2)EA;%qAkHbDd&#h`iW06N1LYz%)9;A&A25joc!4x+4%D@w1R+doLs= z#@(A@oWJq?1*oT>$+4=V=UnuMvEk;IcEnp4kcC<_>x=Hw9~h+03Og7#DK(3y3ohIp z-gQ$-RQIJTx%0o@PDST|NW41VgAR?CH`Sj-OTS0)?Y*M_wo|92;Oz)aya`^I0@?S{ z<%^epAw!Tw(bvSmU_k~Im^%#|0`Xkcmxj;31jX2Gg?PbzdXp9Dg~P)PW+Xi%iWiCr zV-Vv9IR5guDS2lGV!lfTWxkD8w%yz=UB`2j2Zb0eg~arRA*Q6>`q=8#4&OC|L6O}8 z)!w(idG0yk-BF#~k@Avk>an9z_ibOP*Rb;db_PsakNWYdNoygT?yRG=+5>ud<6Vxhk?P9rk!+8?xMg!x5kD*f2XOd^`O3U zlO;ImEy0SYI_J05cMW{dk@%d@iZFCNhIVtOm8$viM>=zM+EKJG%c0)dZ0D$4*-psQ zW+Fq|WmbYkBh5|^-l$w-`Uy8#T#<+3=}z!(6RadEpFlr1f6OFuQ5sG735YicWaoYR z`wuEZT2dntHGC7G*Kzk$tsm?Fd25LTHJj?Zo2RH;9rW9WY1`;@t_O3NC};dayX;Ib zgq6afb4!50qL-o5%yzgcR-1Xm-l4SE!rE>o!L=E`Jeug(IoZ36piq6d)aek0AV)EJ zaha2uBM!>RkZHRN0#w07A=yf4(DBmy(IN6NdGe$?(7h?5H)*?(Li#GjB!M{nq@C3# z^y{4CK_XQKuO>(88PRb&&8LbRDW1Ib>gl6qu(7g}zSkf<8=nFPXE1~pvmOT3pn^sa z+6oK0Bn$TBMWYTmhJzk_6)$>>W)nF^N$ld9 z8f^Y^MLVz@5b}F0fZID^9%hRL#()Xw*%yhs&~|PK|MGI8zuO!f!FqbmX9icd zXU(JOCwac|Z|=Yr(>Q3)HsXl!^$8VSzsgI#)D2XkpZ2=WOBcFF!2&d;*nF%h0I!`mRHl$91jYzqtLfNHUoYzrMzjR)u zP_|Hti4^){G?Ge6L_T^zVdS@KHwtq^+*+aBNl=hVc6#KB-It()qb&8LhnVW9Yxn&S z&^s^u1OzB(d_ByXz=xm4cpJzNzV+Txh`~H(176n4RGlY6( zg?ed(a!J?4(oL}@UfBpgPL*)KrGtM_hMIdu!RywK@d!b-{YAY?(?w3yB@Fi3g|G)| zho%)<=%Q$Lo7S-BxEjTL;M74{y+`Q^Xg#j}VvF|Y>X7s+Ps~aqT--tJNd9U6;Ej&o zj@|!`{Xy90t_Zdb>+m8tCFJ@X(Y$mR>%)gv4Vt;oGr`idhQ7H1^L3v4<_2}-UoguorcscRfdgumUVa0mK7-Wm~#vbrnX9ro}@82q=9t;lM9nH<} zLL#=1L7*f+mQWfyFnETMi*fe8AI+gdY6BM7CkRS&i4$ZRv$v*=*`oo>TjZ84sYD&T zI!DgZ4ueeJKvjBAmHNu|A?R2>?p{kQCRy zRnGg@C%oB#-;H-o-n##G`wcPWhTviRCjB{?mR20|wE9Kn3m6(%Sf_oNXWP^b;dz7( zb{blETKwpl`AT#W7E6T|0*bl?%r{}-BYdwrn0zN(DZXM1~53hGjjP9xzr$p z>ZH?35!~7LHiD7yo7-zzH18eTSAZjW>7-q5TYzDvJ$$S$Z@q)h)ZnY(3YBl+_ZK~* zd6T1UEKdrzmv2xc>eFj2^eQPu;gqBdB@TLqWgPk|#WAS0c@!t08Ph)b>F3 zGP}9_Pfp;kelV05nUfnb%*Oa{h;3Yi^B5xyDM~1r@o%v#RYi-%EYfSYY&02eW#bGb zu8(H8i9zhyn%?kx5Txx^6 z2i}CK(HeQ_R2_u?PFp#6CK zjr}k8Cx#C?DFgP`uN<;}x*Gd$-JgG3J_i3s>fk@_Po}b|JNz=Dm+<{^51m=mO;n4B&azYm{>+VhB{iyxuW+j>w@>VHcJyoSBQi=hu0;p zPw3Aj?%Ai^UeD{ySPIqsf|v0L&f_fmE7oh(s|jwbkK5^AQ9F|;a5V}EdSE?fyxdgf zHTq!f0;+-V{0oF+l_~>rMGk?f~m^wDXlxqt1@+)6Zv?BNR$+%$i z*NF93f}~4d9H2C7@?IibyqUtLL!XZW2ap4fkkxMqDZuZ>`+AfWJQ%~O2WR}NoA=OP zieg@q!mP z?=qU=EE6L0_UpzXt0qwX2tF~}c|;`#MUY2TMz6k({hpkiSz>Dxt*4-PtkAdAA*0hn zk~CK6#V=*^m5 zg$tB6rSO-=9l>GAl^DjJBHdk0wD0(L!OrcZ?qmtYbl+}s(@rtE-O=RTx*1cZq~u~5 zQPVt(IB=*?Pm;Le%#i1SFxHY|>=Y$^RF-FGAUSkBpn`|+p!4RHyv-Q(XgZ5Xg5W}J z8RcT?+4FdVQ>z~9kP5By8eM95f_LDnsnA%K;i6`OpcuJS=^n|6nH-B2EhH=dLbO@Z zuw=Ug>7gsu33`Pzy3Lji0x8OCH={?VRqFEi;@oDIS<*?dG@9X1*tlYCm4YUIMhyfo zJ~=K@-X$D z<-4dH<-5o#yMj%f@U{nfWYVdrREJ}_o4&|c*_+M6gk z-Up9-i~jM-bwR;Bf0&C5wteli>r7ZjGi+mHk3aC4mS5 zPC^{w+G%menlWun+&<#i&DJ41thvk;OKZEB`S%sZ6 zzYpO2x_Ce@fa0LuIeC=7gRHN#os!MQ7h}m9k3@u68K2$&;_mSe2`>uvV<`RgC)TKX z`J}&Kb%*f{Oznj$%-QafB}Zb$Pi%@D&^ZTcgJ0+Bk6-iOJ-P|Q10)5ie2u0JzKb2r z2C@{f?ZBcPw5%h&aKG+6%Qvhw(t1Y{hZ82YE4(Tlk`2VCgE&1x;AUt+5U*$%>P|iWLeb_PJL!VX=b4#>#QM;TGjFHBNRy+d{v>2cVXFyqaLd300 zFHWrc8lB1KSOH3dkJClJ%A5oE^31WrQZ3^-3`Zk?1GqoV7Wr62=V9C=(;#R zhzXAT03)d z9OdZ|;CjSnqQeqF-CUNR=x9x76JYnpr|T+6u#$y=7cMVG72k4f*BJIG>l1NNvyv6NQzr4U`r;= z&%W1Ri2sI5p|8%q5~zM-AMptHj_eX7FzJN7t(%+2dA)efyFbePBsClxY_yMqWbEdT z+jm?SZgH3mCzU?e^psnyd8UK zfZ$^_^}C1WYB1-$m4qwT@#=wsAq$9Xj=%IRvc#V?1azEi|RSc;M zQn;3%Gjk3D)R+3`gZplB>Pt;g?#EiwRzxON;% z#P5IK*YAh1Md<$o21R}j^8Y#t#`fP`nErnb@&CkI{`XNXulcVIXwLcS%VE4i4-!8a zpj-q)#TqXkFg&z4G9pG45A-$B_Lfacr)H85ge*yqTLAb(oY1$6Xu7Rc%^aVOmzsKd z=WEXA40~hm@7FKD9t14nSRt)m0XWkP1YbAE009nIupf`md=v&J;C}estaY0%^Z;;lf>5AF-y%Xf1QEK(}4n+ zhKsTx^bQSpwM=UWd3WRcpEQfw>P%zuhLeEdY}s%cGitMZa14Ui*Mzm%=(7<#b2gHmJ?kdeymT7H+Z8k8tgd zp-dhC)R!P!)w(n%RgOi%^)LGZX)yxC%@f@d4x@IRbq{elrCHyIuphEE6qd6l6O`;B zi0WQg;j`hcu51uYTBSSYNvY{Lkn$iu=Ae0g6o1cSTRwXmEvNcNI zv;)Z_?g>?aG`Zp}*gY8%LGI}{>J#`x;v=*ykuY@z2Erz>@b*)tMp2>=C20MI8|{Z2 z9hbyDJ7d#MdWK&fyZB>Jdm!#x_uRw%>`OuM!&QMim}baa76{L|VAuq%1UpXVHsClm zPD4}hjj{lj`)aaD;x|PJ9v@?8gZ!t5hER6!b~HJ_l9P|(h&R6js3mAfrC|c+fcH^1 zPF*w*_~+k%_~6|eE;-x}zc%qi-D-UpTcAg|5@FCEbYw6FhECLo+mVn^>@s-RqkhuDbDmM~lo<4sa`|9|$AltN_;g>$|B}Qs zpWVSnKNq69{}?|I`EOT~owb>vzQg|?@OEL`xKtkxLeMnWZ@ejqjJ%orYIs!jq3 zTfqdNelN8sLy2|MAkv`bxx`RN?4Dq{EIvjMbjI57d*`pO?Ns{7jxNsbUp=rF$GCut z7#7Dm#Gvh}E8~2Tyhj2reA%=ji|G6yr%@QV{(90cE{JYOW$0F|2MO+TM^`cAu$B7s zmBV^{IqUIbw5~muv}st`dDdIxSU@Eb>xf3$qwEcg;H+vp1^ArN@A)RtQ4hrid2B{9 zb~pG8?SC3#xctpJXWRGXt=cx6Cw!IqoJrK)kuLL&`UYYB{R6Dw)k9nKy>R#q_X|V* z%zVsST$=d(HozVBc|=9<175^~M$v$hL9azT^)TL7BIA#qt>N2^iWvMQgt;!YZt~cv zn!x^OB!3mOVj>^^{mloGiJhLI4qy3Vt-148>9j~d8coH)q|Cg5P89Xj>>hjtzq5iT z%go41Nhi}x7ZztTWj|deVpj>Oc#IrI{NxIm;qhnuNlvNZ0}d=DVa}=H0}Vi-I+wKK z*1uD=0_)b-!9S^5#(%_>3jcS-mv^;yFtq$1)!wGk2QP%=EbpoW++nvbFgbun1Eqri z<%yp)iPo|>^$*IHm@*O74Jve%nSmDeNGrZ&)N9 z)1rSz4ib+_{4ss2rSXRiDy zgh(descvk^&W|y)Oj#V@#)C658!**J#=ckpxGniX#zs0tA~NG>E#Hn3Q3wdKBfMG& zK}2y#|FLt}E`UQ6t3jK#G&e22bMBc3=C)LyqU706frdCAqa;~Q0L5)KJ4?@h*FFu4 z!s=hOC;G?Q)BRKJ1q_XJ9W5LLejp1L*187&5Bo4Of)k>T=WpQl3v#4iX$574fW`p+ z3m}r-F8Gjv1m3yTia=+2An1+E&psbXKjH2{<1xMb37`|D<%7c`0`~m0r>AQD^%nUJ`%PxS>)*{i zg?VHw)ju!$@$>xGszUyM_BsCF3*%>rxVZ8vrYB?PvDBBHQWz04T&UpxKU7{ zrb~8R4W>e)){FrKo^O5ts8O^r^t70=!se(2-(8&aTdaFU2;SR=dyECLBp|MVU@JIt z)z$TAHMKRnyX*5;O<*xm+(>Fo41G;Tk0w01ilh#uFJa{teQne`QCOHZp`&du5gkAWr@9Ywz%@P@KB0bD{lXo7PmrPC%J!A z%orlB>F}qRa$`XC2Ai_4L56#h2GWm;>sScPxhMO5a*guk2 z+56H}PZnq-sxASPn!B~W#8B1W=OQPf-lEbhOh%>%{AND;w%w;t<8%a%HNk`LQ0GpT z6au2l)=Brql2Fq{Kw316jHdW-WF<{46(Xad0uxi%3aEARVi*dKaR^jjW)$<$7QEiF z0uK-~dQ@|hxT5M|t$pBl+9IJig2o;?4>qY%<|sZ4Rk0Dc{ud;zd`g$&UcwLjY))aV z4jh&lc(;hjQaWB)K9EB@b^I)LQ~N_;SFEEWA&}`)g!E7-wzF%J8)yZaSOeR=igBiM zaU=T>5*oyz3jYaqv-RSC;r$%d^Z(cbLGwTQiT+3KCMt*OBOD@rPZ}8;)1_*l<5aBp zjl{A?HiE$Y6$NWUgPY(x@k^9)A|CC#nqZ?B&q-ceGE;Y7F{@0{lQuPnsj0~YX(VoZ zdJ})6X8821kH4_0vt$gocDeSve(SuROm_bM98&+q72$1m(x?A;;)@TWyuVXQV!{#( z41CN;(vq_a|56Yny*sb>5`lt+>?dvF0++3L!wQ_eJmXi)z_1UAmNi80_bG^|J$GZs zK^|0X@8jq9pyPt$dpiWWAG)mNg7X_BME=&UYoq>nc0gtk_YoXNb5hYb!hG ztf(P(6Bcy6`wroiv-5NLLjVBx&|;W6WwKMmB+ph%7$AJfV95||OktlFlTMqdKP0i#Y*rj`(XeYUz=adk`3hA(LvO`y z|0%R3GMWC#x}RbCNX_Cf;_wEOS}%lqj#-CXQDIpi8Qis%Radz>q0vjbY&8DdR>jXU zmvR%au!=9lMN?P=hzQpNGOJRw?Cn8@B@kEp4r5$bgdM0?Fdua~*H~mGTf}17rZog% z!Kj#>m=l>Po$A`_fcT-pHy*aya+n%rXmG0CJ6a{nF%>TfyzKC2Dit7a;!8r;X^G$~ zS03MClV}lI)S^Py2I2rLnpjR64L!#Fl!mCP0td}~3GFB3?F31>5JCwIC zC~8VAun2Z}@%MZ{PlIWpU@CJ06F_<61le-_Ws+FSmJ@j>XyyV(BH@K!JRR^~iGjAh zQ+NnRD1C)ttcyijf*{xky2tyhTpJvac8m%=FR-LL@s>rN`?kMDGf2yMliwkYj= zwEEJ0wlFp%TmE6|fiti_^wVrxJ#gh7z@f0+P!kS>c>;BHH)N`PW0JHTqA?B~fz6H+ zdQq>iwU2Kne+4kR2e~l2`>(-^qqujX*@|w7k>s=e)Y-lwoI{$Tx_2}&y$9LZzKG-w z{TH06d?a9;01ze%EvqDCEt;qAaOYdf@X)zT)ScQs**7gQ**A5+o9p#P*X5~lMpNl2 z6p=Ecy7#f++P2sk;I2Nd`w-!5Y^3QHV0RVy2<55pqQ z&Q&b+JIKTf&6N(UjwrECT(BwKhkdpc#(Aq= zyG*N2frC~4B2Ko7O)bOHP8(}XKc;_(GP&+{?#dJ;Y$YXT$y<%YZmc>C?Sik?i?6E1 zk~VKGMLlNws0d#wk-11tBrAf?Tbes4F)oqxr_*7R-?Yn4IlyyP_ce6(J&tXSFI~P^ zYG1K1&Y@OY%nE}Gsa8~iq!!=l4a+yi7?Rxi#owl|2CnVfey<;AkI<2^CN^r`;-)ob zX7Ccao0G6Ic0ENcm7#3(8Y>}hb9aL6Gi?llW(Kss_CW07Z*0rgVhbod7+2-z3EC%( zq7QLJy|>bn^fyDVwISg;I%*4-lpnL5wLoe=B5sV^!Vdseg%7piW`#>KU*HD}MZ&J=jCFG;)9zqX;~A15Xsg;+mAtJruykiiD4Qc5$;lWT@^-j>F$$|0*{U zmrM6Kwy7I0>uJ&DC#8>dW7&)!1!_uGQ@Mvr)n^bH?_w|*J_E0?B{C&x%7+%$9&Umb zMv=?f8jwV=X`(6MfQLkyXGt_A~#T^(h~B7+v?~%F6k&ziM^m_Cqb!a zf0y+(L*8N@-&FfWsxPx%V97(F{QW`L&>2NJyB_}HBTWa|xRs*TT-y}_qovhF=%OCJ zf)sDf8#yYtG3ySQ*(qqz9dXI;CfS6yLi>4H9w9ii-!j5NwHL>oEN83>IsEP+V_1~u z`?}q?(o8RjDY5V?z9HC@t*0V_hFqA|HyZ8k)T!UJQ`KEKMLlNlIq<$2s!x;)o#SW0?w*zVYU?yc(v(2qyZg z0(^T!7Qzhpm)`?PLS7z|(>s+ZUO?_>f0y8LjB9{7he}@4-%l99L!vhyLW=yQr!);4vCSd-wC1QX-%H=?#UM-D_Wg8t3W z0*rY0Q4xwb5i(lBSOs^u(IgRSP$j!PkhbcIr^rh}e})V_kU5jW{q)m0CALP$`wKi& z?444cDxl;D;SqSw0^h%eA6Ro@BhxmD!}qpGb6OxRi6;iFai!)ctW|gmF3jQz2*O}Z z*TPvZAxFr1-Dd!53U_WQMQh$aauyVf;O60e>&G;Mg83(TOZt!6;s2KT{}By>k&-_m zA1YA0q3ID6fx`!qxy=@dYO@Rn%rEb~7P_%;Dxvl(WAfiJUtti0?~ah#_1`K#A}P2n z7^D~GQL#`hC}2w`btD`i%)VBWnn*jWF=d!kI*6T5-wBdsT)$EZD=mrn&EhxJQ^3>1 zbLeDA3&BIDAv=kWsp0t6>a3lITA;khMX^(B8Ecb^U%P-|RNGB@XLq*Q5a zR9aZ8RFNDYvD`dcva-5ti*`CcV%ltLG;emYG)5Hvo^Boe6!Fu0ekZ(k<<5G3_4>Mg z-?ILGT9yB`Gy?Cnu(PO#(bsKyf9>@F_MJQFZFaBE?dA7x40K@HNwA20g&JE&q z6&$MUcmsL)Sq;;@a9!*!?ct(XynVCJutm{pZ5w3Xci1lQ!9oB`xCdL! z6i6sX5X8iljX<8L4KC)P_hyjfBo3W=8BfQ5^inG|_NhXI*k)fvrDRq;Mtl#IdM%t^ zo(9yQnnQj}I{C__YBGYykMvG(5)bL%7>X@vm&+vnDMvZ(QMVC;#;@DZ9#6!r74JA`7phVA#`JE` z>BU^K@B>jj8Maz2m^>t$!%J^m)e|Ylem4L>e=OHtOVBCDy{0or$Np^VjdNl=g3xT8 zqsE*&O{Q9{>LhP;F2vpR<1t@fO4^Fbd{cO753U@l zLFAlS*(cze1w03?ZyLxG9S&n_udo?=8ddzgt#cv5fKd+uyogyl;44IK1&z^wj=!YK zzUD&kgK%`pt9A4nks?WMImECKCAt*xUXcPbo9e1&PmWU$X9~!}HO|j@r(`+=V^^Lc zcLMKF*Yj`EaS|pmb1uaDbkZvx6m%4{=z+MdgTuv?mT=4T&n?h7T_tQNFYhz$`~(DF zx4T%9nS-@(gWPm3?tZwJIpHDGWzAJ__zZKP;Hw>~%&n=s$Pn?6CaJ>bJzY?o)(O#~ z1fxWpkgP7ukZGyitR1C364Jp*?#{WzBom;9o=XrY;V#_Y5@5*}T5v*hcW#I;Sb)H; z6^g4&{fOcGP0zWCURc5J$ExdSY5s?r-^r#;|BS)8NjQH2--6b}!Q-Aa$mx_pNnz4q z(1_zCdqOu|4b4oo+-*jjTTV_j3WmL9=u`0(l@>00B5Vg?4f?fqwWRCX*2JwC(Yd+i z5A-Rm0r4e~4ceSJnEmWF6Nk>Q;(7sYyQ<-CgPa1fO8m6_pu=Maf0e2hd92Q#i7j?U z-VR;%F~r=@Xs>J2`Nx))UK=X`Shhg3AWzbwE<#%hM+KSQ)y~F!~7j*2}qu zgT9Z6kE4Z|n9Leb=N0%JnFI$AeNrV+!>E(WT7dyOjN~44BhNVL4(%Eo(1JGjS^)Oc zjSPsu`3wT8k`$>Na;G3pMU(9;+ov}PpiRt6*)WNMy(rEUak-14^(K`73yJ1#LZna? zS)ypsH=xt_ z1V%Pk;E@JqJeE1&xI}|JylZJSsu+mw#r=)G*5DBGv*`Q|1AC+!MW979QEZ{H5*8ZW z_U8EI1(M1LDjG^#yy~(OGH)?SdmR~=ma_^2Q#k>)`v#$t=~Ih|79!ZutXQTK^S&w` z1)ONotPDL(cz!_@bFBBOo6W@;7Zz--d9JaOs{)ss4P|Mr%>FaiMR=(fn-Y3SA->6~ zp`5h}dOcY_YfweZB*^el7qqa$&_r-Lg-I+9~U z`JxVCD<$VmoiR$g^3dU%7Sij)XYi*?$#ihSxCBHGOaRRr|Lo9+E}O~M>I}tnokI`}F32Aty#b8rpABEKl|B;*o8ge^^)Kyk z0!(>gFV=c)Q2Y%>gz+sa3xYTUy_X`rK5ca{{erC9WJ3EPKG{|Nng_-78kAD{oh_=K zn*wopK3cG}MBJf%6=}9YouD;zyWbjRt%A#pWc1zb3@FB`_Q~~UI!uvse(FQfl zUt=Qy2DSjwpzAUJ048~^;@Yo{C56R_8nZEeF}vm)0xoYe0y|tYI!>Y(d}mSro0`z; zeb6Eg*(a2{5Ypj8S$-_~L)+IlozZn|Iak`$jQKd63hldhts0=m>k~HC&`@|~;XaG6 zLVxC))8>^?13P*mV#ydlkC0V6AWK(BjWpqu| zbh7#bkKuL<kv5;Emm4zkF;X>rfbzAc7!Z)i};f=*bypYUD zho5-B5n;)FP(nzq8FG3TH?7l0vS{G}G9@~zxY>CqbX^mb$|JncS3I_2RD@?I9bz>LbX13A0N_LQmd(!3AxqmR_;3bJavc81%v z)Q~pDm0d1VrVe~>X?GOUOz94e6Nbt|fe6(S@cN64Gy6{i*TPukTmfvgPR>+qe>)@w z8mS6=rvR0~cqVfEWFsL|kZ3t~m-iV}va(IjJ;Hh4R9uISa6;@9d{D+7CwskGx!7MGZ6|rdE_I{cMD}-` zoi0%doDSznN-Evavf!_d@UNJt*Fl;hNrnVT2Fal8iBh(LU^l>8I1%x!q=6A@zO6O} zs0R@~z(6E;t~6L7tclb6A}zwwIvS;W`?F>>P)INWt6N9r4JbH*;&^6B!lHNAY+v3R zwCVoTTSL`1XtRZ_9vWH*(HcV?PImcNBOtbC4{U(v-HA~xMdpP8<);Xv0y_e1i%t|f zdyL`MtgjoC^Z-wGt@&6(9Wx>;qYcYwopK7H4iejT?T|>BSm)-fV&7yB;ANW4ZRzzc z?^;uh#-bDq@QjjBiIf-00TSw~)V;r?BHNEpDb(dLsJ_Z!zT7<{oC-V^NTEs|MeD0- zzuH~jmz>@&JaYIW>X&?~S>~+R!;wQOq|+{tI&#vV^n%|7ksh!vXzONlSb4zc!X;}> zMaUjix==sr4oMiHxL@~MPL%PrMzU{DPuz`9zWln9XnqKqNo3TZc;22OZ{ zy(90FLmd!qHIv!b-q){c(0@VYnzE(k5#rf~N5m{u-X za_J$`vM`7Bh@_`N%&n~35!O^m^pyWGR65?W@EH_fG}veT4I>@L72iny$1yuwBopv> zsSxe4Htw2+2f`M-+7|iva$OjEp*e=6r{J`{W_IyMTo#x0Yayp+V8z~17Hx&~6G%t? zN=#7bc$BWFl&qzMvU^iRl>Rvj(_`fR9T%ZBYX1?fg((%9FgbGrBl_7^rRQW9GA*@E zLN~c4F@W|oNmH$kHZ)4U$u(P4S;GSPDy671d;6L8z}?RfSb0PHN)PsKViOm_PLB-7 z+-+jjpC&oGWj(BQ{|L#DFOC3+-%fvGOOx^u^Ysxsq)Ox4^;}rM$!;(?`m@wtkXb~%u$Zx% za#IBD9hq=no-2H90jB}1^>TfWp)=Sb1v9w#UAHvYbn1PpHFbB+hwSXWK(ta=^8VN< z^j!PhT^ZXf#;?$ZWkn?(vJ20u-_SsGO1os)z;s=hI)d6iN-4mC9>EtcU@Mybflo@| z82lRHB)FEu4k@P9W+a)>t{^Jl;)gL&tWZBy(gWmfXX8XiUdnU>LtbceRd2RogiprV zK3KHRpSd5n#Hy5wQ!-Fg;{(9?K%pRuAEZwPR-E)JGeljq?MUmP=K$zkEO46*td&DL z%C4c|+^C204zq3rsTdE?%Y;lc1vKitClZ79P)GU-k`VCL5(kX_>5D{)C18r$^duj) zab$~pZ#$FLi^ihhytr80x6p2DsA3IsHPguaQ&s4izcL;7qGj1rPQM)4uc!I=d^j7S zs{`eqUlX0}s<8@_Iij-NBLD<2BE3VJ&k4Z6H;z?!7!7-XeeC-aX{Tl6ml!93m*cFJ z#Z5Q7fr}UC|2wXN*{|KEWPZ(V^*agnsVlrYkAd651IAl&yHxt9OnMCJBht5xn*lR2&NabYN zSWC^|d16K9!d@LjLiX4uEhz;%>2G#@i;bdI;t=8bK>y@P)WT!mDr~z}pG- zRg0M$Qpz0mbKF!xENTw8!Wwu{`9|04Gou}nTQ_L@`rl58B6UT^4~-?*}V`fYfKSaDIH zavlsK6XsL9-WmdH$C72oMpwJp)?;)Z4K6Es0B$SXP*QhM!gvpdUyI?}p1c2yYhY~r z_VvRqI~hi$_97U@cE5#Z{Zhy&EqB*`vAMpf?Ya?h{;uuk-}E1T!ah4kx_Q*9mOjl* zv62c1x-eMCSfQ*b3b|P6*~#_2>fN2y=iJQy-I$q_TIV>AHLGvxzY#v#{w}OBR>mny zZ+4AXVq%F7d*h&{U!c8&&KUXS@X->Bu@pTF71|eeQVYw8ns~h`7|n?)2@d35c_1Jn zeG)5*kFZ<}MejgYN(?7Nw?Mod)k5v*wm{$@osr)Ywv-QvXpeI;3Qku^T}zo`go?co z|65!$tORilITCe4GfhNoqaj~NtO|@obiA%Tub@&qQ)*Sn14oz#=<2osGcxe*+@PL< zyx=_nR&*Un8g$Iu#el1FV8xS6kKlqt6Q_nLmsoyCCicctlpM=xVMApO3V7u00mxNJ zn8H5H7~1cY0)_}KJSfc2QSG+HDoQlkX^Iwi_%Qb4&1XPlDw$%cwf-dlhzTK+<_D-) z&P@=34aLr)@%x%0WcLNFBZ4im4biAYc zX48#WytT#YP@@jEfGgaR&J#HZzJa@HjxyMYHe{pLPnxkn;~Nj*Rk*wS5*frI0o^@# z&G3U*-hF=Y_v1Euf&ZeY$+hsoi~%M`iq}OU5nnKjI6qCo7#tk{_f3pIO(8(pMmgCr#+;(8d(-5n@oY{gBKSFB;sfY zEGd8%M6}wgw88w$*dURSw+YzI2N!gycd}~V$*T@AlPt*-f=web80-YsRGL; zIurEoITNgt(oy6p0G%)TAq})jmI~qDOTd#8SWUAuE(*k}kk&NIGfR#?MWZ&@WgOiL z>$#C7>im5ft}NgVUz#o-;GS~3h`u>vuPTQ6J_?slXE&+uSm7V8X2xqGN*g32wQVF? z60uDVd}|BtzXW}IHl+O9$Y${gL@oN<={bc5POfF*UaM4*ulAX=jeCFG9716kCF{ap z+Aa!D*;gIqFWp_D0@7TOln&`G=|&m}X{5WP1i2vScNypR7x`wGaTX8H zJ@~rx)5+w$k^uMixVE%C0WLCO~Q+tBA;H0@eFG) z9eC{^DN&Wg*!QSPZ&6UQTXd8o&~Nom);LFsVoC&=vbu|xNN`s-1=AH*8)z4To#%#y zdd$@UB#=RyuU6;>-mgB-YAnr|4VG~L%5Zu?2?e8cV@hX1%$C z-Y!`@^OUFtA7Pe=$M(LJiXU=J1!QUEtKOP0NQ3X zL0EH2;5m@t@SxuG%G+4`P52~ZYSYtf<5_!E_05F>!Og3NVhP<3((hbndMVWA>MlDv zn$&G-7+NQ3%TTa+SwC{12rdHZ(>d@r=%m6}QzK^c#Jf1mYV4ihwfN65H)@P8$MxDc zTjl)d2R0#MAxtC@z=02~@CN4)F3cc@}c$eNk#9s}m0 zCQU1m>8KltX-7??Rz`KAa9O`78vwc z96b`^On^}8Uq2X$nJstj(oDH3I)|mIuLz zwkCtM6CN9f((dN*4jqG4{_r(Wh z2u?7~;PfTgKZy`BNs+soV7l`vUoj0Zs59#tk&2GGS#}^vM~n9_o1()DH&=e+1J8g6 z?KqAZE{5+wu z^h1JTDHbTO>mUG#C?;6@CZ1@94=<&=#wE65{;Up>sTq@gJ?nsNSa6zE7ZoR|eSK`& ziwVJeio-qK&1`}djVaTPBHAtX-iedlv!W}@HqzoQ&gu~oM(#ZleNhagi2S^z0$`*2 zvXv*_l*3vp7N$6SniJ6keA;%N);Z;F2X+yzHXEKK>|!l-K+oBIB9Rg(r?T)}`0nwz zW>J5H2T!yBBQv!CV3wS!?e?ao$JZGHB3>?^p;I0oEq1rFbn-K-z1;UX^Zco(t|y{F z&aaht8|ducgto&gzsFOSGgDA6d{NN+DwNR7IvD2_ztxv{`PTvRQAD{R>ii;bqI6H$ zi~7*gkXL6sk*D( zRfRn^T)TGZOa5H8)%KL|b$feS+tmm`x=ir7xA_SFtXdrfwMW*l6LlqDsdN9czC4LZ zxQ1hx2G%}RlTH8PFjxmCx{XLh9X)5F)BD@x`3Yu(w&|MQ@Wn))MQ5P40oe6lq zj6&YQ)Y$fsl?yoMn2DRKmBXL&;#5@wIec)ey+_r)wLWKQ$%Nl|=)1S>2v2Br1GB0z z{26J4KqT_fthh6KL4A_nUGh|M?rQeB3d2M>f>?eF=%>&KBi ztb~177I8YO@8HV-(xw2pP4vCgNM_ODMc*XT)Vb84bZ$(aRZCi0SD4Vb5~0yzn-7uD z8&6`h4|PfG#@4O=sM;eev2gieyH}I*Rnq8!MO>k8@S&aMNX9c!hpUjKeRDUN*M<4& z`yP541rMR2;EXAYLf51%0hfLwoLO*VT(v!KEHyrD(8{a*@p_=xOtG6Ck0QfS>k&u_69rGu_Jt&YG97L`S7&3_{l%EQ)VAjX z2UV7D9)#I1Jv#8Fd6X+dOxjZTXFW0vpAv0)rZ!Ck6!Fz&&ZCezKS|5 z__!pv3>!#(zZ}MQfb=Bz4!aBypX`XnE#6B?yfTCmP8;tZVe#%QC2|cSbs$Q7mx9Wk zrhgq}S`lflHu@AX)_|0m0Dgy%FGt|ZP!H;(BN8Ff)p``6P$lT2Z4~=eFDFmYJt6Yd zs+IG46y)X4Cg=VU%>5u$6hq|9hlX$~MPeX{3SWik%ZBMETV^`}7l|$=T9oPv=>MfAuVpVuT?xQI-5MnhAwB~WKF3p#jb^%x)hgQ5w zEYy^HY%m(3qgTb0>_xhyGy49WgkavN*iwr9){qxmZ}0h)}ji`R&Z0sEAcs4@JVrXS$uNXI67&^So5DE z_wSSV)|hizP*Za+cCTn0^tCx`&1B`kM^^O^qqM)Or4WgFyEKhu_AWCV(8q?&7iiv8?d=$)b z1MCx)Px;%)v~QO*(UKzoMpj-f68L&<9G&jy%k26a6l~xWa27d=0zy9Y?Knv>uTy3B z#R4dYL0;(wG{B!VU<) zL0dQ}cE7}kSnh!@UA2Nn@KkO8%G$oaXs^?*bXW`@IS`edO zPr)lZK}u7D_99TTzwi<#blDq<%z2HzF#{9rVJal40r))tDNA4@UK9YkbOz5og)RphDfLoH8TaTJ5@i1x@Ntowsmz3c5mldGTpqbAC8z+-y z3YUgK2;tdm95YQ4$o=gR_I;ot|JG0jq~!w!JryDgGKTgLd#SK)h0Z1kh907bO~U(% zT6jiFnX@TWSv@xNo`&z|2;9Rf1$ArDtzSTk!BFYr;&ymtj4Bt1vK|q*ut&Efy?Wd; zk}_qM;ziWm-`?rC{al#%^wRcw6wOCC6Gv|Oa7>zIK{tOroHE9p3-q;DwTZq9(y|SP zOB|hi75t%%z@ZErp@owZiI?H$xHMR7h2k#XwmQmT>7xof5gx@XC`fVWVA~cioSE&K zoAYasmf;04$arj zg1&eL7=I?+WRf^o3qFw^#Y?d9v=-_zeL94x2|usB_;~yo&#*;J>I2Yf+qzIM|Bzwn zf!lXOXQspLmvN-cJ7Fy^Z9K-=NwWY4W8RL-q!b82mgurWTar+^3SwpU*Swg_MY|-s469h*lM(kJ74z%e#v1B%~p6k+k`Zr4M;9Y)5 zrQ#%yC8mb5QdUfV#)WRwxc!2-9CA{=B zX*|`We_=f<%xhLdJy`#KbR#+lj|R6pJG@ZTcZtr=Ff(n00MTQyi<~xkl6_QIxuYG4 zAn6QsfWJSaT0)kmDQ#9{(H8{k;(F3zbIvl5oA9MZn}6VxAW4VEuDJQJ_tvW3^8<=i zgp3DjuXDefv#|&0?0j(&4lc6i2+%kQ@a&fm9)1GxAuGZrRy#lIac(Y6!xvAGHrz|( z)4AuuEkq7`w4@FDUqah3+{y7xTbMo!P#&kbRy-1zFRXRTL}Q62x?q@Ltwnr zqyF|*{ZdFu!MG|}fKcf)Jk0y#Qk3t&@IZLWry+1U{!CF4(R_B8fZnVnvN#y`yJk&8 z5o|-I$t$7DEs@z0(ie7=MpaKrn9UfAR;(N*a)J1eej0*KIXkIFx?K6bYtjN0RG<87MN5Ph zVo*0Xd;_STda7fc?U{jG%U9FOdo7NOGFCBEBwR&j;4Q&)m*JVsL7mSZgs;+{K}z*uLldQDk~pDMMpTRSMayDpW3jXcP-aFaK4SRwhOg43SAApaG6v=#1q zJc}I6RObkNMZVE@gW2>|4+xVVmeNu`#F_MzWq24w2tz{n%bb;&u07(#9!N=hc`@qKm@EtkN&lDJr;L zvk}HQSsd&o7#d_Yb%Py=9{clqy|F19S81|cMmz<+n!5J&3Ck5~Y}=}arb30r5}^V2 zwD^K-=syNKf8H+4r==Oz7M~|D34$w9WiTg+r6;uognB=hj*}U3^eWO|j0up?kWWmA zbEER8t!`eQ+ApRkQmsrzPN32!_e#P_Bfh6aGOTD3gOGBH=Ob&R+Zi30Sc%Aea9H~7 zEB4j%17ym*rkGd>UA_HLZ^3@`9`Eu;NC;;HEL3An;iEgR+j-;5@XGL#4o02(SG@?! zmNW>y;+PQTA_i>3r%-PIQ`x*!@b_24mk5(I-0 zzIJW*ZBIgn{B;FFhh;m=5q`WK>P;)21@!H0ON)E1P2mW93!PsfiMK!~#1#~LLfyQC z=}TF_5|H{5J7GF~A2vvJiJs7KH5%w}$Y@iz%2sMQefiYTC#VW!XWSEusTc6L|ImO) zFuc>MCylPg;Rn_By}7kLshEh9A0guK0m6Y_KKvx}_MX5@{;8^|M4lHz59q-^n>s3N%P-)wu*Apy1c*uY%ls6{?1UoxSMsVN7r!vmY$4U1ZpCFZp zSB*$nRK#ut<0W7!D`6u+bGR?I9e<3Zx6iW5FM1YNJ5roEjQwT4gD$elG@b7S?XgGj z6?8Gv(sGLkkFv-Bz!vs_FSNi1>W-{uoLZyfxL5}8Z{yqaEK9mx*?8EyKbB&|oe3nO z8VPv6K-BGik_oh;MUxzP=SHYz+sWoU*_Pc|ZAp%rEG2OgkyA{O@|sV48aj}*$c=#ReFzE9^##pCm4G| z2ExX>|7BshOX&F%0r(Syy*@UGUX!?ky}6Zz8#t5q|1GZL;`G!$N@DbUPo4((w_%ge zvSuqV7dVNPK^Ue9v@t}A{2cJ=Vt!H6_jWRDXA_0fHLnagK+aM{WcrW(C(d1S@nS3RlL zUYh7&54coZVswV%&><$802)Ds6(5Ty!)=(|2PPPUY}b*5H@uVe7@L=Qb0@q9St`u+ zN_!X`!fP90I@Pzd3+=S%-p@UT)RD36;vT`l)y>59$+Nk(IHfmD3&VHLW5m_Y`<9v9=7o^jo4Lz36MNl!%1 z3c{>#C-z6vmYddm?8F5!nukB?&9Qdzs!KMBj{!#L!8zi1kBIRuP=&b|uHG%D0++Ww zKF=0w;?gq+M!;#eX^_}Pr4<(R>gE(Ur;1)gwTux=f1IQG>fb4lRG zauq6JTk=W;nN0r%g|iMMZts2#+~Kw1kA-3nBBM<2&r;0npESg~K6u!!V7Y-zgy%jr z!=09xB~ev~Jcp)_SGwX7G$-j)q(48uz%aSH{(e4l252lUj``uz&I8@A_=KdyUZ?@Q(rXR552h$Wp&%Sm$b-Okpa9CMXW*$|8A3#-)8|R{nX6* zrI}P?wPY7piep=yrIXLRu5>57uq2UvzR<1~NwK~f8JrI9srnbs2UA;5UgdfyLRR&X zAXqb}GL2YZjX`a)UZ~1kU9Bst!uiUq9|M?TT{2V70AVJ|-z~5F6{)i=C=%eGKF6%Y z7Ft=6dZdWTXx8KXRhtxFSRyM*AuF=@3GUfDy+`L!cV z`(^xDDBY+K4#OC;>}DddEs8FK>ce{#!e2#ud;xxKyt5wP;!mD`4l^XIWLkqgMWo%f zaflwyB3@QC!jweeSK)r;DGG-cCu&bG3U3{ikLdi;H(v7DU?2%M?3qCC8b93Hb2PJ8 z@QeX-JYCs{mGVMLlFvfm&_dn3r$3Xx;jR^+ts(ChilDJchx+!Diue#c4B z*?P;?K7WLbI!9T{JovmNd>w<{$E!;H66`ObfV*qFGyRM4F5w9=Avky7CqrbX!vrp)1mkD1rC#mdLXdN5pFSJ z*(*Zoh!M$6Z&r2Qz%JRl;UnMd*_o@|;^NH2X#LxwMlEsQulGJjB@VuxX*cV4`Lws> zjl|ByKhtDk-fUo=Yh_xY^aZC}aF!_|(lIkA7TzQRY(t0p>Gd&tc> zes@Omai_pyi@$|MbZVE&ERRd{jvv1`xy40nO-yXFC#y+=4&S)Sp)+(Djck1bYeH4! zm3cZ@u`K`0Js)Lp=f+iJs`n|0M3vE<8>IBf1WpRk4Sn<9nsijK^v9}F8FXx52olT* z%Rek&eO%wFlj3mYQhb}!v=YZXUUOO=$D~YwDZ#~m7 z44|QAFF^b`OSw!ZP+^L^zK)1>UerWGO_E%p^2sP({CtErlFQfrt$O>4 zcuslow^_3ri0HuWcigZz2w%Q*7cm;>40)1o@kz}pysE50TzoIPQwuXFW}elhNffQq ztZ)$Oz@XwhOmbLQ@ zHdq2g<@TQ%lSARCV#zL2X2O~fLkuTD81 z;n(NWjoQXwD1@m_!wBJ5PzLd0<=A+CCKTW<`dnOI=yAmO5HaW9zyjJ<0ws*rHnyd_&^78n&clLII+-hONNCDg>?d-5cWDLC_b)9n6o{P1CU-$7L407s-_ z-pN>_?^HhHRDQmVX3NRF#4(=Jdi27iXbVZSm@Te&4UHIPDSbLIRgksrcMi!}LH8kx zi1kkV?^GlM!Caxc9^)p1vBDD=F(&PD^l79>spQ`#vz{QD@ z9VQiviBfRP&y$x0E-FU?(j7DNYgz5FnO9-1U7Fj10D;J3`ywYGRtdNp5Y>Qo+1-P@|$#4vrd!{It&D4(5 z88MK>t&(M*q{{bk+gKz8BV8NoUls7#Pa(Gk7HG*!WO1MnoAKw=-;D)9T2XpobRN@;R9$ zdDZ*TNdMDRe3pcxxWT#?Gvz6$N>L_At8M<_Nu!G9BUfJBQ zeod4i4j8la+F6~Ch&@o#a%JWXtFx6-@5vSL5;@>X>|ze$N=4Jovjt5>8c*=P)os?J z=UlsoH#$Jz7vfg0g=+%Jf)w{Z(Z%^d5W}1#^0}%BgEhRzNs8I2&P7V?GtK0o$CS>y zS%AH91idyPyNX-#5}K5@2VRQ>?Da%6Q(1)*NzRxW9-2LG&+L zW9v~&N*UPrd!ao6TTvM1O*2z1?grU81wdZsv-2#9){B=Yo58FPq{90cNRy?PdBzqr zbXR&i)#}mnzKE|yj_#pCV$njDr<`4a;0d&q@G_^+74Q(M$6rW^ZRcZS?r=zYm%#Gj z!Sc1I-ZxAVPnlVmU2ukuW86&QC4@4nDGZNmY%^`PdC5+u~%7?p{5Ihg@E{qe%G7|%$x8>B2lP60{y^WAi!)2f5_jj zyAZ&Czma_OcZ!1f$!-?4yN(KE{v8Flf2F|VM_l1=DI&Z}(RBvZ-?=MJurdV+bx}qc zMM>r#Mp-#9xf(Dlj7$ur%9-=K=m+1QT9ro_U?#&Wv%M{`+o5WT)8b>jv9 z{(W;{+`KsjQAHU^2{m;l1<5DCcK8k!lt%~8FU9>xGEa>%xpxcvNwk|}rEBVH6gs&y zcc%2{>C}&E29pz0OWd`^u-ES8cTVPzX`)(qt=d?&K@&=Rotx78SlqgrEVG_qUo)_mC$8U`F#qlHOCD&RSroexT?YJLzvne^0W z@;=|QRR6AVW@n3W0fEJOGM5gbEhzW#FFa{0FL+k>kgt~r3DnajgxZvn2mk*LWvgsJNdYFw~S!X4cFe+Q;Q-_W%N z9+%cg5D+rIfU$v>NB;`!-|$Y|w(+s#2VpgER|yU}|IL~d1DHEF1OAnnMj?dmwqP?|!Tm)27hExl-^LX;b^(CT z!UODGtX!?!0czl=9(xOLEjt>6{g40iN!)JVBc;&q!{D7LBTNX0>kPC%g@yXJ??CR3 z^oF;AH}dO}OTni1fx&;Ra!+t5|8G{gf|ZL4*w`O!41NfJAE&N>zi#R(&V#)+FzyN% z_g90{z|?BLiTfv@hp{u@$1u7B_-1N#iJ#RBzM2BR!2c8QKQ->n9NpJB+kXlz_@(`y zApg-W%GVs=-$=u6Jp_Mfr34rf;5=qxnT`lG`0>Z&B#n)_ODW`1+jPPicN} zhgOBZJau)7R=(j9e&@_!Y{d>iX#+|6|i>`&Q={(}Kji+O zpFcjFOMd9Ss|3O?C362PVeDvZY6)PztKhZE=cg?HTJXn${I25H4xgVwR(eM*+@Z8Irh^0H1^@(vM%fLB8x9<0IcS*cf20Th OJOEd-=rxTO#Qy`$*1Hh^ diff --git a/spring-cloud-data-flow/log-sink/.mvn/wrapper/maven-wrapper.properties b/spring-cloud-data-flow/log-sink/.mvn/wrapper/maven-wrapper.properties deleted file mode 100644 index c954cec91c..0000000000 --- a/spring-cloud-data-flow/log-sink/.mvn/wrapper/maven-wrapper.properties +++ /dev/null @@ -1 +0,0 @@ -distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.3.9/apache-maven-3.3.9-bin.zip diff --git a/spring-cloud-data-flow/log-sink/mvnw b/spring-cloud-data-flow/log-sink/mvnw deleted file mode 100644 index a1ba1bf554..0000000000 --- a/spring-cloud-data-flow/log-sink/mvnw +++ /dev/null @@ -1,233 +0,0 @@ -#!/bin/sh -# ---------------------------------------------------------------------------- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# ---------------------------------------------------------------------------- - -# ---------------------------------------------------------------------------- -# Maven2 Start Up Batch script -# -# Required ENV vars: -# ------------------ -# JAVA_HOME - location of a JDK home dir -# -# Optional ENV vars -# ----------------- -# M2_HOME - location of maven2's installed home dir -# MAVEN_OPTS - parameters passed to the Java VM when running Maven -# e.g. to debug Maven itself, use -# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -# MAVEN_SKIP_RC - flag to disable loading of mavenrc files -# ---------------------------------------------------------------------------- - -if [ -z "$MAVEN_SKIP_RC" ] ; then - - if [ -f /etc/mavenrc ] ; then - . /etc/mavenrc - fi - - if [ -f "$HOME/.mavenrc" ] ; then - . "$HOME/.mavenrc" - fi - -fi - -# OS specific support. $var _must_ be set to either true or false. -cygwin=false; -darwin=false; -mingw=false -case "`uname`" in - CYGWIN*) cygwin=true ;; - MINGW*) mingw=true;; - Darwin*) darwin=true - # - # Look for the Apple JDKs first to preserve the existing behaviour, and then look - # for the new JDKs provided by Oracle. - # - if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK ] ; then - # - # Apple JDKs - # - export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home - fi - - if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Java/JavaVirtualMachines/CurrentJDK ] ; then - # - # Apple JDKs - # - export JAVA_HOME=/System/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home - fi - - if [ -z "$JAVA_HOME" ] && [ -L "/Library/Java/JavaVirtualMachines/CurrentJDK" ] ; then - # - # Oracle JDKs - # - export JAVA_HOME=/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home - fi - - if [ -z "$JAVA_HOME" ] && [ -x "/usr/libexec/java_home" ]; then - # - # Apple JDKs - # - export JAVA_HOME=`/usr/libexec/java_home` - fi - ;; -esac - -if [ -z "$JAVA_HOME" ] ; then - if [ -r /etc/gentoo-release ] ; then - JAVA_HOME=`java-config --jre-home` - fi -fi - -if [ -z "$M2_HOME" ] ; then - ## resolve links - $0 may be a link to maven's home - PRG="$0" - - # need this for relative symlinks - while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG="`dirname "$PRG"`/$link" - fi - done - - saveddir=`pwd` - - M2_HOME=`dirname "$PRG"`/.. - - # make it fully qualified - M2_HOME=`cd "$M2_HOME" && pwd` - - cd "$saveddir" - # echo Using m2 at $M2_HOME -fi - -# For Cygwin, ensure paths are in UNIX format before anything is touched -if $cygwin ; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --unix "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --unix "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --unix "$CLASSPATH"` -fi - -# For Migwn, ensure paths are in UNIX format before anything is touched -if $mingw ; then - [ -n "$M2_HOME" ] && - M2_HOME="`(cd "$M2_HOME"; pwd)`" - [ -n "$JAVA_HOME" ] && - JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" - # TODO classpath? -fi - -if [ -z "$JAVA_HOME" ]; then - javaExecutable="`which javac`" - if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then - # readlink(1) is not available as standard on Solaris 10. - readLink=`which readlink` - if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then - if $darwin ; then - javaHome="`dirname \"$javaExecutable\"`" - javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" - else - javaExecutable="`readlink -f \"$javaExecutable\"`" - fi - javaHome="`dirname \"$javaExecutable\"`" - javaHome=`expr "$javaHome" : '\(.*\)/bin'` - JAVA_HOME="$javaHome" - export JAVA_HOME - fi - fi -fi - -if [ -z "$JAVACMD" ] ; then - if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - else - JAVACMD="`which java`" - fi -fi - -if [ ! -x "$JAVACMD" ] ; then - echo "Error: JAVA_HOME is not defined correctly." >&2 - echo " We cannot execute $JAVACMD" >&2 - exit 1 -fi - -if [ -z "$JAVA_HOME" ] ; then - echo "Warning: JAVA_HOME environment variable is not set." -fi - -CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher - -# For Cygwin, switch paths to Windows format before running java -if $cygwin; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --path --windows "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --windows "$CLASSPATH"` -fi - -# traverses directory structure from process work directory to filesystem root -# first directory with .mvn subdirectory is considered project base directory -find_maven_basedir() { - local basedir=$(pwd) - local wdir=$(pwd) - while [ "$wdir" != '/' ] ; do - if [ -d "$wdir"/.mvn ] ; then - basedir=$wdir - break - fi - wdir=$(cd "$wdir/.."; pwd) - done - echo "${basedir}" -} - -# concatenates all lines of a file -concat_lines() { - if [ -f "$1" ]; then - echo "$(tr -s '\n' ' ' < "$1")" - fi -} - -export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-$(find_maven_basedir)} -MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" - -# Provide a "standardized" way to retrieve the CLI args that will -# work with both Windows and non-Windows executions. -MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" -export MAVEN_CMD_LINE_ARGS - -WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -exec "$JAVACMD" \ - $MAVEN_OPTS \ - -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ - "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ - ${WRAPPER_LAUNCHER} "$@" diff --git a/spring-cloud-data-flow/log-sink/mvnw.cmd b/spring-cloud-data-flow/log-sink/mvnw.cmd deleted file mode 100644 index 2b934e89dd..0000000000 --- a/spring-cloud-data-flow/log-sink/mvnw.cmd +++ /dev/null @@ -1,145 +0,0 @@ -@REM ---------------------------------------------------------------------------- -@REM Licensed to the Apache Software Foundation (ASF) under one -@REM or more contributor license agreements. See the NOTICE file -@REM distributed with this work for additional information -@REM regarding copyright ownership. The ASF licenses this file -@REM to you under the Apache License, Version 2.0 (the -@REM "License"); you may not use this file except in compliance -@REM with the License. You may obtain a copy of the License at -@REM -@REM http://www.apache.org/licenses/LICENSE-2.0 -@REM -@REM Unless required by applicable law or agreed to in writing, -@REM software distributed under the License is distributed on an -@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -@REM KIND, either express or implied. See the License for the -@REM specific language governing permissions and limitations -@REM under the License. -@REM ---------------------------------------------------------------------------- - -@REM ---------------------------------------------------------------------------- -@REM Maven2 Start Up Batch script -@REM -@REM Required ENV vars: -@REM JAVA_HOME - location of a JDK home dir -@REM -@REM Optional ENV vars -@REM M2_HOME - location of maven2's installed home dir -@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands -@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending -@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven -@REM e.g. to debug Maven itself, use -@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files -@REM ---------------------------------------------------------------------------- - -@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' -@echo off -@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' -@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% - -@REM set %HOME% to equivalent of $HOME -if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") - -@REM Execute a user defined script before this one -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre -@REM check for pre script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" -if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" -:skipRcPre - -@setlocal - -set ERROR_CODE=0 - -@REM To isolate internal variables from possible post scripts, we use another setlocal -@setlocal - -@REM ==== START VALIDATION ==== -if not "%JAVA_HOME%" == "" goto OkJHome - -echo. -echo Error: JAVA_HOME not found in your environment. >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -:OkJHome -if exist "%JAVA_HOME%\bin\java.exe" goto init - -echo. -echo Error: JAVA_HOME is set to an invalid directory. >&2 -echo JAVA_HOME = "%JAVA_HOME%" >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -@REM ==== END VALIDATION ==== - -:init - -set MAVEN_CMD_LINE_ARGS=%* - -@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". -@REM Fallback to current working directory if not found. - -set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% -IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir - -set EXEC_DIR=%CD% -set WDIR=%EXEC_DIR% -:findBaseDir -IF EXIST "%WDIR%"\.mvn goto baseDirFound -cd .. -IF "%WDIR%"=="%CD%" goto baseDirNotFound -set WDIR=%CD% -goto findBaseDir - -:baseDirFound -set MAVEN_PROJECTBASEDIR=%WDIR% -cd "%EXEC_DIR%" -goto endDetectBaseDir - -:baseDirNotFound -set MAVEN_PROJECTBASEDIR=%EXEC_DIR% -cd "%EXEC_DIR%" - -:endDetectBaseDir - -IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig - -@setlocal EnableExtensions EnableDelayedExpansion -for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a -@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% - -:endReadAdditionalConfig - -SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" - -set WRAPPER_JAR="".\.mvn\wrapper\maven-wrapper.jar"" -set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CMD_LINE_ARGS% -if ERRORLEVEL 1 goto error -goto end - -:error -set ERROR_CODE=1 - -:end -@endlocal & set ERROR_CODE=%ERROR_CODE% - -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost -@REM check for post script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" -if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" -:skipRcPost - -@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' -if "%MAVEN_BATCH_PAUSE%" == "on" pause - -if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% - -exit /B %ERROR_CODE% \ No newline at end of file diff --git a/spring-cloud-data-flow/time-processor/.mvn/wrapper/maven-wrapper.jar b/spring-cloud-data-flow/time-processor/.mvn/wrapper/maven-wrapper.jar deleted file mode 100644 index 5fd4d5023f1463b5ba3970e33c460c1eb26d748d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49502 zcmb@tV|1n6wzeBvGe*U>ZQHh;%-Bg)Y}={WHY%yuwkkF%MnzxVwRUS~wY|@J_gP;% z^VfXZ{5793?z><89(^dufT2xlYVOQnYG>@?lA@vQF|UF0&X7tk8BUf?wq2J& zZe&>>paKUg4@;fwk0yeUPvM$yk)=f>TSFFB^a8f|_@mbE#MaBnd5qf6;hXq}c%IeK zn7gB0Kldbedq-vl@2wxJi{$%lufroKUjQLSFmt|<;M8~<5otM5ur#Dgc@ivmwRiYZW(Oco7kb8DWmo|a{coqYMU2raB9r6e9viK6MI3c&%jp05-Tf*O#6@8Ra=egYy01 z-V!G;_omANEvU-8!*>*)lWka9M<+IkNsrsenbXOfLc6qrYe`;lpst;vfs*70$z9UM zq%L>pFCOr$X*|9&3L2h;?VA9-IU*iR6FiGlJ=b~DzE5s^thxXUs4%~*zD#K&k>wZAU8 zpaa!M+Z-zjkfGK15N!&o<3=cgbZV7%ex@j^)Q9V`q^i;Fsbkbe6eHJ;dx{QbdCCs1 zdxq^WxoPsr`eiK3D0Ep}k$ank-0G&+lY!ZHDZBYEx%% z2FyE?Lb0cflLB)kDIj;G=m`^UO<4h(RWdF-DT>p{1J5J90!K!AgC0)?jxPbm$KUjg zJED+#7xQmAmr`(S%BQTV-c97As~r3zD$E;3S)@}p5udA@m6pLgRL5h-;m>LvCq?&Q zokC7Vnk-zBEaa;=Y;6(LJHS>mOJV&%0YfRdUOqbKZy~b z(905jIW0Pg;y`Yv2t+RnDvL4yGEUX*tK)JT6TWn4ik~L)fX#tAV!d8)+A)qWtSjcr z7s|f%f;*%XW!jiRvv9ayj@f&dc|1tKDc{O3BWcLGsn-OYyXRLXEOEwP4k?c`nIut0 z?4S;eO@EoynmkxHq>QpDL1q^wOQxrl))2qya?dk05^5hK? z{P6;WKHUaHw9B0dd&|xw&CYN2fVrn};Gq<=Z^QZk3e~HzzY~JrnPCs0XwMp#B<9Gm zw0?7h#4EY%O-ub6mi&O2vcpIkuM?st;RtEpKSz^Xr#3WHhpsZd!gh|_jGQ`KA30T- zKlz9vgB;pY^}Uh??nQKSzk>2&J+Qi*r3DeX4^$%2ag9^x_YckA-f9p_;8ulh(8j9~ zes{O#{v!m%n^el(VryTF-C%xfJJ$rZj)|Y|8o&))q9CEwg2;Wz&xzyHD=@T_B%b}C z=8G^*4*J4#jUJn{7-3^U(_uUp6E8+GDt#le)nya-Q4kL5ZGiFxT4bF+mX`whcif*? z>CL&Ryn3HHT^^QmWYr<}Q1_Jj7fOh}cS8r+^R#at-CnNl3!1_$96&7nR}gh}))7a0J&z-_eI))+{RCt)r8|7|sV9o01^9nv?aePxMqwPP!x|sNmnn&6{K$K*mVX9lxSAmcqAV1(hKA-=coeTb*otxTOGYXsh zW$31^q7L@<#y~SUYoNKP1JK?4|FQNQb$i8mCG@WhX9i_^;@M2f#!nq7_K*M!4lGz1 z5tfADkO7BZDLgVQ?k7C)f;$eqjHI&zgxhf}x$8^ZEwFfm-qY=+M+fbS)9r8fFE5H9 zv{WPU35cR8%z;(W%5<>y+E&v84J4^Y##N!$B++RI`CZ1i3IW9Nau=*pSxW&^Ov-F> zex=&9XYLVcm1Y?am>2VC`%gMev9$#~; zYwxYvMfeKFsd!OBB@eOb2QNHFcsfKm;&z{OVEUiYmQ}~L@>$Ms@|Ptf3jQO-=Q;1+ zFCw+p+Z3lK_FmIAYnk2V;o915cDM}%Ht5RH%w}P>Yg9{h1mZ}~R6tUII4X7i4-2i% z2Uiw3_uHR!d~5(s;p6btI@-xhAkRg9K|n#}PNT9Dw9P>z$3>30lP1(=mcQ|tpyv3@ ze1qU!69OAx4s7$8r7Y-#5I`m!BXq`f!6C(BtUlG-oq+liqMCS_D@0nSFc%y+N6_Zh zi%L3LhF3zZP{d1)L&SXxPD(fp@T@J;jZeNaf$zl>vAh7=tI z2;wS^QyRdZm~)Ur&!af;8eB8*7(F96K^=WbC$)#TWvB~Awo5AtPf8Il4snD}Xsqd< z>cH+gcg72nTg5tl>oFbwdT{BDyy1=f=4~h~L$)UX;FXa;NdSlyF{(YLrx&VDp`pQI zh3pQtC=d8i1V6yUmFon*LQsNYWen?eO-gSZ4cvYcdEd0klSxcBYw+|5AyCv6TT96h z{7Yh9`h}biU?3oBFn=d8>Hn`1Q*w6rgeX^QbC-WFwjY}Int0;qUny4WMjIee@#0%l z>YAWLVCNo1lp$>9L$Tx`t!dp?>5Pfbhc*!*wzfWkj_x`Q?`3Jc@9r8uq~dgb+lgeh zlA`eUal3e2ZnWQSSYB>qy#85^>j7!=uO-hG5*erp22NaC81#Ytioc>r?D9$b_JiC+ zSp)8KR$%}FjFNRkeE#c5vKbXNJDBoO< z)73Jt7Y|3v45efud1xkg2GO3OwYfsuBV`f6S_D>Aoh2%=`1Y$bHP>0kBvTSowX57H z&1nbbx=IT>X^ScKYL&&{LNq~^UNgR|at`D;SxTYpLvnj_F*bGgNV2tEl1k$ccA&NW zmX(LV*>Op)BOgoric(98mIU)$eUa&jM5bKlnOrHm$p^v@u;W0J)!@XWg+#X=9En(-tiw!l?65rD=zzl(+%<)bI{ZN;SRco{jO;>7 zlSY|TIxuN|d#YHx^^~>iYj2V>cC>wQwWzGVI!6#epjJ6tl_`7tDY17WMKMB@s*Jr& zXOs*@>EwQ6s>M13eZEBJ#q0|;8jao{wK4keesH9?$OSk~_3#*x`8fAzQa7fprQ6(Z zi$}B%m81y*S)RxaX;wW!5{{EDw8)IE3XDRO1Y^%TMr}c|Y>WBAKT=b*K&uMT(?JSl zO>gVtl_bKQ$??TeWr7wYO+Vbl?CTQj?JrW&td`|#@;R2Gca9jq^p`{@)KY97o3}Af zfTh{pUUWD;P7sq=I!lA6;*hq0Nq`F56T)x$K?BMOk}tptYw(%$?*otp2N6IF3#GgqM46Cda!qzvGZcMgcGV`bY5ZIfOB6^;US#WgRai zq#vS8ZqPY953|eFw<-p2Cakx|z#_{4pG}mk{EANI{PnK*CUslvS8whko=OTe13|It z>{O2p=mmanR2-n>LQHaMo}noWCmjFO@7^z~`Y{V>O`@rT{yBS=VXsb}*Pi_zDqM3? zjCZqWR}fEzAkms+Hiq8~qRAFvo}dVW{1gcZ?v&PdX?UG*yS}zT9g7nZ!F1WRH}sHA zJ4~B2Br~8?uhbaX!3g+7=3fVM)q^wEzv**rk5e34==NRCV z3G$G5B!DICFslm)c){oesa_0muLxGoq`xYVNURl*NhE#v2>y9vDz&vJwrB`Q>DhN# zY2GnY!Y^8E%PU0}haXL$8a5QN1-&7NWuC~{62j| z2ozmFyx8GpOzj?&KK1JF28;E8H_p4N^LMm9K0y}!lCxcK79eFGTtGm?7jy?t94Q@X zli|our1#|>f*68fyA0bSn=YisYSl8HB(dFN4Y$qb7p4DR0YQt=^eEMnJkgiM48$>QV6x5*^a|D|t zMPDk}u<^YEYrt|H&hy)DRk%rDIb{LTo;h7=fp^J9Lr&`{9`8_pS*tQ_$KXB$2#5{h z-&yPbN-zInq{7aYZuaItS8-2Mb4OQe2jD*&)0~898E|HlAq`o!M&It@vvnj z_y@))>~_oR%S8OfmFTGYIat^#8_YKMqWLac<^}RZFDcJqvSJa>&6HaLS7p-$)QyL= zHrO|t75`d41Bp37RZtKR%g^%o@9C5Ce=CjuvVQ-KI#Uw2WWa>cho;jztUt~Le*_pT zkfA2iif9QFp;vhd)|A?tdAQ?9o~?EqgL;=)eKFQ{E^u?OIP}fl^5A;$^ZVutCIqj5 z&*i+G?!Px|5~~6zTYf>~uw*kM`5p&Hju&#w!7^An3*mQwTK22wC7p^OsvMjWf`$MY zLX|ZFV#+>Uq2!QyRD9cgbI9nswteMAMWtK(_=d%r?TLrx?_rkjbjI(rbK#T9Gn}J| z5ajow3ZErpw+%}YfVL-q^{r~##xJ^_ux2yO1!LJZXg)>F70STV=&Ruwp&XP^_?$h0 zn>$a?!>N+Kt$UXzg`e+szB}*uw)Z$uL6?>*!0IrE)SgV~#a?Qgg7HuTsu3ncrcs|l z=sQSMtr}S!sQ4SriKg=M`1Y|bC`XJ+J(YT)op!Q);kj0_e)YNVNw8SI|1f%9%X?i5>$lLE(Wfc$wY?(O985d5e*)UPtF!7gG3(Kd z-^=-%-wWCEK`r4oFh^{|;Ci%W^P>K%9dBNDqi%c$Q{iY#(zbwN7~pQI=SHd%WuV7Z zO?0P;Zc6yeN;)IbJIP0=>W)EgE!76jM^?IyQ*D(T})1NGmP z~YAb6T^#R6;)Ls;cV~LWk z33lcLpbSjxStw9Z>Nv&+rPOXxCGB=?ttZs?{OF7;GYlV&w7-82POb$XrogqFpLA2`j&MLZXr=IG>PAFSb2np~x;E_kV{ zsDwbK$?iYRn7$;mHYZhQn6P2#_hXAHd?;q~!Zy}%;@%wT3u|Sa-!WxxOE_fwyFv*Db@>X;Rl+fK1oP?55*dN0#2%SuikZ)y7Kx>`8*9d?}5 zKvXF7J5&Ey6{A8qUFxrFOh<$xdSWV^dw7z|`7RVZJhAwO72V zRrM_3*wI`^ycl7~>6KaCYBr#WGR>}B)Q(V%&$MhVrU>u~ql zjGeZF&>=_ld$oY!V}5}Gb> z*iP38KOav9RHY)0uITwgz99w- zJX-0BGCdY*$c7pi@>@-`2>#>}c(DHaI62ntpKz z`c01Z#u7WuMZ71!jl7hv5|o61+uv5nG?*dffEL~328P5HlKh2&RQ;9X@f>c1x<>v= zZWNSz3Ii~oyAsKCmbd}|$2%ZN&3gc9>(NV=Z4Fnz2F@)PPbx1wwVMsUn=-G=cqE3# zjY{G4OI~2o$|*iuswTg1=hcZK$C=0^rOt-aOwXuxU=*uT?yF00)6sE}ZAZyy*$ZTH zk!P*xILX#5RygHy{k?2((&pRQv9_Ew+wZ>KPho_o1-{~I*s1h8 zBse@ONdkk-8EG?r5qof}lwTxdmmEN|%qw(STW|PFsw1LD!h_Vjo;C4?@h|da4Y;*; zvApQ=T&=jWU39Uz=_yN@Bn0{{)yn8RZ2&X!<*KBv-7tcWdkF1Ij8D0mU zwbcs}0vDaLGd@xx%S_QZ1H)GTt`~>+#z}HXJTl9S!sd9seVJc|_wUMSdD$>k`K_RG zlq(fsnR@KM^;C}}&vG2t+}_nGPuI5ovg$6TYeMPIREGxP@2r~RKd@>gV`mq0XENsh z%IRZ-ZNP+4#J`o-yRpP;w@;CrSr3wiix3e9Qc|s(WapRq950P->g|JYC$A)$YrGeH zz5dKlAHAPJ>%?llqqB&#+#VU3sp=9>Xms1J;tSYN>LMwNtU68yr!})K4X>%^IrIDp z>SHy&6fJHybwS^BW>okFeaQp6wxaVP`hy;ZX#e+=w3c?PGD&_LmeqL8oZ*YaM1+#S z5WNAKo4+99JW(+qcMjh;+c%R#R?t;(aQ`2`C=bo((ERzgAwKKazXy*0wHN;v;P|f> zBW&?`h#_I^?Bc5GX7XP@|MOiw%&-#?EQ|w+FdCl_&qPN&s$|Z17UCF9oXS#N z)px6>zm&}0osTnCGI;AXsj`q=LpIsW4x}q~70uey5N_NpdJ*Gv^@$g@f2{EB>LP7Y zE5P`jZh1vHNgk7LfMT({jLCjRZa4ubW;UA#%<@Zj?efrPdm{W3J5UEFgm`YkVqz;AMFetZuM5uQpvORb1GDX`WZGwTrF z46+&sAri5QXCfGYpdgonWR5`>ZEa;?jrKvfNvXF<&l)1uU-3q#4X16R2~?P0yg3H` zfw82QWZo^cac+%(g^_6`+2>~Fvy{pOCGnj86+=-!N`GPWAjus1ejhn6f4|mDkU6EE z&u~;xfdRMkj=h;4d~~+4(>L8weT3cz9e@E11EH!tX<IC!@kS+dsIQA`HQ2vdoS zzSD0U?mb1M0@qXu{yhZk2Y6}2B-AvvYg|tRr6z*_*2l*VLiR6G;M{O^Znq~LI%=I_ zCEU{htx&Bo+69G`p|A@R>KlY1*;;!{aWq?Pc0Cu!mT-0S`!>3<@s%Ri;utYNQ+CXDj+LC5<*$4*$-mogGg^S~3JRv{ry zPJzKJg!XKb>P}yJVc^1V@T&MV{z;@DLhvV{dG?RogCcPkROivliSr58>5Zw&&A2?n z9`JOLU;eQGaOr6GB(u{t3!+$NaLge$x#M&*sg!J;m~rRc)Ij5|?KX_4WiM-eE%t8e zqUM7eZ~ZonavR;K4g2t$4Fj=UVyEHM7LPb%8#0?Ks{~?!qhx9)2^>rg8{0npLtFKR zJB)19TFiD^T7IUXA8wt!@n5gj&@OK~EO}MR6^qd?^-?%-0~b2K9RWh+_mSEQQWsLCFOt#JlAQMgNxvv-m z;sF*r;WZ*Wi@I|6pMN+|_rLYKlWwvpKZY9rA;fo8l8hFQGI?4#kt1-r4UL;nPF@{~ z2T~a@2>yD|GuU55boxoIIe_BFo2Vq&rs&2itv|B>OC*bIeOqMBRw~y5KRMwiVHc)` zIBdliiY?Ai7*+k#NZf3MW5!hya~RZ6r7k)b?HF0e(n`ZX=iCpT7St`FDwL@SGgKlq zNnnU*3IcnYDzJg{7V$cb`xeb4(s(({&%f69XMTw-JQErS%?X_}?&y&tvHw@>1v{#R z4J@(=el^kRI+jGa;4)l#v%-jM^$~0ulxh6-{w*4Lsa>Tuc z>ElR3uM~GUChI)c{TW${73A3$vs<&iH;e?4HjW2MvSz9tp9@69+`_@x{Qte^eFo5IlAi&zw$=t6u8K%8JtjRI88PFNM7R>DaCO3rgngmk zI-RMOyt@kr-gVra=tl^@J#tI7M$dird(?aU!`&1xcm~2;dHN(RCxh4H((f|orQ!BS zu;(3Vn+^doXaqlhnjBJj-)w?5{;EEZTMx+?G>Rp4U^g<_yw_blAkdbj=5YrNhZB9@ zNmW=-!yFx5?5aF^+6*1XI|s3lIn_eyh`uv%?liNzSC#z&z^R(mqEYL@TdWzgkf>g1 zedzs*={eJavn{8vF%4nf@et<@wkOPR>NiVuYtESbFXQ;sDz_;|ITVeoW|me5>jN5P z5--{13JT{3ktkAf9M;Jty)yectg#{+9sK{C;2CvPU81tB3{8S5>hK{EXdVe?fR?sd8m`V zPM*$)g$HKp0~9Xf6#z!YJ&g!%VkCMxkt>ofE!62?#-&%|95^)JJ9 zk;GlJdoH0HwtDF(_aTv}mt$?EyRyE6@pm5DG~Gj-2%3HcZT13e)$)z99bdK_WCx|Q zQNza(R)Z>ZKTn8oIdcw%c^pFaMpFZ4HOds!BODgSBWJJYW3I_WJvoEm4xsfs%#LZ6 zdPCk{5XJ>2f7Hj-i*9lTW6BKCIuy)3L!b3(uPoSgW1WA+OEYYBRgSsJq7wjHh%c8ymMs3FU%~cprqL*084p*^T3{J%Gwq`jB30n(&y6- zII8-_r-s5&CVtsoNZ9%On?7yn;oZG03-$wx^uRk9>b*ufh15|HHk|%=MA^ioyb9CYU$7y$4R|M5HvpiCTxKSU`LUg$+ zB3IBl&{qO}agqF~BFM6&11wMeR-#Rkuh_(^j+P4{;X_w|siva$5P`dykyhfAUD%e8 z+{G0|7(Q`_U91sMKFO^rHoCWfXi0$^ev)-187G}klYv@+Rf%uZ&T4-Uhh=)pcU6O1 znXc^c5)!$X+39|4`yNHuCj0wkm+K1VN0G3_EL?-ZH$p5Y*v6ec4MV zS~1~}ZUhl&i^4`Fa|zyH4I%rXp;D6{&@*^TPEX2;4aI$}H@*ROEyFfe^RZI%;T>X> z>WVSUmx@2gGBxkV&nfyPK=JI$HxRKUv(-*xA_C;lDxT|PgX*&YYdkrd5-*3E1OSXBs>35DLsHHp%zm+n0N(Yu{lMo>_t&d1Xy zfCxl=(CNNx>ze+7w)60mp>(M``Qn$aUrVb$cJAb6=Do7VgW`Qn2;v5{9tB)jP$_mB zn{Hb_sMs4yxK|!`PI7+zO68}{Iv)dpu!+ZZl)xuoVU(oFsm<3gT{j2c*ORl|Lt+?dR^M?0 znW6rNA)cR*ci;z?BaG(f(XynY_y+kTjj~T$9{N{>ITQ4-DmZ6{cOkoea9*LpYL{Apo0hSpLqJu z9`tjP&ei;%pn9QY>-$9=<73M#X;qGb+%Bt0x>=u`eDtthI+LWB9CdAO=ulZo9&Ohs2X8GW>b7#&U|py28KTvPBl#Nqv^{AgkVXrOyS z@%3)}$I&mJOYWoG$BBb)Kb~0ptDmBxHNH^i6B8FA7NR2HfTnjP?eDnoY4NS_aYg4P zGGPw11sAf^^fTkY#j@T#6Ll*^GVaPo-1;aS6_a}{r{tWZilzse2m zc?LS=B|EWxCD|!O%|%t3C@Rd7=rKJRsteAWRoDu|*Kx-QwYZQeYpGrZ_1J%mFM;*S*u=0 z%1OC9>kmCGqBBu#-1jVPRVW*BTv%3uPI8fO?JOZD#P_W^V+K7&KVB>hzZ@PdY*%Ezo;}|5Mk`Mo2m*_K%no*jDJGp(s9j;&U`Z>z zO#SEe)k!p$VE-j2xDoX$!;Up5%8x$c`GH$l+gTA*YQaE0jwCOA<*__2NkV){z_u2=4NQ zSk$(oj$%ygio?3V8T3IyGMYvPs`t{im2IoHs7or+>>MYvG%Q?PwOLqe%73uGh6Wn; zo>e7qI$9?%cVVkvQLOLKcU5n*`~qn8pzkdu=Z4#2VnhUy>S*;kT=NqA!dQtnE?wVg zOKobxJ|QCjk`!(2*~5NQx{{=Lr=)ndyn{V|&PxUa=xQXVU?#M24F8H%C*uvs(#Va0 zSkp}0EFYq0#9xp&$O?gIInc#^^_6Ol88W%)S5A@HeE0(SR&!Yl>u=*5JEoUViDR@2 zJBjTsp=Y44W`Nb2+*CcZCkwP(QChX1s)b09DEIZCKt1$q2~;&DJ9!{bQ1Y6&T_9u1 zZM8^im8Wf#FUO6tZqc7#`z0cN_JA>#U_b7he%?cCnlV2&47y5Fc)Z7bp5xGe1zNq9 zl1VaV-tsm3fY=oIX^SPl!P;9$o?**0brq#ShM~3CXhh^SK0oOKB9O>;q3G@ z&4&h$mLSgohc^5IC|H>IGfZvVQFUT>T$|U7{znY`56<5d)07oiv*2R0+-BGPPkWJ! zIOzKF+<5o2YLWP|SGCx8w@<>u6K1o`++xJ+6kaJrt<&0Haq zyUccgxI$sR07Vo9-pF);heBva;?&NcAzC*gSSG9B3c?A;IH9J zl$j%F4*8;F0;H2Cjo*kWz4{kSh?nX}23&&KL+U(#nOAuR`wn@uwUNkWEgb*ZShKPy z`aXTJT4f*Um4`iv2KOfzf-~`#pOfH8>is*xnLBDTyx2Xuc8Y2Od6z((P2AZK@b_96 z#0V6jdw>sEDJ#uNGV|EshD1g&bYZCzCZTZ)286HLHc8Eyy_HPi;d#%;Wx}d6tUUxq z_VB$+898z_{9-A<*v6VI7?(dC04o!8$>DQ$OdbrA_@<6auiBNp{Dw$Hs@@gcybIQT zAU7Pc5YEX&&9IZ~iDo&V`&8K$-4o$)g?wF8xdv1I8-n}1bc7tviIBqt z#iIl1Hn;W?>2&#bU#VZ1wxq(7z=Q15#0yoz)#|r`KSPKI-{aN%l61^?B4RMDt?Vk` z)G#K6vUN?C!t{Q<@O4$0(qI>$U@@TI2FVF;AhSSb5}LtXx&=k&8%MWM3wv;Xq0p~W z#ZX;QFv5G9-i6=+d;R7Dwi)ciIZ1_V!aw;K^etau+g0fOA2HXpV#LQZGzf?h#@}(o z|3w!sZ|&mp$;tmDiO=zef5C|Alz+@@4u5#yZ7yNpP=&`432%a{K#{;nsS!jwk-$Qs zZRty}+N`Y~)c8|$&ra{bOQWM2K7qa}4Y{ndK%dKp&{ zFCvX{PAy_C{xzS_-`0>JlPP7&5!5 zBQ$NQz^z#2y-VeIxnfY|RzU`w+1t6vwQ|wM)LlpuaUzYehGII;>2DYyR|~wC@l97s zgX=f*1qtfDyco%BHmN+o<2qoi`D67R+RM$$NN5-moE4kx3MCFfuip*45nComOZKQf z3!(8tkSdhY5+A%@Y=eVEZkXU3S6B2V-R$ZuRIXWhsrJg3g)p4vXY@RV60bKuG zT6T!enE<;(A{*HPQhae*(@_!maV~AWD4EOwq10tkCXq+HPoe_Pu?d4Kg=2ypcs?&f zLa>mEmPF4ucJ%i~fEsNIa{QmQU27%Abh|w(`q)s~He5$5WYQ_wNJX6Qop<=7;I1jd zNZak`}0lVm+^O!i;|Lwo}ofXuJ)*UtH4xaPm*R7?YS*<&D__=@Kki>{f_Z-XqM;Tj195+~@d;rx zh5pj8oMuupWa#E(%85**I~1Zat-Sa^_R11-CiKdd`8m(DGuzOm9lX$Dd!DX!_Al}d zS!-|}dWG80S;`jSKDH%Uv;-OJNeBI0Bp$z->{_>1KU%h&Af7nns(L=xRN1 zLvOP=*UWIr)_5G2+fCsUV7mV|D>-~_VnvZ3_>=9 z_bL6`eK%W*9eJ34&Puz^@^ZIyoF@%DTun#OOEdUEn8>N9q(}?5*?`o?!_<(i%yc`k zf!xXD6SQscHgPgiHt>x6{n{+}%azrfV4VHi#umyi0;11c816`E??2`$;Rc`)qA2H( z5L|{o=ut7Te=^~@cR0_#cah0?w0Me$&>}ga8xxy=?DDl#}S~Y z4o2n`%IyGjQEP%8qS|v(kFK&RCJbF1gsRVJ>ceSjU`LuYJu%C>SRV#l`)ShD&KKzv ztD<9l0lcW0UQ8xjv|1NXRrCZhZh3JFX_BNT@V|u9$o~8M=cjOX|5iBS|9PAGPvQLc z6sA~BTM(~!c&V=5<}ZIx}O7A;|&bd7vR_y)t+ z?Vm7kb^gJ88g;!fRfMTSvKaPozQz4WcYD8l#0WxQ${P%0A$pwhjXzyA0ZzErH{1@M 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 OJOEd-=rxTO#Qy`$*1Hh^ diff --git a/spring-cloud-data-flow/time-processor/.mvn/wrapper/maven-wrapper.properties b/spring-cloud-data-flow/time-processor/.mvn/wrapper/maven-wrapper.properties deleted file mode 100644 index c954cec91c..0000000000 --- a/spring-cloud-data-flow/time-processor/.mvn/wrapper/maven-wrapper.properties +++ /dev/null @@ -1 +0,0 @@ -distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.3.9/apache-maven-3.3.9-bin.zip diff --git a/spring-cloud-data-flow/time-processor/mvnw b/spring-cloud-data-flow/time-processor/mvnw deleted file mode 100644 index a1ba1bf554..0000000000 --- a/spring-cloud-data-flow/time-processor/mvnw +++ /dev/null @@ -1,233 +0,0 @@ -#!/bin/sh -# ---------------------------------------------------------------------------- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# ---------------------------------------------------------------------------- - -# ---------------------------------------------------------------------------- -# Maven2 Start Up Batch script -# -# Required ENV vars: -# ------------------ -# JAVA_HOME - location of a JDK home dir -# -# Optional ENV vars -# ----------------- -# M2_HOME - location of maven2's installed home dir -# MAVEN_OPTS - parameters passed to the Java VM when running Maven -# e.g. to debug Maven itself, use -# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -# MAVEN_SKIP_RC - flag to disable loading of mavenrc files -# ---------------------------------------------------------------------------- - -if [ -z "$MAVEN_SKIP_RC" ] ; then - - if [ -f /etc/mavenrc ] ; then - . /etc/mavenrc - fi - - if [ -f "$HOME/.mavenrc" ] ; then - . "$HOME/.mavenrc" - fi - -fi - -# OS specific support. $var _must_ be set to either true or false. -cygwin=false; -darwin=false; -mingw=false -case "`uname`" in - CYGWIN*) cygwin=true ;; - MINGW*) mingw=true;; - Darwin*) darwin=true - # - # Look for the Apple JDKs first to preserve the existing behaviour, and then look - # for the new JDKs provided by Oracle. - # - if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK ] ; then - # - # Apple JDKs - # - export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home - fi - - if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Java/JavaVirtualMachines/CurrentJDK ] ; then - # - # Apple JDKs - # - export JAVA_HOME=/System/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home - fi - - if [ -z "$JAVA_HOME" ] && [ -L "/Library/Java/JavaVirtualMachines/CurrentJDK" ] ; then - # - # Oracle JDKs - # - export JAVA_HOME=/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home - fi - - if [ -z "$JAVA_HOME" ] && [ -x "/usr/libexec/java_home" ]; then - # - # Apple JDKs - # - export JAVA_HOME=`/usr/libexec/java_home` - fi - ;; -esac - -if [ -z "$JAVA_HOME" ] ; then - if [ -r /etc/gentoo-release ] ; then - JAVA_HOME=`java-config --jre-home` - fi -fi - -if [ -z "$M2_HOME" ] ; then - ## resolve links - $0 may be a link to maven's home - PRG="$0" - - # need this for relative symlinks - while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG="`dirname "$PRG"`/$link" - fi - done - - saveddir=`pwd` - - M2_HOME=`dirname "$PRG"`/.. - - # make it fully qualified - M2_HOME=`cd "$M2_HOME" && pwd` - - cd "$saveddir" - # echo Using m2 at $M2_HOME -fi - -# For Cygwin, ensure paths are in UNIX format before anything is touched -if $cygwin ; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --unix "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --unix "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --unix "$CLASSPATH"` -fi - -# For Migwn, ensure paths are in UNIX format before anything is touched -if $mingw ; then - [ -n "$M2_HOME" ] && - M2_HOME="`(cd "$M2_HOME"; pwd)`" - [ -n "$JAVA_HOME" ] && - JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" - # TODO classpath? -fi - -if [ -z "$JAVA_HOME" ]; then - javaExecutable="`which javac`" - if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then - # readlink(1) is not available as standard on Solaris 10. - readLink=`which readlink` - if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then - if $darwin ; then - javaHome="`dirname \"$javaExecutable\"`" - javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" - else - javaExecutable="`readlink -f \"$javaExecutable\"`" - fi - javaHome="`dirname \"$javaExecutable\"`" - javaHome=`expr "$javaHome" : '\(.*\)/bin'` - JAVA_HOME="$javaHome" - export JAVA_HOME - fi - fi -fi - -if [ -z "$JAVACMD" ] ; then - if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - else - JAVACMD="`which java`" - fi -fi - -if [ ! -x "$JAVACMD" ] ; then - echo "Error: JAVA_HOME is not defined correctly." >&2 - echo " We cannot execute $JAVACMD" >&2 - exit 1 -fi - -if [ -z "$JAVA_HOME" ] ; then - echo "Warning: JAVA_HOME environment variable is not set." -fi - -CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher - -# For Cygwin, switch paths to Windows format before running java -if $cygwin; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --path --windows "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --windows "$CLASSPATH"` -fi - -# traverses directory structure from process work directory to filesystem root -# first directory with .mvn subdirectory is considered project base directory -find_maven_basedir() { - local basedir=$(pwd) - local wdir=$(pwd) - while [ "$wdir" != '/' ] ; do - if [ -d "$wdir"/.mvn ] ; then - basedir=$wdir - break - fi - wdir=$(cd "$wdir/.."; pwd) - done - echo "${basedir}" -} - -# concatenates all lines of a file -concat_lines() { - if [ -f "$1" ]; then - echo "$(tr -s '\n' ' ' < "$1")" - fi -} - -export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-$(find_maven_basedir)} -MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" - -# Provide a "standardized" way to retrieve the CLI args that will -# work with both Windows and non-Windows executions. -MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" -export MAVEN_CMD_LINE_ARGS - -WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -exec "$JAVACMD" \ - $MAVEN_OPTS \ - -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ - "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ - ${WRAPPER_LAUNCHER} "$@" diff --git a/spring-cloud-data-flow/time-processor/mvnw.cmd b/spring-cloud-data-flow/time-processor/mvnw.cmd deleted file mode 100644 index 2b934e89dd..0000000000 --- a/spring-cloud-data-flow/time-processor/mvnw.cmd +++ /dev/null @@ -1,145 +0,0 @@ -@REM ---------------------------------------------------------------------------- -@REM Licensed to the Apache Software Foundation (ASF) under one -@REM or more contributor license agreements. See the NOTICE file -@REM distributed with this work for additional information -@REM regarding copyright ownership. The ASF licenses this file -@REM to you under the Apache License, Version 2.0 (the -@REM "License"); you may not use this file except in compliance -@REM with the License. You may obtain a copy of the License at -@REM -@REM http://www.apache.org/licenses/LICENSE-2.0 -@REM -@REM Unless required by applicable law or agreed to in writing, -@REM software distributed under the License is distributed on an -@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -@REM KIND, either express or implied. See the License for the -@REM specific language governing permissions and limitations -@REM under the License. -@REM ---------------------------------------------------------------------------- - -@REM ---------------------------------------------------------------------------- -@REM Maven2 Start Up Batch script -@REM -@REM Required ENV vars: -@REM JAVA_HOME - location of a JDK home dir -@REM -@REM Optional ENV vars -@REM M2_HOME - location of maven2's installed home dir -@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands -@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending -@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven -@REM e.g. to debug Maven itself, use -@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files -@REM ---------------------------------------------------------------------------- - -@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' -@echo off -@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' -@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% - -@REM set %HOME% to equivalent of $HOME -if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") - -@REM Execute a user defined script before this one -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre -@REM check for pre script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" -if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" -:skipRcPre - -@setlocal - -set ERROR_CODE=0 - -@REM To isolate internal variables from possible post scripts, we use another setlocal -@setlocal - -@REM ==== START VALIDATION ==== -if not "%JAVA_HOME%" == "" goto OkJHome - -echo. -echo Error: JAVA_HOME not found in your environment. >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -:OkJHome -if exist "%JAVA_HOME%\bin\java.exe" goto init - -echo. -echo Error: JAVA_HOME is set to an invalid directory. >&2 -echo JAVA_HOME = "%JAVA_HOME%" >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -@REM ==== END VALIDATION ==== - -:init - -set MAVEN_CMD_LINE_ARGS=%* - -@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". -@REM Fallback to current working directory if not found. - -set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% -IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir - -set EXEC_DIR=%CD% -set WDIR=%EXEC_DIR% -:findBaseDir -IF EXIST "%WDIR%"\.mvn goto baseDirFound -cd .. -IF "%WDIR%"=="%CD%" goto baseDirNotFound -set WDIR=%CD% -goto findBaseDir - -:baseDirFound -set MAVEN_PROJECTBASEDIR=%WDIR% -cd "%EXEC_DIR%" -goto endDetectBaseDir - -:baseDirNotFound -set MAVEN_PROJECTBASEDIR=%EXEC_DIR% -cd "%EXEC_DIR%" - -:endDetectBaseDir - -IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig - -@setlocal EnableExtensions EnableDelayedExpansion -for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a -@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% - -:endReadAdditionalConfig - -SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" - -set WRAPPER_JAR="".\.mvn\wrapper\maven-wrapper.jar"" -set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CMD_LINE_ARGS% -if ERRORLEVEL 1 goto error -goto end - -:error -set ERROR_CODE=1 - -:end -@endlocal & set ERROR_CODE=%ERROR_CODE% - -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost -@REM check for post script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" -if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" -:skipRcPost - -@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' -if "%MAVEN_BATCH_PAUSE%" == "on" pause - -if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% - -exit /B %ERROR_CODE% \ No newline at end of file diff --git a/spring-cloud-data-flow/time-source/.mvn/wrapper/maven-wrapper.jar b/spring-cloud-data-flow/time-source/.mvn/wrapper/maven-wrapper.jar deleted file mode 100644 index 5fd4d5023f1463b5ba3970e33c460c1eb26d748d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49502 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%0A$pwhjXzyA0ZzErH{1@M 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 OJOEd-=rxTO#Qy`$*1Hh^ diff --git a/spring-cloud-data-flow/time-source/.mvn/wrapper/maven-wrapper.properties b/spring-cloud-data-flow/time-source/.mvn/wrapper/maven-wrapper.properties deleted file mode 100644 index c954cec91c..0000000000 --- a/spring-cloud-data-flow/time-source/.mvn/wrapper/maven-wrapper.properties +++ /dev/null @@ -1 +0,0 @@ -distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.3.9/apache-maven-3.3.9-bin.zip diff --git a/spring-cloud-data-flow/time-source/mvnw b/spring-cloud-data-flow/time-source/mvnw deleted file mode 100644 index a1ba1bf554..0000000000 --- a/spring-cloud-data-flow/time-source/mvnw +++ /dev/null @@ -1,233 +0,0 @@ -#!/bin/sh -# ---------------------------------------------------------------------------- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# ---------------------------------------------------------------------------- - -# ---------------------------------------------------------------------------- -# Maven2 Start Up Batch script -# -# Required ENV vars: -# ------------------ -# JAVA_HOME - location of a JDK home dir -# -# Optional ENV vars -# ----------------- -# M2_HOME - location of maven2's installed home dir -# MAVEN_OPTS - parameters passed to the Java VM when running Maven -# e.g. to debug Maven itself, use -# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -# MAVEN_SKIP_RC - flag to disable loading of mavenrc files -# ---------------------------------------------------------------------------- - -if [ -z "$MAVEN_SKIP_RC" ] ; then - - if [ -f /etc/mavenrc ] ; then - . /etc/mavenrc - fi - - if [ -f "$HOME/.mavenrc" ] ; then - . "$HOME/.mavenrc" - fi - -fi - -# OS specific support. $var _must_ be set to either true or false. -cygwin=false; -darwin=false; -mingw=false -case "`uname`" in - CYGWIN*) cygwin=true ;; - MINGW*) mingw=true;; - Darwin*) darwin=true - # - # Look for the Apple JDKs first to preserve the existing behaviour, and then look - # for the new JDKs provided by Oracle. - # - if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK ] ; then - # - # Apple JDKs - # - export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home - fi - - if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Java/JavaVirtualMachines/CurrentJDK ] ; then - # - # Apple JDKs - # - export JAVA_HOME=/System/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home - fi - - if [ -z "$JAVA_HOME" ] && [ -L "/Library/Java/JavaVirtualMachines/CurrentJDK" ] ; then - # - # Oracle JDKs - # - export JAVA_HOME=/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home - fi - - if [ -z "$JAVA_HOME" ] && [ -x "/usr/libexec/java_home" ]; then - # - # Apple JDKs - # - export JAVA_HOME=`/usr/libexec/java_home` - fi - ;; -esac - -if [ -z "$JAVA_HOME" ] ; then - if [ -r /etc/gentoo-release ] ; then - JAVA_HOME=`java-config --jre-home` - fi -fi - -if [ -z "$M2_HOME" ] ; then - ## resolve links - $0 may be a link to maven's home - PRG="$0" - - # need this for relative symlinks - while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG="`dirname "$PRG"`/$link" - fi - done - - saveddir=`pwd` - - M2_HOME=`dirname "$PRG"`/.. - - # make it fully qualified - M2_HOME=`cd "$M2_HOME" && pwd` - - cd "$saveddir" - # echo Using m2 at $M2_HOME -fi - -# For Cygwin, ensure paths are in UNIX format before anything is touched -if $cygwin ; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --unix "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --unix "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --unix "$CLASSPATH"` -fi - -# For Migwn, ensure paths are in UNIX format before anything is touched -if $mingw ; then - [ -n "$M2_HOME" ] && - M2_HOME="`(cd "$M2_HOME"; pwd)`" - [ -n "$JAVA_HOME" ] && - JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" - # TODO classpath? -fi - -if [ -z "$JAVA_HOME" ]; then - javaExecutable="`which javac`" - if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then - # readlink(1) is not available as standard on Solaris 10. - readLink=`which readlink` - if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then - if $darwin ; then - javaHome="`dirname \"$javaExecutable\"`" - javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" - else - javaExecutable="`readlink -f \"$javaExecutable\"`" - fi - javaHome="`dirname \"$javaExecutable\"`" - javaHome=`expr "$javaHome" : '\(.*\)/bin'` - JAVA_HOME="$javaHome" - export JAVA_HOME - fi - fi -fi - -if [ -z "$JAVACMD" ] ; then - if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - else - JAVACMD="`which java`" - fi -fi - -if [ ! -x "$JAVACMD" ] ; then - echo "Error: JAVA_HOME is not defined correctly." >&2 - echo " We cannot execute $JAVACMD" >&2 - exit 1 -fi - -if [ -z "$JAVA_HOME" ] ; then - echo "Warning: JAVA_HOME environment variable is not set." -fi - -CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher - -# For Cygwin, switch paths to Windows format before running java -if $cygwin; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --path --windows "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --windows "$CLASSPATH"` -fi - -# traverses directory structure from process work directory to filesystem root -# first directory with .mvn subdirectory is considered project base directory -find_maven_basedir() { - local basedir=$(pwd) - local wdir=$(pwd) - while [ "$wdir" != '/' ] ; do - if [ -d "$wdir"/.mvn ] ; then - basedir=$wdir - break - fi - wdir=$(cd "$wdir/.."; pwd) - done - echo "${basedir}" -} - -# concatenates all lines of a file -concat_lines() { - if [ -f "$1" ]; then - echo "$(tr -s '\n' ' ' < "$1")" - fi -} - -export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-$(find_maven_basedir)} -MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" - -# Provide a "standardized" way to retrieve the CLI args that will -# work with both Windows and non-Windows executions. -MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" -export MAVEN_CMD_LINE_ARGS - -WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -exec "$JAVACMD" \ - $MAVEN_OPTS \ - -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ - "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ - ${WRAPPER_LAUNCHER} "$@" diff --git a/spring-cloud-data-flow/time-source/mvnw.cmd b/spring-cloud-data-flow/time-source/mvnw.cmd deleted file mode 100644 index 2b934e89dd..0000000000 --- a/spring-cloud-data-flow/time-source/mvnw.cmd +++ /dev/null @@ -1,145 +0,0 @@ -@REM ---------------------------------------------------------------------------- -@REM Licensed to the Apache Software Foundation (ASF) under one -@REM or more contributor license agreements. See the NOTICE file -@REM distributed with this work for additional information -@REM regarding copyright ownership. The ASF licenses this file -@REM to you under the Apache License, Version 2.0 (the -@REM "License"); you may not use this file except in compliance -@REM with the License. You may obtain a copy of the License at -@REM -@REM http://www.apache.org/licenses/LICENSE-2.0 -@REM -@REM Unless required by applicable law or agreed to in writing, -@REM software distributed under the License is distributed on an -@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -@REM KIND, either express or implied. See the License for the -@REM specific language governing permissions and limitations -@REM under the License. -@REM ---------------------------------------------------------------------------- - -@REM ---------------------------------------------------------------------------- -@REM Maven2 Start Up Batch script -@REM -@REM Required ENV vars: -@REM JAVA_HOME - location of a JDK home dir -@REM -@REM Optional ENV vars -@REM M2_HOME - location of maven2's installed home dir -@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands -@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending -@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven -@REM e.g. to debug Maven itself, use -@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files -@REM ---------------------------------------------------------------------------- - -@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' -@echo off -@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' -@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% - -@REM set %HOME% to equivalent of $HOME -if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") - -@REM Execute a user defined script before this one -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre -@REM check for pre script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" -if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" -:skipRcPre - -@setlocal - -set ERROR_CODE=0 - -@REM To isolate internal variables from possible post scripts, we use another setlocal -@setlocal - -@REM ==== START VALIDATION ==== -if not "%JAVA_HOME%" == "" goto OkJHome - -echo. -echo Error: JAVA_HOME not found in your environment. >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -:OkJHome -if exist "%JAVA_HOME%\bin\java.exe" goto init - -echo. -echo Error: JAVA_HOME is set to an invalid directory. >&2 -echo JAVA_HOME = "%JAVA_HOME%" >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -@REM ==== END VALIDATION ==== - -:init - -set MAVEN_CMD_LINE_ARGS=%* - -@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". -@REM Fallback to current working directory if not found. - -set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% -IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir - -set EXEC_DIR=%CD% -set WDIR=%EXEC_DIR% -:findBaseDir -IF EXIST "%WDIR%"\.mvn goto baseDirFound -cd .. -IF "%WDIR%"=="%CD%" goto baseDirNotFound -set WDIR=%CD% -goto findBaseDir - -:baseDirFound -set MAVEN_PROJECTBASEDIR=%WDIR% -cd "%EXEC_DIR%" -goto endDetectBaseDir - -:baseDirNotFound -set MAVEN_PROJECTBASEDIR=%EXEC_DIR% -cd "%EXEC_DIR%" - -:endDetectBaseDir - -IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig - -@setlocal EnableExtensions EnableDelayedExpansion -for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a -@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% - -:endReadAdditionalConfig - -SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" - -set WRAPPER_JAR="".\.mvn\wrapper\maven-wrapper.jar"" -set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CMD_LINE_ARGS% -if ERRORLEVEL 1 goto error -goto end - -:error -set ERROR_CODE=1 - -:end -@endlocal & set ERROR_CODE=%ERROR_CODE% - -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost -@REM check for post script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" -if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" -:skipRcPost - -@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' -if "%MAVEN_BATCH_PAUSE%" == "on" pause - -if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% - -exit /B %ERROR_CODE% \ No newline at end of file From 803abd6b5936d96627ff5e63a3559011a9b4e6a3 Mon Sep 17 00:00:00 2001 From: James Kerak Date: Wed, 14 Sep 2016 10:12:11 -0400 Subject: [PATCH 096/265] Remove empty application.properties files --- .../batch-job/src/main/resources/application.properties | 0 .../data-flow-server/src/main/resources/application.properties | 0 .../data-flow-shell/src/main/resources/application.properties | 0 .../log-sink/src/main/resources/application.properties | 0 .../time-processor/src/main/resources/application.properties | 0 .../time-source/src/main/resources/application.properties | 0 6 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 spring-cloud-data-flow/batch-job/src/main/resources/application.properties delete mode 100644 spring-cloud-data-flow/data-flow-server/src/main/resources/application.properties delete mode 100644 spring-cloud-data-flow/data-flow-shell/src/main/resources/application.properties delete mode 100644 spring-cloud-data-flow/log-sink/src/main/resources/application.properties delete mode 100644 spring-cloud-data-flow/time-processor/src/main/resources/application.properties delete mode 100644 spring-cloud-data-flow/time-source/src/main/resources/application.properties diff --git a/spring-cloud-data-flow/batch-job/src/main/resources/application.properties b/spring-cloud-data-flow/batch-job/src/main/resources/application.properties deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/spring-cloud-data-flow/data-flow-server/src/main/resources/application.properties b/spring-cloud-data-flow/data-flow-server/src/main/resources/application.properties deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/spring-cloud-data-flow/data-flow-shell/src/main/resources/application.properties b/spring-cloud-data-flow/data-flow-shell/src/main/resources/application.properties deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/spring-cloud-data-flow/log-sink/src/main/resources/application.properties b/spring-cloud-data-flow/log-sink/src/main/resources/application.properties deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/spring-cloud-data-flow/time-processor/src/main/resources/application.properties b/spring-cloud-data-flow/time-processor/src/main/resources/application.properties deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/spring-cloud-data-flow/time-source/src/main/resources/application.properties b/spring-cloud-data-flow/time-source/src/main/resources/application.properties deleted file mode 100644 index e69de29bb2..0000000000 From fa059546e5acd3f99f49e00551a82a8305558a89 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Wed, 14 Sep 2016 18:24:08 +0200 Subject: [PATCH 097/265] Update pom.xml --- pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/pom.xml b/pom.xml index 2f588c032c..d37be9136e 100644 --- a/pom.xml +++ b/pom.xml @@ -104,6 +104,7 @@ spring-rest-angular spring-rest-docs spring-cloud + spring-cloud-data-flow spring-security-basic-auth spring-security-custom-permission From 678d99b6e5f33535b781b31612ac9f5cd2a7d493 Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Wed, 14 Sep 2016 21:52:09 +0300 Subject: [PATCH 098/265] custom userservice new project --- spring-userservice/.springBeans | 15 + spring-userservice/pom.xml | 310 ++++++++++++++++++ .../org/baeldung/custom/config/MvcConfig.java | 42 +++ .../config/PersistenceDerbyJPAConfig.java | 89 +++++ .../custom/config/SecSecurityConfig.java | 75 +++++ .../baeldung/persistence/model/MyUser.java | 50 +++ .../security/MyUserDetailsService.java | 37 +++ .../org/baeldung/security/UserController.java | 52 +++ .../java/org/baeldung/user/dao/MyUserDAO.java | 40 +++ .../baeldung/user/service/MyUserService.java | 45 +++ .../main/java/org/baeldung/web/MyUserDto.java | 29 ++ .../resources/persistence-derby.properties | 12 + .../src/main/webapp/META-INF/MANIFEST.MF | 3 + .../webapp/WEB-INF/mvc-dispatcher-servlet.xml | 88 +++++ .../src/main/webapp/WEB-INF/views/index.jsp | 35 ++ .../src/main/webapp/WEB-INF/views/login.jsp | 29 ++ .../main/webapp/WEB-INF/views/register.jsp | 23 ++ .../src/main/webapp/WEB-INF/web.xml | 51 +++ 18 files changed, 1025 insertions(+) create mode 100644 spring-userservice/.springBeans create mode 100644 spring-userservice/pom.xml create mode 100644 spring-userservice/src/main/java/org/baeldung/custom/config/MvcConfig.java create mode 100644 spring-userservice/src/main/java/org/baeldung/custom/config/PersistenceDerbyJPAConfig.java create mode 100644 spring-userservice/src/main/java/org/baeldung/custom/config/SecSecurityConfig.java create mode 100644 spring-userservice/src/main/java/org/baeldung/persistence/model/MyUser.java create mode 100644 spring-userservice/src/main/java/org/baeldung/security/MyUserDetailsService.java create mode 100644 spring-userservice/src/main/java/org/baeldung/security/UserController.java create mode 100644 spring-userservice/src/main/java/org/baeldung/user/dao/MyUserDAO.java create mode 100644 spring-userservice/src/main/java/org/baeldung/user/service/MyUserService.java create mode 100644 spring-userservice/src/main/java/org/baeldung/web/MyUserDto.java create mode 100644 spring-userservice/src/main/resources/persistence-derby.properties create mode 100644 spring-userservice/src/main/webapp/META-INF/MANIFEST.MF create mode 100644 spring-userservice/src/main/webapp/WEB-INF/mvc-dispatcher-servlet.xml create mode 100644 spring-userservice/src/main/webapp/WEB-INF/views/index.jsp create mode 100644 spring-userservice/src/main/webapp/WEB-INF/views/login.jsp create mode 100644 spring-userservice/src/main/webapp/WEB-INF/views/register.jsp create mode 100644 spring-userservice/src/main/webapp/WEB-INF/web.xml diff --git a/spring-userservice/.springBeans b/spring-userservice/.springBeans new file mode 100644 index 0000000000..ff32b84d3b --- /dev/null +++ b/spring-userservice/.springBeans @@ -0,0 +1,15 @@ + + + 1 + + + + + + + + + + + + diff --git a/spring-userservice/pom.xml b/spring-userservice/pom.xml new file mode 100644 index 0000000000..5edaf15d9b --- /dev/null +++ b/spring-userservice/pom.xml @@ -0,0 +1,310 @@ + + 4.0.0 + spring-userservice + spring-userservice + 0.0.1-SNAPSHOT + war + + + + + + + org.springframework + spring-orm + ${org.springframework.version} + + + org.springframework + spring-context + ${org.springframework.version} + + + + + + org.hibernate + hibernate-entitymanager + ${hibernate.version} + + + org.hibernate + hibernate-ehcache + ${hibernate.version} + + + xml-apis + xml-apis + 1.4.01 + + + org.javassist + javassist + ${javassist.version} + + + mysql + mysql-connector-java + ${mysql-connector-java.version} + runtime + + + org.springframework.data + spring-data-jpa + ${spring-data-jpa.version} + + + com.h2database + h2 + ${h2.version} + + + + + + org.hibernate + hibernate-validator + ${hibernate-validator.version} + + + javax.el + javax.el-api + 2.2.5 + + + + + + com.google.guava + guava + ${guava.version} + + + + + + org.apache.commons + commons-lang3 + ${commons-lang3.version} + test + + + + org.springframework + spring-test + ${org.springframework.version} + test + + + + junit + junit + ${junit.version} + test + + + + org.hamcrest + hamcrest-core + ${org.hamcrest.version} + test + + + org.hamcrest + hamcrest-library + ${org.hamcrest.version} + test + + + + org.mockito + mockito-core + ${mockito.version} + test + + + + org.springframework + spring-core + ${org.springframework.version} + + + org.springframework + spring-web + ${org.springframework.version} + + + org.springframework + spring-webmvc + ${org.springframework.version} + + + + javax.servlet + servlet-api + 3.0-alpha-1 + + + org.springframework.security + spring-security-core + ${org.springframework.security.version} + + + org.springframework.security + spring-security-web + ${org.springframework.security.version} + + + org.springframework.security + spring-security-config + ${org.springframework.security.version} + + + + org.apache.derby + derby + 10.12.1.1 + + + org.apache.derby + derbyclient + 10.12.1.1 + + + org.apache.derby + derbynet + 10.12.1.1 + + + org.apache.derby + derbytools + 10.12.1.1 + + + taglibs + standard + 1.1.2 + + + org.springframework.security + spring-security-taglibs + 4.1.3.RELEASE + + + javax.servlet.jsp.jstl + jstl-api + 1.2 + + + + + spring-userservice + + + src/main/resources + true + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + 1.8 + 1.8 + + + + + org.apache.maven.plugins + maven-war-plugin + ${maven-war-plugin.version} + + + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + + + + + + + + + + + org.codehaus.cargo + cargo-maven2-plugin + ${cargo-maven2-plugin.version} + + true + + jetty8x + embedded + + + + + + + 8082 + + + + + + + + + + + + 4.1.3.RELEASE + 4.3.2.RELEASE + 3.20.0-GA + + + 5.2.2.Final + 5.1.38 + 1.10.2.RELEASE + 1.4.192 + + + 1.7.13 + 1.1.3 + + + 5.2.2.Final + + + 19.0 + 3.4 + + + 1.3 + 4.12 + 1.10.19 + + 4.4.1 + 4.5 + + 2.9.0 + + + 3.5.1 + 2.6 + 2.19.1 + 2.7 + 1.4.18 + + + + + + \ No newline at end of file diff --git a/spring-userservice/src/main/java/org/baeldung/custom/config/MvcConfig.java b/spring-userservice/src/main/java/org/baeldung/custom/config/MvcConfig.java new file mode 100644 index 0000000000..4a9e737a92 --- /dev/null +++ b/spring-userservice/src/main/java/org/baeldung/custom/config/MvcConfig.java @@ -0,0 +1,42 @@ +package org.baeldung.custom.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.ViewResolver; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; +import org.springframework.web.servlet.view.InternalResourceViewResolver; +import org.springframework.web.servlet.view.JstlView; + +@EnableWebMvc +@Configuration +@ComponentScan(basePackages = { "org.baeldung.security" }) +public class MvcConfig extends WebMvcConfigurerAdapter { + + public MvcConfig() { + super(); + } + + @Override + public void addViewControllers(final ViewControllerRegistry registry) { + super.addViewControllers(registry); + + registry.addViewController("/"); + registry.addViewController("/index"); + registry.addViewController("/login"); + registry.addViewController("/register"); + } + + @Bean + public ViewResolver viewResolver() { + final InternalResourceViewResolver bean = new InternalResourceViewResolver(); + + bean.setViewClass(JstlView.class); + bean.setPrefix("/WEB-INF/view/"); + bean.setSuffix(".jsp"); + + return bean; + } +} diff --git a/spring-userservice/src/main/java/org/baeldung/custom/config/PersistenceDerbyJPAConfig.java b/spring-userservice/src/main/java/org/baeldung/custom/config/PersistenceDerbyJPAConfig.java new file mode 100644 index 0000000000..6be7053b78 --- /dev/null +++ b/spring-userservice/src/main/java/org/baeldung/custom/config/PersistenceDerbyJPAConfig.java @@ -0,0 +1,89 @@ +package org.baeldung.custom.config; + +import java.util.Properties; + +import javax.persistence.EntityManagerFactory; +import javax.sql.DataSource; + +import org.baeldung.user.dao.MyUserDAO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.PropertySource; +import org.springframework.core.env.Environment; +import org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor; +import org.springframework.jdbc.datasource.DriverManagerDataSource; +import org.springframework.orm.jpa.JpaTransactionManager; +import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; +import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter; +import org.springframework.transaction.PlatformTransactionManager; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +import com.google.common.base.Preconditions; + +@Configuration +@EnableTransactionManagement +@PropertySource({ "classpath:persistence-derby.properties" }) +public class PersistenceDerbyJPAConfig { + + @Autowired + private Environment env; + + public PersistenceDerbyJPAConfig() { + super(); + } + + // beans + + @Bean + public LocalContainerEntityManagerFactoryBean myEmf() { + final LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean(); + em.setDataSource(dataSource()); + em.setPackagesToScan(new String[] { "org.baeldung.persistence.model" }); + + final HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); + em.setJpaVendorAdapter(vendorAdapter); + em.setJpaProperties(additionalProperties()); + + return em; + } + + @Bean + public DataSource dataSource() { + final DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(Preconditions.checkNotNull(env.getProperty("jdbc.driverClassName"))); + dataSource.setUrl(Preconditions.checkNotNull(env.getProperty("jdbc.url"))); + dataSource.setUsername(Preconditions.checkNotNull(env.getProperty("jdbc.user"))); + dataSource.setPassword(Preconditions.checkNotNull(env.getProperty("jdbc.pass"))); + + return dataSource; + } + + @Bean + public PlatformTransactionManager transactionManager(final EntityManagerFactory emf) { + final JpaTransactionManager transactionManager = new JpaTransactionManager(); + transactionManager.setEntityManagerFactory(emf); + return transactionManager; + } + + @Bean + public PersistenceExceptionTranslationPostProcessor exceptionTranslation() { + return new PersistenceExceptionTranslationPostProcessor(); + } + + final Properties additionalProperties() { + final Properties hibernateProperties = new Properties(); + hibernateProperties.setProperty("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto")); + hibernateProperties.setProperty("hibernate.dialect", env.getProperty("hibernate.dialect")); + hibernateProperties.setProperty("hibernate.cache.use_second_level_cache", env.getProperty("hibernate.cache.use_second_level_cache")); + hibernateProperties.setProperty("hibernate.cache.use_query_cache", env.getProperty("hibernate.cache.use_query_cache")); + // hibernateProperties.setProperty("hibernate.globally_quoted_identifiers", "true"); + return hibernateProperties; + } + + @Bean + public MyUserDAO myUserDAO() { + final MyUserDAO myUserDAO = new MyUserDAO(); + return myUserDAO; + } +} \ No newline at end of file diff --git a/spring-userservice/src/main/java/org/baeldung/custom/config/SecSecurityConfig.java b/spring-userservice/src/main/java/org/baeldung/custom/config/SecSecurityConfig.java new file mode 100644 index 0000000000..44df02980f --- /dev/null +++ b/spring-userservice/src/main/java/org/baeldung/custom/config/SecSecurityConfig.java @@ -0,0 +1,75 @@ +package org.baeldung.custom.config; + +import org.baeldung.security.MyUserDetailsService; +import org.baeldung.user.service.MyUserService; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Profile; +import org.springframework.security.authentication.dao.DaoAuthenticationProvider; +import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.security.crypto.password.PasswordEncoder; + +@Configuration +@EnableWebSecurity +@Profile("!https") +public class SecSecurityConfig extends WebSecurityConfigurerAdapter { + + public SecSecurityConfig() { + super(); + } + + @Override + protected void configure(final AuthenticationManagerBuilder auth) throws Exception { + // @formatter:off + auth.authenticationProvider(authenticationProvider()); + // @formatter:on + } + + @Override + protected void configure(final HttpSecurity http) throws Exception { + // @formatter:off + http + .csrf().disable() + .authorizeRequests() + .antMatchers("/*").permitAll() + .and() + .formLogin() + .loginPage("/login") + .loginProcessingUrl("/login") + .defaultSuccessUrl("/",true) + .failureUrl("/login?error=true") + .and() + .logout() + .logoutUrl("/logout") + .deleteCookies("JSESSIONID") + .logoutSuccessUrl("/"); + // @formatter:on + } + + @Bean + public DaoAuthenticationProvider authenticationProvider() { + final DaoAuthenticationProvider authProvider = new DaoAuthenticationProvider(); + authProvider.setUserDetailsService(myUserDetailsService()); + authProvider.setPasswordEncoder(encoder()); + return authProvider; + } + + @Bean + public PasswordEncoder encoder() { + return new BCryptPasswordEncoder(11); + } + + @Bean + public MyUserDetailsService myUserDetailsService() { + return new MyUserDetailsService(); + } + + @Bean + public MyUserService myUserService() { + return new MyUserService(); + } +} diff --git a/spring-userservice/src/main/java/org/baeldung/persistence/model/MyUser.java b/spring-userservice/src/main/java/org/baeldung/persistence/model/MyUser.java new file mode 100644 index 0000000000..804d391641 --- /dev/null +++ b/spring-userservice/src/main/java/org/baeldung/persistence/model/MyUser.java @@ -0,0 +1,50 @@ +package org.baeldung.persistence.model; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Table; + +@Entity +@Table(schema = "spring_custom_user_service") +public class MyUser { + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private int id; + + @Column(unique = true, nullable = false) + private String username; + + @Column(nullable = false) + private String password; + + public MyUser() { + } + + public int getId() { + return id; + } + + public void setId(final int id) { + this.id = id; + } + + public String getUsername() { + return username; + } + + public void setUsername(final String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(final String password) { + this.password = password; + } +} diff --git a/spring-userservice/src/main/java/org/baeldung/security/MyUserDetailsService.java b/spring-userservice/src/main/java/org/baeldung/security/MyUserDetailsService.java new file mode 100644 index 0000000000..4c02f53d20 --- /dev/null +++ b/spring-userservice/src/main/java/org/baeldung/security/MyUserDetailsService.java @@ -0,0 +1,37 @@ +package org.baeldung.security; + +import java.util.ArrayList; +import java.util.Collection; + +import org.baeldung.persistence.model.MyUser; +import org.baeldung.user.dao.MyUserDAO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.core.userdetails.User; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.stereotype.Service; + +@Service("userDetailsService") +public class MyUserDetailsService implements UserDetailsService { + + @Autowired + MyUserDAO myUserDAO; + + @Override + public UserDetails loadUserByUsername(final String username) throws UsernameNotFoundException { + final MyUser user = myUserDAO.findByUsername(username); + + if (user == null) { + throw new UsernameNotFoundException("No user found with username: " + username); + } + else { + final Collection authorities = new ArrayList<>(); + authorities.add(new SimpleGrantedAuthority("ROLE_USER")); + return new User(user.getUsername(), user.getPassword(), authorities); + } + } + +} diff --git a/spring-userservice/src/main/java/org/baeldung/security/UserController.java b/spring-userservice/src/main/java/org/baeldung/security/UserController.java new file mode 100644 index 0000000000..b1c96e72c0 --- /dev/null +++ b/spring-userservice/src/main/java/org/baeldung/security/UserController.java @@ -0,0 +1,52 @@ +package org.baeldung.security; + +import javax.annotation.Resource; + +import org.baeldung.user.service.MyUserService; +import org.baeldung.web.MyUserDto; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; + +@Controller +public class UserController { + + @Resource + MyUserService myUserService; + + @RequestMapping(value = "/register", method = RequestMethod.POST) + public String registerUserAccount(final MyUserDto accountDto, final Model model) { + final Authentication auth = SecurityContextHolder.getContext().getAuthentication(); + model.addAttribute("name", auth.getName()); + try { + myUserService.registerNewUserAccount(accountDto); + model.addAttribute("message", "Registration successful"); + return "index"; + } + catch(final Exception exc){ + model.addAttribute("message", "Registration failed"); + + return "index"; + } + } + + @RequestMapping(value = "/", method = RequestMethod.GET) + public String getHomepage(final Model model) { + final Authentication auth = SecurityContextHolder.getContext().getAuthentication(); + model.addAttribute("name", auth.getName()); + return "index"; + } + + @RequestMapping(value = "/register", method = RequestMethod.GET) + public String getRegister() { + return "register"; + } + + @RequestMapping(value = "/login", method = RequestMethod.GET) + public String getLogin() { + return "login"; + } +} diff --git a/spring-userservice/src/main/java/org/baeldung/user/dao/MyUserDAO.java b/spring-userservice/src/main/java/org/baeldung/user/dao/MyUserDAO.java new file mode 100644 index 0000000000..5741d19bf2 --- /dev/null +++ b/spring-userservice/src/main/java/org/baeldung/user/dao/MyUserDAO.java @@ -0,0 +1,40 @@ +package org.baeldung.user.dao; + +import java.util.List; + +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import javax.persistence.Query; + +import org.baeldung.persistence.model.MyUser; +import org.springframework.stereotype.Repository; + +@Repository +public class MyUserDAO { + + @PersistenceContext + private EntityManager entityManager; + + public MyUser findByUsername(final String username) { + final Query query = entityManager.createQuery("from MyUser where username=:username", MyUser.class); + query.setParameter("username", username); + final List result = query.getResultList(); + if (result != null && result.size() > 0) { + return result.get(0); + } else + return null; + } + + public MyUser save(final MyUser user) { + entityManager.persist(user); + return user; + } + + public EntityManager getEntityManager() { + return entityManager; + } + + public void setEntityManager(final EntityManager entityManager) { + this.entityManager = entityManager; + } +} diff --git a/spring-userservice/src/main/java/org/baeldung/user/service/MyUserService.java b/spring-userservice/src/main/java/org/baeldung/user/service/MyUserService.java new file mode 100644 index 0000000000..f4705f3193 --- /dev/null +++ b/spring-userservice/src/main/java/org/baeldung/user/service/MyUserService.java @@ -0,0 +1,45 @@ +package org.baeldung.user.service; + +import org.baeldung.persistence.model.MyUser; +import org.baeldung.user.dao.MyUserDAO; +import org.baeldung.web.MyUserDto; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@Transactional +public class MyUserService { + + @Autowired + private PasswordEncoder passwordEncoder; + + @Autowired + MyUserDAO myUserDAO; + + public MyUser registerNewUserAccount(final MyUserDto accountDto) throws Exception { + if (usernameExists(accountDto.getUsername())) { + throw new Exception("There is an account with that username: " + accountDto.getUsername()); + } + final MyUser user = new MyUser(); + + user.setUsername(accountDto.getUsername()); + user.setPassword(passwordEncoder.encode(accountDto.getPassword())); + return myUserDAO.save(user); + } + + public MyUser getUserByUsername(final String username) { + final MyUser user = myUserDAO.findByUsername(username); + return user; + } + + private boolean usernameExists(final String username) { + final MyUser user = myUserDAO.findByUsername(username); + if (user != null) { + return true; + } + return false; + } + +} diff --git a/spring-userservice/src/main/java/org/baeldung/web/MyUserDto.java b/spring-userservice/src/main/java/org/baeldung/web/MyUserDto.java new file mode 100644 index 0000000000..c572208913 --- /dev/null +++ b/spring-userservice/src/main/java/org/baeldung/web/MyUserDto.java @@ -0,0 +1,29 @@ +package org.baeldung.web; + +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; + +public class MyUserDto { + @NotNull + @Size(min = 1) + private String username; + + private String password; + + public String getUsername() { + return username; + } + + public void setUsername(final String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(final String password) { + this.password = password; + } + +} diff --git a/spring-userservice/src/main/resources/persistence-derby.properties b/spring-userservice/src/main/resources/persistence-derby.properties new file mode 100644 index 0000000000..e808fdc288 --- /dev/null +++ b/spring-userservice/src/main/resources/persistence-derby.properties @@ -0,0 +1,12 @@ +# jdbc.X +jdbc.driverClassName=org.apache.derby.jdbc.EmbeddedDriver +jdbc.url=jdbc:derby:memory:spring_custom_user_service;create=true +jdbc.user=tutorialuser +jdbc.pass=tutorialpass + +# hibernate.X +hibernate.dialect=org.hibernate.dialect.DerbyDialect +hibernate.show_sql=false +hibernate.hbm2ddl.auto=create +hibernate.cache.use_second_level_cache=false +hibernate.cache.use_query_cache=false \ No newline at end of file diff --git a/spring-userservice/src/main/webapp/META-INF/MANIFEST.MF b/spring-userservice/src/main/webapp/META-INF/MANIFEST.MF new file mode 100644 index 0000000000..254272e1c0 --- /dev/null +++ b/spring-userservice/src/main/webapp/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Class-Path: + diff --git a/spring-userservice/src/main/webapp/WEB-INF/mvc-dispatcher-servlet.xml b/spring-userservice/src/main/webapp/WEB-INF/mvc-dispatcher-servlet.xml new file mode 100644 index 0000000000..25d1d4d22f --- /dev/null +++ b/spring-userservice/src/main/webapp/WEB-INF/mvc-dispatcher-servlet.xml @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + /WEB-INF/views/ + + + .jsp + + + + + + + + + + + + + + + ${hibernate.hbm2ddl.auto} + ${hibernate.dialect} + ${hibernate.cache.use_second_level_cache} + ${hibernate.cache.use_query_cache} + + + + + + + + + + + + + + + + + + + diff --git a/spring-userservice/src/main/webapp/WEB-INF/views/index.jsp b/spring-userservice/src/main/webapp/WEB-INF/views/index.jsp new file mode 100644 index 0000000000..0c89257cd2 --- /dev/null +++ b/spring-userservice/src/main/webapp/WEB-INF/views/index.jsp @@ -0,0 +1,35 @@ +<%@ page language="java" contentType="text/html; charset=ISO-8859-1" + pageEncoding="ISO-8859-1"%> +<%@ taglib prefix="c" + uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %> + + + + + +Welcome! + + + + + + + +
    Register +

    + +Login + +

    +${message } +

    + +Hello, ${name }! +
    +
    +Logout +
    + + + \ No newline at end of file diff --git a/spring-userservice/src/main/webapp/WEB-INF/views/login.jsp b/spring-userservice/src/main/webapp/WEB-INF/views/login.jsp new file mode 100644 index 0000000000..29431f426d --- /dev/null +++ b/spring-userservice/src/main/webapp/WEB-INF/views/login.jsp @@ -0,0 +1,29 @@ +<%@ taglib prefix="c" + uri="http://java.sun.com/jsp/jstl/core" %> + + + + + +

    Login

    + +
    + + + + + + + + + + + + + +
    User:
    Password:
    + +
    + Username or password invalid! + + \ No newline at end of file diff --git a/spring-userservice/src/main/webapp/WEB-INF/views/register.jsp b/spring-userservice/src/main/webapp/WEB-INF/views/register.jsp new file mode 100644 index 0000000000..e6e9d373a0 --- /dev/null +++ b/spring-userservice/src/main/webapp/WEB-INF/views/register.jsp @@ -0,0 +1,23 @@ +<%@ page language="java" contentType="text/html; charset=ISO-8859-1" + pageEncoding="ISO-8859-1"%> +<%@ taglib prefix="c" + uri="http://java.sun.com/jsp/jstl/core" %> + + + + +Welcome! + + + + + +Register here:

    +
    +Username:
    +Password:
    + +
    + + + \ No newline at end of file diff --git a/spring-userservice/src/main/webapp/WEB-INF/web.xml b/spring-userservice/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000000..b526774179 --- /dev/null +++ b/spring-userservice/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,51 @@ + + + + Spring MVC Application + + + + + + mvc-dispatcher + org.springframework.web.servlet.DispatcherServlet + 1 + + + mvc-dispatcher + / + + + + + springSecurityFilterChain + org.springframework.web.filter.DelegatingFilterProxy + + + springSecurityFilterChain + /* + + + + index.jsp + + + \ No newline at end of file From 4b7e5066d88a43307616b4e2eb01446af027a2da Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Wed, 14 Sep 2016 22:10:29 +0300 Subject: [PATCH 099/265] clean up spring-jpa --- ....eclipse.wst.common.project.facet.core.xml | 2 +- spring-jpa/.springBeans | 1 - spring-jpa/pom.xml | 81 ----------------- .../org/baeldung/custom/config/MvcConfig.java | 42 --------- .../config/PersistenceDerbyJPAConfig.java | 89 ------------------- .../custom/config/SecSecurityConfig.java | 75 ---------------- .../baeldung/persistence/model/MyUser.java | 50 ----------- .../security/MyUserDetailsService.java | 37 -------- .../org/baeldung/security/UserController.java | 52 ----------- .../java/org/baeldung/user/dao/MyUserDAO.java | 40 --------- .../baeldung/user/service/MyUserService.java | 45 ---------- .../main/java/org/baeldung/web/MyUserDto.java | 29 ------ .../resources/persistence-derby.properties | 12 --- .../webapp/WEB-INF/mvc-dispatcher-servlet.xml | 88 ------------------ .../src/main/webapp/WEB-INF/views/index.jsp | 35 -------- .../src/main/webapp/WEB-INF/views/login.jsp | 29 ------ .../main/webapp/WEB-INF/views/register.jsp | 23 ----- spring-jpa/src/main/webapp/WEB-INF/web.xml | 51 ----------- 18 files changed, 1 insertion(+), 780 deletions(-) delete mode 100644 spring-jpa/src/main/java/org/baeldung/custom/config/MvcConfig.java delete mode 100644 spring-jpa/src/main/java/org/baeldung/custom/config/PersistenceDerbyJPAConfig.java delete mode 100644 spring-jpa/src/main/java/org/baeldung/custom/config/SecSecurityConfig.java delete mode 100644 spring-jpa/src/main/java/org/baeldung/persistence/model/MyUser.java delete mode 100644 spring-jpa/src/main/java/org/baeldung/security/MyUserDetailsService.java delete mode 100644 spring-jpa/src/main/java/org/baeldung/security/UserController.java delete mode 100644 spring-jpa/src/main/java/org/baeldung/user/dao/MyUserDAO.java delete mode 100644 spring-jpa/src/main/java/org/baeldung/user/service/MyUserService.java delete mode 100644 spring-jpa/src/main/java/org/baeldung/web/MyUserDto.java delete mode 100644 spring-jpa/src/main/resources/persistence-derby.properties delete mode 100644 spring-jpa/src/main/webapp/WEB-INF/mvc-dispatcher-servlet.xml delete mode 100644 spring-jpa/src/main/webapp/WEB-INF/views/index.jsp delete mode 100644 spring-jpa/src/main/webapp/WEB-INF/views/login.jsp delete mode 100644 spring-jpa/src/main/webapp/WEB-INF/views/register.jsp delete mode 100644 spring-jpa/src/main/webapp/WEB-INF/web.xml diff --git a/spring-jpa/.settings/org.eclipse.wst.common.project.facet.core.xml b/spring-jpa/.settings/org.eclipse.wst.common.project.facet.core.xml index 5f3c0f7702..24342c1b93 100644 --- a/spring-jpa/.settings/org.eclipse.wst.common.project.facet.core.xml +++ b/spring-jpa/.settings/org.eclipse.wst.common.project.facet.core.xml @@ -2,7 +2,7 @@ - + diff --git a/spring-jpa/.springBeans b/spring-jpa/.springBeans index 85bcd37cff..ff32b84d3b 100644 --- a/spring-jpa/.springBeans +++ b/spring-jpa/.springBeans @@ -7,7 +7,6 @@ - src/main/webapp/WEB-INF/mvc-dispatcher-servlet.xml diff --git a/spring-jpa/pom.xml b/spring-jpa/pom.xml index 71dd3df270..5acdae7765 100644 --- a/spring-jpa/pom.xml +++ b/spring-jpa/pom.xml @@ -6,7 +6,6 @@ 0.1-SNAPSHOT spring-jpa - war @@ -126,78 +125,6 @@ test - - org.springframework - spring-core - ${org.springframework.version} - - - org.springframework - spring-web - ${org.springframework.version} - - - org.springframework - spring-webmvc - ${org.springframework.version} - - - - javax.servlet - servlet-api - 3.0-alpha-1 - - - org.springframework.security - spring-security-core - ${org.springframework.security.version} - - - org.springframework.security - spring-security-web - ${org.springframework.security.version} - - - org.springframework.security - spring-security-config - ${org.springframework.security.version} - - - - org.apache.derby - derby - 10.12.1.1 - - - org.apache.derby - derbyclient - 10.12.1.1 - - - org.apache.derby - derbynet - 10.12.1.1 - - - org.apache.derby - derbytools - 10.12.1.1 - - - taglibs - standard - 1.1.2 - - - org.springframework.security - spring-security-taglibs - 4.1.3.RELEASE - - - javax.servlet.jsp.jstl - jstl-api - 1.2 - @@ -221,12 +148,6 @@ - - org.apache.maven.plugins - maven-war-plugin - ${maven-war-plugin.version} - - org.apache.maven.plugins maven-surefire-plugin @@ -268,7 +189,6 @@ - 4.1.3.RELEASE 4.3.2.RELEASE 3.20.0-GA @@ -301,7 +221,6 @@ 3.5.1 - 2.6 2.19.1 2.7 1.4.18 diff --git a/spring-jpa/src/main/java/org/baeldung/custom/config/MvcConfig.java b/spring-jpa/src/main/java/org/baeldung/custom/config/MvcConfig.java deleted file mode 100644 index 4a9e737a92..0000000000 --- a/spring-jpa/src/main/java/org/baeldung/custom/config/MvcConfig.java +++ /dev/null @@ -1,42 +0,0 @@ -package org.baeldung.custom.config; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; -import org.springframework.web.servlet.ViewResolver; -import org.springframework.web.servlet.config.annotation.EnableWebMvc; -import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; -import org.springframework.web.servlet.view.InternalResourceViewResolver; -import org.springframework.web.servlet.view.JstlView; - -@EnableWebMvc -@Configuration -@ComponentScan(basePackages = { "org.baeldung.security" }) -public class MvcConfig extends WebMvcConfigurerAdapter { - - public MvcConfig() { - super(); - } - - @Override - public void addViewControllers(final ViewControllerRegistry registry) { - super.addViewControllers(registry); - - registry.addViewController("/"); - registry.addViewController("/index"); - registry.addViewController("/login"); - registry.addViewController("/register"); - } - - @Bean - public ViewResolver viewResolver() { - final InternalResourceViewResolver bean = new InternalResourceViewResolver(); - - bean.setViewClass(JstlView.class); - bean.setPrefix("/WEB-INF/view/"); - bean.setSuffix(".jsp"); - - return bean; - } -} diff --git a/spring-jpa/src/main/java/org/baeldung/custom/config/PersistenceDerbyJPAConfig.java b/spring-jpa/src/main/java/org/baeldung/custom/config/PersistenceDerbyJPAConfig.java deleted file mode 100644 index 6be7053b78..0000000000 --- a/spring-jpa/src/main/java/org/baeldung/custom/config/PersistenceDerbyJPAConfig.java +++ /dev/null @@ -1,89 +0,0 @@ -package org.baeldung.custom.config; - -import java.util.Properties; - -import javax.persistence.EntityManagerFactory; -import javax.sql.DataSource; - -import org.baeldung.user.dao.MyUserDAO; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.PropertySource; -import org.springframework.core.env.Environment; -import org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor; -import org.springframework.jdbc.datasource.DriverManagerDataSource; -import org.springframework.orm.jpa.JpaTransactionManager; -import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; -import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter; -import org.springframework.transaction.PlatformTransactionManager; -import org.springframework.transaction.annotation.EnableTransactionManagement; - -import com.google.common.base.Preconditions; - -@Configuration -@EnableTransactionManagement -@PropertySource({ "classpath:persistence-derby.properties" }) -public class PersistenceDerbyJPAConfig { - - @Autowired - private Environment env; - - public PersistenceDerbyJPAConfig() { - super(); - } - - // beans - - @Bean - public LocalContainerEntityManagerFactoryBean myEmf() { - final LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean(); - em.setDataSource(dataSource()); - em.setPackagesToScan(new String[] { "org.baeldung.persistence.model" }); - - final HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); - em.setJpaVendorAdapter(vendorAdapter); - em.setJpaProperties(additionalProperties()); - - return em; - } - - @Bean - public DataSource dataSource() { - final DriverManagerDataSource dataSource = new DriverManagerDataSource(); - dataSource.setDriverClassName(Preconditions.checkNotNull(env.getProperty("jdbc.driverClassName"))); - dataSource.setUrl(Preconditions.checkNotNull(env.getProperty("jdbc.url"))); - dataSource.setUsername(Preconditions.checkNotNull(env.getProperty("jdbc.user"))); - dataSource.setPassword(Preconditions.checkNotNull(env.getProperty("jdbc.pass"))); - - return dataSource; - } - - @Bean - public PlatformTransactionManager transactionManager(final EntityManagerFactory emf) { - final JpaTransactionManager transactionManager = new JpaTransactionManager(); - transactionManager.setEntityManagerFactory(emf); - return transactionManager; - } - - @Bean - public PersistenceExceptionTranslationPostProcessor exceptionTranslation() { - return new PersistenceExceptionTranslationPostProcessor(); - } - - final Properties additionalProperties() { - final Properties hibernateProperties = new Properties(); - hibernateProperties.setProperty("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto")); - hibernateProperties.setProperty("hibernate.dialect", env.getProperty("hibernate.dialect")); - hibernateProperties.setProperty("hibernate.cache.use_second_level_cache", env.getProperty("hibernate.cache.use_second_level_cache")); - hibernateProperties.setProperty("hibernate.cache.use_query_cache", env.getProperty("hibernate.cache.use_query_cache")); - // hibernateProperties.setProperty("hibernate.globally_quoted_identifiers", "true"); - return hibernateProperties; - } - - @Bean - public MyUserDAO myUserDAO() { - final MyUserDAO myUserDAO = new MyUserDAO(); - return myUserDAO; - } -} \ No newline at end of file diff --git a/spring-jpa/src/main/java/org/baeldung/custom/config/SecSecurityConfig.java b/spring-jpa/src/main/java/org/baeldung/custom/config/SecSecurityConfig.java deleted file mode 100644 index 44df02980f..0000000000 --- a/spring-jpa/src/main/java/org/baeldung/custom/config/SecSecurityConfig.java +++ /dev/null @@ -1,75 +0,0 @@ -package org.baeldung.custom.config; - -import org.baeldung.security.MyUserDetailsService; -import org.baeldung.user.service.MyUserService; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Profile; -import org.springframework.security.authentication.dao.DaoAuthenticationProvider; -import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; -import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; -import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; -import org.springframework.security.crypto.password.PasswordEncoder; - -@Configuration -@EnableWebSecurity -@Profile("!https") -public class SecSecurityConfig extends WebSecurityConfigurerAdapter { - - public SecSecurityConfig() { - super(); - } - - @Override - protected void configure(final AuthenticationManagerBuilder auth) throws Exception { - // @formatter:off - auth.authenticationProvider(authenticationProvider()); - // @formatter:on - } - - @Override - protected void configure(final HttpSecurity http) throws Exception { - // @formatter:off - http - .csrf().disable() - .authorizeRequests() - .antMatchers("/*").permitAll() - .and() - .formLogin() - .loginPage("/login") - .loginProcessingUrl("/login") - .defaultSuccessUrl("/",true) - .failureUrl("/login?error=true") - .and() - .logout() - .logoutUrl("/logout") - .deleteCookies("JSESSIONID") - .logoutSuccessUrl("/"); - // @formatter:on - } - - @Bean - public DaoAuthenticationProvider authenticationProvider() { - final DaoAuthenticationProvider authProvider = new DaoAuthenticationProvider(); - authProvider.setUserDetailsService(myUserDetailsService()); - authProvider.setPasswordEncoder(encoder()); - return authProvider; - } - - @Bean - public PasswordEncoder encoder() { - return new BCryptPasswordEncoder(11); - } - - @Bean - public MyUserDetailsService myUserDetailsService() { - return new MyUserDetailsService(); - } - - @Bean - public MyUserService myUserService() { - return new MyUserService(); - } -} diff --git a/spring-jpa/src/main/java/org/baeldung/persistence/model/MyUser.java b/spring-jpa/src/main/java/org/baeldung/persistence/model/MyUser.java deleted file mode 100644 index 804d391641..0000000000 --- a/spring-jpa/src/main/java/org/baeldung/persistence/model/MyUser.java +++ /dev/null @@ -1,50 +0,0 @@ -package org.baeldung.persistence.model; - -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.Table; - -@Entity -@Table(schema = "spring_custom_user_service") -public class MyUser { - - @Id - @GeneratedValue(strategy = GenerationType.AUTO) - private int id; - - @Column(unique = true, nullable = false) - private String username; - - @Column(nullable = false) - private String password; - - public MyUser() { - } - - public int getId() { - return id; - } - - public void setId(final int id) { - this.id = id; - } - - public String getUsername() { - return username; - } - - public void setUsername(final String username) { - this.username = username; - } - - public String getPassword() { - return password; - } - - public void setPassword(final String password) { - this.password = password; - } -} diff --git a/spring-jpa/src/main/java/org/baeldung/security/MyUserDetailsService.java b/spring-jpa/src/main/java/org/baeldung/security/MyUserDetailsService.java deleted file mode 100644 index 4c02f53d20..0000000000 --- a/spring-jpa/src/main/java/org/baeldung/security/MyUserDetailsService.java +++ /dev/null @@ -1,37 +0,0 @@ -package org.baeldung.security; - -import java.util.ArrayList; -import java.util.Collection; - -import org.baeldung.persistence.model.MyUser; -import org.baeldung.user.dao.MyUserDAO; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.security.core.GrantedAuthority; -import org.springframework.security.core.authority.SimpleGrantedAuthority; -import org.springframework.security.core.userdetails.User; -import org.springframework.security.core.userdetails.UserDetails; -import org.springframework.security.core.userdetails.UserDetailsService; -import org.springframework.security.core.userdetails.UsernameNotFoundException; -import org.springframework.stereotype.Service; - -@Service("userDetailsService") -public class MyUserDetailsService implements UserDetailsService { - - @Autowired - MyUserDAO myUserDAO; - - @Override - public UserDetails loadUserByUsername(final String username) throws UsernameNotFoundException { - final MyUser user = myUserDAO.findByUsername(username); - - if (user == null) { - throw new UsernameNotFoundException("No user found with username: " + username); - } - else { - final Collection authorities = new ArrayList<>(); - authorities.add(new SimpleGrantedAuthority("ROLE_USER")); - return new User(user.getUsername(), user.getPassword(), authorities); - } - } - -} diff --git a/spring-jpa/src/main/java/org/baeldung/security/UserController.java b/spring-jpa/src/main/java/org/baeldung/security/UserController.java deleted file mode 100644 index b1c96e72c0..0000000000 --- a/spring-jpa/src/main/java/org/baeldung/security/UserController.java +++ /dev/null @@ -1,52 +0,0 @@ -package org.baeldung.security; - -import javax.annotation.Resource; - -import org.baeldung.user.service.MyUserService; -import org.baeldung.web.MyUserDto; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.stereotype.Controller; -import org.springframework.ui.Model; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; - -@Controller -public class UserController { - - @Resource - MyUserService myUserService; - - @RequestMapping(value = "/register", method = RequestMethod.POST) - public String registerUserAccount(final MyUserDto accountDto, final Model model) { - final Authentication auth = SecurityContextHolder.getContext().getAuthentication(); - model.addAttribute("name", auth.getName()); - try { - myUserService.registerNewUserAccount(accountDto); - model.addAttribute("message", "Registration successful"); - return "index"; - } - catch(final Exception exc){ - model.addAttribute("message", "Registration failed"); - - return "index"; - } - } - - @RequestMapping(value = "/", method = RequestMethod.GET) - public String getHomepage(final Model model) { - final Authentication auth = SecurityContextHolder.getContext().getAuthentication(); - model.addAttribute("name", auth.getName()); - return "index"; - } - - @RequestMapping(value = "/register", method = RequestMethod.GET) - public String getRegister() { - return "register"; - } - - @RequestMapping(value = "/login", method = RequestMethod.GET) - public String getLogin() { - return "login"; - } -} diff --git a/spring-jpa/src/main/java/org/baeldung/user/dao/MyUserDAO.java b/spring-jpa/src/main/java/org/baeldung/user/dao/MyUserDAO.java deleted file mode 100644 index 5741d19bf2..0000000000 --- a/spring-jpa/src/main/java/org/baeldung/user/dao/MyUserDAO.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.baeldung.user.dao; - -import java.util.List; - -import javax.persistence.EntityManager; -import javax.persistence.PersistenceContext; -import javax.persistence.Query; - -import org.baeldung.persistence.model.MyUser; -import org.springframework.stereotype.Repository; - -@Repository -public class MyUserDAO { - - @PersistenceContext - private EntityManager entityManager; - - public MyUser findByUsername(final String username) { - final Query query = entityManager.createQuery("from MyUser where username=:username", MyUser.class); - query.setParameter("username", username); - final List result = query.getResultList(); - if (result != null && result.size() > 0) { - return result.get(0); - } else - return null; - } - - public MyUser save(final MyUser user) { - entityManager.persist(user); - return user; - } - - public EntityManager getEntityManager() { - return entityManager; - } - - public void setEntityManager(final EntityManager entityManager) { - this.entityManager = entityManager; - } -} diff --git a/spring-jpa/src/main/java/org/baeldung/user/service/MyUserService.java b/spring-jpa/src/main/java/org/baeldung/user/service/MyUserService.java deleted file mode 100644 index f4705f3193..0000000000 --- a/spring-jpa/src/main/java/org/baeldung/user/service/MyUserService.java +++ /dev/null @@ -1,45 +0,0 @@ -package org.baeldung.user.service; - -import org.baeldung.persistence.model.MyUser; -import org.baeldung.user.dao.MyUserDAO; -import org.baeldung.web.MyUserDto; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.security.crypto.password.PasswordEncoder; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -@Service -@Transactional -public class MyUserService { - - @Autowired - private PasswordEncoder passwordEncoder; - - @Autowired - MyUserDAO myUserDAO; - - public MyUser registerNewUserAccount(final MyUserDto accountDto) throws Exception { - if (usernameExists(accountDto.getUsername())) { - throw new Exception("There is an account with that username: " + accountDto.getUsername()); - } - final MyUser user = new MyUser(); - - user.setUsername(accountDto.getUsername()); - user.setPassword(passwordEncoder.encode(accountDto.getPassword())); - return myUserDAO.save(user); - } - - public MyUser getUserByUsername(final String username) { - final MyUser user = myUserDAO.findByUsername(username); - return user; - } - - private boolean usernameExists(final String username) { - final MyUser user = myUserDAO.findByUsername(username); - if (user != null) { - return true; - } - return false; - } - -} diff --git a/spring-jpa/src/main/java/org/baeldung/web/MyUserDto.java b/spring-jpa/src/main/java/org/baeldung/web/MyUserDto.java deleted file mode 100644 index c572208913..0000000000 --- a/spring-jpa/src/main/java/org/baeldung/web/MyUserDto.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.baeldung.web; - -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; - -public class MyUserDto { - @NotNull - @Size(min = 1) - private String username; - - private String password; - - public String getUsername() { - return username; - } - - public void setUsername(final String username) { - this.username = username; - } - - public String getPassword() { - return password; - } - - public void setPassword(final String password) { - this.password = password; - } - -} diff --git a/spring-jpa/src/main/resources/persistence-derby.properties b/spring-jpa/src/main/resources/persistence-derby.properties deleted file mode 100644 index e808fdc288..0000000000 --- a/spring-jpa/src/main/resources/persistence-derby.properties +++ /dev/null @@ -1,12 +0,0 @@ -# jdbc.X -jdbc.driverClassName=org.apache.derby.jdbc.EmbeddedDriver -jdbc.url=jdbc:derby:memory:spring_custom_user_service;create=true -jdbc.user=tutorialuser -jdbc.pass=tutorialpass - -# hibernate.X -hibernate.dialect=org.hibernate.dialect.DerbyDialect -hibernate.show_sql=false -hibernate.hbm2ddl.auto=create -hibernate.cache.use_second_level_cache=false -hibernate.cache.use_query_cache=false \ No newline at end of file diff --git a/spring-jpa/src/main/webapp/WEB-INF/mvc-dispatcher-servlet.xml b/spring-jpa/src/main/webapp/WEB-INF/mvc-dispatcher-servlet.xml deleted file mode 100644 index 25d1d4d22f..0000000000 --- a/spring-jpa/src/main/webapp/WEB-INF/mvc-dispatcher-servlet.xml +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /WEB-INF/views/ - - - .jsp - - - - - - - - - - - - - - - ${hibernate.hbm2ddl.auto} - ${hibernate.dialect} - ${hibernate.cache.use_second_level_cache} - ${hibernate.cache.use_query_cache} - - - - - - - - - - - - - - - - - - - diff --git a/spring-jpa/src/main/webapp/WEB-INF/views/index.jsp b/spring-jpa/src/main/webapp/WEB-INF/views/index.jsp deleted file mode 100644 index 0c89257cd2..0000000000 --- a/spring-jpa/src/main/webapp/WEB-INF/views/index.jsp +++ /dev/null @@ -1,35 +0,0 @@ -<%@ page language="java" contentType="text/html; charset=ISO-8859-1" - pageEncoding="ISO-8859-1"%> -<%@ taglib prefix="c" - uri="http://java.sun.com/jsp/jstl/core" %> -<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %> - - - - - -Welcome! - - - - - - - -Register -

    - -Login - -

    -${message } -

    - -Hello, ${name }! -
    -
    -Logout -
    - - - \ No newline at end of file diff --git a/spring-jpa/src/main/webapp/WEB-INF/views/login.jsp b/spring-jpa/src/main/webapp/WEB-INF/views/login.jsp deleted file mode 100644 index 29431f426d..0000000000 --- a/spring-jpa/src/main/webapp/WEB-INF/views/login.jsp +++ /dev/null @@ -1,29 +0,0 @@ -<%@ taglib prefix="c" - uri="http://java.sun.com/jsp/jstl/core" %> - - - - - -

    Login

    - -
    - - - - - - - - - - - - - -
    User:
    Password:
    - -
    - Username or password invalid! - - \ No newline at end of file diff --git a/spring-jpa/src/main/webapp/WEB-INF/views/register.jsp b/spring-jpa/src/main/webapp/WEB-INF/views/register.jsp deleted file mode 100644 index e6e9d373a0..0000000000 --- a/spring-jpa/src/main/webapp/WEB-INF/views/register.jsp +++ /dev/null @@ -1,23 +0,0 @@ -<%@ page language="java" contentType="text/html; charset=ISO-8859-1" - pageEncoding="ISO-8859-1"%> -<%@ taglib prefix="c" - uri="http://java.sun.com/jsp/jstl/core" %> - - - - -Welcome! - - - - - -Register here:

    -
    -Username:
    -Password:
    - -
    - - - \ No newline at end of file diff --git a/spring-jpa/src/main/webapp/WEB-INF/web.xml b/spring-jpa/src/main/webapp/WEB-INF/web.xml deleted file mode 100644 index b526774179..0000000000 --- a/spring-jpa/src/main/webapp/WEB-INF/web.xml +++ /dev/null @@ -1,51 +0,0 @@ - - - - Spring MVC Application - - - - - - mvc-dispatcher - org.springframework.web.servlet.DispatcherServlet - 1 - - - mvc-dispatcher - / - - - - - springSecurityFilterChain - org.springframework.web.filter.DelegatingFilterProxy - - - springSecurityFilterChain - /* - - - - index.jsp - - - \ No newline at end of file From 38b419d8e9f7927d1ff29cabf3ebba2594107ef7 Mon Sep 17 00:00:00 2001 From: Ante Pocedulic Date: Thu, 15 Sep 2016 07:55:11 +0200 Subject: [PATCH 100/265] Spring Data Rest Validators introduction (#650) * - created packages for each logical part of application - created validator for WebsiteUser rest API - created ValidatorEventRegister class which fixes known bug for not detecting generated events - created custom Exception Handler which creates better response messages * Code formatting * formated pom.xml replaced for loops with streams fixed bug while getting all beans * removed unnecessary code changed repository type * - added test for Spring Data REST APIs - changed bad request return code - formated code --- spring-data-rest/pom.xml | 4 +- .../baeldung/SpringDataRestApplication.java | 6 +- .../java/com/baeldung/UserRepository.java | 12 --- .../config/ValidatorEventRegister.java | 30 ++++++ .../RestResponseEntityExceptionHandler.java | 25 +++++ .../baeldung/{ => models}/WebsiteUser.java | 2 +- .../baeldung/repositories/UserRepository.java | 11 ++ .../validators/WebsiteUserValidator.java | 33 ++++++ .../SpringDataRestValidatorTest.java | 100 ++++++++++++++++++ 9 files changed, 205 insertions(+), 18 deletions(-) delete mode 100644 spring-data-rest/src/main/java/com/baeldung/UserRepository.java create mode 100644 spring-data-rest/src/main/java/com/baeldung/config/ValidatorEventRegister.java create mode 100644 spring-data-rest/src/main/java/com/baeldung/exception/handlers/RestResponseEntityExceptionHandler.java rename spring-data-rest/src/main/java/com/baeldung/{ => models}/WebsiteUser.java (96%) create mode 100644 spring-data-rest/src/main/java/com/baeldung/repositories/UserRepository.java create mode 100644 spring-data-rest/src/main/java/com/baeldung/validators/WebsiteUserValidator.java create mode 100644 spring-data-rest/src/main/test/com/baeldung/validator/SpringDataRestValidatorTest.java diff --git a/spring-data-rest/pom.xml b/spring-data-rest/pom.xml index f7f28aa9f1..5ae694a04f 100644 --- a/spring-data-rest/pom.xml +++ b/spring-data-rest/pom.xml @@ -1,6 +1,6 @@ + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 com.baeldung @@ -15,7 +15,7 @@ org.springframework.boot spring-boot-starter-parent 1.3.3.RELEASE - + diff --git a/spring-data-rest/src/main/java/com/baeldung/SpringDataRestApplication.java b/spring-data-rest/src/main/java/com/baeldung/SpringDataRestApplication.java index 6e8e62f52c..94eddc5b3e 100644 --- a/spring-data-rest/src/main/java/com/baeldung/SpringDataRestApplication.java +++ b/spring-data-rest/src/main/java/com/baeldung/SpringDataRestApplication.java @@ -5,7 +5,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class SpringDataRestApplication { - public static void main(String[] args) { - SpringApplication.run(SpringDataRestApplication.class, args); - } + public static void main(String[] args) { + SpringApplication.run(SpringDataRestApplication.class, args); + } } diff --git a/spring-data-rest/src/main/java/com/baeldung/UserRepository.java b/spring-data-rest/src/main/java/com/baeldung/UserRepository.java deleted file mode 100644 index ebbf0d49ab..0000000000 --- a/spring-data-rest/src/main/java/com/baeldung/UserRepository.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.baeldung; - -import org.springframework.data.repository.PagingAndSortingRepository; -import org.springframework.data.repository.query.Param; -import org.springframework.data.rest.core.annotation.RepositoryRestResource; - -import java.util.List; - -@RepositoryRestResource(collectionResourceRel = "users", path = "users") -public interface UserRepository extends PagingAndSortingRepository { - List findByName(@Param("name") String name); -} diff --git a/spring-data-rest/src/main/java/com/baeldung/config/ValidatorEventRegister.java b/spring-data-rest/src/main/java/com/baeldung/config/ValidatorEventRegister.java new file mode 100644 index 0000000000..89ab848e81 --- /dev/null +++ b/spring-data-rest/src/main/java/com/baeldung/config/ValidatorEventRegister.java @@ -0,0 +1,30 @@ +package com.baeldung.config; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +import org.springframework.beans.factory.InitializingBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.rest.core.event.ValidatingRepositoryEventListener; +import org.springframework.validation.Validator; + +@Configuration +public class ValidatorEventRegister implements InitializingBean { + + @Autowired + ValidatingRepositoryEventListener validatingRepositoryEventListener; + + @Autowired + private Map validators; + + @Override + public void afterPropertiesSet() throws Exception { + List events = Arrays.asList("beforeCreate", "afterCreate", "beforeSave", "afterSave", "beforeLinkSave", "afterLinkSave", "beforeDelete", "afterDelete"); + + for (Map.Entry entry : validators.entrySet()) { + events.stream().filter(p -> entry.getKey().startsWith(p)).findFirst().ifPresent(p -> validatingRepositoryEventListener.addValidator(p, entry.getValue())); + } + } +} diff --git a/spring-data-rest/src/main/java/com/baeldung/exception/handlers/RestResponseEntityExceptionHandler.java b/spring-data-rest/src/main/java/com/baeldung/exception/handlers/RestResponseEntityExceptionHandler.java new file mode 100644 index 0000000000..ee84738e7a --- /dev/null +++ b/spring-data-rest/src/main/java/com/baeldung/exception/handlers/RestResponseEntityExceptionHandler.java @@ -0,0 +1,25 @@ +package com.baeldung.exception.handlers; + +import java.util.stream.Collectors; + +import org.springframework.data.rest.core.RepositoryConstraintViolationException; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.context.request.WebRequest; +import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; + +@ControllerAdvice +public class RestResponseEntityExceptionHandler extends ResponseEntityExceptionHandler { + + @ExceptionHandler({ RepositoryConstraintViolationException.class }) + public ResponseEntity handleAccessDeniedException(Exception ex, WebRequest request) { + RepositoryConstraintViolationException nevEx = (RepositoryConstraintViolationException) ex; + + String errors = nevEx.getErrors().getAllErrors().stream().map(p -> p.toString()).collect(Collectors.joining("\n")); + return new ResponseEntity(errors, new HttpHeaders(), HttpStatus.NOT_ACCEPTABLE); + } + +} \ No newline at end of file diff --git a/spring-data-rest/src/main/java/com/baeldung/WebsiteUser.java b/spring-data-rest/src/main/java/com/baeldung/models/WebsiteUser.java similarity index 96% rename from spring-data-rest/src/main/java/com/baeldung/WebsiteUser.java rename to spring-data-rest/src/main/java/com/baeldung/models/WebsiteUser.java index a7a35a2573..4eb9773e36 100644 --- a/spring-data-rest/src/main/java/com/baeldung/WebsiteUser.java +++ b/spring-data-rest/src/main/java/com/baeldung/models/WebsiteUser.java @@ -1,4 +1,4 @@ -package com.baeldung; +package com.baeldung.models; import javax.persistence.Entity; import javax.persistence.GeneratedValue; diff --git a/spring-data-rest/src/main/java/com/baeldung/repositories/UserRepository.java b/spring-data-rest/src/main/java/com/baeldung/repositories/UserRepository.java new file mode 100644 index 0000000000..0b55ac89b6 --- /dev/null +++ b/spring-data-rest/src/main/java/com/baeldung/repositories/UserRepository.java @@ -0,0 +1,11 @@ +package com.baeldung.repositories; + +import org.springframework.data.repository.CrudRepository; +import org.springframework.data.rest.core.annotation.RepositoryRestResource; + +import com.baeldung.models.WebsiteUser; + +@RepositoryRestResource(collectionResourceRel = "users", path = "users") +public interface UserRepository extends CrudRepository { + +} diff --git a/spring-data-rest/src/main/java/com/baeldung/validators/WebsiteUserValidator.java b/spring-data-rest/src/main/java/com/baeldung/validators/WebsiteUserValidator.java new file mode 100644 index 0000000000..0380332708 --- /dev/null +++ b/spring-data-rest/src/main/java/com/baeldung/validators/WebsiteUserValidator.java @@ -0,0 +1,33 @@ +package com.baeldung.validators; + +import org.springframework.stereotype.Component; +import org.springframework.validation.Errors; +import org.springframework.validation.Validator; + +import com.baeldung.models.WebsiteUser; + +@Component("beforeCreateWebsiteUserValidator") +public class WebsiteUserValidator implements Validator { + + @Override + public boolean supports(Class clazz) { + return WebsiteUser.class.equals(clazz); + } + + @Override + public void validate(Object obj, Errors errors) { + + WebsiteUser user = (WebsiteUser) obj; + if (checkInputString(user.getName())) { + errors.rejectValue("name", "name.empty"); + } + + if (checkInputString(user.getEmail())) { + errors.rejectValue("email", "email.empty"); + } + } + + private boolean checkInputString(String input) { + return (input == null || input.trim().length() == 0); + } +} diff --git a/spring-data-rest/src/main/test/com/baeldung/validator/SpringDataRestValidatorTest.java b/spring-data-rest/src/main/test/com/baeldung/validator/SpringDataRestValidatorTest.java new file mode 100644 index 0000000000..b185c6d5ab --- /dev/null +++ b/spring-data-rest/src/main/test/com/baeldung/validator/SpringDataRestValidatorTest.java @@ -0,0 +1,100 @@ +package com.baeldung.validator; + +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.redirectedUrl; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import static org.springframework.test.web.servlet.setup.MockMvcBuilders.webAppContextSetup; + +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.SpringApplicationConfiguration; +import org.springframework.http.MediaType; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.web.WebAppConfiguration; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.ResultActions; +import org.springframework.test.web.servlet.ResultMatcher; +import org.springframework.web.context.WebApplicationContext; + +import com.baeldung.SpringDataRestApplication; +import com.baeldung.models.WebsiteUser; +import com.fasterxml.jackson.databind.ObjectMapper; + +@RunWith(SpringJUnit4ClassRunner.class) +@SpringApplicationConfiguration(classes = SpringDataRestApplication.class) +@WebAppConfiguration +public class SpringDataRestValidatorTest { + public static final String URL = "http://localhost"; + + private MockMvc mockMvc; + + @Autowired + protected WebApplicationContext wac; + + @Before + public void setup() { + mockMvc = webAppContextSetup(wac).build(); + } + + @Test + public void whenStartingApplication_thenCorrectStatusCode() throws Exception { + mockMvc.perform(get("/users")).andExpect(status().is2xxSuccessful()); + }; + + @Test + public void whenAddingNewCorrectUser_thenCorrectStatusCodeAndResponse() throws Exception { + WebsiteUser user = new WebsiteUser(); + user.setEmail("john.doe@john.com"); + user.setName("John Doe"); + + mockMvc.perform(post("/users", user).contentType(MediaType.APPLICATION_JSON).content(new ObjectMapper().writeValueAsString(user))) + .andExpect(status().is2xxSuccessful()) + .andExpect(redirectedUrl("http://localhost/users/1")); + } + + @Test + public void whenAddingNewUserWithoutName_thenErrorStatusCodeAndResponse() throws Exception { + WebsiteUser user = new WebsiteUser(); + user.setEmail("john.doe@john.com"); + + mockMvc.perform(post("/users", user).contentType(MediaType.APPLICATION_JSON).content(new ObjectMapper().writeValueAsString(user))) + .andExpect(status().isNotAcceptable()) + .andExpect(redirectedUrl(null)); + } + + @Test + public void whenAddingNewUserWithEmptyName_thenErrorStatusCodeAndResponse() throws Exception { + WebsiteUser user = new WebsiteUser(); + user.setEmail("john.doe@john.com"); + user.setName(""); + mockMvc.perform(post("/users", user).contentType(MediaType.APPLICATION_JSON).content(new ObjectMapper().writeValueAsString(user))) + .andExpect(status().isNotAcceptable()) + .andExpect(redirectedUrl(null)); + } + + @Test + public void whenAddingNewUserWithoutEmail_thenErrorStatusCodeAndResponse() throws Exception { + WebsiteUser user = new WebsiteUser(); + user.setName("John Doe"); + + mockMvc.perform(post("/users", user).contentType(MediaType.APPLICATION_JSON).content(new ObjectMapper().writeValueAsString(user))) + .andExpect(status().isNotAcceptable()) + .andExpect(redirectedUrl(null)); + } + + @Test + public void whenAddingNewUserWithEmptyEmail_thenErrorStatusCodeAndResponse() throws Exception { + WebsiteUser user = new WebsiteUser(); + user.setName("John Doe"); + user.setEmail(""); + mockMvc.perform(post("/users", user).contentType(MediaType.APPLICATION_JSON).content(new ObjectMapper().writeValueAsString(user))) + .andExpect(status().isNotAcceptable()) + .andExpect(redirectedUrl(null)); + } + +} From 5978c00dc98efeff43e723ef5fc70ff5e9b7e9fc Mon Sep 17 00:00:00 2001 From: Christian Raedel Date: Tue, 6 Sep 2016 02:58:53 +0200 Subject: [PATCH 101/265] BAEL-11: Implemented working Feign client. --- feign-hypermedia-client/README.md | 5 + feign-hypermedia-client/pom.xml | 91 +++++++++++++++++++ .../java/com/baeldung/feign/Controller.java | 26 ++++++ .../baeldung/feign/clients/BookClient.java | 21 +++++ .../java/com/baeldung/feign/models/Book.java | 18 ++++ .../baeldung/feign/models/BookResource.java | 14 +++ .../src/main/resources/log4j2.xml | 14 +++ .../feign/clients/BookClientTest.java | 54 +++++++++++ 8 files changed, 243 insertions(+) create mode 100644 feign-hypermedia-client/README.md create mode 100644 feign-hypermedia-client/pom.xml create mode 100644 feign-hypermedia-client/src/main/java/com/baeldung/feign/Controller.java create mode 100644 feign-hypermedia-client/src/main/java/com/baeldung/feign/clients/BookClient.java create mode 100644 feign-hypermedia-client/src/main/java/com/baeldung/feign/models/Book.java create mode 100644 feign-hypermedia-client/src/main/java/com/baeldung/feign/models/BookResource.java create mode 100644 feign-hypermedia-client/src/main/resources/log4j2.xml create mode 100644 feign-hypermedia-client/src/test/java/com/baeldung/feign/clients/BookClientTest.java diff --git a/feign-hypermedia-client/README.md b/feign-hypermedia-client/README.md new file mode 100644 index 0000000000..e6ade4d161 --- /dev/null +++ b/feign-hypermedia-client/README.md @@ -0,0 +1,5 @@ +## Feign Hypermedia Client ## + +This is the implementation of a [spring-hypermedia-api][1] client using Feign. + +[1]: https://github.com/eugenp/spring-hypermedia-api diff --git a/feign-hypermedia-client/pom.xml b/feign-hypermedia-client/pom.xml new file mode 100644 index 0000000000..7e60e2ec7f --- /dev/null +++ b/feign-hypermedia-client/pom.xml @@ -0,0 +1,91 @@ + + + 4.0.0 + + com.baeldung.feign + feign-hypermedia-client + 1.0.0-SNAPSHOT + + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + .. + + + + UTF-8 + + + + + io.github.openfeign + feign-core + 9.3.1 + + + io.github.openfeign + feign-okhttp + 9.3.1 + + + io.github.openfeign + feign-gson + 9.3.1 + + + io.github.openfeign + feign-slf4j + 9.3.1 + + + org.slf4j + slf4j-api + 1.7.21 + + + org.apache.logging.log4j + log4j-core + 2.6.2 + + + org.apache.logging.log4j + log4j-slf4j-impl + 2.6.2 + + + org.projectlombok + lombok + 1.16.10 + provided + + + junit + junit + 4.12 + test + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.5.1 + + 1.8 + 1.8 + + + + org.springframework.boot + spring-boot-maven-plugin + 1.4.0.RELEASE + + + + + diff --git a/feign-hypermedia-client/src/main/java/com/baeldung/feign/Controller.java b/feign-hypermedia-client/src/main/java/com/baeldung/feign/Controller.java new file mode 100644 index 0000000000..f5405be87a --- /dev/null +++ b/feign-hypermedia-client/src/main/java/com/baeldung/feign/Controller.java @@ -0,0 +1,26 @@ +package com.baeldung.feign; + +import com.baeldung.feign.clients.BookClient; +import feign.Feign; +import feign.Logger; +import feign.gson.GsonDecoder; +import feign.gson.GsonEncoder; +import feign.okhttp.OkHttpClient; +import feign.slf4j.Slf4jLogger; +import lombok.Getter; + +@Getter +public class Controller { + private BookClient bookClient = createClient(BookClient.class, + "http://localhost:8081/api/books"); + + private static T createClient(Class type, String uri) { + return Feign.builder() + .client(new OkHttpClient()) + .encoder(new GsonEncoder()) + .decoder(new GsonDecoder()) + .logger(new Slf4jLogger(type)) + .logLevel(Logger.Level.FULL) + .target(type, uri); + } +} diff --git a/feign-hypermedia-client/src/main/java/com/baeldung/feign/clients/BookClient.java b/feign-hypermedia-client/src/main/java/com/baeldung/feign/clients/BookClient.java new file mode 100644 index 0000000000..df20ef8f93 --- /dev/null +++ b/feign-hypermedia-client/src/main/java/com/baeldung/feign/clients/BookClient.java @@ -0,0 +1,21 @@ +package com.baeldung.feign.clients; + +import com.baeldung.feign.models.Book; +import com.baeldung.feign.models.BookResource; +import feign.Headers; +import feign.Param; +import feign.RequestLine; + +import java.util.List; + +public interface BookClient { + @RequestLine("GET /{isbn}") + BookResource findByIsbn(@Param("isbn") String isbn); + + @RequestLine("GET") + List findAll(); + + @RequestLine("POST") + @Headers("Content-Type: application/json") + void create(Book book); +} diff --git a/feign-hypermedia-client/src/main/java/com/baeldung/feign/models/Book.java b/feign-hypermedia-client/src/main/java/com/baeldung/feign/models/Book.java new file mode 100644 index 0000000000..cda4412e27 --- /dev/null +++ b/feign-hypermedia-client/src/main/java/com/baeldung/feign/models/Book.java @@ -0,0 +1,18 @@ +package com.baeldung.feign.models; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; + +@Data +@ToString +@NoArgsConstructor +@AllArgsConstructor +public class Book { + private String isbn; + private String author; + private String title; + private String synopsis; + private String language; +} diff --git a/feign-hypermedia-client/src/main/java/com/baeldung/feign/models/BookResource.java b/feign-hypermedia-client/src/main/java/com/baeldung/feign/models/BookResource.java new file mode 100644 index 0000000000..7902db9fe8 --- /dev/null +++ b/feign-hypermedia-client/src/main/java/com/baeldung/feign/models/BookResource.java @@ -0,0 +1,14 @@ +package com.baeldung.feign.models; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; + +@Data +@ToString +@NoArgsConstructor +@AllArgsConstructor +public class BookResource { + private Book book; +} diff --git a/feign-hypermedia-client/src/main/resources/log4j2.xml b/feign-hypermedia-client/src/main/resources/log4j2.xml new file mode 100644 index 0000000000..659c5fda0e --- /dev/null +++ b/feign-hypermedia-client/src/main/resources/log4j2.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/feign-hypermedia-client/src/test/java/com/baeldung/feign/clients/BookClientTest.java b/feign-hypermedia-client/src/test/java/com/baeldung/feign/clients/BookClientTest.java new file mode 100644 index 0000000000..dcebe7426f --- /dev/null +++ b/feign-hypermedia-client/src/test/java/com/baeldung/feign/clients/BookClientTest.java @@ -0,0 +1,54 @@ +package com.baeldung.feign.clients; + +import com.baeldung.feign.Controller; +import com.baeldung.feign.models.Book; +import com.baeldung.feign.models.BookResource; +import lombok.extern.slf4j.Slf4j; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +import java.util.List; +import java.util.UUID; +import java.util.stream.Collectors; + +import static org.hamcrest.CoreMatchers.*; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; + +@Slf4j +@RunWith(JUnit4.class) +public class BookClientTest { + private Controller controller = new Controller(); + + @Test + public void givenBookClient_shouldRunSuccessfully() throws Exception { + BookClient bookClient = controller.getBookClient(); + List books = bookClient.findAll().stream() + .map(BookResource::getBook) + .collect(Collectors.toList()); + assertTrue(books.size() > 2); + log.info("{}", books); + } + + @Test + public void givenBookClient_shouldFindOneBook() throws Exception { + BookClient bookClient = controller.getBookClient(); + Book book = bookClient.findByIsbn("0151072558").getBook(); + assertThat(book.getAuthor(), containsString("Orwell")); + log.info("{}", book); + } + + @Test + public void givenBookClient_shouldPostBook() throws Exception { + BookClient bookClient = controller.getBookClient(); + String isbn = UUID.randomUUID().toString(); + Book book = new Book(isbn, "Me", "It's me!", null, null); + bookClient.create(book); + + book = bookClient.findByIsbn(isbn).getBook(); + assertThat(book.getAuthor(), is("Me")); + log.info("{}", book); + } +} From 674c783886ceffa2ba3fd80b18263926ef08a0ae Mon Sep 17 00:00:00 2001 From: Christian Raedel Date: Tue, 6 Sep 2016 19:06:39 +0200 Subject: [PATCH 102/265] BAEL-11: Added skip-tests configuration to pom.xml. --- feign-client/README.md | 5 + feign-client/pom.xml | 99 +++++++++++++++++++ .../java/com/baeldung/feign/Controller.java | 26 +++++ .../baeldung/feign/clients/BookClient.java | 21 ++++ .../java/com/baeldung/feign/models/Book.java | 18 ++++ .../baeldung/feign/models/BookResource.java | 14 +++ feign-client/src/main/resources/log4j2.xml | 14 +++ .../feign/clients/BookClientTest.java | 54 ++++++++++ pom.xml | 1 + 9 files changed, 252 insertions(+) create mode 100644 feign-client/README.md create mode 100644 feign-client/pom.xml create mode 100644 feign-client/src/main/java/com/baeldung/feign/Controller.java create mode 100644 feign-client/src/main/java/com/baeldung/feign/clients/BookClient.java create mode 100644 feign-client/src/main/java/com/baeldung/feign/models/Book.java create mode 100644 feign-client/src/main/java/com/baeldung/feign/models/BookResource.java create mode 100644 feign-client/src/main/resources/log4j2.xml create mode 100644 feign-client/src/test/java/com/baeldung/feign/clients/BookClientTest.java diff --git a/feign-client/README.md b/feign-client/README.md new file mode 100644 index 0000000000..e6ade4d161 --- /dev/null +++ b/feign-client/README.md @@ -0,0 +1,5 @@ +## Feign Hypermedia Client ## + +This is the implementation of a [spring-hypermedia-api][1] client using Feign. + +[1]: https://github.com/eugenp/spring-hypermedia-api diff --git a/feign-client/pom.xml b/feign-client/pom.xml new file mode 100644 index 0000000000..af61883f1b --- /dev/null +++ b/feign-client/pom.xml @@ -0,0 +1,99 @@ + + + 4.0.0 + + com.baeldung.feign + feign-client + 1.0.0-SNAPSHOT + + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + .. + + + + UTF-8 + + + + + io.github.openfeign + feign-core + 9.3.1 + + + io.github.openfeign + feign-okhttp + 9.3.1 + + + io.github.openfeign + feign-gson + 9.3.1 + + + io.github.openfeign + feign-slf4j + 9.3.1 + + + org.slf4j + slf4j-api + 1.7.21 + + + org.apache.logging.log4j + log4j-core + 2.6.2 + + + org.apache.logging.log4j + log4j-slf4j-impl + 2.6.2 + + + org.projectlombok + lombok + 1.16.10 + provided + + + junit + junit + 4.12 + test + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.5.1 + + 1.8 + 1.8 + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.19.1 + + true + + + + org.springframework.boot + spring-boot-maven-plugin + 1.4.0.RELEASE + + + + + diff --git a/feign-client/src/main/java/com/baeldung/feign/Controller.java b/feign-client/src/main/java/com/baeldung/feign/Controller.java new file mode 100644 index 0000000000..f5405be87a --- /dev/null +++ b/feign-client/src/main/java/com/baeldung/feign/Controller.java @@ -0,0 +1,26 @@ +package com.baeldung.feign; + +import com.baeldung.feign.clients.BookClient; +import feign.Feign; +import feign.Logger; +import feign.gson.GsonDecoder; +import feign.gson.GsonEncoder; +import feign.okhttp.OkHttpClient; +import feign.slf4j.Slf4jLogger; +import lombok.Getter; + +@Getter +public class Controller { + private BookClient bookClient = createClient(BookClient.class, + "http://localhost:8081/api/books"); + + private static T createClient(Class type, String uri) { + return Feign.builder() + .client(new OkHttpClient()) + .encoder(new GsonEncoder()) + .decoder(new GsonDecoder()) + .logger(new Slf4jLogger(type)) + .logLevel(Logger.Level.FULL) + .target(type, uri); + } +} diff --git a/feign-client/src/main/java/com/baeldung/feign/clients/BookClient.java b/feign-client/src/main/java/com/baeldung/feign/clients/BookClient.java new file mode 100644 index 0000000000..df20ef8f93 --- /dev/null +++ b/feign-client/src/main/java/com/baeldung/feign/clients/BookClient.java @@ -0,0 +1,21 @@ +package com.baeldung.feign.clients; + +import com.baeldung.feign.models.Book; +import com.baeldung.feign.models.BookResource; +import feign.Headers; +import feign.Param; +import feign.RequestLine; + +import java.util.List; + +public interface BookClient { + @RequestLine("GET /{isbn}") + BookResource findByIsbn(@Param("isbn") String isbn); + + @RequestLine("GET") + List findAll(); + + @RequestLine("POST") + @Headers("Content-Type: application/json") + void create(Book book); +} diff --git a/feign-client/src/main/java/com/baeldung/feign/models/Book.java b/feign-client/src/main/java/com/baeldung/feign/models/Book.java new file mode 100644 index 0000000000..cda4412e27 --- /dev/null +++ b/feign-client/src/main/java/com/baeldung/feign/models/Book.java @@ -0,0 +1,18 @@ +package com.baeldung.feign.models; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; + +@Data +@ToString +@NoArgsConstructor +@AllArgsConstructor +public class Book { + private String isbn; + private String author; + private String title; + private String synopsis; + private String language; +} diff --git a/feign-client/src/main/java/com/baeldung/feign/models/BookResource.java b/feign-client/src/main/java/com/baeldung/feign/models/BookResource.java new file mode 100644 index 0000000000..7902db9fe8 --- /dev/null +++ b/feign-client/src/main/java/com/baeldung/feign/models/BookResource.java @@ -0,0 +1,14 @@ +package com.baeldung.feign.models; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; + +@Data +@ToString +@NoArgsConstructor +@AllArgsConstructor +public class BookResource { + private Book book; +} diff --git a/feign-client/src/main/resources/log4j2.xml b/feign-client/src/main/resources/log4j2.xml new file mode 100644 index 0000000000..659c5fda0e --- /dev/null +++ b/feign-client/src/main/resources/log4j2.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/feign-client/src/test/java/com/baeldung/feign/clients/BookClientTest.java b/feign-client/src/test/java/com/baeldung/feign/clients/BookClientTest.java new file mode 100644 index 0000000000..37f91c5b51 --- /dev/null +++ b/feign-client/src/test/java/com/baeldung/feign/clients/BookClientTest.java @@ -0,0 +1,54 @@ +package com.baeldung.feign.clients; + +import com.baeldung.feign.Controller; +import com.baeldung.feign.models.Book; +import com.baeldung.feign.models.BookResource; +import lombok.extern.slf4j.Slf4j; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +import java.util.List; +import java.util.UUID; +import java.util.stream.Collectors; + +import static org.hamcrest.CoreMatchers.containsString; +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; + +@Slf4j +@RunWith(JUnit4.class) +public class BookClientTest { + private Controller controller = new Controller(); + + @Test + public void givenBookClient_shouldRunSuccessfully() throws Exception { + BookClient bookClient = controller.getBookClient(); + List books = bookClient.findAll().stream() + .map(BookResource::getBook) + .collect(Collectors.toList()); + assertTrue(books.size() > 2); + log.info("{}", books); + } + + @Test + public void givenBookClient_shouldFindOneBook() throws Exception { + BookClient bookClient = controller.getBookClient(); + Book book = bookClient.findByIsbn("0151072558").getBook(); + assertThat(book.getAuthor(), containsString("Orwell")); + log.info("{}", book); + } + + @Test + public void givenBookClient_shouldPostBook() throws Exception { + BookClient bookClient = controller.getBookClient(); + String isbn = UUID.randomUUID().toString(); + Book book = new Book(isbn, "Me", "It's me!", null, null); + bookClient.create(book); + + book = bookClient.findByIsbn(isbn).getBook(); + assertThat(book.getAuthor(), is("Me")); + log.info("{}", book); + } +} diff --git a/pom.xml b/pom.xml index d37be9136e..41b348c893 100644 --- a/pom.xml +++ b/pom.xml @@ -31,6 +31,7 @@ deltaspike enterprise-patterns + feign-client gson From 38eb1a5f45994bff063cd720c60979c47b59b6ad Mon Sep 17 00:00:00 2001 From: Christian Raedel Date: Tue, 6 Sep 2016 21:30:14 +0200 Subject: [PATCH 103/265] BAEL-11: Renamed project to feign-client. --- feign-hypermedia-client/README.md | 5 - feign-hypermedia-client/pom.xml | 91 ------------------- .../java/com/baeldung/feign/Controller.java | 26 ------ .../baeldung/feign/clients/BookClient.java | 21 ----- .../java/com/baeldung/feign/models/Book.java | 18 ---- .../baeldung/feign/models/BookResource.java | 14 --- .../src/main/resources/log4j2.xml | 14 --- .../feign/clients/BookClientTest.java | 54 ----------- 8 files changed, 243 deletions(-) delete mode 100644 feign-hypermedia-client/README.md delete mode 100644 feign-hypermedia-client/pom.xml delete mode 100644 feign-hypermedia-client/src/main/java/com/baeldung/feign/Controller.java delete mode 100644 feign-hypermedia-client/src/main/java/com/baeldung/feign/clients/BookClient.java delete mode 100644 feign-hypermedia-client/src/main/java/com/baeldung/feign/models/Book.java delete mode 100644 feign-hypermedia-client/src/main/java/com/baeldung/feign/models/BookResource.java delete mode 100644 feign-hypermedia-client/src/main/resources/log4j2.xml delete mode 100644 feign-hypermedia-client/src/test/java/com/baeldung/feign/clients/BookClientTest.java diff --git a/feign-hypermedia-client/README.md b/feign-hypermedia-client/README.md deleted file mode 100644 index e6ade4d161..0000000000 --- a/feign-hypermedia-client/README.md +++ /dev/null @@ -1,5 +0,0 @@ -## Feign Hypermedia Client ## - -This is the implementation of a [spring-hypermedia-api][1] client using Feign. - -[1]: https://github.com/eugenp/spring-hypermedia-api diff --git a/feign-hypermedia-client/pom.xml b/feign-hypermedia-client/pom.xml deleted file mode 100644 index 7e60e2ec7f..0000000000 --- a/feign-hypermedia-client/pom.xml +++ /dev/null @@ -1,91 +0,0 @@ - - - 4.0.0 - - com.baeldung.feign - feign-hypermedia-client - 1.0.0-SNAPSHOT - - - com.baeldung - parent-modules - 1.0.0-SNAPSHOT - .. - - - - UTF-8 - - - - - io.github.openfeign - feign-core - 9.3.1 - - - io.github.openfeign - feign-okhttp - 9.3.1 - - - io.github.openfeign - feign-gson - 9.3.1 - - - io.github.openfeign - feign-slf4j - 9.3.1 - - - org.slf4j - slf4j-api - 1.7.21 - - - org.apache.logging.log4j - log4j-core - 2.6.2 - - - org.apache.logging.log4j - log4j-slf4j-impl - 2.6.2 - - - org.projectlombok - lombok - 1.16.10 - provided - - - junit - junit - 4.12 - test - - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.5.1 - - 1.8 - 1.8 - - - - org.springframework.boot - spring-boot-maven-plugin - 1.4.0.RELEASE - - - - - diff --git a/feign-hypermedia-client/src/main/java/com/baeldung/feign/Controller.java b/feign-hypermedia-client/src/main/java/com/baeldung/feign/Controller.java deleted file mode 100644 index f5405be87a..0000000000 --- a/feign-hypermedia-client/src/main/java/com/baeldung/feign/Controller.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.baeldung.feign; - -import com.baeldung.feign.clients.BookClient; -import feign.Feign; -import feign.Logger; -import feign.gson.GsonDecoder; -import feign.gson.GsonEncoder; -import feign.okhttp.OkHttpClient; -import feign.slf4j.Slf4jLogger; -import lombok.Getter; - -@Getter -public class Controller { - private BookClient bookClient = createClient(BookClient.class, - "http://localhost:8081/api/books"); - - private static T createClient(Class type, String uri) { - return Feign.builder() - .client(new OkHttpClient()) - .encoder(new GsonEncoder()) - .decoder(new GsonDecoder()) - .logger(new Slf4jLogger(type)) - .logLevel(Logger.Level.FULL) - .target(type, uri); - } -} diff --git a/feign-hypermedia-client/src/main/java/com/baeldung/feign/clients/BookClient.java b/feign-hypermedia-client/src/main/java/com/baeldung/feign/clients/BookClient.java deleted file mode 100644 index df20ef8f93..0000000000 --- a/feign-hypermedia-client/src/main/java/com/baeldung/feign/clients/BookClient.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.baeldung.feign.clients; - -import com.baeldung.feign.models.Book; -import com.baeldung.feign.models.BookResource; -import feign.Headers; -import feign.Param; -import feign.RequestLine; - -import java.util.List; - -public interface BookClient { - @RequestLine("GET /{isbn}") - BookResource findByIsbn(@Param("isbn") String isbn); - - @RequestLine("GET") - List findAll(); - - @RequestLine("POST") - @Headers("Content-Type: application/json") - void create(Book book); -} diff --git a/feign-hypermedia-client/src/main/java/com/baeldung/feign/models/Book.java b/feign-hypermedia-client/src/main/java/com/baeldung/feign/models/Book.java deleted file mode 100644 index cda4412e27..0000000000 --- a/feign-hypermedia-client/src/main/java/com/baeldung/feign/models/Book.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.baeldung.feign.models; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.ToString; - -@Data -@ToString -@NoArgsConstructor -@AllArgsConstructor -public class Book { - private String isbn; - private String author; - private String title; - private String synopsis; - private String language; -} diff --git a/feign-hypermedia-client/src/main/java/com/baeldung/feign/models/BookResource.java b/feign-hypermedia-client/src/main/java/com/baeldung/feign/models/BookResource.java deleted file mode 100644 index 7902db9fe8..0000000000 --- a/feign-hypermedia-client/src/main/java/com/baeldung/feign/models/BookResource.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.baeldung.feign.models; - -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.ToString; - -@Data -@ToString -@NoArgsConstructor -@AllArgsConstructor -public class BookResource { - private Book book; -} diff --git a/feign-hypermedia-client/src/main/resources/log4j2.xml b/feign-hypermedia-client/src/main/resources/log4j2.xml deleted file mode 100644 index 659c5fda0e..0000000000 --- a/feign-hypermedia-client/src/main/resources/log4j2.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/feign-hypermedia-client/src/test/java/com/baeldung/feign/clients/BookClientTest.java b/feign-hypermedia-client/src/test/java/com/baeldung/feign/clients/BookClientTest.java deleted file mode 100644 index dcebe7426f..0000000000 --- a/feign-hypermedia-client/src/test/java/com/baeldung/feign/clients/BookClientTest.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.baeldung.feign.clients; - -import com.baeldung.feign.Controller; -import com.baeldung.feign.models.Book; -import com.baeldung.feign.models.BookResource; -import lombok.extern.slf4j.Slf4j; -import org.junit.Assert; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.JUnit4; - -import java.util.List; -import java.util.UUID; -import java.util.stream.Collectors; - -import static org.hamcrest.CoreMatchers.*; -import static org.junit.Assert.assertThat; -import static org.junit.Assert.assertTrue; - -@Slf4j -@RunWith(JUnit4.class) -public class BookClientTest { - private Controller controller = new Controller(); - - @Test - public void givenBookClient_shouldRunSuccessfully() throws Exception { - BookClient bookClient = controller.getBookClient(); - List books = bookClient.findAll().stream() - .map(BookResource::getBook) - .collect(Collectors.toList()); - assertTrue(books.size() > 2); - log.info("{}", books); - } - - @Test - public void givenBookClient_shouldFindOneBook() throws Exception { - BookClient bookClient = controller.getBookClient(); - Book book = bookClient.findByIsbn("0151072558").getBook(); - assertThat(book.getAuthor(), containsString("Orwell")); - log.info("{}", book); - } - - @Test - public void givenBookClient_shouldPostBook() throws Exception { - BookClient bookClient = controller.getBookClient(); - String isbn = UUID.randomUUID().toString(); - Book book = new Book(isbn, "Me", "It's me!", null, null); - bookClient.create(book); - - book = bookClient.findByIsbn(isbn).getBook(); - assertThat(book.getAuthor(), is("Me")); - log.info("{}", book); - } -} From 499d51e610a6518db2bc2a48a2dae2dae009ab2b Mon Sep 17 00:00:00 2001 From: slavisa-baeldung Date: Thu, 15 Sep 2016 11:40:46 +0200 Subject: [PATCH 104/265] BAEL-11: Minor refactorings --- ...ava => BookControllerFeignClientBuilder.java} | 2 +- .../baeldung/feign/clients/BookClientTest.java | 16 +++++++++++----- 2 files changed, 12 insertions(+), 6 deletions(-) rename feign-client/src/main/java/com/baeldung/feign/{Controller.java => BookControllerFeignClientBuilder.java} (93%) diff --git a/feign-client/src/main/java/com/baeldung/feign/Controller.java b/feign-client/src/main/java/com/baeldung/feign/BookControllerFeignClientBuilder.java similarity index 93% rename from feign-client/src/main/java/com/baeldung/feign/Controller.java rename to feign-client/src/main/java/com/baeldung/feign/BookControllerFeignClientBuilder.java index f5405be87a..9c0c359d88 100644 --- a/feign-client/src/main/java/com/baeldung/feign/Controller.java +++ b/feign-client/src/main/java/com/baeldung/feign/BookControllerFeignClientBuilder.java @@ -10,7 +10,7 @@ import feign.slf4j.Slf4jLogger; import lombok.Getter; @Getter -public class Controller { +public class BookControllerFeignClientBuilder { private BookClient bookClient = createClient(BookClient.class, "http://localhost:8081/api/books"); diff --git a/feign-client/src/test/java/com/baeldung/feign/clients/BookClientTest.java b/feign-client/src/test/java/com/baeldung/feign/clients/BookClientTest.java index 37f91c5b51..fa470cd0a0 100644 --- a/feign-client/src/test/java/com/baeldung/feign/clients/BookClientTest.java +++ b/feign-client/src/test/java/com/baeldung/feign/clients/BookClientTest.java @@ -1,9 +1,10 @@ package com.baeldung.feign.clients; -import com.baeldung.feign.Controller; +import com.baeldung.feign.BookControllerFeignClientBuilder; import com.baeldung.feign.models.Book; import com.baeldung.feign.models.BookResource; import lombok.extern.slf4j.Slf4j; +import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; @@ -20,11 +21,16 @@ import static org.junit.Assert.assertTrue; @Slf4j @RunWith(JUnit4.class) public class BookClientTest { - private Controller controller = new Controller(); + private BookControllerFeignClientBuilder feignClientBuilder; + + @Before + public void setup() { + feignClientBuilder = new BookControllerFeignClientBuilder(); + } @Test public void givenBookClient_shouldRunSuccessfully() throws Exception { - BookClient bookClient = controller.getBookClient(); + BookClient bookClient = feignClientBuilder.getBookClient(); List books = bookClient.findAll().stream() .map(BookResource::getBook) .collect(Collectors.toList()); @@ -34,7 +40,7 @@ public class BookClientTest { @Test public void givenBookClient_shouldFindOneBook() throws Exception { - BookClient bookClient = controller.getBookClient(); + BookClient bookClient = feignClientBuilder.getBookClient(); Book book = bookClient.findByIsbn("0151072558").getBook(); assertThat(book.getAuthor(), containsString("Orwell")); log.info("{}", book); @@ -42,7 +48,7 @@ public class BookClientTest { @Test public void givenBookClient_shouldPostBook() throws Exception { - BookClient bookClient = controller.getBookClient(); + BookClient bookClient = feignClientBuilder.getBookClient(); String isbn = UUID.randomUUID().toString(); Book book = new Book(isbn, "Me", "It's me!", null, null); bookClient.create(book); From ef3b18a7174fd93ee8c416c3250030cc91be4890 Mon Sep 17 00:00:00 2001 From: slavisa-baeldung Date: Thu, 15 Sep 2016 12:23:14 +0200 Subject: [PATCH 105/265] BAEL-11: Minor refactorings --- .../java/com/baeldung/feign/clients/BookClientTest.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/feign-client/src/test/java/com/baeldung/feign/clients/BookClientTest.java b/feign-client/src/test/java/com/baeldung/feign/clients/BookClientTest.java index fa470cd0a0..e7e058a336 100644 --- a/feign-client/src/test/java/com/baeldung/feign/clients/BookClientTest.java +++ b/feign-client/src/test/java/com/baeldung/feign/clients/BookClientTest.java @@ -21,16 +21,16 @@ import static org.junit.Assert.assertTrue; @Slf4j @RunWith(JUnit4.class) public class BookClientTest { - private BookControllerFeignClientBuilder feignClientBuilder; + private BookClient bookClient; @Before public void setup() { - feignClientBuilder = new BookControllerFeignClientBuilder(); + BookControllerFeignClientBuilder feignClientBuilder = new BookControllerFeignClientBuilder(); + bookClient = feignClientBuilder.getBookClient(); } @Test public void givenBookClient_shouldRunSuccessfully() throws Exception { - BookClient bookClient = feignClientBuilder.getBookClient(); List books = bookClient.findAll().stream() .map(BookResource::getBook) .collect(Collectors.toList()); @@ -40,7 +40,6 @@ public class BookClientTest { @Test public void givenBookClient_shouldFindOneBook() throws Exception { - BookClient bookClient = feignClientBuilder.getBookClient(); Book book = bookClient.findByIsbn("0151072558").getBook(); assertThat(book.getAuthor(), containsString("Orwell")); log.info("{}", book); @@ -48,7 +47,6 @@ public class BookClientTest { @Test public void givenBookClient_shouldPostBook() throws Exception { - BookClient bookClient = feignClientBuilder.getBookClient(); String isbn = UUID.randomUUID().toString(); Book book = new Book(isbn, "Me", "It's me!", null, null); bookClient.create(book); From 97e8ba7de620ada2fb4cc4299cf250cd59e0ec0e Mon Sep 17 00:00:00 2001 From: slavisa-baeldung Date: Thu, 15 Sep 2016 13:02:54 +0200 Subject: [PATCH 106/265] NOJIRA - removing cloud-config, hystrix and eureka project. They're now the child projects of spring-cloud --- .../config-client-development.properties | 2 - .../config-client-production.properties | 1 - spring-cloud-config/client/pom.xml | 79 ----------------- .../cloud/config/client/ConfigClient.java | 29 ------- .../src/main/resources/bootstrap.properties | 5 -- .../config/client/ConfigClientLiveTest.java | 17 ---- spring-cloud-config/docker/Dockerfile | 4 - spring-cloud-config/docker/Dockerfile.client | 6 -- spring-cloud-config/docker/Dockerfile.server | 9 -- .../docker/config-client-entrypoint.sh | 8 -- .../docker/docker-compose.scale.yml | 41 --------- spring-cloud-config/docker/docker-compose.yml | 43 --------- spring-cloud-config/pom.xml | 42 --------- spring-cloud-config/server/pom.xml | 82 ------------------ .../cloud/config/server/ConfigServer.java | 15 ---- .../src/main/resources/application.properties | 9 -- .../src/main/resources/config-server.jks | Bin 3842 -> 0 bytes .../config/server/ConfigServerListTest.java | 18 ---- spring-cloud-eureka/pom.xml | 50 ----------- .../spring-cloud-eureka-client/pom.xml | 57 ------------ .../client/EurekaClientApplication.java | 32 ------- .../eureka/client/GreetingController.java | 8 -- .../src/main/resources/application.yml | 13 --- .../spring-cloud-eureka-feign-client/pom.xml | 67 -------------- .../feign/client/FeignClientApplication.java | 29 ------- .../cloud/feign/client/GreetingClient.java | 8 -- .../src/main/resources/application.yml | 11 --- .../resources/templates/greeting-view.html | 9 -- .../spring-cloud-eureka-server/pom.xml | 52 ----------- .../server/EurekaServerApplication.java | 13 --- .../src/main/resources/application.yml | 7 -- spring-cloud-hystrix/pom.xml | 50 ----------- .../pom.xml | 82 ------------------ .../hystrix/rest/consumer/GreetingClient.java | 21 ----- .../RestConsumerFeignApplication.java | 32 ------- .../src/main/resources/application.properties | 1 - .../resources/templates/greeting-view.html | 9 -- .../pom.xml | 72 --------------- .../rest/consumer/GreetingService.java | 18 ---- .../consumer/RestConsumerApplication.java | 31 ------- .../src/main/resources/application.properties | 1 - .../resources/templates/greeting-view.html | 9 -- .../pom.xml | 40 --------- .../rest/producer/GreetingController.java | 10 --- .../producer/RestProducerApplication.java | 20 ----- .../src/main/resources/application.properties | 2 - 46 files changed, 1164 deletions(-) delete mode 100644 spring-cloud-config/client-config/config-client-development.properties delete mode 100644 spring-cloud-config/client-config/config-client-production.properties delete mode 100644 spring-cloud-config/client/pom.xml delete mode 100644 spring-cloud-config/client/src/main/java/com/baeldung/spring/cloud/config/client/ConfigClient.java delete mode 100644 spring-cloud-config/client/src/main/resources/bootstrap.properties delete mode 100644 spring-cloud-config/client/src/test/java/com/baeldung/spring/cloud/config/client/ConfigClientLiveTest.java delete mode 100644 spring-cloud-config/docker/Dockerfile delete mode 100644 spring-cloud-config/docker/Dockerfile.client delete mode 100644 spring-cloud-config/docker/Dockerfile.server delete mode 100644 spring-cloud-config/docker/config-client-entrypoint.sh delete mode 100644 spring-cloud-config/docker/docker-compose.scale.yml delete mode 100644 spring-cloud-config/docker/docker-compose.yml delete mode 100644 spring-cloud-config/pom.xml delete mode 100644 spring-cloud-config/server/pom.xml delete mode 100644 spring-cloud-config/server/src/main/java/com/baeldung/spring/cloud/config/server/ConfigServer.java delete mode 100644 spring-cloud-config/server/src/main/resources/application.properties delete mode 100644 spring-cloud-config/server/src/main/resources/config-server.jks delete mode 100644 spring-cloud-config/server/src/test/java/com/baeldung/spring/cloud/config/server/ConfigServerListTest.java delete mode 100644 spring-cloud-eureka/pom.xml delete mode 100644 spring-cloud-eureka/spring-cloud-eureka-client/pom.xml delete mode 100644 spring-cloud-eureka/spring-cloud-eureka-client/src/main/java/com/baeldung/spring/cloud/eureka/client/EurekaClientApplication.java delete mode 100644 spring-cloud-eureka/spring-cloud-eureka-client/src/main/java/com/baeldung/spring/cloud/eureka/client/GreetingController.java delete mode 100644 spring-cloud-eureka/spring-cloud-eureka-client/src/main/resources/application.yml delete mode 100644 spring-cloud-eureka/spring-cloud-eureka-feign-client/pom.xml delete mode 100644 spring-cloud-eureka/spring-cloud-eureka-feign-client/src/main/java/com/baeldung/spring/cloud/feign/client/FeignClientApplication.java delete mode 100644 spring-cloud-eureka/spring-cloud-eureka-feign-client/src/main/java/com/baeldung/spring/cloud/feign/client/GreetingClient.java delete mode 100644 spring-cloud-eureka/spring-cloud-eureka-feign-client/src/main/resources/application.yml delete mode 100644 spring-cloud-eureka/spring-cloud-eureka-feign-client/src/main/resources/templates/greeting-view.html delete mode 100644 spring-cloud-eureka/spring-cloud-eureka-server/pom.xml delete mode 100644 spring-cloud-eureka/spring-cloud-eureka-server/src/main/java/com/baeldung/spring/cloud/eureka/server/EurekaServerApplication.java delete mode 100644 spring-cloud-eureka/spring-cloud-eureka-server/src/main/resources/application.yml delete mode 100644 spring-cloud-hystrix/pom.xml delete mode 100644 spring-cloud-hystrix/spring-cloud-hystrix-feign-rest-consumer/pom.xml delete mode 100644 spring-cloud-hystrix/spring-cloud-hystrix-feign-rest-consumer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/consumer/GreetingClient.java delete mode 100644 spring-cloud-hystrix/spring-cloud-hystrix-feign-rest-consumer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/consumer/RestConsumerFeignApplication.java delete mode 100644 spring-cloud-hystrix/spring-cloud-hystrix-feign-rest-consumer/src/main/resources/application.properties delete mode 100644 spring-cloud-hystrix/spring-cloud-hystrix-feign-rest-consumer/src/main/resources/templates/greeting-view.html delete mode 100644 spring-cloud-hystrix/spring-cloud-hystrix-rest-consumer/pom.xml delete mode 100644 spring-cloud-hystrix/spring-cloud-hystrix-rest-consumer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/consumer/GreetingService.java delete mode 100644 spring-cloud-hystrix/spring-cloud-hystrix-rest-consumer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/consumer/RestConsumerApplication.java delete mode 100644 spring-cloud-hystrix/spring-cloud-hystrix-rest-consumer/src/main/resources/application.properties delete mode 100644 spring-cloud-hystrix/spring-cloud-hystrix-rest-consumer/src/main/resources/templates/greeting-view.html delete mode 100644 spring-cloud-hystrix/spring-cloud-hystrix-rest-producer/pom.xml delete mode 100644 spring-cloud-hystrix/spring-cloud-hystrix-rest-producer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/producer/GreetingController.java delete mode 100644 spring-cloud-hystrix/spring-cloud-hystrix-rest-producer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/producer/RestProducerApplication.java delete mode 100644 spring-cloud-hystrix/spring-cloud-hystrix-rest-producer/src/main/resources/application.properties diff --git a/spring-cloud-config/client-config/config-client-development.properties b/spring-cloud-config/client-config/config-client-development.properties deleted file mode 100644 index 6401d1be7f..0000000000 --- a/spring-cloud-config/client-config/config-client-development.properties +++ /dev/null @@ -1,2 +0,0 @@ -user.role=Developer -user.password=pass diff --git a/spring-cloud-config/client-config/config-client-production.properties b/spring-cloud-config/client-config/config-client-production.properties deleted file mode 100644 index cd2e14fcc3..0000000000 --- a/spring-cloud-config/client-config/config-client-production.properties +++ /dev/null @@ -1 +0,0 @@ -user.role=User diff --git a/spring-cloud-config/client/pom.xml b/spring-cloud-config/client/pom.xml deleted file mode 100644 index 0ef4b35581..0000000000 --- a/spring-cloud-config/client/pom.xml +++ /dev/null @@ -1,79 +0,0 @@ - - - 4.0.0 - - - com.baeldung.spring.cloud - spring-cloud-config - 0.0.1-SNAPSHOT - - client - jar - - client - Demo project for Spring Cloud Config Client - - - UTF-8 - UTF-8 - 1.8 - - - - - org.springframework.cloud - spring-cloud-starter-config - - - org.springframework.boot - spring-boot-starter-web - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - - org.springframework.cloud - spring-cloud-dependencies - Brixton.BUILD-SNAPSHOT - pom - import - - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - - - - spring-snapshots - Spring Snapshots - https://repo.spring.io/snapshot - - true - - - - spring-milestones - Spring Milestones - https://repo.spring.io/milestone - - false - - - - diff --git a/spring-cloud-config/client/src/main/java/com/baeldung/spring/cloud/config/client/ConfigClient.java b/spring-cloud-config/client/src/main/java/com/baeldung/spring/cloud/config/client/ConfigClient.java deleted file mode 100644 index 1dd3bbdab0..0000000000 --- a/spring-cloud-config/client/src/main/java/com/baeldung/spring/cloud/config/client/ConfigClient.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.baeldung.spring.cloud.config.client; - -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.http.MediaType; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RestController; - -@SpringBootApplication -@RestController -public class ConfigClient { - @Value("${user.role}") - private String role; - - @Value("${user.password}") - private String password; - - public static void main(String[] args) { - SpringApplication.run(ConfigClient.class, args); - } - - @RequestMapping(value = "/whoami/{username}", method = RequestMethod.GET, produces = MediaType.TEXT_PLAIN_VALUE) - public String whoami(@PathVariable("username") String username) { - return String.format("Hello %s! You are a(n) %s and your password is '%s'.\n", username, role, password); - } -} diff --git a/spring-cloud-config/client/src/main/resources/bootstrap.properties b/spring-cloud-config/client/src/main/resources/bootstrap.properties deleted file mode 100644 index 18982a93b5..0000000000 --- a/spring-cloud-config/client/src/main/resources/bootstrap.properties +++ /dev/null @@ -1,5 +0,0 @@ -spring.application.name=config-client -spring.profiles.active=development -spring.cloud.config.uri=http://localhost:8888 -spring.cloud.config.username=root -spring.cloud.config.password=s3cr3t diff --git a/spring-cloud-config/client/src/test/java/com/baeldung/spring/cloud/config/client/ConfigClientLiveTest.java b/spring-cloud-config/client/src/test/java/com/baeldung/spring/cloud/config/client/ConfigClientLiveTest.java deleted file mode 100644 index 058fd45f35..0000000000 --- a/spring-cloud-config/client/src/test/java/com/baeldung/spring/cloud/config/client/ConfigClientLiveTest.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.baeldung.spring.cloud.config.client; - -import org.junit.Ignore; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.SpringApplicationConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.web.WebAppConfiguration; - -@RunWith(SpringJUnit4ClassRunner.class) -@SpringApplicationConfiguration(classes = ConfigClient.class) -@WebAppConfiguration -public class ConfigClientLiveTest { - @Test - public void contextLoads() { - } -} diff --git a/spring-cloud-config/docker/Dockerfile b/spring-cloud-config/docker/Dockerfile deleted file mode 100644 index bdb37abf80..0000000000 --- a/spring-cloud-config/docker/Dockerfile +++ /dev/null @@ -1,4 +0,0 @@ -FROM alpine:edge -MAINTAINER baeldung.com -RUN apk add --no-cache openjdk8 -COPY files/UnlimitedJCEPolicyJDK8/* /usr/lib/jvm/java-1.8-openjdk/jre/lib/security/ diff --git a/spring-cloud-config/docker/Dockerfile.client b/spring-cloud-config/docker/Dockerfile.client deleted file mode 100644 index 5fbc0b98c0..0000000000 --- a/spring-cloud-config/docker/Dockerfile.client +++ /dev/null @@ -1,6 +0,0 @@ -FROM alpine-java:base -MAINTAINER baeldung.com -RUN apk --no-cache add netcat-openbsd -COPY files/config-client.jar /opt/spring-cloud/lib/ -COPY files/config-client-entrypoint.sh /opt/spring-cloud/bin/ -RUN chmod 755 /opt/spring-cloud/bin/config-client-entrypoint.sh diff --git a/spring-cloud-config/docker/Dockerfile.server b/spring-cloud-config/docker/Dockerfile.server deleted file mode 100644 index 4f7bd751e8..0000000000 --- a/spring-cloud-config/docker/Dockerfile.server +++ /dev/null @@ -1,9 +0,0 @@ -FROM alpine-java:base -MAINTAINER baeldung.com -COPY files/config-server.jar /opt/spring-cloud/lib/ -ENV SPRING_APPLICATION_JSON='{"spring": {"cloud": {"config": {"server": \ - {"git": {"uri": "/var/lib/spring-cloud/config-repo", "clone-on-start": true}}}}}}' -ENTRYPOINT ["/usr/bin/java"] -CMD ["-jar", "/opt/spring-cloud/lib/config-server.jar"] -VOLUME /var/lib/spring-cloud/config-repo -EXPOSE 8888 diff --git a/spring-cloud-config/docker/config-client-entrypoint.sh b/spring-cloud-config/docker/config-client-entrypoint.sh deleted file mode 100644 index 12352119fa..0000000000 --- a/spring-cloud-config/docker/config-client-entrypoint.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh - -while ! nc -z config-server 8888 ; do - echo "Waiting for upcoming Config Server" - sleep 2 -done - -java -jar /opt/spring-cloud/lib/config-client.jar diff --git a/spring-cloud-config/docker/docker-compose.scale.yml b/spring-cloud-config/docker/docker-compose.scale.yml deleted file mode 100644 index f74153bea3..0000000000 --- a/spring-cloud-config/docker/docker-compose.scale.yml +++ /dev/null @@ -1,41 +0,0 @@ -version: '2' -services: - config-server: - build: - context: . - dockerfile: Dockerfile.server - image: config-server:latest - expose: - - 8888 - networks: - - spring-cloud-network - volumes: - - spring-cloud-config-repo:/var/lib/spring-cloud/config-repo - logging: - driver: json-file - config-client: - build: - context: . - dockerfile: Dockerfile.client - image: config-client:latest - entrypoint: /opt/spring-cloud/bin/config-client-entrypoint.sh - environment: - SPRING_APPLICATION_JSON: '{"spring": {"cloud": {"config": {"uri": "http://config-server:8888"}}}}' - expose: - - 8080 - ports: - - 8080 - networks: - - spring-cloud-network - links: - - config-server:config-server - depends_on: - - config-server - logging: - driver: json-file -networks: - spring-cloud-network: - driver: bridge -volumes: - spring-cloud-config-repo: - external: true diff --git a/spring-cloud-config/docker/docker-compose.yml b/spring-cloud-config/docker/docker-compose.yml deleted file mode 100644 index 74c71b651c..0000000000 --- a/spring-cloud-config/docker/docker-compose.yml +++ /dev/null @@ -1,43 +0,0 @@ -version: '2' -services: - config-server: - container_name: config-server - build: - context: . - dockerfile: Dockerfile.server - image: config-server:latest - expose: - - 8888 - networks: - - spring-cloud-network - volumes: - - spring-cloud-config-repo:/var/lib/spring-cloud/config-repo - logging: - driver: json-file - config-client: - container_name: config-client - build: - context: . - dockerfile: Dockerfile.client - image: config-client:latest - entrypoint: /opt/spring-cloud/bin/config-client-entrypoint.sh - environment: - SPRING_APPLICATION_JSON: '{"spring": {"cloud": {"config": {"uri": "http://config-server:8888"}}}}' - expose: - - 8080 - ports: - - 8080:8080 - networks: - - spring-cloud-network - links: - - config-server:config-server - depends_on: - - config-server - logging: - driver: json-file -networks: - spring-cloud-network: - driver: bridge -volumes: - spring-cloud-config-repo: - external: true diff --git a/spring-cloud-config/pom.xml b/spring-cloud-config/pom.xml deleted file mode 100644 index 8e0e4b8706..0000000000 --- a/spring-cloud-config/pom.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - 4.0.0 - - com.baeldung.spring.cloud - spring-cloud-config - 0.0.1-SNAPSHOT - pom - - - server - client - - - - org.springframework.boot - spring-boot-starter-parent - 1.3.5.RELEASE - - - - - - org.apache.maven.plugins - maven-surefire-plugin - ${maven-surefire-plugin.version} - - - **/*LiveTest.java - - - - - - - - - 1.3.5.RELEASE - 2.19.1 - - diff --git a/spring-cloud-config/server/pom.xml b/spring-cloud-config/server/pom.xml deleted file mode 100644 index c3f68854bb..0000000000 --- a/spring-cloud-config/server/pom.xml +++ /dev/null @@ -1,82 +0,0 @@ - - - 4.0.0 - - - com.baeldung.spring.cloud - spring-cloud-config - 0.0.1-SNAPSHOT - - server - - server - Demo project for Spring Cloud Config Server - - - UTF-8 - UTF-8 - 1.8 - - - - - org.springframework.cloud - spring-cloud-config-server - - - org.springframework.boot - spring-boot-starter-security - - - org.springframework.boot - spring-boot-starter-web - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - - org.springframework.cloud - spring-cloud-dependencies - Brixton.BUILD-SNAPSHOT - pom - import - - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - - - - spring-snapshots - Spring Snapshots - https://repo.spring.io/snapshot - - true - - - - spring-milestones - Spring Milestones - https://repo.spring.io/milestone - - false - - - - diff --git a/spring-cloud-config/server/src/main/java/com/baeldung/spring/cloud/config/server/ConfigServer.java b/spring-cloud-config/server/src/main/java/com/baeldung/spring/cloud/config/server/ConfigServer.java deleted file mode 100644 index 4dd34ae3ff..0000000000 --- a/spring-cloud-config/server/src/main/java/com/baeldung/spring/cloud/config/server/ConfigServer.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.baeldung.spring.cloud.config.server; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cloud.config.server.EnableConfigServer; -import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; - -@SpringBootApplication -@EnableConfigServer -@EnableWebSecurity -public class ConfigServer { - public static void main(String[] args) { - SpringApplication.run(ConfigServer.class, args); - } -} diff --git a/spring-cloud-config/server/src/main/resources/application.properties b/spring-cloud-config/server/src/main/resources/application.properties deleted file mode 100644 index 2131f3b249..0000000000 --- a/spring-cloud-config/server/src/main/resources/application.properties +++ /dev/null @@ -1,9 +0,0 @@ -server.port=8888 -spring.cloud.config.server.git.uri=https://github.com/eugenp/tutorials/tree/master/spring-cloud-config/client-config -spring.cloud.config.server.git.clone-on-start=false -security.user.name=root -security.user.password=s3cr3t -encrypt.key-store.location=classpath:/config-server.jks -encrypt.key-store.password=my-s70r3-s3cr3t -encrypt.key-store.alias=config-server-key -encrypt.key-store.secret=my-k34-s3cr3t diff --git a/spring-cloud-config/server/src/main/resources/config-server.jks b/spring-cloud-config/server/src/main/resources/config-server.jks deleted file mode 100644 index f3dddb4a8f4c4773a8feae4d8534b129e5e67f45..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3842 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 - - 4.0.0 - - com.baeldung.spring.cloud - spring-cloud-eureka - 1.0.0-SNAPSHOT - - spring-cloud-eureka-server - spring-cloud-eureka-client - spring-cloud-eureka-feign-client - - pom - - Spring Cloud Eureka - Spring Cloud Eureka Server and Sample Clients - - - com.baeldung - parent-modules - 1.0.0-SNAPSHOT - .. - - - - UTF-8 - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.5.1 - - 1.8 - 1.8 - - - - org.springframework.boot - spring-boot-maven-plugin - 1.4.0.RELEASE - - - - - diff --git a/spring-cloud-eureka/spring-cloud-eureka-client/pom.xml b/spring-cloud-eureka/spring-cloud-eureka-client/pom.xml deleted file mode 100644 index 720b49ddc2..0000000000 --- a/spring-cloud-eureka/spring-cloud-eureka-client/pom.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - 4.0.0 - - spring-cloud-eureka-client - 1.0.0-SNAPSHOT - jar - - Spring Cloud Eureka Client - Spring Cloud Eureka Sample Client - - - com.baeldung.spring.cloud - spring-cloud-eureka - 1.0.0-SNAPSHOT - .. - - - - - org.springframework.cloud - spring-cloud-starter-eureka - 1.1.5.RELEASE - - - org.springframework.boot - spring-boot-starter-web - 1.4.0.RELEASE - - - - - - - org.springframework.cloud - spring-cloud-starter-parent - Brixton.SR4 - pom - import - - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-cloud-eureka/spring-cloud-eureka-client/src/main/java/com/baeldung/spring/cloud/eureka/client/EurekaClientApplication.java b/spring-cloud-eureka/spring-cloud-eureka-client/src/main/java/com/baeldung/spring/cloud/eureka/client/EurekaClientApplication.java deleted file mode 100644 index 48099eeaa2..0000000000 --- a/spring-cloud-eureka/spring-cloud-eureka-client/src/main/java/com/baeldung/spring/cloud/eureka/client/EurekaClientApplication.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.baeldung.spring.cloud.eureka.client; - -import com.netflix.discovery.EurekaClient; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cloud.netflix.eureka.EnableEurekaClient; -import org.springframework.context.annotation.Lazy; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@SpringBootApplication -@EnableEurekaClient -@RestController -public class EurekaClientApplication implements GreetingController { - @Autowired - @Lazy - private EurekaClient eurekaClient; - - @Value("${spring.application.name}") - private String appName; - - public static void main(String[] args) { - SpringApplication.run(EurekaClientApplication.class, args); - } - - @Override - public String greeting() { - return String.format("Hello from '%s'!", eurekaClient.getApplication(appName).getName()); - } -} diff --git a/spring-cloud-eureka/spring-cloud-eureka-client/src/main/java/com/baeldung/spring/cloud/eureka/client/GreetingController.java b/spring-cloud-eureka/spring-cloud-eureka-client/src/main/java/com/baeldung/spring/cloud/eureka/client/GreetingController.java deleted file mode 100644 index 33ee2574b7..0000000000 --- a/spring-cloud-eureka/spring-cloud-eureka-client/src/main/java/com/baeldung/spring/cloud/eureka/client/GreetingController.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.baeldung.spring.cloud.eureka.client; - -import org.springframework.web.bind.annotation.RequestMapping; - -public interface GreetingController { - @RequestMapping("/greeting") - String greeting(); -} diff --git a/spring-cloud-eureka/spring-cloud-eureka-client/src/main/resources/application.yml b/spring-cloud-eureka/spring-cloud-eureka-client/src/main/resources/application.yml deleted file mode 100644 index 08624aa159..0000000000 --- a/spring-cloud-eureka/spring-cloud-eureka-client/src/main/resources/application.yml +++ /dev/null @@ -1,13 +0,0 @@ -spring: - application: - name: spring-cloud-eureka-client - -server: - port: 0 - -eureka: - client: - serviceUrl: - defaultZone: ${EUREKA_URI:http://localhost:8761/eureka} - instance: - preferIpAddress: true \ No newline at end of file diff --git a/spring-cloud-eureka/spring-cloud-eureka-feign-client/pom.xml b/spring-cloud-eureka/spring-cloud-eureka-feign-client/pom.xml deleted file mode 100644 index 9e639c666a..0000000000 --- a/spring-cloud-eureka/spring-cloud-eureka-feign-client/pom.xml +++ /dev/null @@ -1,67 +0,0 @@ - - - 4.0.0 - - spring-cloud-eureka-feign-client - 1.0.0-SNAPSHOT - jar - - Spring Cloud Eureka Feign Client - Spring Cloud Eureka - Sample Feign Client - - - com.baeldung.spring.cloud - spring-cloud-eureka - 1.0.0-SNAPSHOT - .. - - - - - com.baeldung.spring.cloud - spring-cloud-eureka-client - 1.0.0-SNAPSHOT - - - org.springframework.cloud - spring-cloud-starter-feign - 1.1.5.RELEASE - - - org.springframework.boot - spring-boot-starter-web - 1.4.0.RELEASE - - - org.springframework.boot - spring-boot-starter-thymeleaf - 1.4.0.RELEASE - - - - - - - org.springframework.cloud - spring-cloud-starter-parent - Brixton.SR4 - pom - import - - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-cloud-eureka/spring-cloud-eureka-feign-client/src/main/java/com/baeldung/spring/cloud/feign/client/FeignClientApplication.java b/spring-cloud-eureka/spring-cloud-eureka-feign-client/src/main/java/com/baeldung/spring/cloud/feign/client/FeignClientApplication.java deleted file mode 100644 index 7beb51d1ac..0000000000 --- a/spring-cloud-eureka/spring-cloud-eureka-feign-client/src/main/java/com/baeldung/spring/cloud/feign/client/FeignClientApplication.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.baeldung.spring.cloud.feign.client; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cloud.netflix.eureka.EnableEurekaClient; -import org.springframework.cloud.netflix.feign.EnableFeignClients; -import org.springframework.stereotype.Controller; -import org.springframework.ui.Model; -import org.springframework.web.bind.annotation.RequestMapping; - -@SpringBootApplication -@EnableEurekaClient -@EnableFeignClients -@Controller -public class FeignClientApplication { - @Autowired - private GreetingClient greetingClient; - - public static void main(String[] args) { - SpringApplication.run(FeignClientApplication.class, args); - } - - @RequestMapping("/get-greeting") - public String greeting(Model model) { - model.addAttribute("greeting", greetingClient.greeting()); - return "greeting-view"; - } -} diff --git a/spring-cloud-eureka/spring-cloud-eureka-feign-client/src/main/java/com/baeldung/spring/cloud/feign/client/GreetingClient.java b/spring-cloud-eureka/spring-cloud-eureka-feign-client/src/main/java/com/baeldung/spring/cloud/feign/client/GreetingClient.java deleted file mode 100644 index 6bd444b347..0000000000 --- a/spring-cloud-eureka/spring-cloud-eureka-feign-client/src/main/java/com/baeldung/spring/cloud/feign/client/GreetingClient.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.baeldung.spring.cloud.feign.client; - -import com.baeldung.spring.cloud.eureka.client.GreetingController; -import org.springframework.cloud.netflix.feign.FeignClient; - -@FeignClient("spring-cloud-eureka-client") -public interface GreetingClient extends GreetingController { -} diff --git a/spring-cloud-eureka/spring-cloud-eureka-feign-client/src/main/resources/application.yml b/spring-cloud-eureka/spring-cloud-eureka-feign-client/src/main/resources/application.yml deleted file mode 100644 index d053ef7a7e..0000000000 --- a/spring-cloud-eureka/spring-cloud-eureka-feign-client/src/main/resources/application.yml +++ /dev/null @@ -1,11 +0,0 @@ -spring: - application: - name: spring-cloud-eureka-feign-client - -server: - port: 8080 - -eureka: - client: - serviceUrl: - defaultZone: ${EUREKA_URI:http://localhost:8761/eureka} \ No newline at end of file diff --git a/spring-cloud-eureka/spring-cloud-eureka-feign-client/src/main/resources/templates/greeting-view.html b/spring-cloud-eureka/spring-cloud-eureka-feign-client/src/main/resources/templates/greeting-view.html deleted file mode 100644 index 42cdadb487..0000000000 --- a/spring-cloud-eureka/spring-cloud-eureka-feign-client/src/main/resources/templates/greeting-view.html +++ /dev/null @@ -1,9 +0,0 @@ - - - - Greeting Page - - -

    - - \ No newline at end of file diff --git a/spring-cloud-eureka/spring-cloud-eureka-server/pom.xml b/spring-cloud-eureka/spring-cloud-eureka-server/pom.xml deleted file mode 100644 index f4d655f708..0000000000 --- a/spring-cloud-eureka/spring-cloud-eureka-server/pom.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - 4.0.0 - - spring-cloud-eureka-server - 1.0.0-SNAPSHOT - jar - - Spring Cloud Eureka Server - Spring Cloud Eureka Server Demo - - - com.baeldung.spring.cloud - spring-cloud-eureka - 1.0.0-SNAPSHOT - .. - - - - - org.springframework.cloud - spring-cloud-starter-eureka-server - 1.1.5.RELEASE - - - - - - - org.springframework.cloud - spring-cloud-starter-parent - Brixton.SR4 - pom - import - - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-cloud-eureka/spring-cloud-eureka-server/src/main/java/com/baeldung/spring/cloud/eureka/server/EurekaServerApplication.java b/spring-cloud-eureka/spring-cloud-eureka-server/src/main/java/com/baeldung/spring/cloud/eureka/server/EurekaServerApplication.java deleted file mode 100644 index d55145448d..0000000000 --- a/spring-cloud-eureka/spring-cloud-eureka-server/src/main/java/com/baeldung/spring/cloud/eureka/server/EurekaServerApplication.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.baeldung.spring.cloud.eureka.server; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; - -@SpringBootApplication -@EnableEurekaServer -public class EurekaServerApplication { - public static void main(String[] args) { - SpringApplication.run(EurekaServerApplication.class, args); - } -} diff --git a/spring-cloud-eureka/spring-cloud-eureka-server/src/main/resources/application.yml b/spring-cloud-eureka/spring-cloud-eureka-server/src/main/resources/application.yml deleted file mode 100644 index 49c3179bb5..0000000000 --- a/spring-cloud-eureka/spring-cloud-eureka-server/src/main/resources/application.yml +++ /dev/null @@ -1,7 +0,0 @@ -server: - port: 8761 - -eureka: - client: - registerWithEureka: false - fetchRegistry: false \ No newline at end of file diff --git a/spring-cloud-hystrix/pom.xml b/spring-cloud-hystrix/pom.xml deleted file mode 100644 index 2768a4f05b..0000000000 --- a/spring-cloud-hystrix/pom.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - 4.0.0 - - com.baeldung.spring.cloud - spring-cloud-hystrix - 1.0.0-SNAPSHOT - - spring-cloud-hystrix-rest-producer - spring-cloud-hystrix-rest-consumer - spring-cloud-hystrix-feign-rest-consumer - - pom - - Spring Cloud Hystrix - Spring Cloud Hystrix Demo - - - com.baeldung - parent-modules - 1.0.0-SNAPSHOT - .. - - - - UTF-8 - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.5.1 - - 1.8 - 1.8 - - - - org.springframework.boot - spring-boot-maven-plugin - 1.4.0.RELEASE - - - - - diff --git a/spring-cloud-hystrix/spring-cloud-hystrix-feign-rest-consumer/pom.xml b/spring-cloud-hystrix/spring-cloud-hystrix-feign-rest-consumer/pom.xml deleted file mode 100644 index d2716e897e..0000000000 --- a/spring-cloud-hystrix/spring-cloud-hystrix-feign-rest-consumer/pom.xml +++ /dev/null @@ -1,82 +0,0 @@ - - - 4.0.0 - - spring-cloud-hystrix-feign-rest-consumer - 1.0.0-SNAPSHOT - jar - - Spring Cloud Hystrix Feign REST Consumer - Spring Cloud Hystrix Feign Sample Implementation - - - com.baeldung.spring.cloud - spring-cloud-hystrix - 1.0.0-SNAPSHOT - .. - - - - - com.baeldung.spring.cloud - spring-cloud-hystrix-rest-producer - 1.0.0-SNAPSHOT - - - org.springframework.cloud - spring-cloud-starter-hystrix - 1.1.5.RELEASE - - - org.springframework.cloud - spring-cloud-starter-hystrix-dashboard - 1.1.5.RELEASE - - - org.springframework.cloud - spring-cloud-starter-feign - 1.1.5.RELEASE - - - org.springframework.boot - spring-boot-starter-web - 1.4.0.RELEASE - - - org.springframework.boot - spring-boot-starter-thymeleaf - 1.4.0.RELEASE - - - org.springframework.boot - spring-boot-starter-actuator - 1.4.0.RELEASE - - - - - - - org.springframework.cloud - spring-cloud-starter-parent - Brixton.SR4 - pom - import - - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-cloud-hystrix/spring-cloud-hystrix-feign-rest-consumer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/consumer/GreetingClient.java b/spring-cloud-hystrix/spring-cloud-hystrix-feign-rest-consumer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/consumer/GreetingClient.java deleted file mode 100644 index b715e8c052..0000000000 --- a/spring-cloud-hystrix/spring-cloud-hystrix-feign-rest-consumer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/consumer/GreetingClient.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.baeldung.spring.cloud.hystrix.rest.consumer; - -import com.baeldung.spring.cloud.hystrix.rest.producer.GreetingController; -import org.springframework.cloud.netflix.feign.FeignClient; -import org.springframework.stereotype.Component; -import org.springframework.web.bind.annotation.PathVariable; - -@FeignClient( - name = "rest-producer", - url = "http://localhost:9090", - fallback = GreetingClient.GreetingClientFallback.class -) -public interface GreetingClient extends GreetingController { - @Component - public static class GreetingClientFallback implements GreetingClient { - @Override - public String greeting(@PathVariable("username") String username) { - return "Hello User!"; - } - } -} diff --git a/spring-cloud-hystrix/spring-cloud-hystrix-feign-rest-consumer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/consumer/RestConsumerFeignApplication.java b/spring-cloud-hystrix/spring-cloud-hystrix-feign-rest-consumer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/consumer/RestConsumerFeignApplication.java deleted file mode 100644 index b97d84eaf2..0000000000 --- a/spring-cloud-hystrix/spring-cloud-hystrix-feign-rest-consumer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/consumer/RestConsumerFeignApplication.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.baeldung.spring.cloud.hystrix.rest.consumer; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker; -import org.springframework.cloud.netflix.feign.EnableFeignClients; -import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard; -import org.springframework.stereotype.Controller; -import org.springframework.ui.Model; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; - -@SpringBootApplication -@EnableCircuitBreaker -@EnableHystrixDashboard -@EnableFeignClients -@Controller -public class RestConsumerFeignApplication { - @Autowired - private GreetingClient greetingClient; - - public static void main(String[] args) { - SpringApplication.run(RestConsumerFeignApplication.class, args); - } - - @RequestMapping("/get-greeting/{username}") - public String getGreeting(Model model, @PathVariable("username") String username) { - model.addAttribute("greeting", greetingClient.greeting(username)); - return "greeting-view"; - } -} diff --git a/spring-cloud-hystrix/spring-cloud-hystrix-feign-rest-consumer/src/main/resources/application.properties b/spring-cloud-hystrix/spring-cloud-hystrix-feign-rest-consumer/src/main/resources/application.properties deleted file mode 100644 index 3cf12afeb9..0000000000 --- a/spring-cloud-hystrix/spring-cloud-hystrix-feign-rest-consumer/src/main/resources/application.properties +++ /dev/null @@ -1 +0,0 @@ -server.port=8082 diff --git a/spring-cloud-hystrix/spring-cloud-hystrix-feign-rest-consumer/src/main/resources/templates/greeting-view.html b/spring-cloud-hystrix/spring-cloud-hystrix-feign-rest-consumer/src/main/resources/templates/greeting-view.html deleted file mode 100644 index 302390fde0..0000000000 --- a/spring-cloud-hystrix/spring-cloud-hystrix-feign-rest-consumer/src/main/resources/templates/greeting-view.html +++ /dev/null @@ -1,9 +0,0 @@ - - - - Greetings from Hystrix - - -

    - - diff --git a/spring-cloud-hystrix/spring-cloud-hystrix-rest-consumer/pom.xml b/spring-cloud-hystrix/spring-cloud-hystrix-rest-consumer/pom.xml deleted file mode 100644 index c9be67c302..0000000000 --- a/spring-cloud-hystrix/spring-cloud-hystrix-rest-consumer/pom.xml +++ /dev/null @@ -1,72 +0,0 @@ - - - 4.0.0 - - spring-cloud-hystrix-rest-consumer - 1.0.0-SNAPSHOT - jar - - Spring Cloud Hystrix REST Consumer - Spring Cloud Hystrix Sample Implementation - - - com.baeldung.spring.cloud - spring-cloud-hystrix - 1.0.0-SNAPSHOT - .. - - - - - org.springframework.cloud - spring-cloud-starter-hystrix - 1.1.5.RELEASE - - - org.springframework.cloud - spring-cloud-starter-hystrix-dashboard - 1.1.5.RELEASE - - - org.springframework.boot - spring-boot-starter-web - 1.4.0.RELEASE - - - org.springframework.boot - spring-boot-starter-thymeleaf - 1.4.0.RELEASE - - - org.springframework.boot - spring-boot-starter-actuator - 1.4.0.RELEASE - - - - - - - org.springframework.cloud - spring-cloud-starter-parent - Brixton.SR4 - pom - import - - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-cloud-hystrix/spring-cloud-hystrix-rest-consumer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/consumer/GreetingService.java b/spring-cloud-hystrix/spring-cloud-hystrix-rest-consumer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/consumer/GreetingService.java deleted file mode 100644 index d3d5e6e047..0000000000 --- a/spring-cloud-hystrix/spring-cloud-hystrix-rest-consumer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/consumer/GreetingService.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.baeldung.spring.cloud.hystrix.rest.consumer; - -import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.web.client.RestTemplate; - -@Service -public class GreetingService { - @HystrixCommand(fallbackMethod = "defaultGreeting") - public String getGreeting(String username) { - return new RestTemplate().getForObject("http://localhost:9090/greeting/{username}", String.class, username); - } - - private String defaultGreeting(String username) { - return "Hello User!"; - } -} diff --git a/spring-cloud-hystrix/spring-cloud-hystrix-rest-consumer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/consumer/RestConsumerApplication.java b/spring-cloud-hystrix/spring-cloud-hystrix-rest-consumer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/consumer/RestConsumerApplication.java deleted file mode 100644 index 9df745b1c6..0000000000 --- a/spring-cloud-hystrix/spring-cloud-hystrix-rest-consumer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/consumer/RestConsumerApplication.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.baeldung.spring.cloud.hystrix.rest.consumer; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker; -import org.springframework.cloud.netflix.hystrix.EnableHystrix; -import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard; -import org.springframework.stereotype.Controller; -import org.springframework.ui.Model; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; - -@SpringBootApplication -@EnableCircuitBreaker -@EnableHystrixDashboard -@Controller -public class RestConsumerApplication { - @Autowired - private GreetingService greetingService; - - public static void main(String[] args) { - SpringApplication.run(RestConsumerApplication.class, args); - } - - @RequestMapping("/get-greeting/{username}") - public String getGreeting(Model model, @PathVariable("username") String username) { - model.addAttribute("greeting", greetingService.getGreeting(username)); - return "greeting-view"; - } -} diff --git a/spring-cloud-hystrix/spring-cloud-hystrix-rest-consumer/src/main/resources/application.properties b/spring-cloud-hystrix/spring-cloud-hystrix-rest-consumer/src/main/resources/application.properties deleted file mode 100644 index 4c00e40deb..0000000000 --- a/spring-cloud-hystrix/spring-cloud-hystrix-rest-consumer/src/main/resources/application.properties +++ /dev/null @@ -1 +0,0 @@ -server.port=8080 diff --git a/spring-cloud-hystrix/spring-cloud-hystrix-rest-consumer/src/main/resources/templates/greeting-view.html b/spring-cloud-hystrix/spring-cloud-hystrix-rest-consumer/src/main/resources/templates/greeting-view.html deleted file mode 100644 index 302390fde0..0000000000 --- a/spring-cloud-hystrix/spring-cloud-hystrix-rest-consumer/src/main/resources/templates/greeting-view.html +++ /dev/null @@ -1,9 +0,0 @@ - - - - Greetings from Hystrix - - -

    - - diff --git a/spring-cloud-hystrix/spring-cloud-hystrix-rest-producer/pom.xml b/spring-cloud-hystrix/spring-cloud-hystrix-rest-producer/pom.xml deleted file mode 100644 index 44e373c8ac..0000000000 --- a/spring-cloud-hystrix/spring-cloud-hystrix-rest-producer/pom.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - 4.0.0 - - spring-cloud-hystrix-rest-producer - 1.0.0-SNAPSHOT - jar - - Spring Cloud Hystrix REST Producer - Spring Cloud Hystrix Sample REST Producer Implementation - - - com.baeldung.spring.cloud - spring-cloud-hystrix - 1.0.0-SNAPSHOT - .. - - - - - org.springframework.boot - spring-boot-starter-web - 1.4.0.RELEASE - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-cloud-hystrix/spring-cloud-hystrix-rest-producer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/producer/GreetingController.java b/spring-cloud-hystrix/spring-cloud-hystrix-rest-producer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/producer/GreetingController.java deleted file mode 100644 index 81541b4f8f..0000000000 --- a/spring-cloud-hystrix/spring-cloud-hystrix-rest-producer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/producer/GreetingController.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.baeldung.spring.cloud.hystrix.rest.producer; - -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; - -public interface GreetingController { - @RequestMapping("/greeting/{username}") - String greeting(@PathVariable("username") String username); -} diff --git a/spring-cloud-hystrix/spring-cloud-hystrix-rest-producer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/producer/RestProducerApplication.java b/spring-cloud-hystrix/spring-cloud-hystrix-rest-producer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/producer/RestProducerApplication.java deleted file mode 100644 index 9496d4760d..0000000000 --- a/spring-cloud-hystrix/spring-cloud-hystrix-rest-producer/src/main/java/com/baeldung/spring/cloud/hystrix/rest/producer/RestProducerApplication.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.baeldung.spring.cloud.hystrix.rest.producer; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -@SpringBootApplication -@RestController -public class RestProducerApplication implements GreetingController { - public static void main(String[] args) { - SpringApplication.run(RestProducerApplication.class, args); - } - - @Override - public String greeting(@PathVariable("username") String username) { - return String.format("Hello %s!\n", username); - } -} diff --git a/spring-cloud-hystrix/spring-cloud-hystrix-rest-producer/src/main/resources/application.properties b/spring-cloud-hystrix/spring-cloud-hystrix-rest-producer/src/main/resources/application.properties deleted file mode 100644 index 9ce9d88ffb..0000000000 --- a/spring-cloud-hystrix/spring-cloud-hystrix-rest-producer/src/main/resources/application.properties +++ /dev/null @@ -1,2 +0,0 @@ -spring.application.name=rest-producer -server.port=9090 From 41a12d4bca7bd06d506ae23ab89874e0d5f3b546 Mon Sep 17 00:00:00 2001 From: Tim Schimandle Date: Fri, 2 Sep 2016 07:33:43 +0200 Subject: [PATCH 107/265] BAEL-312 Adding the config clients' properties files so that they are accessible in git. This is currently on my git account and will need to be switched to eugen's after the pull request has completed. --- spring-cloud/pom.xml | 1 + .../application-config/discovery.properties | 13 ++++ .../application-config/gateway.properties | 15 +++++ spring-cloud/spring-cloud-integration/pom.xml | 61 +++++++++++++++++++ 4 files changed, 90 insertions(+) create mode 100644 spring-cloud/spring-cloud-integration/application-config/discovery.properties create mode 100644 spring-cloud/spring-cloud-integration/application-config/gateway.properties create mode 100644 spring-cloud/spring-cloud-integration/pom.xml diff --git a/spring-cloud/pom.xml b/spring-cloud/pom.xml index 4f6b37a76f..340923cbdf 100644 --- a/spring-cloud/pom.xml +++ b/spring-cloud/pom.xml @@ -10,6 +10,7 @@ spring-cloud-config spring-cloud-eureka spring-cloud-hystrix + spring-cloud-integration pom diff --git a/spring-cloud/spring-cloud-integration/application-config/discovery.properties b/spring-cloud/spring-cloud-integration/application-config/discovery.properties new file mode 100644 index 0000000000..40764d0ddb --- /dev/null +++ b/spring-cloud/spring-cloud-integration/application-config/discovery.properties @@ -0,0 +1,13 @@ +spring.application.name=discovery +server.port=8082 + +eureka.instance.hostname=localhost + +eureka.client.serviceUrl.defaultZone=http://localhost:8082/eureka/ +eureka.client.register-with-eureka=false +eureka.client.fetch-registry=false + +#management.context-path=/manage +#eureka.instance.status-page-url-path=${management.context-path}/info +#eureka.instance.health-check-url-path=${management.context-path}/health + diff --git a/spring-cloud/spring-cloud-integration/application-config/gateway.properties b/spring-cloud/spring-cloud-integration/application-config/gateway.properties new file mode 100644 index 0000000000..308f6ace6c --- /dev/null +++ b/spring-cloud/spring-cloud-integration/application-config/gateway.properties @@ -0,0 +1,15 @@ +spring.application.name=gateway +server.port=8084 + +eureka.client.region = default +eureka.client.registryFetchIntervalSeconds = 5 +eureka.client.serviceUrl.defaultZone=http://localhost:8082/eureka/ + +#management.context-path=/manage +#eureka.instance.status-page-url-path=${management.context-path}/info +#eureka.instance.health-check-url-path=${management.context-path}/health + +zuul.routes.ui.path=/resource/** + +logging.level.org.springframework.cloud.netflix.zuul=debug + diff --git a/spring-cloud/spring-cloud-integration/pom.xml b/spring-cloud/spring-cloud-integration/pom.xml new file mode 100644 index 0000000000..5417e83cbf --- /dev/null +++ b/spring-cloud/spring-cloud-integration/pom.xml @@ -0,0 +1,61 @@ + + + 4.0.0 + + com.baeldung.spring.cloud + spring-cloud-integration + 1.0.0-SNAPSHOT + pom + + + config + discovery + gateway + resource + + + + org.springframework.boot + spring-boot-starter-parent + 1.4.0.RELEASE + + + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.cloud + spring-cloud-dependencies + Brixton.RELEASE + pom + import + + + org.springframework.data + spring-data-releasetrain + Hopper-SR2 + pom + import + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + \ No newline at end of file From ac421c8bac4997897e03a98f2fdd45c2c4dbea96 Mon Sep 17 00:00:00 2001 From: Tim Schimandle Date: Fri, 2 Sep 2016 08:30:14 +0200 Subject: [PATCH 108/265] BAEL-312 Committing the 4 projects for the first article. --- .../spring-cloud-integration/config/pom.xml | 27 ++++++++++++++++ .../integration/config/ConfigApplication.java | 15 +++++++++ .../src/main/resources/application.properties | 8 +++++ .../discovery/pom.xml | 28 ++++++++++++++++ .../discovery/DiscoveryApplication.java | 13 ++++++++ .../src/main/resources/bootstrap.properties | 2 ++ .../spring-cloud-integration/gateway/pom.xml | 32 +++++++++++++++++++ .../resource/GatewayApplication.java | 15 +++++++++ .../src/main/resources/bootstrap.properties | 5 +++ .../spring-cloud-integration/resource/pom.xml | 31 ++++++++++++++++++ .../resource/ResourceApplication.java | 25 +++++++++++++++ .../src/main/resources/bootstrap.properties | 5 +++ 12 files changed, 206 insertions(+) create mode 100644 spring-cloud/spring-cloud-integration/config/pom.xml create mode 100644 spring-cloud/spring-cloud-integration/config/src/main/java/com/baeldung/spring/cloud/integration/config/ConfigApplication.java create mode 100644 spring-cloud/spring-cloud-integration/config/src/main/resources/application.properties create mode 100644 spring-cloud/spring-cloud-integration/discovery/pom.xml create mode 100644 spring-cloud/spring-cloud-integration/discovery/src/main/java/com/baeldung/spring/cloud/integration/discovery/DiscoveryApplication.java create mode 100644 spring-cloud/spring-cloud-integration/discovery/src/main/resources/bootstrap.properties create mode 100644 spring-cloud/spring-cloud-integration/gateway/pom.xml create mode 100644 spring-cloud/spring-cloud-integration/gateway/src/main/java/com/baeldung/spring/cloud/integration/resource/GatewayApplication.java create mode 100644 spring-cloud/spring-cloud-integration/gateway/src/main/resources/bootstrap.properties create mode 100644 spring-cloud/spring-cloud-integration/resource/pom.xml create mode 100644 spring-cloud/spring-cloud-integration/resource/src/main/java/com/baeldung/spring/cloud/integration/resource/ResourceApplication.java create mode 100644 spring-cloud/spring-cloud-integration/resource/src/main/resources/bootstrap.properties diff --git a/spring-cloud/spring-cloud-integration/config/pom.xml b/spring-cloud/spring-cloud-integration/config/pom.xml new file mode 100644 index 0000000000..b186a1d5ca --- /dev/null +++ b/spring-cloud/spring-cloud-integration/config/pom.xml @@ -0,0 +1,27 @@ + + + 4.0.0 + + + com.baeldung.spring.cloud + spring-cloud-integration + 1.0.0-SNAPSHOT + + + config + 1.0.0-SNAPSHOT + + + + + org.springframework.cloud + spring-cloud-config-server + + + org.springframework.cloud + spring-cloud-starter-eureka + + + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-integration/config/src/main/java/com/baeldung/spring/cloud/integration/config/ConfigApplication.java b/spring-cloud/spring-cloud-integration/config/src/main/java/com/baeldung/spring/cloud/integration/config/ConfigApplication.java new file mode 100644 index 0000000000..ff6c093b8b --- /dev/null +++ b/spring-cloud/spring-cloud-integration/config/src/main/java/com/baeldung/spring/cloud/integration/config/ConfigApplication.java @@ -0,0 +1,15 @@ +package com.baeldung.spring.cloud.integration.config; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.config.server.EnableConfigServer; +import org.springframework.cloud.netflix.eureka.EnableEurekaClient; + +@SpringBootApplication +@EnableConfigServer +@EnableEurekaClient +public class ConfigApplication { + public static void main(String[] args) { + SpringApplication.run(ConfigApplication.class, args); + } +} diff --git a/spring-cloud/spring-cloud-integration/config/src/main/resources/application.properties b/spring-cloud/spring-cloud-integration/config/src/main/resources/application.properties new file mode 100644 index 0000000000..e3dd94c386 --- /dev/null +++ b/spring-cloud/spring-cloud-integration/config/src/main/resources/application.properties @@ -0,0 +1,8 @@ +server.port=8081 +spring.application.name=config + +spring.cloud.config.server.git.uri=file:///C:/src/cms-git/tutorials/spring-cloud/spring-cloud-integration/application-config + +eureka.client.region = default +eureka.client.registryFetchIntervalSeconds = 5 +eureka.client.serviceUrl.defaultZone=http://localhost:8082/eureka \ No newline at end of file diff --git a/spring-cloud/spring-cloud-integration/discovery/pom.xml b/spring-cloud/spring-cloud-integration/discovery/pom.xml new file mode 100644 index 0000000000..c827895547 --- /dev/null +++ b/spring-cloud/spring-cloud-integration/discovery/pom.xml @@ -0,0 +1,28 @@ + + + 4.0.0 + + + com.baeldung.spring.cloud + spring-cloud-integration + 1.0.0-SNAPSHOT + + + discovery + 1.0.0-SNAPSHOT + + + + + org.springframework.cloud + spring-cloud-starter-config + + + org.springframework.cloud + spring-cloud-starter-eureka-server + + + + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-integration/discovery/src/main/java/com/baeldung/spring/cloud/integration/discovery/DiscoveryApplication.java b/spring-cloud/spring-cloud-integration/discovery/src/main/java/com/baeldung/spring/cloud/integration/discovery/DiscoveryApplication.java new file mode 100644 index 0000000000..a21c65312f --- /dev/null +++ b/spring-cloud/spring-cloud-integration/discovery/src/main/java/com/baeldung/spring/cloud/integration/discovery/DiscoveryApplication.java @@ -0,0 +1,13 @@ +package com.baeldung.spring.cloud.integration.discovery; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; + +@SpringBootApplication +@EnableEurekaServer +public class DiscoveryApplication { + public static void main(String[] args) { + SpringApplication.run(DiscoveryApplication.class, args); + } +} diff --git a/spring-cloud/spring-cloud-integration/discovery/src/main/resources/bootstrap.properties b/spring-cloud/spring-cloud-integration/discovery/src/main/resources/bootstrap.properties new file mode 100644 index 0000000000..ca9d59c9ed --- /dev/null +++ b/spring-cloud/spring-cloud-integration/discovery/src/main/resources/bootstrap.properties @@ -0,0 +1,2 @@ +spring.cloud.config.name=discovery +spring.cloud.config.uri=http://localhost:8081 \ No newline at end of file diff --git a/spring-cloud/spring-cloud-integration/gateway/pom.xml b/spring-cloud/spring-cloud-integration/gateway/pom.xml new file mode 100644 index 0000000000..5e2db3a7af --- /dev/null +++ b/spring-cloud/spring-cloud-integration/gateway/pom.xml @@ -0,0 +1,32 @@ + + + 4.0.0 + + + com.baeldung.spring.cloud + spring-cloud-integration + 1.0.0-SNAPSHOT + + + gateway + 1.0.0-SNAPSHOT + + + + org.springframework.cloud + spring-cloud-starter-config + + + org.springframework.cloud + spring-cloud-starter-eureka + + + org.springframework.cloud + spring-cloud-starter-zuul + + + + + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-integration/gateway/src/main/java/com/baeldung/spring/cloud/integration/resource/GatewayApplication.java b/spring-cloud/spring-cloud-integration/gateway/src/main/java/com/baeldung/spring/cloud/integration/resource/GatewayApplication.java new file mode 100644 index 0000000000..66e7c36f2a --- /dev/null +++ b/spring-cloud/spring-cloud-integration/gateway/src/main/java/com/baeldung/spring/cloud/integration/resource/GatewayApplication.java @@ -0,0 +1,15 @@ +package com.baeldung.spring.cloud.integration.resource; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.netflix.eureka.EnableEurekaClient; +import org.springframework.cloud.netflix.zuul.EnableZuulProxy; + +@SpringBootApplication +@EnableZuulProxy +@EnableEurekaClient +public class GatewayApplication { + public static void main(String[] args) { + SpringApplication.run(GatewayApplication.class, args); + } +} diff --git a/spring-cloud/spring-cloud-integration/gateway/src/main/resources/bootstrap.properties b/spring-cloud/spring-cloud-integration/gateway/src/main/resources/bootstrap.properties new file mode 100644 index 0000000000..9610d72675 --- /dev/null +++ b/spring-cloud/spring-cloud-integration/gateway/src/main/resources/bootstrap.properties @@ -0,0 +1,5 @@ +spring.cloud.config.name=gateway +spring.cloud.config.discovery.service-id=config +spring.cloud.config.discovery.enabled=true + +eureka.client.serviceUrl.defaultZone=http://localhost:8082/eureka/ \ No newline at end of file diff --git a/spring-cloud/spring-cloud-integration/resource/pom.xml b/spring-cloud/spring-cloud-integration/resource/pom.xml new file mode 100644 index 0000000000..1b109022f4 --- /dev/null +++ b/spring-cloud/spring-cloud-integration/resource/pom.xml @@ -0,0 +1,31 @@ + + + 4.0.0 + + + com.baeldung.spring.cloud + spring-cloud-integration + 1.0.0-SNAPSHOT + + + resource + 1.0.0-SNAPSHOT + + + + org.springframework.cloud + spring-cloud-starter-config + + + org.springframework.cloud + spring-cloud-starter-eureka + + + org.springframework.boot + spring-boot-starter-web + + + + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-integration/resource/src/main/java/com/baeldung/spring/cloud/integration/resource/ResourceApplication.java b/spring-cloud/spring-cloud-integration/resource/src/main/java/com/baeldung/spring/cloud/integration/resource/ResourceApplication.java new file mode 100644 index 0000000000..107a9d199f --- /dev/null +++ b/spring-cloud/spring-cloud-integration/resource/src/main/java/com/baeldung/spring/cloud/integration/resource/ResourceApplication.java @@ -0,0 +1,25 @@ +package com.baeldung.spring.cloud.integration.resource; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.netflix.eureka.EnableEurekaClient; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@SpringBootApplication +@EnableEurekaClient +@RestController +public class ResourceApplication { + public static void main(String[] args) { + SpringApplication.run(ResourceApplication.class, args); + } + + @Value("${resource.returnString}") + private String returnString; + + @RequestMapping("/hello/cloud") + public String getString() { + return returnString; + } +} diff --git a/spring-cloud/spring-cloud-integration/resource/src/main/resources/bootstrap.properties b/spring-cloud/spring-cloud-integration/resource/src/main/resources/bootstrap.properties new file mode 100644 index 0000000000..3c88a0b520 --- /dev/null +++ b/spring-cloud/spring-cloud-integration/resource/src/main/resources/bootstrap.properties @@ -0,0 +1,5 @@ +spring.cloud.config.name=resource +spring.cloud.config.discovery.service-id=config +spring.cloud.config.discovery.enabled=true + +eureka.client.serviceUrl.defaultZone=http://localhost:8082/eureka/ \ No newline at end of file From 1df12fbb97cc4131c8a515239711654507e5e488 Mon Sep 17 00:00:00 2001 From: Tim Schimandle Date: Fri, 2 Sep 2016 08:32:12 +0200 Subject: [PATCH 109/265] BAEL-312 Adding the resource files that will need to be in a separate git repository. --- .../application-config/gateway.properties | 9 +++------ .../application-config/resource.properties | 8 ++++++++ 2 files changed, 11 insertions(+), 6 deletions(-) create mode 100644 spring-cloud/spring-cloud-integration/application-config/resource.properties diff --git a/spring-cloud/spring-cloud-integration/application-config/gateway.properties b/spring-cloud/spring-cloud-integration/application-config/gateway.properties index 308f6ace6c..8385c2c395 100644 --- a/spring-cloud/spring-cloud-integration/application-config/gateway.properties +++ b/spring-cloud/spring-cloud-integration/application-config/gateway.properties @@ -1,15 +1,12 @@ spring.application.name=gateway -server.port=8084 +server.port=8080 eureka.client.region = default eureka.client.registryFetchIntervalSeconds = 5 eureka.client.serviceUrl.defaultZone=http://localhost:8082/eureka/ -#management.context-path=/manage -#eureka.instance.status-page-url-path=${management.context-path}/info -#eureka.instance.health-check-url-path=${management.context-path}/health - -zuul.routes.ui.path=/resource/** +zuul.routes.resource.path=/resource/** +hystrix.command.resource.execution.isolation.thread.timeoutInMilliseconds: 5000 logging.level.org.springframework.cloud.netflix.zuul=debug diff --git a/spring-cloud/spring-cloud-integration/application-config/resource.properties b/spring-cloud/spring-cloud-integration/application-config/resource.properties new file mode 100644 index 0000000000..4e6cf3817c --- /dev/null +++ b/spring-cloud/spring-cloud-integration/application-config/resource.properties @@ -0,0 +1,8 @@ +spring.application.name=resource +server.port=8083 + +resource.returnString=hello cloud + +eureka.client.region = default +eureka.client.registryFetchIntervalSeconds = 5 +eureka.client.serviceUrl.defaultZone=http://localhost:8082/eureka/ From 4d2b5f0aa2d64aa1e01da7892d2766d3cd7331a6 Mon Sep 17 00:00:00 2001 From: Tim Schimandle Date: Sun, 4 Sep 2016 06:10:22 +0200 Subject: [PATCH 110/265] BAEL-314 moving the project into a sub module to better organizae the article projects. --- .../application-config/discovery.properties | 0 .../application-config/gateway.properties | 0 .../application-config/resource.properties | 0 .../{ => part-1}/config/pom.xml | 2 +- .../integration/config/ConfigApplication.java | 0 .../src/main/resources/application.properties | 2 +- .../{ => part-1}/discovery/pom.xml | 2 +- .../discovery/DiscoveryApplication.java | 0 .../src/main/resources/bootstrap.properties | 0 .../{ => part-1}/gateway/pom.xml | 2 +- .../resource/GatewayApplication.java | 0 .../src/main/resources/bootstrap.properties | 0 .../spring-cloud-integration/part-1/pom.xml | 25 +++++++++++++++++++ .../{ => part-1}/resource/pom.xml | 2 +- .../resource/ResourceApplication.java | 0 .../src/main/resources/bootstrap.properties | 0 spring-cloud/spring-cloud-integration/pom.xml | 12 +-------- 17 files changed, 31 insertions(+), 16 deletions(-) rename spring-cloud/spring-cloud-integration/{ => part-1}/application-config/discovery.properties (100%) rename spring-cloud/spring-cloud-integration/{ => part-1}/application-config/gateway.properties (100%) rename spring-cloud/spring-cloud-integration/{ => part-1}/application-config/resource.properties (100%) rename spring-cloud/spring-cloud-integration/{ => part-1}/config/pom.xml (92%) rename spring-cloud/spring-cloud-integration/{ => part-1}/config/src/main/java/com/baeldung/spring/cloud/integration/config/ConfigApplication.java (100%) rename spring-cloud/spring-cloud-integration/{ => part-1}/config/src/main/resources/application.properties (78%) rename spring-cloud/spring-cloud-integration/{ => part-1}/discovery/pom.xml (93%) rename spring-cloud/spring-cloud-integration/{ => part-1}/discovery/src/main/java/com/baeldung/spring/cloud/integration/discovery/DiscoveryApplication.java (100%) rename spring-cloud/spring-cloud-integration/{ => part-1}/discovery/src/main/resources/bootstrap.properties (100%) rename spring-cloud/spring-cloud-integration/{ => part-1}/gateway/pom.xml (93%) rename spring-cloud/spring-cloud-integration/{ => part-1}/gateway/src/main/java/com/baeldung/spring/cloud/integration/resource/GatewayApplication.java (100%) rename spring-cloud/spring-cloud-integration/{ => part-1}/gateway/src/main/resources/bootstrap.properties (100%) create mode 100644 spring-cloud/spring-cloud-integration/part-1/pom.xml rename spring-cloud/spring-cloud-integration/{ => part-1}/resource/pom.xml (93%) rename spring-cloud/spring-cloud-integration/{ => part-1}/resource/src/main/java/com/baeldung/spring/cloud/integration/resource/ResourceApplication.java (100%) rename spring-cloud/spring-cloud-integration/{ => part-1}/resource/src/main/resources/bootstrap.properties (100%) diff --git a/spring-cloud/spring-cloud-integration/application-config/discovery.properties b/spring-cloud/spring-cloud-integration/part-1/application-config/discovery.properties similarity index 100% rename from spring-cloud/spring-cloud-integration/application-config/discovery.properties rename to spring-cloud/spring-cloud-integration/part-1/application-config/discovery.properties diff --git a/spring-cloud/spring-cloud-integration/application-config/gateway.properties b/spring-cloud/spring-cloud-integration/part-1/application-config/gateway.properties similarity index 100% rename from spring-cloud/spring-cloud-integration/application-config/gateway.properties rename to spring-cloud/spring-cloud-integration/part-1/application-config/gateway.properties diff --git a/spring-cloud/spring-cloud-integration/application-config/resource.properties b/spring-cloud/spring-cloud-integration/part-1/application-config/resource.properties similarity index 100% rename from spring-cloud/spring-cloud-integration/application-config/resource.properties rename to spring-cloud/spring-cloud-integration/part-1/application-config/resource.properties diff --git a/spring-cloud/spring-cloud-integration/config/pom.xml b/spring-cloud/spring-cloud-integration/part-1/config/pom.xml similarity index 92% rename from spring-cloud/spring-cloud-integration/config/pom.xml rename to spring-cloud/spring-cloud-integration/part-1/config/pom.xml index b186a1d5ca..c64b3626b1 100644 --- a/spring-cloud/spring-cloud-integration/config/pom.xml +++ b/spring-cloud/spring-cloud-integration/part-1/config/pom.xml @@ -6,7 +6,7 @@ com.baeldung.spring.cloud - spring-cloud-integration + part-1 1.0.0-SNAPSHOT diff --git a/spring-cloud/spring-cloud-integration/config/src/main/java/com/baeldung/spring/cloud/integration/config/ConfigApplication.java b/spring-cloud/spring-cloud-integration/part-1/config/src/main/java/com/baeldung/spring/cloud/integration/config/ConfigApplication.java similarity index 100% rename from spring-cloud/spring-cloud-integration/config/src/main/java/com/baeldung/spring/cloud/integration/config/ConfigApplication.java rename to spring-cloud/spring-cloud-integration/part-1/config/src/main/java/com/baeldung/spring/cloud/integration/config/ConfigApplication.java diff --git a/spring-cloud/spring-cloud-integration/config/src/main/resources/application.properties b/spring-cloud/spring-cloud-integration/part-1/config/src/main/resources/application.properties similarity index 78% rename from spring-cloud/spring-cloud-integration/config/src/main/resources/application.properties rename to spring-cloud/spring-cloud-integration/part-1/config/src/main/resources/application.properties index e3dd94c386..249ee471a6 100644 --- a/spring-cloud/spring-cloud-integration/config/src/main/resources/application.properties +++ b/spring-cloud/spring-cloud-integration/part-1/config/src/main/resources/application.properties @@ -1,7 +1,7 @@ server.port=8081 spring.application.name=config -spring.cloud.config.server.git.uri=file:///C:/src/cms-git/tutorials/spring-cloud/spring-cloud-integration/application-config +spring.cloud.config.server.git.uri=file:///C:/src/cms-git/tutorials/spring-cloud/spring-cloud-integration/part-1/application-config eureka.client.region = default eureka.client.registryFetchIntervalSeconds = 5 diff --git a/spring-cloud/spring-cloud-integration/discovery/pom.xml b/spring-cloud/spring-cloud-integration/part-1/discovery/pom.xml similarity index 93% rename from spring-cloud/spring-cloud-integration/discovery/pom.xml rename to spring-cloud/spring-cloud-integration/part-1/discovery/pom.xml index c827895547..6fe5d807f8 100644 --- a/spring-cloud/spring-cloud-integration/discovery/pom.xml +++ b/spring-cloud/spring-cloud-integration/part-1/discovery/pom.xml @@ -6,7 +6,7 @@ com.baeldung.spring.cloud - spring-cloud-integration + part-1 1.0.0-SNAPSHOT diff --git a/spring-cloud/spring-cloud-integration/discovery/src/main/java/com/baeldung/spring/cloud/integration/discovery/DiscoveryApplication.java b/spring-cloud/spring-cloud-integration/part-1/discovery/src/main/java/com/baeldung/spring/cloud/integration/discovery/DiscoveryApplication.java similarity index 100% rename from spring-cloud/spring-cloud-integration/discovery/src/main/java/com/baeldung/spring/cloud/integration/discovery/DiscoveryApplication.java rename to spring-cloud/spring-cloud-integration/part-1/discovery/src/main/java/com/baeldung/spring/cloud/integration/discovery/DiscoveryApplication.java diff --git a/spring-cloud/spring-cloud-integration/discovery/src/main/resources/bootstrap.properties b/spring-cloud/spring-cloud-integration/part-1/discovery/src/main/resources/bootstrap.properties similarity index 100% rename from spring-cloud/spring-cloud-integration/discovery/src/main/resources/bootstrap.properties rename to spring-cloud/spring-cloud-integration/part-1/discovery/src/main/resources/bootstrap.properties diff --git a/spring-cloud/spring-cloud-integration/gateway/pom.xml b/spring-cloud/spring-cloud-integration/part-1/gateway/pom.xml similarity index 93% rename from spring-cloud/spring-cloud-integration/gateway/pom.xml rename to spring-cloud/spring-cloud-integration/part-1/gateway/pom.xml index 5e2db3a7af..40f1884004 100644 --- a/spring-cloud/spring-cloud-integration/gateway/pom.xml +++ b/spring-cloud/spring-cloud-integration/part-1/gateway/pom.xml @@ -6,7 +6,7 @@ com.baeldung.spring.cloud - spring-cloud-integration + part-1 1.0.0-SNAPSHOT diff --git a/spring-cloud/spring-cloud-integration/gateway/src/main/java/com/baeldung/spring/cloud/integration/resource/GatewayApplication.java b/spring-cloud/spring-cloud-integration/part-1/gateway/src/main/java/com/baeldung/spring/cloud/integration/resource/GatewayApplication.java similarity index 100% rename from spring-cloud/spring-cloud-integration/gateway/src/main/java/com/baeldung/spring/cloud/integration/resource/GatewayApplication.java rename to spring-cloud/spring-cloud-integration/part-1/gateway/src/main/java/com/baeldung/spring/cloud/integration/resource/GatewayApplication.java diff --git a/spring-cloud/spring-cloud-integration/gateway/src/main/resources/bootstrap.properties b/spring-cloud/spring-cloud-integration/part-1/gateway/src/main/resources/bootstrap.properties similarity index 100% rename from spring-cloud/spring-cloud-integration/gateway/src/main/resources/bootstrap.properties rename to spring-cloud/spring-cloud-integration/part-1/gateway/src/main/resources/bootstrap.properties diff --git a/spring-cloud/spring-cloud-integration/part-1/pom.xml b/spring-cloud/spring-cloud-integration/part-1/pom.xml new file mode 100644 index 0000000000..770e26bca2 --- /dev/null +++ b/spring-cloud/spring-cloud-integration/part-1/pom.xml @@ -0,0 +1,25 @@ + + + 4.0.0 + + + com.baeldung.spring.cloud + spring-cloud-integration + 1.0.0-SNAPSHOT + + + + config + discovery + gateway + resource + + + part-1 + 1.0.0-SNAPSHOT + pom + + + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-integration/resource/pom.xml b/spring-cloud/spring-cloud-integration/part-1/resource/pom.xml similarity index 93% rename from spring-cloud/spring-cloud-integration/resource/pom.xml rename to spring-cloud/spring-cloud-integration/part-1/resource/pom.xml index 1b109022f4..f1a17918ef 100644 --- a/spring-cloud/spring-cloud-integration/resource/pom.xml +++ b/spring-cloud/spring-cloud-integration/part-1/resource/pom.xml @@ -6,7 +6,7 @@ com.baeldung.spring.cloud - spring-cloud-integration + part-1 1.0.0-SNAPSHOT diff --git a/spring-cloud/spring-cloud-integration/resource/src/main/java/com/baeldung/spring/cloud/integration/resource/ResourceApplication.java b/spring-cloud/spring-cloud-integration/part-1/resource/src/main/java/com/baeldung/spring/cloud/integration/resource/ResourceApplication.java similarity index 100% rename from spring-cloud/spring-cloud-integration/resource/src/main/java/com/baeldung/spring/cloud/integration/resource/ResourceApplication.java rename to spring-cloud/spring-cloud-integration/part-1/resource/src/main/java/com/baeldung/spring/cloud/integration/resource/ResourceApplication.java diff --git a/spring-cloud/spring-cloud-integration/resource/src/main/resources/bootstrap.properties b/spring-cloud/spring-cloud-integration/part-1/resource/src/main/resources/bootstrap.properties similarity index 100% rename from spring-cloud/spring-cloud-integration/resource/src/main/resources/bootstrap.properties rename to spring-cloud/spring-cloud-integration/part-1/resource/src/main/resources/bootstrap.properties diff --git a/spring-cloud/spring-cloud-integration/pom.xml b/spring-cloud/spring-cloud-integration/pom.xml index 5417e83cbf..922875df14 100644 --- a/spring-cloud/spring-cloud-integration/pom.xml +++ b/spring-cloud/spring-cloud-integration/pom.xml @@ -10,10 +10,7 @@ pom - config - discovery - gateway - resource + part-1 @@ -40,13 +37,6 @@ pom import - - org.springframework.data - spring-data-releasetrain - Hopper-SR2 - pom - import - From 38e5047e28e6c1ed01cf892f5f10890f62888498 Mon Sep 17 00:00:00 2001 From: Tim Schimandle Date: Sun, 4 Sep 2016 06:55:42 +0200 Subject: [PATCH 111/265] BAEL-314 modifying the config application properties so that it points to a generic file location. --- .../part-1/config/src/main/resources/application.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-cloud/spring-cloud-integration/part-1/config/src/main/resources/application.properties b/spring-cloud/spring-cloud-integration/part-1/config/src/main/resources/application.properties index 249ee471a6..6f614d0690 100644 --- a/spring-cloud/spring-cloud-integration/part-1/config/src/main/resources/application.properties +++ b/spring-cloud/spring-cloud-integration/part-1/config/src/main/resources/application.properties @@ -1,7 +1,7 @@ server.port=8081 spring.application.name=config -spring.cloud.config.server.git.uri=file:///C:/src/cms-git/tutorials/spring-cloud/spring-cloud-integration/part-1/application-config +spring.cloud.config.server.git.uri=file:///${user.home}/application-config eureka.client.region = default eureka.client.registryFetchIntervalSeconds = 5 From 0b1ad872fcd93f83286aacdc4ed9f11ba689f0b2 Mon Sep 17 00:00:00 2001 From: Tim Schimandle Date: Tue, 6 Sep 2016 01:40:29 +0200 Subject: [PATCH 112/265] BAEL-314 adding changes to the POM structure so that each project can run in isolation --- .../application-config/discovery.properties | 5 --- .../application-config/gateway.properties | 2 - .../part-1/discovery/pom.xml | 41 +++++++++++++++---- .../part-1/gateway/pom.xml | 39 ++++++++++++++---- .../part-1/resource/pom.xml | 40 ++++++++++++++---- spring-cloud/spring-cloud-integration/pom.xml | 36 ---------------- 6 files changed, 98 insertions(+), 65 deletions(-) diff --git a/spring-cloud/spring-cloud-integration/part-1/application-config/discovery.properties b/spring-cloud/spring-cloud-integration/part-1/application-config/discovery.properties index 40764d0ddb..7f3df86c7e 100644 --- a/spring-cloud/spring-cloud-integration/part-1/application-config/discovery.properties +++ b/spring-cloud/spring-cloud-integration/part-1/application-config/discovery.properties @@ -6,8 +6,3 @@ eureka.instance.hostname=localhost eureka.client.serviceUrl.defaultZone=http://localhost:8082/eureka/ eureka.client.register-with-eureka=false eureka.client.fetch-registry=false - -#management.context-path=/manage -#eureka.instance.status-page-url-path=${management.context-path}/info -#eureka.instance.health-check-url-path=${management.context-path}/health - diff --git a/spring-cloud/spring-cloud-integration/part-1/application-config/gateway.properties b/spring-cloud/spring-cloud-integration/part-1/application-config/gateway.properties index 8385c2c395..77faec8421 100644 --- a/spring-cloud/spring-cloud-integration/part-1/application-config/gateway.properties +++ b/spring-cloud/spring-cloud-integration/part-1/application-config/gateway.properties @@ -8,5 +8,3 @@ eureka.client.serviceUrl.defaultZone=http://localhost:8082/eureka/ zuul.routes.resource.path=/resource/** hystrix.command.resource.execution.isolation.thread.timeoutInMilliseconds: 5000 -logging.level.org.springframework.cloud.netflix.zuul=debug - diff --git a/spring-cloud/spring-cloud-integration/part-1/discovery/pom.xml b/spring-cloud/spring-cloud-integration/part-1/discovery/pom.xml index 6fe5d807f8..ee7c589549 100644 --- a/spring-cloud/spring-cloud-integration/part-1/discovery/pom.xml +++ b/spring-cloud/spring-cloud-integration/part-1/discovery/pom.xml @@ -4,17 +4,17 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - - com.baeldung.spring.cloud - part-1 - 1.0.0-SNAPSHOT - - discovery 1.0.0-SNAPSHOT + + org.springframework.boot + spring-boot-starter-parent + 1.4.0.RELEASE + + + - org.springframework.cloud spring-cloud-starter-config @@ -23,6 +23,31 @@ org.springframework.cloud spring-cloud-starter-eureka-server + + org.springframework.boot + spring-boot-starter-test + test + - + + + + + org.springframework.cloud + spring-cloud-dependencies + Brixton.RELEASE + pom + import + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-integration/part-1/gateway/pom.xml b/spring-cloud/spring-cloud-integration/part-1/gateway/pom.xml index 40f1884004..8e56d0fd35 100644 --- a/spring-cloud/spring-cloud-integration/part-1/gateway/pom.xml +++ b/spring-cloud/spring-cloud-integration/part-1/gateway/pom.xml @@ -4,15 +4,16 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - - com.baeldung.spring.cloud - part-1 - 1.0.0-SNAPSHOT - - gateway 1.0.0-SNAPSHOT + + org.springframework.boot + spring-boot-starter-parent + 1.4.0.RELEASE + + + org.springframework.cloud @@ -26,7 +27,31 @@ org.springframework.cloud spring-cloud-starter-zuul + + org.springframework.boot + spring-boot-starter-test + test + - + + + + org.springframework.cloud + spring-cloud-dependencies + Brixton.RELEASE + pom + import + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-integration/part-1/resource/pom.xml b/spring-cloud/spring-cloud-integration/part-1/resource/pom.xml index f1a17918ef..78112fa3e0 100644 --- a/spring-cloud/spring-cloud-integration/part-1/resource/pom.xml +++ b/spring-cloud/spring-cloud-integration/part-1/resource/pom.xml @@ -4,15 +4,16 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - - com.baeldung.spring.cloud - part-1 - 1.0.0-SNAPSHOT - - resource 1.0.0-SNAPSHOT + + org.springframework.boot + spring-boot-starter-parent + 1.4.0.RELEASE + + + org.springframework.cloud @@ -26,6 +27,31 @@ org.springframework.boot spring-boot-starter-web + + org.springframework.boot + spring-boot-starter-test + test + - + + + + + org.springframework.cloud + spring-cloud-dependencies + Brixton.RELEASE + pom + import + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + \ No newline at end of file diff --git a/spring-cloud/spring-cloud-integration/pom.xml b/spring-cloud/spring-cloud-integration/pom.xml index 922875df14..1d56995009 100644 --- a/spring-cloud/spring-cloud-integration/pom.xml +++ b/spring-cloud/spring-cloud-integration/pom.xml @@ -12,40 +12,4 @@ part-1 - - - org.springframework.boot - spring-boot-starter-parent - 1.4.0.RELEASE - - - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - - org.springframework.cloud - spring-cloud-dependencies - Brixton.RELEASE - pom - import - - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - \ No newline at end of file From 035ea531b6c755955f7c2d2d2d191d400baca4fd Mon Sep 17 00:00:00 2001 From: slavisa-baeldung Date: Thu, 15 Sep 2016 14:20:31 +0200 Subject: [PATCH 113/265] NOJIRA - temporarily excluding spring-cloud-integration from the build --- spring-cloud/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-cloud/pom.xml b/spring-cloud/pom.xml index 340923cbdf..e2a676dfe8 100644 --- a/spring-cloud/pom.xml +++ b/spring-cloud/pom.xml @@ -10,7 +10,7 @@ spring-cloud-config spring-cloud-eureka spring-cloud-hystrix - spring-cloud-integration + pom From 443f43e488fe1b71bc66727e9a138c32602220ad Mon Sep 17 00:00:00 2001 From: gatmeister Date: Fri, 16 Sep 2016 00:02:45 +0800 Subject: [PATCH 114/265] added serialUID to fix warning --- .../org/baeldung/web/controller/status/ForbiddenException.java | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-rest/src/main/java/org/baeldung/web/controller/status/ForbiddenException.java b/spring-rest/src/main/java/org/baeldung/web/controller/status/ForbiddenException.java index 1d4aff2ebf..348ee6d596 100644 --- a/spring-rest/src/main/java/org/baeldung/web/controller/status/ForbiddenException.java +++ b/spring-rest/src/main/java/org/baeldung/web/controller/status/ForbiddenException.java @@ -5,5 +5,6 @@ import org.springframework.web.bind.annotation.ResponseStatus; @ResponseStatus(value = HttpStatus.FORBIDDEN, reason="To show an example of a custom message") public class ForbiddenException extends RuntimeException { + private static final long serialVersionUID = 6826605655586311552L; } From 6ecf4f6e78888562a35539577c879dd579d0febf Mon Sep 17 00:00:00 2001 From: GuenHamza Date: Fri, 16 Sep 2016 00:25:27 +0100 Subject: [PATCH 115/265] Add new QueryBuilder cases, factorize node client initialisation --- .../elasticsearch/ElasticSearchUnitTests.java | 55 ++++++++++++------- 1 file changed, 36 insertions(+), 19 deletions(-) diff --git a/elasticsearch/src/test/java/com/baeldung/elasticsearch/ElasticSearchUnitTests.java b/elasticsearch/src/test/java/com/baeldung/elasticsearch/ElasticSearchUnitTests.java index 9a6bfb19a2..7121495e5a 100644 --- a/elasticsearch/src/test/java/com/baeldung/elasticsearch/ElasticSearchUnitTests.java +++ b/elasticsearch/src/test/java/com/baeldung/elasticsearch/ElasticSearchUnitTests.java @@ -26,6 +26,8 @@ import com.alibaba.fastjson.JSON; public class ElasticSearchUnitTests { private List listOfPersons = new ArrayList(); String jsonString = null; + + Client client = null; @Before public void setUp() { @@ -34,15 +36,13 @@ public class ElasticSearchUnitTests { listOfPersons.add(person1); listOfPersons.add(person2); jsonString = JSON.toJSONString(listOfPersons); - System.out.println(jsonString); + Node node = nodeBuilder().clusterName("elasticsearch").client(true).node(); + client = node.client(); } @Test public void givenJsonString_whenJavaObject_thenIndexDocument() { String jsonObject = "{\"age\":20,\"dateOfBirth\":1471466076564,\"fullName\":\"John Doe\"}"; - - Node node = nodeBuilder().clusterName("elasticsearch").client(true).node(); - Client client = node.client(); IndexResponse response = client.prepareIndex("people", "Doe") .setSource(jsonObject).get(); String id = response.getId(); @@ -56,9 +56,6 @@ public class ElasticSearchUnitTests { @Test public void givenDocumentId_whenJavaObject_thenDeleteDocument() { String jsonObject = "{\"age\":10,\"dateOfBirth\":1471455886564,\"fullName\":\"Johan Doe\"}"; - - Node node = nodeBuilder().clusterName("elasticsearch").client(true).node(); - Client client = node.client(); IndexResponse response = client.prepareIndex("people", "Doe") .setSource(jsonObject).get(); String id = response.getId(); @@ -68,8 +65,6 @@ public class ElasticSearchUnitTests { @Test public void givenSearchRequest_whenMatchAll_thenReturnAllResults() { - Node node = nodeBuilder().clusterName("elasticsearch").client(true).node(); - Client client = node.client(); SearchResponse response = client.prepareSearch().execute().actionGet(); SearchHit[] searchHits = response.getHits().getHits(); List results = new ArrayList(); @@ -82,8 +77,7 @@ public class ElasticSearchUnitTests { @Test public void givenSearchParamters_thenReturnResults() { - Node node = nodeBuilder().clusterName("elasticsearch").client(true).node(); - Client client = node.client(); + boolean isExecutedSuccessfully = true; SearchResponse response = client.prepareSearch() .setTypes() .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) @@ -91,19 +85,42 @@ public class ElasticSearchUnitTests { .setFrom(0).setSize(60).setExplain(true) .execute() .actionGet(); - SearchHit[] searchHits = response.getHits().getHits(); - List results = new ArrayList(); - for(SearchHit hit : searchHits){ - String sourceAsString = hit.getSourceAsString(); - Person person = JSON.parseObject(sourceAsString, Person.class); - results.add(person); + + SearchResponse response2 = client.prepareSearch() + .setTypes() + .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) + .setPostFilter(QueryBuilders + .simpleQueryStringQuery("+John -Doe OR Janette")) + .setFrom(0).setSize(60).setExplain(true) + .execute() + .actionGet(); + + SearchResponse response3 = client.prepareSearch() + .setTypes() + .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) + .setPostFilter(QueryBuilders.matchQuery( + "John", "Name*")) + .setFrom(0).setSize(60).setExplain(true) + .execute() + .actionGet(); + try { + response2.getHits(); + response3.getHits(); + SearchHit[] searchHits = response.getHits().getHits(); + List results = new ArrayList(); + for(SearchHit hit : searchHits){ + String sourceAsString = hit.getSourceAsString(); + Person person = JSON.parseObject(sourceAsString, Person.class); + results.add(person); + } + } catch (Exception e) { + isExecutedSuccessfully = false; } + assertTrue(isExecutedSuccessfully); } @Test public void givenContentBuilder_whenHelpers_thanIndexJson() throws IOException { - Node node = nodeBuilder().clusterName("elasticsearch").client(true).node(); - Client client = node.client(); XContentBuilder builder = XContentFactory.jsonBuilder() .startObject() .field("fullName", "Test") From 7a0deaceb4ff23be418be0870b16a5d682b5b18b Mon Sep 17 00:00:00 2001 From: Slavisa Baeldung Date: Fri, 16 Sep 2016 15:47:46 +0200 Subject: [PATCH 116/265] BAEL-53 - minor formatting changes --- .../elasticsearch/ElasticSearchUnitTests.java | 72 +++++++++---------- 1 file changed, 34 insertions(+), 38 deletions(-) diff --git a/elasticsearch/src/test/java/com/baeldung/elasticsearch/ElasticSearchUnitTests.java b/elasticsearch/src/test/java/com/baeldung/elasticsearch/ElasticSearchUnitTests.java index 7121495e5a..a5f103c005 100644 --- a/elasticsearch/src/test/java/com/baeldung/elasticsearch/ElasticSearchUnitTests.java +++ b/elasticsearch/src/test/java/com/baeldung/elasticsearch/ElasticSearchUnitTests.java @@ -26,7 +26,6 @@ import com.alibaba.fastjson.JSON; public class ElasticSearchUnitTests { private List listOfPersons = new ArrayList(); String jsonString = null; - Client client = null; @Before @@ -44,71 +43,68 @@ public class ElasticSearchUnitTests { public void givenJsonString_whenJavaObject_thenIndexDocument() { String jsonObject = "{\"age\":20,\"dateOfBirth\":1471466076564,\"fullName\":\"John Doe\"}"; IndexResponse response = client.prepareIndex("people", "Doe") - .setSource(jsonObject).get(); - String id = response.getId(); + .setSource(jsonObject).get(); String index = response.getIndex(); String type = response.getType(); assertTrue(response.isCreated()); assertEquals(index, "people"); assertEquals(type, "Doe"); } - + @Test public void givenDocumentId_whenJavaObject_thenDeleteDocument() { String jsonObject = "{\"age\":10,\"dateOfBirth\":1471455886564,\"fullName\":\"Johan Doe\"}"; IndexResponse response = client.prepareIndex("people", "Doe") - .setSource(jsonObject).get(); + .setSource(jsonObject).get(); String id = response.getId(); DeleteResponse deleteResponse = client.prepareDelete("people", "Doe", id).get(); assertTrue(deleteResponse.isFound()); } - + @Test public void givenSearchRequest_whenMatchAll_thenReturnAllResults() { SearchResponse response = client.prepareSearch().execute().actionGet(); SearchHit[] searchHits = response.getHits().getHits(); List results = new ArrayList(); - for(SearchHit hit : searchHits){ + for (SearchHit hit : searchHits) { String sourceAsString = hit.getSourceAsString(); Person person = JSON.parseObject(sourceAsString, Person.class); results.add(person); } } - + @Test public void givenSearchParamters_thenReturnResults() { boolean isExecutedSuccessfully = true; SearchResponse response = client.prepareSearch() - .setTypes() - .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) - .setPostFilter(QueryBuilders.rangeQuery("age").from(5).to(15)) - .setFrom(0).setSize(60).setExplain(true) - .execute() - .actionGet(); - + .setTypes() + .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) + .setPostFilter(QueryBuilders.rangeQuery("age").from(5).to(15)) + .setFrom(0).setSize(60).setExplain(true) + .execute() + .actionGet(); + SearchResponse response2 = client.prepareSearch() - .setTypes() - .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) - .setPostFilter(QueryBuilders - .simpleQueryStringQuery("+John -Doe OR Janette")) - .setFrom(0).setSize(60).setExplain(true) - .execute() - .actionGet(); - + .setTypes() + .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) + .setPostFilter(QueryBuilders.simpleQueryStringQuery("+John -Doe OR Janette")) + .setFrom(0).setSize(60).setExplain(true) + .execute() + .actionGet(); + SearchResponse response3 = client.prepareSearch() - .setTypes() - .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) - .setPostFilter(QueryBuilders.matchQuery( - "John", "Name*")) - .setFrom(0).setSize(60).setExplain(true) - .execute() - .actionGet(); + .setTypes() + .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) + .setPostFilter(QueryBuilders.matchQuery("John", "Name*")) + .setFrom(0).setSize(60).setExplain(true) + .execute() + .actionGet(); try { response2.getHits(); response3.getHits(); SearchHit[] searchHits = response.getHits().getHits(); List results = new ArrayList(); - for(SearchHit hit : searchHits){ + for (SearchHit hit : searchHits) { String sourceAsString = hit.getSourceAsString(); Person person = JSON.parseObject(sourceAsString, Person.class); results.add(person); @@ -118,17 +114,17 @@ public class ElasticSearchUnitTests { } assertTrue(isExecutedSuccessfully); } - + @Test public void givenContentBuilder_whenHelpers_thanIndexJson() throws IOException { XContentBuilder builder = XContentFactory.jsonBuilder() - .startObject() - .field("fullName", "Test") - .field("salary", "11500") - .field("age", "10") - .endObject(); + .startObject() + .field("fullName", "Test") + .field("salary", "11500") + .field("age", "10") + .endObject(); IndexResponse response = client.prepareIndex("people", "Doe") - .setSource(builder).get(); + .setSource(builder).get(); assertTrue(response.isCreated()); } } From cf53bc6585fa2f2f439de060cacf5643ed3a6064 Mon Sep 17 00:00:00 2001 From: slavisa-baeldung Date: Sat, 17 Sep 2016 13:07:39 +0200 Subject: [PATCH 117/265] BAEL-226 - Source code for wicket --- pom.xml | 2 +- .../examples/ApplicationConfiguration.java | 10 ---- .../wicket/examples/WebAppInitializer.java | 26 --------- {wicket-intro => wicket}/README.md | 0 {wicket-intro/WicketIntro => wicket}/pom.xml | 54 ++++++------------- .../baeldung/wicket/examples/Examples.html | 0 .../baeldung/wicket/examples/Examples.java | 0 .../wicket/examples/ExamplesApplication.java | 0 .../examples/cafeaddress/CafeAddress.html | 0 .../examples/cafeaddress/CafeAddress.java | 0 .../examples/helloworld/HelloWorld.html | 0 .../examples/helloworld/HelloWorld.java | 0 .../wicket/examples/TestHomePage.java | 23 ++++++++ wicket/src/main/webapp/WEB-INF/web.xml | 32 +++++++++++ 14 files changed, 73 insertions(+), 74 deletions(-) delete mode 100644 wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/ApplicationConfiguration.java delete mode 100644 wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/WebAppInitializer.java rename {wicket-intro => wicket}/README.md (100%) rename {wicket-intro/WicketIntro => wicket}/pom.xml (70%) rename {wicket-intro/WicketIntro => wicket}/src/main/java/com/baeldung/wicket/examples/Examples.html (100%) rename {wicket-intro/WicketIntro => wicket}/src/main/java/com/baeldung/wicket/examples/Examples.java (100%) rename {wicket-intro/WicketIntro => wicket}/src/main/java/com/baeldung/wicket/examples/ExamplesApplication.java (100%) rename {wicket-intro/WicketIntro => wicket}/src/main/java/com/baeldung/wicket/examples/cafeaddress/CafeAddress.html (100%) rename {wicket-intro/WicketIntro => wicket}/src/main/java/com/baeldung/wicket/examples/cafeaddress/CafeAddress.java (100%) rename {wicket-intro/WicketIntro => wicket}/src/main/java/com/baeldung/wicket/examples/helloworld/HelloWorld.html (100%) rename {wicket-intro/WicketIntro => wicket}/src/main/java/com/baeldung/wicket/examples/helloworld/HelloWorld.java (100%) create mode 100644 wicket/src/main/test/java/com/baeldung/wicket/examples/TestHomePage.java create mode 100644 wicket/src/main/webapp/WEB-INF/web.xml diff --git a/pom.xml b/pom.xml index 8533a0d976..97a164b5b2 100644 --- a/pom.xml +++ b/pom.xml @@ -101,7 +101,7 @@ lombok redis webjars - wicket-intro + wicket mutation-testing spring-mvc-velocity diff --git a/wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/ApplicationConfiguration.java b/wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/ApplicationConfiguration.java deleted file mode 100644 index 2b42af9065..0000000000 --- a/wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/ApplicationConfiguration.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.baeldung.wicket.examples; - -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; - -@Configuration -@ComponentScan -public class ApplicationConfiguration { - -} diff --git a/wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/WebAppInitializer.java b/wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/WebAppInitializer.java deleted file mode 100644 index 1b2d06d2dc..0000000000 --- a/wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/WebAppInitializer.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.baeldung.wicket.examples; - -import javax.servlet.FilterRegistration; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; - -import org.apache.wicket.protocol.http.WicketFilter; -import org.springframework.web.WebApplicationInitializer; -import org.springframework.web.context.ContextLoaderListener; -import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; - -public class WebAppInitializer implements WebApplicationInitializer { - - @Override - public void onStartup(ServletContext container) throws ServletException { - AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext(); - container.addListener(new ContextLoaderListener(context)); - context.register(ApplicationConfiguration.class); - - FilterRegistration filter = container.addFilter("ExamplesApplication", WicketFilter.class); - filter.setInitParameter("applicationClassName", ExamplesApplication.class.getName()); - filter.setInitParameter(WicketFilter.FILTER_MAPPING_PARAM, "/*"); - filter.addMappingForUrlPatterns(null, false, "/*"); - } - -} \ No newline at end of file diff --git a/wicket-intro/README.md b/wicket/README.md similarity index 100% rename from wicket-intro/README.md rename to wicket/README.md diff --git a/wicket-intro/WicketIntro/pom.xml b/wicket/pom.xml similarity index 70% rename from wicket-intro/WicketIntro/pom.xml rename to wicket/pom.xml index f4b1d0e11c..929f723c2c 100644 --- a/wicket-intro/WicketIntro/pom.xml +++ b/wicket/pom.xml @@ -1,6 +1,6 @@ + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 com.baeldung.wicket.examples @@ -13,13 +13,9 @@ 9.2.13.v20150730 2.5 4.12 - 4.1.1.RELEASE - 3.1.0 - 8.0.0-M1 3.5.1 2.6 UTF-8 - none @@ -29,24 +25,6 @@ ${wicket.version} - - - - org.springframework - spring-web - ${spring-web.version} - - - javax.servlet - javax.servlet-api - ${javax.servlet-api.version} - - - org.apache.wicket - wicket-spring - ${wicket-spring.version} - - junit @@ -64,7 +42,6 @@ - WicketIntro false @@ -81,6 +58,22 @@ + + + false + src/test/resources + + + false + src/test/java + + ** + + + **/*.java + + + true @@ -110,17 +103,4 @@ - - - - Apache Nexus - https://repository.apache.org/content/repositories/snapshots/ - - false - - - true - - - diff --git a/wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/Examples.html b/wicket/src/main/java/com/baeldung/wicket/examples/Examples.html similarity index 100% rename from wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/Examples.html rename to wicket/src/main/java/com/baeldung/wicket/examples/Examples.html diff --git a/wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/Examples.java b/wicket/src/main/java/com/baeldung/wicket/examples/Examples.java similarity index 100% rename from wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/Examples.java rename to wicket/src/main/java/com/baeldung/wicket/examples/Examples.java diff --git a/wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/ExamplesApplication.java b/wicket/src/main/java/com/baeldung/wicket/examples/ExamplesApplication.java similarity index 100% rename from wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/ExamplesApplication.java rename to wicket/src/main/java/com/baeldung/wicket/examples/ExamplesApplication.java diff --git a/wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/cafeaddress/CafeAddress.html b/wicket/src/main/java/com/baeldung/wicket/examples/cafeaddress/CafeAddress.html similarity index 100% rename from wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/cafeaddress/CafeAddress.html rename to wicket/src/main/java/com/baeldung/wicket/examples/cafeaddress/CafeAddress.html diff --git a/wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/cafeaddress/CafeAddress.java b/wicket/src/main/java/com/baeldung/wicket/examples/cafeaddress/CafeAddress.java similarity index 100% rename from wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/cafeaddress/CafeAddress.java rename to wicket/src/main/java/com/baeldung/wicket/examples/cafeaddress/CafeAddress.java diff --git a/wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/helloworld/HelloWorld.html b/wicket/src/main/java/com/baeldung/wicket/examples/helloworld/HelloWorld.html similarity index 100% rename from wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/helloworld/HelloWorld.html rename to wicket/src/main/java/com/baeldung/wicket/examples/helloworld/HelloWorld.html diff --git a/wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/helloworld/HelloWorld.java b/wicket/src/main/java/com/baeldung/wicket/examples/helloworld/HelloWorld.java similarity index 100% rename from wicket-intro/WicketIntro/src/main/java/com/baeldung/wicket/examples/helloworld/HelloWorld.java rename to wicket/src/main/java/com/baeldung/wicket/examples/helloworld/HelloWorld.java diff --git a/wicket/src/main/test/java/com/baeldung/wicket/examples/TestHomePage.java b/wicket/src/main/test/java/com/baeldung/wicket/examples/TestHomePage.java new file mode 100644 index 0000000000..a393f1d178 --- /dev/null +++ b/wicket/src/main/test/java/com/baeldung/wicket/examples/TestHomePage.java @@ -0,0 +1,23 @@ +package com.baeldung.wicket.examples; + +import org.apache.wicket.util.tester.WicketTester; +import org.junit.Before; +import org.junit.Test; + +public class TestHomePage { + private WicketTester tester; + + @Before + public void setUp() { + tester = new WicketTester(new ExamplesApplication()); + } + + @Test + public void whenPageInvoked_thanRenderedOK() { + //start and render the test page + tester.startPage(Examples.class); + + //assert rendered page class + tester.assertRenderedPage(Examples.class); + } +} diff --git a/wicket/src/main/webapp/WEB-INF/web.xml b/wicket/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000000..8a4451c80e --- /dev/null +++ b/wicket/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,32 @@ + + + + CafeAddress + + + + + wicket.examples + org.apache.wicket.protocol.http.WicketFilter + + applicationClassName + com.baeldung.wicket.examples.ExamplesApplication + + + + + wicket.examples + /* + + \ No newline at end of file From 4101ebd609f570003aeda5af48829142bcbc9dcc Mon Sep 17 00:00:00 2001 From: slavisa-baeldung Date: Sat, 17 Sep 2016 13:10:29 +0200 Subject: [PATCH 118/265] BAEL-226 - adding to main build --- pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/pom.xml b/pom.xml index 41b348c893..8115c1e902 100644 --- a/pom.xml +++ b/pom.xml @@ -130,6 +130,7 @@ lombok redis + wicket xstream java-cassandra From ef54cd43cbaa2b938aa3595fb415dab933503812 Mon Sep 17 00:00:00 2001 From: sanketmeghani Date: Sun, 18 Sep 2016 17:05:52 +0530 Subject: [PATCH 119/265] Add sample code to get current date in Java 8 --- .../com/baeldung/util/GetCurrentDate.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 core-java-8/src/main/java/com/baeldung/util/GetCurrentDate.java diff --git a/core-java-8/src/main/java/com/baeldung/util/GetCurrentDate.java b/core-java-8/src/main/java/com/baeldung/util/GetCurrentDate.java new file mode 100644 index 0000000000..7bbf8b48bb --- /dev/null +++ b/core-java-8/src/main/java/com/baeldung/util/GetCurrentDate.java @@ -0,0 +1,20 @@ +package com.baeldung.util; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.ZoneId; + +public class GetCurrentDate { + + public static void main(String args[]) { + + LocalDate localDate = LocalDate.now(); + System.out.println("Today's date is: " + localDate); + + localDate = LocalDate.now(ZoneId.of("GMT+02:30")); + System.out.println("Current date in GMT +02:30 timezone: " + localDate); + + LocalDateTime localDateTime = LocalDateTime.now(); + System.out.println("Today's date is: " + localDateTime.toLocalDate()); + } +} From ba4fb5bf42c062bcd38b51e6e2d4625337894f41 Mon Sep 17 00:00:00 2001 From: sanketmeghani Date: Sun, 18 Sep 2016 17:06:12 +0530 Subject: [PATCH 120/265] Add sample code to get current time in Java 8 --- .../com/baeldung/util/GetCurrentTime.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 core-java-8/src/main/java/com/baeldung/util/GetCurrentTime.java diff --git a/core-java-8/src/main/java/com/baeldung/util/GetCurrentTime.java b/core-java-8/src/main/java/com/baeldung/util/GetCurrentTime.java new file mode 100644 index 0000000000..39934c94bf --- /dev/null +++ b/core-java-8/src/main/java/com/baeldung/util/GetCurrentTime.java @@ -0,0 +1,20 @@ +package com.baeldung.util; + +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.ZoneId; + +public class GetCurrentTime { + + public static void main(String args[]) { + + LocalTime localTime = LocalTime.now(); + System.out.println("Current time is: " + localTime); + + localTime = LocalTime.now(ZoneId.of("GMT+02:30")); + System.out.println("Current time in GMT +02:30 timezone: " + localTime); + + LocalDateTime localDateTime = LocalDateTime.now(); + System.out.println("Current time is: " + localDateTime.toLocalTime()); + } +} From 1b4714c214236ae4d7a8a25bdfce3feff74e0932 Mon Sep 17 00:00:00 2001 From: sanketmeghani Date: Sun, 18 Sep 2016 17:06:34 +0530 Subject: [PATCH 121/265] Add sample code to get current timestamp in Java 8 --- .../com/baeldung/util/GetCurrentTimestamp.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 core-java-8/src/main/java/com/baeldung/util/GetCurrentTimestamp.java diff --git a/core-java-8/src/main/java/com/baeldung/util/GetCurrentTimestamp.java b/core-java-8/src/main/java/com/baeldung/util/GetCurrentTimestamp.java new file mode 100644 index 0000000000..2387a721cf --- /dev/null +++ b/core-java-8/src/main/java/com/baeldung/util/GetCurrentTimestamp.java @@ -0,0 +1,14 @@ +package com.baeldung.util; + +import java.time.Instant; + +public class GetCurrentTimestamp { + + public static void main(String args[]) { + + Instant instant = Instant.now(); + System.out.println("Current timestamp is: " + instant.toEpochMilli()); + + System.out.println("Number of seconds: " + instant.getEpochSecond()); + } +} From bc8fd9a260249a5ac38244c503f97835c233a3ca Mon Sep 17 00:00:00 2001 From: Slavisa Baeldung Date: Tue, 20 Sep 2016 16:00:07 +0200 Subject: [PATCH 122/265] BAEL-53 - moved to java8 foreach --- elasticsearch/pom.xml | 72 +++++++++++-------- .../elasticsearch/ElasticSearchUnitTests.java | 11 ++- pom.xml | 1 + 3 files changed, 48 insertions(+), 36 deletions(-) diff --git a/elasticsearch/pom.xml b/elasticsearch/pom.xml index c12f258b98..1c580529e6 100644 --- a/elasticsearch/pom.xml +++ b/elasticsearch/pom.xml @@ -1,35 +1,49 @@ - 4.0.0 + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 - com.baeldung - elasticsearch - 0.0.1-SNAPSHOT - jar + com.baeldung + elasticsearch + 0.0.1-SNAPSHOT + jar - elasticsearch - http://maven.apache.org + elasticsearch + http://maven.apache.org - - UTF-8 - + + UTF-8 + - - - org.elasticsearch - elasticsearch - 2.3.5 - - - com.alibaba - fastjson - 1.2.13 - - - junit - junit - 4.12 - test - - + + + org.elasticsearch + elasticsearch + 2.3.5 + + + com.alibaba + fastjson + 1.2.13 + + + junit + junit + 4.12 + test + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.5.1 + + 1.8 + 1.8 + + + + diff --git a/elasticsearch/src/test/java/com/baeldung/elasticsearch/ElasticSearchUnitTests.java b/elasticsearch/src/test/java/com/baeldung/elasticsearch/ElasticSearchUnitTests.java index a5f103c005..db304ee78d 100644 --- a/elasticsearch/src/test/java/com/baeldung/elasticsearch/ElasticSearchUnitTests.java +++ b/elasticsearch/src/test/java/com/baeldung/elasticsearch/ElasticSearchUnitTests.java @@ -5,6 +5,7 @@ import static org.junit.Assert.*; import java.io.IOException; import java.util.ArrayList; +import java.util.Arrays; import java.util.Date; import java.util.List; @@ -102,13 +103,9 @@ public class ElasticSearchUnitTests { try { response2.getHits(); response3.getHits(); - SearchHit[] searchHits = response.getHits().getHits(); - List results = new ArrayList(); - for (SearchHit hit : searchHits) { - String sourceAsString = hit.getSourceAsString(); - Person person = JSON.parseObject(sourceAsString, Person.class); - results.add(person); - } + List searchHits = Arrays.asList(response.getHits().getHits()); + final List results = new ArrayList(); + searchHits.forEach(hit -> results.add(JSON.parseObject(hit.getSourceAsString(), Person.class))); } catch (Exception e) { isExecutedSuccessfully = false; } diff --git a/pom.xml b/pom.xml index 8115c1e902..a1d3e05302 100644 --- a/pom.xml +++ b/pom.xml @@ -29,6 +29,7 @@ dozer dependency-injection deltaspike + elasticsearch enterprise-patterns feign-client From f1cfc706df085310b50fcd3df1f9690e34d8257c Mon Sep 17 00:00:00 2001 From: anton-k11 Date: Tue, 20 Sep 2016 17:59:43 +0300 Subject: [PATCH 123/265] Adding Optional 2 Stream and Set.of examples. --- .../baeldung/java9/OptionalToStreamTest.java | 21 +++++++++++++++ .../com/baeldung/java9/SetExamplesTest.java | 27 +++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 core-java-9/src/test/java/com/baeldung/java9/OptionalToStreamTest.java create mode 100644 core-java-9/src/test/java/com/baeldung/java9/SetExamplesTest.java diff --git a/core-java-9/src/test/java/com/baeldung/java9/OptionalToStreamTest.java b/core-java-9/src/test/java/com/baeldung/java9/OptionalToStreamTest.java new file mode 100644 index 0000000000..966c03fe17 --- /dev/null +++ b/core-java-9/src/test/java/com/baeldung/java9/OptionalToStreamTest.java @@ -0,0 +1,21 @@ +package com.baeldung.java9; + +import java.util.Optional; +import java.util.stream.Stream; + +import org.junit.Test; +import static org.junit.Assert.assertEquals; + +public class OptionalToStreamTest { + + @Test + public void testOptionalToStream(){ + Optional op = Optional.ofNullable("String value"); + Stream strOptionalStream = op.stream(); + Stream filteredStream = strOptionalStream.filter( + (str) -> { return str != null && str.startsWith("String"); } + ); + assertEquals(1, filteredStream.count()); + + } +} diff --git a/core-java-9/src/test/java/com/baeldung/java9/SetExamplesTest.java b/core-java-9/src/test/java/com/baeldung/java9/SetExamplesTest.java new file mode 100644 index 0000000000..c534ba9d47 --- /dev/null +++ b/core-java-9/src/test/java/com/baeldung/java9/SetExamplesTest.java @@ -0,0 +1,27 @@ +package com.baeldung.java9; + + +import java.util.Set; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class SetExamplesTest { + + @Test + public void testUnmutableSet(){ + Set strKeySet = Set.of("key1", "key2", "key3"); + try{ + strKeySet.add("newKey"); + }catch(UnsupportedOperationException uoe){ + } + assertEquals(strKeySet.size(), 3); + } + + @Test + public void testArrayToSet(){ + Integer [] intArray = new Integer[]{1,2,3,4,5,6,7,8,9,0}; + Set intSet = Set.of(intArray); + assertEquals(intSet.size(), intArray.length); + } +} From a497c42f90b4fb2898a55dab34d30cf5467935c5 Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Tue, 20 Sep 2016 13:03:27 -0400 Subject: [PATCH 124/265] readme file --- spring-userservice/README.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 spring-userservice/README.md diff --git a/spring-userservice/README.md b/spring-userservice/README.md new file mode 100644 index 0000000000..097afc5fc1 --- /dev/null +++ b/spring-userservice/README.md @@ -0,0 +1 @@ +spring-userservice is using a in memory derby db. Right click -> run on server to run the project \ No newline at end of file From 754679425313db7d7f4a524c5f83f40af10f1fdf Mon Sep 17 00:00:00 2001 From: Ivan Paolillo Date: Wed, 21 Sep 2016 16:52:26 +0200 Subject: [PATCH 125/265] Add endpoint for testing --- .../web/controller/ItemController.java | 34 +++++++++++-------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/spring-rest/src/main/java/org/baeldung/web/controller/ItemController.java b/spring-rest/src/main/java/org/baeldung/web/controller/ItemController.java index cfde4b23b1..f3e3738bfe 100644 --- a/spring-rest/src/main/java/org/baeldung/web/controller/ItemController.java +++ b/spring-rest/src/main/java/org/baeldung/web/controller/ItemController.java @@ -14,20 +14,26 @@ import com.fasterxml.jackson.annotation.JsonView; @RestController public class ItemController { - @JsonView(Views.Public.class) - @RequestMapping("/items/{id}") - public Item getItemPublic(@PathVariable final int id) { - return ItemManager.getById(id); - } + @JsonView(Views.Public.class) + @RequestMapping("/items/{id}") + public Item getItemPublic(@PathVariable final int id) { + return ItemManager.getById(id); + } - @JsonView(Views.Internal.class) - @RequestMapping("/items/internal/{id}") - public Item getItemInternal(@PathVariable final int id) { - return ItemManager.getById(id); - } + @JsonView(Views.Internal.class) + @RequestMapping("/items/internal/{id}") + public Item getItemInternal(@PathVariable final int id) { + return ItemManager.getById(id); + } - @RequestMapping("/date") - public Date getCurrentDate() { - return new Date(); - } + @RequestMapping("/date") + public Date getCurrentDate() throws Exception { + return new Date(); + } + + @RequestMapping("/delay/{seconds}") + public void getCurrentTime(@PathVariable final int seconds) throws Exception { + + Thread.sleep(seconds * 1000); + } } \ No newline at end of file From be6939bd97e23f7bda3c9c540dd61a5824e7347f Mon Sep 17 00:00:00 2001 From: anton-k11 Date: Thu, 22 Sep 2016 00:04:53 +0300 Subject: [PATCH 126/265] Removing comments, reformatting. --- core-java-9/pom.xml | 11 +---------- .../baeldung/java9/MultiResultionImageTest.java | 1 - .../com/baeldung/java9/OptionalToStreamTest.java | 12 ++++++------ .../java/com/baeldung/java9/SetExamplesTest.java | 15 +++++++-------- 4 files changed, 14 insertions(+), 25 deletions(-) diff --git a/core-java-9/pom.xml b/core-java-9/pom.xml index b29838d283..844ad6a782 100644 --- a/core-java-9/pom.xml +++ b/core-java-9/pom.xml @@ -60,12 +60,8 @@ 1.9 1.9 - true - - @@ -85,12 +81,7 @@ - - 3.6-jigsaw-SNAPSHOT - - + 3.6-jigsaw-SNAPSHOT 2.19.1 diff --git a/core-java-9/src/test/java/com/baeldung/java9/MultiResultionImageTest.java b/core-java-9/src/test/java/com/baeldung/java9/MultiResultionImageTest.java index d6c16b91bc..0805e06794 100644 --- a/core-java-9/src/test/java/com/baeldung/java9/MultiResultionImageTest.java +++ b/core-java-9/src/test/java/com/baeldung/java9/MultiResultionImageTest.java @@ -1,6 +1,5 @@ package com.baeldung.java9; -import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertSame; diff --git a/core-java-9/src/test/java/com/baeldung/java9/OptionalToStreamTest.java b/core-java-9/src/test/java/com/baeldung/java9/OptionalToStreamTest.java index 966c03fe17..56b4bb7b8c 100644 --- a/core-java-9/src/test/java/com/baeldung/java9/OptionalToStreamTest.java +++ b/core-java-9/src/test/java/com/baeldung/java9/OptionalToStreamTest.java @@ -7,15 +7,15 @@ import org.junit.Test; import static org.junit.Assert.assertEquals; public class OptionalToStreamTest { - + @Test - public void testOptionalToStream(){ + public void testOptionalToStream() { Optional op = Optional.ofNullable("String value"); Stream strOptionalStream = op.stream(); - Stream filteredStream = strOptionalStream.filter( - (str) -> { return str != null && str.startsWith("String"); } - ); + Stream filteredStream = strOptionalStream.filter((str) -> { + return str != null && str.startsWith("String"); + }); assertEquals(1, filteredStream.count()); - + } } diff --git a/core-java-9/src/test/java/com/baeldung/java9/SetExamplesTest.java b/core-java-9/src/test/java/com/baeldung/java9/SetExamplesTest.java index c534ba9d47..0f8db83d9c 100644 --- a/core-java-9/src/test/java/com/baeldung/java9/SetExamplesTest.java +++ b/core-java-9/src/test/java/com/baeldung/java9/SetExamplesTest.java @@ -1,6 +1,5 @@ package com.baeldung.java9; - import java.util.Set; import org.junit.Test; @@ -9,18 +8,18 @@ import static org.junit.Assert.assertEquals; public class SetExamplesTest { @Test - public void testUnmutableSet(){ + public void testUnmutableSet() { Set strKeySet = Set.of("key1", "key2", "key3"); - try{ + try { strKeySet.add("newKey"); - }catch(UnsupportedOperationException uoe){ + } catch (UnsupportedOperationException uoe) { } - assertEquals(strKeySet.size(), 3); + assertEquals(strKeySet.size(), 3); } - + @Test - public void testArrayToSet(){ - Integer [] intArray = new Integer[]{1,2,3,4,5,6,7,8,9,0}; + public void testArrayToSet() { + Integer[] intArray = new Integer[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 }; Set intSet = Set.of(intArray); assertEquals(intSet.size(), intArray.length); } From 19798c4bd600d05178a58391dd9aa4e6c84d78e8 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Thu, 22 Sep 2016 18:16:22 +0200 Subject: [PATCH 127/265] Refactor ArrayListTest --- .../java/collections/ArrayListTest.java | 54 +++++++++---------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/core-java/src/test/java/org/baeldung/java/collections/ArrayListTest.java b/core-java/src/test/java/org/baeldung/java/collections/ArrayListTest.java index 9cafa179ab..30b0111555 100644 --- a/core-java/src/test/java/org/baeldung/java/collections/ArrayListTest.java +++ b/core-java/src/test/java/org/baeldung/java/collections/ArrayListTest.java @@ -18,18 +18,18 @@ public class ArrayListTest { @Before public void setUp() { - List xs = LongStream.range(0, 16) + List list = LongStream.range(0, 16) .boxed() .map(Long::toHexString) .collect(toCollection(ArrayList::new)); - stringsToSearch = new ArrayList<>(xs); - stringsToSearch.addAll(xs); + stringsToSearch = new ArrayList<>(list); + stringsToSearch.addAll(list); } @Test public void givenNewArrayList_whenCheckCapacity_thenDefaultValue() { - List xs = new ArrayList<>(); - assertTrue(xs.isEmpty()); + List list = new ArrayList<>(); + assertTrue(list.isEmpty()); } @Test @@ -37,29 +37,29 @@ public class ArrayListTest { Collection numbers = IntStream.range(0, 10).boxed().collect(toSet()); - List xs = new ArrayList<>(numbers); - assertEquals(10, xs.size()); - assertTrue(numbers.containsAll(xs)); + List list = new ArrayList<>(numbers); + assertEquals(10, list.size()); + assertTrue(numbers.containsAll(list)); } @Test public void givenElement_whenAddToArrayList_thenIsAdded() { - List xs = new ArrayList<>(); + List list = new ArrayList<>(); - xs.add(1L); - xs.add(2L); - xs.add(1, 3L); + list.add(1L); + list.add(2L); + list.add(1, 3L); - assertThat(Arrays.asList(1L, 3L, 2L), equalTo(xs)); + assertThat(Arrays.asList(1L, 3L, 2L), equalTo(list)); } @Test public void givenCollection_whenAddToArrayList_thenIsAdded() { - List xs = new ArrayList<>(Arrays.asList(1L, 2L, 3L)); + List list = new ArrayList<>(Arrays.asList(1L, 2L, 3L)); LongStream.range(4, 10).boxed() - .collect(collectingAndThen(toCollection(ArrayList::new), ys -> xs.addAll(0, ys))); + .collect(collectingAndThen(toCollection(ArrayList::new), ys -> list.addAll(0, ys))); - assertThat(Arrays.asList(4L, 5L, 6L, 7L, 8L, 9L, 1L, 2L, 3L), equalTo(xs)); + assertThat(Arrays.asList(4L, 5L, 6L, 7L, 8L, 9L, 1L, 2L, 3L), equalTo(list)); } @Test @@ -106,27 +106,27 @@ public class ArrayListTest { @Test public void givenIndex_whenRemove_thenCorrectElementRemoved() { - List xs = IntStream.range(0, 10).boxed().collect(toCollection(ArrayList::new)); - Collections.reverse(xs); + List list = IntStream.range(0, 10).boxed().collect(toCollection(ArrayList::new)); + Collections.reverse(list); - xs.remove(0); - assertThat(xs.get(0), equalTo(8)); + list.remove(0); + assertThat(list.get(0), equalTo(8)); - xs.remove(Integer.valueOf(0)); - assertFalse(xs.contains(0)); + list.remove(Integer.valueOf(0)); + assertFalse(list.contains(0)); } @Test public void givenListIterator_whenReverseTraversal_thenRetrieveElementsInOppositeOrder() { - List xs = IntStream.range(0, 10).boxed().collect(toCollection(ArrayList::new)); - ListIterator it = xs.listIterator(xs.size()); - List result = new ArrayList<>(xs.size()); + List list = IntStream.range(0, 10).boxed().collect(toCollection(ArrayList::new)); + ListIterator it = list.listIterator(list.size()); + List result = new ArrayList<>(list.size()); while (it.hasPrevious()) { result.add(it.previous()); } - Collections.reverse(xs); - assertThat(result, equalTo(xs)); + Collections.reverse(list); + assertThat(result, equalTo(list)); } @Test From 6243fa31e13199d016981225d3ecb8d9b88a882e Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Thu, 22 Sep 2016 19:42:47 +0200 Subject: [PATCH 128/265] Move Elasticsearch module into Spring-Data-Elasticsearch --- elasticsearch/README.md | 6 - elasticsearch/pom.xml | 49 --------- pom.xml | 1 - spring-data-elasticsearch/pom.xml | 11 ++ .../com/baeldung/elasticsearch/Person.java | 104 +++++++++--------- .../elasticsearch/ElasticSearchUnitTests.java | 0 6 files changed, 63 insertions(+), 108 deletions(-) delete mode 100644 elasticsearch/README.md delete mode 100644 elasticsearch/pom.xml rename {elasticsearch => spring-data-elasticsearch}/src/main/java/com/baeldung/elasticsearch/Person.java (94%) rename {elasticsearch => spring-data-elasticsearch}/src/test/java/com/baeldung/elasticsearch/ElasticSearchUnitTests.java (100%) diff --git a/elasticsearch/README.md b/elasticsearch/README.md deleted file mode 100644 index e21070dbee..0000000000 --- a/elasticsearch/README.md +++ /dev/null @@ -1,6 +0,0 @@ -========= - -## ElasticSearch - -### Relevant Articles: -- [A Guide to ElasticSearch](http://www.baeldung.com/????????) diff --git a/elasticsearch/pom.xml b/elasticsearch/pom.xml deleted file mode 100644 index 1c580529e6..0000000000 --- a/elasticsearch/pom.xml +++ /dev/null @@ -1,49 +0,0 @@ - - 4.0.0 - - com.baeldung - elasticsearch - 0.0.1-SNAPSHOT - jar - - elasticsearch - http://maven.apache.org - - - UTF-8 - - - - - org.elasticsearch - elasticsearch - 2.3.5 - - - com.alibaba - fastjson - 1.2.13 - - - junit - junit - 4.12 - test - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.5.1 - - 1.8 - 1.8 - - - - - diff --git a/pom.xml b/pom.xml index a1d3e05302..8115c1e902 100644 --- a/pom.xml +++ b/pom.xml @@ -29,7 +29,6 @@ dozer dependency-injection deltaspike - elasticsearch enterprise-patterns feign-client diff --git a/spring-data-elasticsearch/pom.xml b/spring-data-elasticsearch/pom.xml index 3a6e330564..084695c2f3 100644 --- a/spring-data-elasticsearch/pom.xml +++ b/spring-data-elasticsearch/pom.xml @@ -69,6 +69,17 @@ log4j-over-slf4j ${org.slf4j.version} + + + org.elasticsearch + elasticsearch + 2.3.5 + + + com.alibaba + fastjson + 1.2.13 + diff --git a/elasticsearch/src/main/java/com/baeldung/elasticsearch/Person.java b/spring-data-elasticsearch/src/main/java/com/baeldung/elasticsearch/Person.java similarity index 94% rename from elasticsearch/src/main/java/com/baeldung/elasticsearch/Person.java rename to spring-data-elasticsearch/src/main/java/com/baeldung/elasticsearch/Person.java index 8f0b19a186..b8ad59e2e2 100644 --- a/elasticsearch/src/main/java/com/baeldung/elasticsearch/Person.java +++ b/spring-data-elasticsearch/src/main/java/com/baeldung/elasticsearch/Person.java @@ -1,52 +1,52 @@ -package com.baeldung.elasticsearch; - -import java.util.Date; - -public class Person { - - private int age; - - private String fullName; - - private Date dateOfBirth; - - public Person() { - - } - - public Person(int age, String fullName, Date dateOfBirth) { - super(); - this.age = age; - this.fullName = fullName; - this.dateOfBirth = dateOfBirth; - } - - public int getAge() { - return age; - } - - public void setAge(int age) { - this.age = age; - } - - public String getFullName() { - return fullName; - } - - public void setFullName(String fullName) { - this.fullName = fullName; - } - - public Date getDateOfBirth() { - return dateOfBirth; - } - - public void setDateOfBirth(Date dateOfBirth) { - this.dateOfBirth = dateOfBirth; - } - - @Override - public String toString() { - return "Person [age=" + age + ", fullName=" + fullName + ", dateOfBirth=" + dateOfBirth + "]"; - } -} +package com.baeldung.elasticsearch; + +import java.util.Date; + +public class Person { + + private int age; + + private String fullName; + + private Date dateOfBirth; + + public Person() { + + } + + public Person(int age, String fullName, Date dateOfBirth) { + super(); + this.age = age; + this.fullName = fullName; + this.dateOfBirth = dateOfBirth; + } + + public int getAge() { + return age; + } + + public void setAge(int age) { + this.age = age; + } + + public String getFullName() { + return fullName; + } + + public void setFullName(String fullName) { + this.fullName = fullName; + } + + public Date getDateOfBirth() { + return dateOfBirth; + } + + public void setDateOfBirth(Date dateOfBirth) { + this.dateOfBirth = dateOfBirth; + } + + @Override + public String toString() { + return "Person [age=" + age + ", fullName=" + fullName + ", dateOfBirth=" + dateOfBirth + "]"; + } +} diff --git a/elasticsearch/src/test/java/com/baeldung/elasticsearch/ElasticSearchUnitTests.java b/spring-data-elasticsearch/src/test/java/com/baeldung/elasticsearch/ElasticSearchUnitTests.java similarity index 100% rename from elasticsearch/src/test/java/com/baeldung/elasticsearch/ElasticSearchUnitTests.java rename to spring-data-elasticsearch/src/test/java/com/baeldung/elasticsearch/ElasticSearchUnitTests.java From eaa04c6c7f84d4aca94ea0699bc4619aab7be37a Mon Sep 17 00:00:00 2001 From: DOHA Date: Fri, 23 Sep 2016 12:26:48 +0200 Subject: [PATCH 129/265] add live profile --- spring-rest/pom.xml | 58 ++++++++++++++++++- .../web/test/RequestMappingLiveTest.java | 2 +- ... SpringHttpMessageConvertersLiveTest.java} | 4 +- 3 files changed, 58 insertions(+), 6 deletions(-) rename spring-rest/src/test/java/org/baeldung/web/test/{SpringHttpMessageConvertersIntegrationTestsCase.java => SpringHttpMessageConvertersLiveTest.java} (97%) diff --git a/spring-rest/pom.xml b/spring-rest/pom.xml index 0c0d6219dd..5340f8b437 100644 --- a/spring-rest/pom.xml +++ b/spring-rest/pom.xml @@ -182,7 +182,6 @@ org.apache.maven.plugins maven-compiler-plugin - ${maven-compiler-plugin.version} 1.8 1.8 @@ -192,13 +191,11 @@ org.apache.maven.plugins maven-war-plugin - ${maven-war-plugin.version} org.apache.maven.plugins maven-surefire-plugin - ${maven-surefire-plugin.version} @@ -234,6 +231,61 @@ + + + live + + + + org.codehaus.cargo + cargo-maven2-plugin + + + start-server + pre-integration-test + + start + + + + stop-server + post-integration-test + + stop + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + + + integration-test + + test + + + + none + + + **/*LiveTest.java + + + cargo + + + + + + + + + + + diff --git a/spring-rest/src/test/java/org/baeldung/web/test/RequestMappingLiveTest.java b/spring-rest/src/test/java/org/baeldung/web/test/RequestMappingLiveTest.java index fd349f1e44..3155b5cda9 100644 --- a/spring-rest/src/test/java/org/baeldung/web/test/RequestMappingLiveTest.java +++ b/spring-rest/src/test/java/org/baeldung/web/test/RequestMappingLiveTest.java @@ -7,7 +7,7 @@ import org.junit.Test; import com.jayway.restassured.RestAssured; public class RequestMappingLiveTest { - private static String BASE_URI = "http://localhost:8080/spring-rest/ex/"; + private static String BASE_URI = "http://localhost:8082/spring-rest/ex/"; @Test public void givenSimplePath_whenGetFoos_thenOk() { diff --git a/spring-rest/src/test/java/org/baeldung/web/test/SpringHttpMessageConvertersIntegrationTestsCase.java b/spring-rest/src/test/java/org/baeldung/web/test/SpringHttpMessageConvertersLiveTest.java similarity index 97% rename from spring-rest/src/test/java/org/baeldung/web/test/SpringHttpMessageConvertersIntegrationTestsCase.java rename to spring-rest/src/test/java/org/baeldung/web/test/SpringHttpMessageConvertersLiveTest.java index 1dfe509c09..7f250653ab 100644 --- a/spring-rest/src/test/java/org/baeldung/web/test/SpringHttpMessageConvertersIntegrationTestsCase.java +++ b/spring-rest/src/test/java/org/baeldung/web/test/SpringHttpMessageConvertersLiveTest.java @@ -21,9 +21,9 @@ import org.springframework.web.client.RestTemplate; /** * Integration Test class. Tests methods hits the server's rest services. */ -public class SpringHttpMessageConvertersIntegrationTestsCase { +public class SpringHttpMessageConvertersLiveTest { - private static String BASE_URI = "http://localhost:8080/spring-rest/"; + private static String BASE_URI = "http://localhost:8082/spring-rest/"; /** * Without specifying Accept Header, uses the default response from the From 043a6bddc8424bcf869500a42c06b52402adfc8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Fri, 23 Sep 2016 14:25:09 +0200 Subject: [PATCH 130/265] Code for Optional stream filtering document (#696) * Add new module for mocks comparison. * Add sources for testing. * Changes on testCase. * Enter some tests for mockito. * More tests for Mockito. * Even more tests. * Add the rest of the mocking libraries. * Javadoc on test. * Test bare bones for EasyMock. * Fist kind of test and setup. * Add tests using EasyMock with a change on LoginService. * Create LoginControllerTest.java * Test setup * [JMockit] No method called test. * [JMockit] Two methods called test. * [JMockit] One method called test. * [JMockit] Exception mock test * [JMockit] Mocked object to pass around test. * [JMockit] Custom matcher test. * [JMockit] Partial mocking test. * [JMockit] Fix with IDE. * Not stubs. Mocks. MOCKS!!! * Remove unnecesary import. * Use correct encoding. Was having problems with buildings. * Remove failing module. * Create new module mocks and move mock-comparisons there. * Add jmockit module. * Add model class. * Add collaborator class. * Add performer class. * Add performer test. * Fix * Add interface for tests. * Test for any. * Test for with. * Test for null. * Test for times. * Test for arg that. * Test for result and returns. * Test for delegate. * Add verifications to any tests. * Add verifications to with test. * Add verification examples to methods using null. * Add verifications to methods using times. * Formatting. * Compress tests and fix one test. * Adding new article to readme. * [BAEL-178] Add collaborator for advanced article. * [BAEL-178] Add link to readme. * [BAEL-178] Add test for mockUp. * [BAEL-178] Add test for invoke method. * [BAEL-178] Add constructors and tests for mockup for constructors. * [BAEL-178] Add private fields and more test for deencapsulation. * [BAEL-178] Add inner class and test for instantiating inner classes. * [BAEL-178] Multimocks. * [BAEL-178] Add test for expectation reusing. * [BAEL-178] Move test class to tests folders. * Add postgresql dependency. * Add test and config with properties. * [BAEL-114] Add new project for JPA with JNDI. * [BAEL-114] Config without xml. * [BAEL-114] Bring part of Foo, FooServie and FooDao. * [BAEL-114] Show all foos. * [BAEL-114] Readme. * [BAEL-114] Undo changes on main jpa project. * [BAEL-114] Remove unnecesary dependencies. * [BAEL-114] Add tomcat config. * [BAEL-114] Fixes. * Add tests for Optional streams. * Add Java 9 version of the test. * Rename and move to new core-java-9 module. --- .../java9/Java9OptionalsStreamTest.java | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 core-java-9/src/test/java/com/baeldung/java9/Java9OptionalsStreamTest.java diff --git a/core-java-9/src/test/java/com/baeldung/java9/Java9OptionalsStreamTest.java b/core-java-9/src/test/java/com/baeldung/java9/Java9OptionalsStreamTest.java new file mode 100644 index 0000000000..336e803985 --- /dev/null +++ b/core-java-9/src/test/java/com/baeldung/java9/Java9OptionalsStreamTest.java @@ -0,0 +1,63 @@ +package com.baeldung.java8; + +import static org.junit.Assert.assertEquals; + +import java.util.Arrays; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import org.junit.Before; +import org.junit.Test; + +public class Java9OptionalsStreamTest { + + private List> listOfOptionals; + + @Before + public void populateStream() { + listOfOptionals = Arrays.asList(Optional.empty(), Optional.of("foo"), Optional.empty(), Optional.of("bar")); + } + + @Test + public void filterOutPresentOptionalsWithFilter() { + assertEquals(4, listOfOptionals.size()); + //@format:off + List filteredList = listOfOptionals.stream() + .filter(Optional::isPresent) + .map(Optional::get) + .collect(Collectors.toList()); + //@format:on + assertEquals(2, filteredList.size()); + assertEquals("foo", filteredList.get(0)); + assertEquals("bar", filteredList.get(1)); + } + + @Test + public void filterOutPresentOptionalsWithFlatMap() { + assertEquals(4, listOfOptionals.size()); + //@format:off + List filteredList = listOfOptionals.stream() + .flatMap(o -> o.isPresent() ? Stream.of(o.get()) : Stream.empty()) + .collect(Collectors.toList()); + //@format:on + assertEquals(2, filteredList.size()); + assertEquals("foo", filteredList.get(0)); + assertEquals("bar", filteredList.get(1)); + } + + @Test + public void filterOutPresentOptionalsWithJava9() { + assertEquals(4, listOfOptionals.size()); + //@format:off + List filteredList = listOfOptionals.stream() + .flatMap(Optional::stream) + .collect(Collectors.toList()); + //@format:on + assertEquals(2, filteredList.size()); + assertEquals("foo", filteredList.get(0)); + assertEquals("bar", filteredList.get(1)); + } + +} From b0a1959cf46d7fe515d2d78107d36ff6f3837531 Mon Sep 17 00:00:00 2001 From: maibin Date: Fri, 23 Sep 2016 14:37:53 +0200 Subject: [PATCH 131/265] Spring Security + Thymeleaf (CSRF) (#695) * Expression-Based Access Control PermitAll, hasRole, hasAnyRole etc. I modified classes regards to Security * Added test cases for Spring Security Expressions * Handler Interceptor - logging example * Test for logger interceptor * Removed conflicted part * UserInterceptor (adding user information to model) * Spring Handler Interceptor - session timers * Spring Security CSRF attack protection with Thymeleaf --- .../csrf/CsrfAbstractIntegrationTest.java | 2 + spring-thymeleaf/pom.xml | 130 +++++++++++------- .../thymeleaf/config/InitSecurity.java | 11 ++ .../com/baeldung/thymeleaf/config/WebApp.java | 2 +- .../thymeleaf/config/WebMVCConfig.java | 3 +- .../thymeleaf/config/WebMVCSecurity.java | 50 +++++++ .../main/webapp/WEB-INF/views/csrfAttack.html | 12 ++ .../csrf/CsrfEnabledIntegrationTest.java | 63 +++++++++ 8 files changed, 224 insertions(+), 49 deletions(-) create mode 100644 spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/InitSecurity.java create mode 100644 spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCSecurity.java create mode 100644 spring-thymeleaf/src/main/webapp/WEB-INF/views/csrfAttack.html create mode 100644 spring-thymeleaf/src/test/java/org/baeldung/security/csrf/CsrfEnabledIntegrationTest.java diff --git a/spring-security-rest-full/src/test/java/org/baeldung/security/csrf/CsrfAbstractIntegrationTest.java b/spring-security-rest-full/src/test/java/org/baeldung/security/csrf/CsrfAbstractIntegrationTest.java index 1b5f7cd894..13cb92a745 100644 --- a/spring-security-rest-full/src/test/java/org/baeldung/security/csrf/CsrfAbstractIntegrationTest.java +++ b/spring-security-rest-full/src/test/java/org/baeldung/security/csrf/CsrfAbstractIntegrationTest.java @@ -14,6 +14,7 @@ import org.springframework.test.context.web.WebAppConfiguration; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.request.RequestPostProcessor; import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.context.WebApplicationContext; import com.fasterxml.jackson.core.JsonProcessingException; @@ -21,6 +22,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; @RunWith(SpringJUnit4ClassRunner.class) @WebAppConfiguration +@Transactional public class CsrfAbstractIntegrationTest { @Autowired diff --git a/spring-thymeleaf/pom.xml b/spring-thymeleaf/pom.xml index 51e26fdfdd..35d8c37176 100644 --- a/spring-thymeleaf/pom.xml +++ b/spring-thymeleaf/pom.xml @@ -8,24 +8,24 @@ 1.7 - 4.1.8.RELEASE + 4.3.3.RELEASE 3.0.1 - 1.7.12 - 1.1.3 + 1.7.12 + 1.1.3 2.1.4.RELEASE 1.1.0.Final 5.1.2.Final - + 3.5.1 2.6 2.19.1 1.4.18 - + @@ -45,6 +45,17 @@ spring-webmvc ${org.springframework-version} + + + org.springframework.security + spring-security-web + 4.1.3.RELEASE + + + org.springframework.security + spring-security-config + 4.1.3.RELEASE + org.thymeleaf @@ -57,29 +68,29 @@ ${org.thymeleaf-version} - - - org.slf4j - slf4j-api - ${org.slf4j.version} - - - ch.qos.logback - logback-classic - ${logback.version} - - - - org.slf4j - jcl-over-slf4j - ${org.slf4j.version} - - - - org.slf4j - log4j-over-slf4j - ${org.slf4j.version} - + + + org.slf4j + slf4j-api + ${org.slf4j.version} + + + ch.qos.logback + logback-classic + ${logback.version} + + + + org.slf4j + jcl-over-slf4j + ${org.slf4j.version} + + + + org.slf4j + log4j-over-slf4j + ${org.slf4j.version} + javax.servlet @@ -98,6 +109,31 @@ hibernate-validator ${org.hibernate-version} + + + + org.springframework + spring-test + 4.1.3.RELEASE + test + + + + + org.springframework.security + spring-security-test + 4.1.3.RELEASE + test + + + + + junit + junit + 4.12 + test + + @@ -129,25 +165,25 @@ - - org.codehaus.cargo - cargo-maven2-plugin - ${cargo-maven2-plugin.version} - - true - - jetty8x - embedded - - - - - - 8082 - - - - + + org.codehaus.cargo + cargo-maven2-plugin + ${cargo-maven2-plugin.version} + + true + + jetty8x + embedded + + + + + + 8082 + + + + diff --git a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/InitSecurity.java b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/InitSecurity.java new file mode 100644 index 0000000000..956db4a0e5 --- /dev/null +++ b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/InitSecurity.java @@ -0,0 +1,11 @@ +package com.baeldung.thymeleaf.config; + +import org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer; + +public class InitSecurity extends AbstractSecurityWebApplicationInitializer { + + public InitSecurity() { + super(WebMVCSecurity.class); + + } +} diff --git a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebApp.java b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebApp.java index 89ad7e601e..c7d5e33cb8 100644 --- a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebApp.java +++ b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebApp.java @@ -20,7 +20,7 @@ public class WebApp extends AbstractAnnotationConfigDispatcherServletInitializer @Override protected Class[] getServletConfigClasses() { - return new Class[] { WebMVCConfig.class }; + return new Class[] { WebMVCConfig.class, WebMVCSecurity.class, InitSecurity.class }; } @Override diff --git a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCConfig.java b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCConfig.java index 51c60247a1..50c9cf06fe 100644 --- a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCConfig.java +++ b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCConfig.java @@ -1,6 +1,5 @@ package com.baeldung.thymeleaf.config; -import com.baeldung.thymeleaf.formatter.NameFormatter; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @@ -14,6 +13,8 @@ import org.thymeleaf.spring4.SpringTemplateEngine; import org.thymeleaf.spring4.view.ThymeleafViewResolver; import org.thymeleaf.templateresolver.ServletContextTemplateResolver; +import com.baeldung.thymeleaf.formatter.NameFormatter; + @Configuration @EnableWebMvc @ComponentScan({ "com.baeldung.thymeleaf" }) diff --git a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCSecurity.java b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCSecurity.java new file mode 100644 index 0000000000..4cc1c26403 --- /dev/null +++ b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCSecurity.java @@ -0,0 +1,50 @@ +package com.baeldung.thymeleaf.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; +import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.builders.WebSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; + +@Configuration +@EnableWebSecurity +@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true) +public class WebMVCSecurity extends WebSecurityConfigurerAdapter { + + @Bean + @Override + public AuthenticationManager authenticationManagerBean() throws Exception { + return super.authenticationManagerBean(); + } + + public WebMVCSecurity() { + super(); + } + + @Override + protected void configure(final AuthenticationManagerBuilder auth) throws Exception { + auth.inMemoryAuthentication().withUser("user1").password("user1Pass").authorities("ROLE_USER"); + } + + @Override + public void configure(final WebSecurity web) throws Exception { + web.ignoring().antMatchers("/resources/**"); + } + + @Override + protected void configure(final HttpSecurity http) throws Exception { + http + .authorizeRequests() + .anyRequest() + .authenticated() + .and() + .httpBasic() + .and() + ; + } + +} diff --git a/spring-thymeleaf/src/main/webapp/WEB-INF/views/csrfAttack.html b/spring-thymeleaf/src/main/webapp/WEB-INF/views/csrfAttack.html new file mode 100644 index 0000000000..7674caa854 --- /dev/null +++ b/spring-thymeleaf/src/main/webapp/WEB-INF/views/csrfAttack.html @@ -0,0 +1,12 @@ + + + + + + +
    + + +
    + + \ No newline at end of file diff --git a/spring-thymeleaf/src/test/java/org/baeldung/security/csrf/CsrfEnabledIntegrationTest.java b/spring-thymeleaf/src/test/java/org/baeldung/security/csrf/CsrfEnabledIntegrationTest.java new file mode 100644 index 0000000000..bd70881dd8 --- /dev/null +++ b/spring-thymeleaf/src/test/java/org/baeldung/security/csrf/CsrfEnabledIntegrationTest.java @@ -0,0 +1,63 @@ +package org.baeldung.security.csrf; + +import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.csrf; +import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.user; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +import javax.servlet.Filter; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import org.springframework.mock.web.MockHttpSession; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.web.WebAppConfiguration; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.request.RequestPostProcessor; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.context.WebApplicationContext; + +import com.baeldung.thymeleaf.config.InitSecurity; +import com.baeldung.thymeleaf.config.WebApp; +import com.baeldung.thymeleaf.config.WebMVCConfig; +import com.baeldung.thymeleaf.config.WebMVCSecurity; + +@RunWith(SpringJUnit4ClassRunner.class) +@WebAppConfiguration +@ContextConfiguration(classes = { WebApp.class, WebMVCConfig.class, WebMVCSecurity.class, InitSecurity.class }) +public class CsrfEnabledIntegrationTest { + + @Autowired + WebApplicationContext wac; + @Autowired + MockHttpSession session; + + private MockMvc mockMvc; + + @Autowired + private Filter springSecurityFilterChain; + + protected RequestPostProcessor testUser() { + return user("user1").password("user1Pass").roles("USER"); + } + + @Before + public void setup() { + mockMvc = MockMvcBuilders.webAppContextSetup(wac).addFilters(springSecurityFilterChain).build(); + } + + @Test + public void addStudentWithoutCSRF() throws Exception { + mockMvc.perform(post("/saveStudent").contentType(MediaType.APPLICATION_JSON).param("id", "1234567").param("name", "Joe").param("gender", "M").with(testUser())).andExpect(status().isForbidden()); + } + + @Test + public void addStudentWithCSRF() throws Exception { + mockMvc.perform(post("/saveStudent").contentType(MediaType.APPLICATION_JSON).param("id", "1234567").param("name", "Joe").param("gender", "M").with(testUser()).with(csrf())).andExpect(status().isOk()); + } + +} From 53cb5767313450551c9fd95937394ce44d9045f8 Mon Sep 17 00:00:00 2001 From: DOHA Date: Fri, 23 Sep 2016 19:59:35 +0200 Subject: [PATCH 132/265] exclude live test --- spring-rest/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-rest/pom.xml b/spring-rest/pom.xml index 5340f8b437..54a8b08cc6 100644 --- a/spring-rest/pom.xml +++ b/spring-rest/pom.xml @@ -198,7 +198,7 @@ maven-surefire-plugin - + **/*LiveTest.java From 3adfc4faaa9a7a5411ab351487f12b590ea96a45 Mon Sep 17 00:00:00 2001 From: DOHA Date: Fri, 23 Sep 2016 21:40:28 +0200 Subject: [PATCH 133/265] minor fix --- spring-rest/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-rest/pom.xml b/spring-rest/pom.xml index 54a8b08cc6..18cb1dc72a 100644 --- a/spring-rest/pom.xml +++ b/spring-rest/pom.xml @@ -213,7 +213,7 @@ true - jetty8x + tomcat8x embedded @@ -318,7 +318,7 @@ 3.5.1 2.6 2.19.1 - 1.4.18 + 1.6.0 From 03ebc0255644c181da7bd56525185ea59f41d04f Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Sat, 24 Sep 2016 11:33:47 +0200 Subject: [PATCH 134/265] Refactor Stream> example --- .../java9/Java9OptionalsStreamTest.java | 35 ++++++++----------- 1 file changed, 15 insertions(+), 20 deletions(-) diff --git a/core-java-9/src/test/java/com/baeldung/java9/Java9OptionalsStreamTest.java b/core-java-9/src/test/java/com/baeldung/java9/Java9OptionalsStreamTest.java index 336e803985..102ceda18f 100644 --- a/core-java-9/src/test/java/com/baeldung/java9/Java9OptionalsStreamTest.java +++ b/core-java-9/src/test/java/com/baeldung/java9/Java9OptionalsStreamTest.java @@ -13,36 +13,31 @@ import org.junit.Test; public class Java9OptionalsStreamTest { - private List> listOfOptionals; + private static List> listOfOptionals = Arrays.asList(Optional.empty(), Optional.of("foo"), Optional.empty(), Optional.of("bar")); - @Before - public void populateStream() { - listOfOptionals = Arrays.asList(Optional.empty(), Optional.of("foo"), Optional.empty(), Optional.of("bar")); - } - @Test public void filterOutPresentOptionalsWithFilter() { assertEquals(4, listOfOptionals.size()); - //@format:off + List filteredList = listOfOptionals.stream() - .filter(Optional::isPresent) - .map(Optional::get) - .collect(Collectors.toList()); - //@format:on + .filter(Optional::isPresent) + .map(Optional::get) + .collect(Collectors.toList()); + assertEquals(2, filteredList.size()); assertEquals("foo", filteredList.get(0)); assertEquals("bar", filteredList.get(1)); } - + @Test public void filterOutPresentOptionalsWithFlatMap() { assertEquals(4, listOfOptionals.size()); - //@format:off + List filteredList = listOfOptionals.stream() - .flatMap(o -> o.isPresent() ? Stream.of(o.get()) : Stream.empty()) - .collect(Collectors.toList()); - //@format:on + .flatMap(o -> o.isPresent() ? Stream.of(o.get()) : Stream.empty()) + .collect(Collectors.toList()); assertEquals(2, filteredList.size()); + assertEquals("foo", filteredList.get(0)); assertEquals("bar", filteredList.get(1)); } @@ -50,11 +45,11 @@ public class Java9OptionalsStreamTest { @Test public void filterOutPresentOptionalsWithJava9() { assertEquals(4, listOfOptionals.size()); - //@format:off + List filteredList = listOfOptionals.stream() - .flatMap(Optional::stream) - .collect(Collectors.toList()); - //@format:on + .flatMap(Optional::stream) + .collect(Collectors.toList()); + assertEquals(2, filteredList.size()); assertEquals("foo", filteredList.get(0)); assertEquals("bar", filteredList.get(1)); From 7bfa860df9490baef2f70b67f06e230270db5afb Mon Sep 17 00:00:00 2001 From: slavisa-baeldung Date: Sat, 24 Sep 2016 11:52:42 +0200 Subject: [PATCH 135/265] BAEL-39 - adding SLF4J examples --- log4j/pom.xml | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/log4j/pom.xml b/log4j/pom.xml index 76c05b36c1..586769aa71 100644 --- a/log4j/pom.xml +++ b/log4j/pom.xml @@ -15,7 +15,13 @@ log4j 1.2.17 - + @@ -28,22 +34,34 @@ log4j-core 2.6 - - + com.lmax disruptor 3.3.4 - + - ch.qos.logback logback-classic 1.1.7 + + From 5a10df3396bd03d895dc0c73f5956edc25a60edd Mon Sep 17 00:00:00 2001 From: slavisa-baeldung Date: Sat, 24 Sep 2016 12:01:23 +0200 Subject: [PATCH 136/265] BAEL-39 - adding SLF4J examples --- .../java/com/baeldung/slf4j/Slf4jExample.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 log4j/src/main/java/com/baeldung/slf4j/Slf4jExample.java diff --git a/log4j/src/main/java/com/baeldung/slf4j/Slf4jExample.java b/log4j/src/main/java/com/baeldung/slf4j/Slf4jExample.java new file mode 100644 index 0000000000..dea5f22a15 --- /dev/null +++ b/log4j/src/main/java/com/baeldung/slf4j/Slf4jExample.java @@ -0,0 +1,20 @@ +package com.baeldung.slf4j; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * To switch between logging frameworks you need only to uncomment needed framework dependencies in pom.xml + */ +public class SLF4JExample { + private static Logger logger = LoggerFactory.getLogger(SLF4JExample.class); + + public static void main(String[] args) { + logger.debug("Debug log message"); + logger.info("Info log message"); + logger.error("Error log message"); + + String variable = "Hello John"; + logger.debug("Printing variable value {} ", variable); + } +} From 94355ee7b8fabc08fb8fd8b624f335ed9a1579a4 Mon Sep 17 00:00:00 2001 From: slavisa-baeldung Date: Sat, 24 Sep 2016 13:14:13 +0200 Subject: [PATCH 137/265] BAEL-39 - renaming class --- log4j/src/main/java/com/baeldung/slf4j/Slf4jExample.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/log4j/src/main/java/com/baeldung/slf4j/Slf4jExample.java b/log4j/src/main/java/com/baeldung/slf4j/Slf4jExample.java index dea5f22a15..6ecc7b887a 100644 --- a/log4j/src/main/java/com/baeldung/slf4j/Slf4jExample.java +++ b/log4j/src/main/java/com/baeldung/slf4j/Slf4jExample.java @@ -6,8 +6,8 @@ import org.slf4j.LoggerFactory; /** * To switch between logging frameworks you need only to uncomment needed framework dependencies in pom.xml */ -public class SLF4JExample { - private static Logger logger = LoggerFactory.getLogger(SLF4JExample.class); +public class Slf4jExample { + private static Logger logger = LoggerFactory.getLogger(Slf4jExample.class); public static void main(String[] args) { logger.debug("Debug log message"); From 5b29f1bc8119c2e66e015f32d4f7e762d7edabef Mon Sep 17 00:00:00 2001 From: maibin Date: Sat, 24 Sep 2016 22:34:15 +0200 Subject: [PATCH 138/265] New pull for Thymeleaf (#697) * Expression-Based Access Control PermitAll, hasRole, hasAnyRole etc. I modified classes regards to Security * Added test cases for Spring Security Expressions * Handler Interceptor - logging example * Test for logger interceptor * Removed conflicted part * UserInterceptor (adding user information to model) * Spring Handler Interceptor - session timers * Spring Security CSRF attack protection with Thymeleaf * Fix and(); --- .../main/java/com/baeldung/thymeleaf/config/WebMVCSecurity.java | 1 - 1 file changed, 1 deletion(-) diff --git a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCSecurity.java b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCSecurity.java index 4cc1c26403..00c42831de 100644 --- a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCSecurity.java +++ b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCSecurity.java @@ -43,7 +43,6 @@ public class WebMVCSecurity extends WebSecurityConfigurerAdapter { .authenticated() .and() .httpBasic() - .and() ; } From 51c438b469859fb4a6f357b3107f46ffcef002a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20R=C3=A4del?= Date: Sun, 25 Sep 2016 11:07:55 +0200 Subject: [PATCH 139/265] BAEL-305: Use release versions as dependencies. --- enterprise-patterns/front-controller-pattern/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/enterprise-patterns/front-controller-pattern/pom.xml b/enterprise-patterns/front-controller-pattern/pom.xml index dbcd4f1b1d..5fbe5730cb 100644 --- a/enterprise-patterns/front-controller-pattern/pom.xml +++ b/enterprise-patterns/front-controller-pattern/pom.xml @@ -31,7 +31,7 @@ org.eclipse.jetty jetty-maven-plugin - 9.4.0.M1 + 9.3.11.v20160721 /front-controller From 11292acceb5e3479b216121245ad2f4ce786c571 Mon Sep 17 00:00:00 2001 From: slavisa-baeldung Date: Sun, 25 Sep 2016 12:24:56 +0200 Subject: [PATCH 140/265] BAEL-657 - FrontController image resize --- .../src/main/resources/front controller.png | Bin 9492 -> 5338 bytes .../src/main/resources/front controller.puml | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/enterprise-patterns/front-controller-pattern/src/main/resources/front controller.png b/enterprise-patterns/front-controller-pattern/src/main/resources/front controller.png index bd475bf3f32a2a82cc0d5d31acc3e09344109f1f..af22a38e37c8735a0d2a0a05e4a774edbb2ab706 100644 GIT binary patch literal 5338 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 literal 9492 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 Date: Sun, 25 Sep 2016 12:36:45 +0200 Subject: [PATCH 141/265] BAEL-305 - jetty version upgrade --- enterprise-patterns/front-controller-pattern/pom.xml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/enterprise-patterns/front-controller-pattern/pom.xml b/enterprise-patterns/front-controller-pattern/pom.xml index d1868b81af..dbcd4f1b1d 100644 --- a/enterprise-patterns/front-controller-pattern/pom.xml +++ b/enterprise-patterns/front-controller-pattern/pom.xml @@ -31,11 +31,7 @@ org.eclipse.jetty jetty-maven-plugin -<<<<<<< HEAD - 9.3.11.v20160721 -======= 9.4.0.M1 ->>>>>>> upstream/master /front-controller From a351667adc59e55e31857dc69e7a4fd23eb9e602 Mon Sep 17 00:00:00 2001 From: eugenp Date: Sun, 25 Sep 2016 15:18:08 +0300 Subject: [PATCH 142/265] minor cleanup work --- spring-thymeleaf/pom.xml | 362 +++++++++--------- .../com/baeldung/thymeleaf/config/WebApp.java | 38 +- .../thymeleaf/config/WebMVCConfig.java | 80 ++-- .../thymeleaf/config/WebMVCSecurity.java | 10 +- .../controller/StudentController.java | 74 ++-- .../com/baeldung/thymeleaf/model/Student.java | 66 ++-- .../csrf/CsrfEnabledIntegrationTest.java | 12 +- 7 files changed, 318 insertions(+), 324 deletions(-) diff --git a/spring-thymeleaf/pom.xml b/spring-thymeleaf/pom.xml index 35d8c37176..f9493a9992 100644 --- a/spring-thymeleaf/pom.xml +++ b/spring-thymeleaf/pom.xml @@ -1,189 +1,189 @@ - 4.0.0 - com.baeldung - spring-thymeleaf - 0.1-SNAPSHOT - war - - 1.7 - - 4.3.3.RELEASE - 3.0.1 - - 1.7.12 - 1.1.3 - - 2.1.4.RELEASE - - 1.1.0.Final - 5.1.2.Final + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 + com.baeldung + spring-thymeleaf + 0.1-SNAPSHOT + war + + 1.7 + + 4.3.3.RELEASE + 3.0.1 + + 1.7.12 + 1.1.3 + + 2.1.4.RELEASE + + 1.1.0.Final + 5.1.2.Final - - 3.5.1 - 2.6 - 2.19.1 - 1.4.18 - + + 3.5.1 + 2.6 + 2.19.1 + 1.4.18 + - - - - org.springframework - spring-context - ${org.springframework-version} - - - - commons-logging - commons-logging - - - - - org.springframework - spring-webmvc - ${org.springframework-version} - - - - org.springframework.security - spring-security-web - 4.1.3.RELEASE - - - org.springframework.security - spring-security-config - 4.1.3.RELEASE - - - - org.thymeleaf - thymeleaf - ${org.thymeleaf-version} - - - org.thymeleaf - thymeleaf-spring4 - ${org.thymeleaf-version} - - - - - org.slf4j - slf4j-api - ${org.slf4j.version} - - - ch.qos.logback - logback-classic - ${logback.version} - - - - org.slf4j - jcl-over-slf4j - ${org.slf4j.version} - - - - org.slf4j - log4j-over-slf4j - ${org.slf4j.version} - - - - javax.servlet - javax.servlet-api - ${javax.servlet-version} - provided - - - - javax.validation - validation-api - ${javax.validation-version} - - - org.hibernate - hibernate-validator - ${org.hibernate-version} - - + + + + org.springframework + spring-context + ${org.springframework-version} + + + + commons-logging + commons-logging + + + + + org.springframework + spring-webmvc + ${org.springframework-version} + + + + org.springframework.security + spring-security-web + 4.1.3.RELEASE + + + org.springframework.security + spring-security-config + 4.1.3.RELEASE + + + + org.thymeleaf + thymeleaf + ${org.thymeleaf-version} + + + org.thymeleaf + thymeleaf-spring4 + ${org.thymeleaf-version} + + + + + org.slf4j + slf4j-api + ${org.slf4j.version} + + + ch.qos.logback + logback-classic + ${logback.version} + + + + org.slf4j + jcl-over-slf4j + ${org.slf4j.version} + + + + org.slf4j + log4j-over-slf4j + ${org.slf4j.version} + + + + javax.servlet + javax.servlet-api + ${javax.servlet-version} + provided + + + + javax.validation + validation-api + ${javax.validation-version} + + + org.hibernate + hibernate-validator + ${org.hibernate-version} + + - - org.springframework - spring-test - 4.1.3.RELEASE - test - + + org.springframework + spring-test + 4.1.3.RELEASE + test + - - - org.springframework.security - spring-security-test - 4.1.3.RELEASE - test - + + + org.springframework.security + spring-security-test + 4.1.3.RELEASE + test + - - - junit - junit - 4.12 - test - + + + junit + junit + 4.12 + test + - - - - - org.apache.maven.plugins - maven-compiler-plugin - ${maven-compiler-plugin.version} - - ${java-version} - ${java-version} - - - - org.apache.maven.plugins - maven-war-plugin - ${maven-war-plugin.version} - - false - - - - org.apache.maven.plugins - maven-surefire-plugin - ${maven-surefire-plugin.version} - - - - - - - - - org.codehaus.cargo - cargo-maven2-plugin - ${cargo-maven2-plugin.version} - - true - - jetty8x - embedded - - - - - - 8082 - - - - - - + + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + ${java-version} + ${java-version} + + + + org.apache.maven.plugins + maven-war-plugin + ${maven-war-plugin.version} + + false + + + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + + + + + + + + org.codehaus.cargo + cargo-maven2-plugin + ${cargo-maven2-plugin.version} + + true + + jetty8x + embedded + + + + + + 8082 + + + + + + diff --git a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebApp.java b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebApp.java index c7d5e33cb8..3104f45ab5 100644 --- a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebApp.java +++ b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebApp.java @@ -9,28 +9,28 @@ import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatche */ public class WebApp extends AbstractAnnotationConfigDispatcherServletInitializer { - public WebApp() { - super(); - } + public WebApp() { + super(); + } - @Override - protected Class[] getRootConfigClasses() { - return null; - } + @Override + protected Class[] getRootConfigClasses() { + return null; + } - @Override - protected Class[] getServletConfigClasses() { - return new Class[] { WebMVCConfig.class, WebMVCSecurity.class, InitSecurity.class }; - } + @Override + protected Class[] getServletConfigClasses() { + return new Class[] { WebMVCConfig.class, WebMVCSecurity.class, InitSecurity.class }; + } - @Override - protected String[] getServletMappings() { - return new String[] { "/" }; - } + @Override + protected String[] getServletMappings() { + return new String[] { "/" }; + } - @Override - protected void customizeRegistration(final Dynamic registration) { - super.customizeRegistration(registration); - } + @Override + protected void customizeRegistration(final Dynamic registration) { + super.customizeRegistration(registration); + } } diff --git a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCConfig.java b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCConfig.java index 50c9cf06fe..cdea671c84 100644 --- a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCConfig.java +++ b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCConfig.java @@ -24,51 +24,51 @@ import com.baeldung.thymeleaf.formatter.NameFormatter; */ public class WebMVCConfig extends WebMvcConfigurerAdapter { - @Bean - @Description("Thymeleaf Template Resolver") - public ServletContextTemplateResolver templateResolver() { - ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver(); - templateResolver.setPrefix("/WEB-INF/views/"); - templateResolver.setSuffix(".html"); - templateResolver.setTemplateMode("HTML5"); + @Bean + @Description("Thymeleaf Template Resolver") + public ServletContextTemplateResolver templateResolver() { + ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver(); + templateResolver.setPrefix("/WEB-INF/views/"); + templateResolver.setSuffix(".html"); + templateResolver.setTemplateMode("HTML5"); - return templateResolver; - } + return templateResolver; + } - @Bean - @Description("Thymeleaf Template Engine") - public SpringTemplateEngine templateEngine() { - SpringTemplateEngine templateEngine = new SpringTemplateEngine(); - templateEngine.setTemplateResolver(templateResolver()); + @Bean + @Description("Thymeleaf Template Engine") + public SpringTemplateEngine templateEngine() { + SpringTemplateEngine templateEngine = new SpringTemplateEngine(); + templateEngine.setTemplateResolver(templateResolver()); - return templateEngine; - } + return templateEngine; + } - @Bean - @Description("Thymeleaf View Resolver") - public ThymeleafViewResolver viewResolver() { - ThymeleafViewResolver viewResolver = new ThymeleafViewResolver(); - viewResolver.setTemplateEngine(templateEngine()); - viewResolver.setOrder(1); - return viewResolver; - } + @Bean + @Description("Thymeleaf View Resolver") + public ThymeleafViewResolver viewResolver() { + ThymeleafViewResolver viewResolver = new ThymeleafViewResolver(); + viewResolver.setTemplateEngine(templateEngine()); + viewResolver.setOrder(1); + return viewResolver; + } - @Bean - @Description("Spring Message Resolver") - public ResourceBundleMessageSource messageSource() { - ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); - messageSource.setBasename("messages"); - return messageSource; - } + @Bean + @Description("Spring Message Resolver") + public ResourceBundleMessageSource messageSource() { + ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); + messageSource.setBasename("messages"); + return messageSource; + } - @Override - public void addResourceHandlers(ResourceHandlerRegistry registry) { - registry.addResourceHandler("/resources/**").addResourceLocations("/WEB-INF/resources/"); - } + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + registry.addResourceHandler("/resources/**").addResourceLocations("/WEB-INF/resources/"); + } - @Override - @Description("Custom Conversion Service") - public void addFormatters(FormatterRegistry registry) { - registry.addFormatter(new NameFormatter()); - } + @Override + @Description("Custom Conversion Service") + public void addFormatters(FormatterRegistry registry) { + registry.addFormatter(new NameFormatter()); + } } diff --git a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCSecurity.java b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCSecurity.java index 00c42831de..46bff38a3f 100644 --- a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCSecurity.java +++ b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCSecurity.java @@ -14,7 +14,7 @@ import org.springframework.security.config.annotation.web.configuration.WebSecur @EnableWebSecurity @EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true) public class WebMVCSecurity extends WebSecurityConfigurerAdapter { - + @Bean @Override public AuthenticationManager authenticationManagerBean() throws Exception { @@ -37,13 +37,7 @@ public class WebMVCSecurity extends WebSecurityConfigurerAdapter { @Override protected void configure(final HttpSecurity http) throws Exception { - http - .authorizeRequests() - .anyRequest() - .authenticated() - .and() - .httpBasic() - ; + http.authorizeRequests().anyRequest().authenticated().and().httpBasic(); } } diff --git a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/StudentController.java b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/StudentController.java index 912eb521f4..da34b2d7b0 100644 --- a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/StudentController.java +++ b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/StudentController.java @@ -20,50 +20,50 @@ import org.springframework.web.bind.annotation.RequestMethod; @Controller public class StudentController { - @RequestMapping(value = "/saveStudent", method = RequestMethod.POST) - public String saveStudent(@Valid @ModelAttribute Student student, BindingResult errors, Model model) { - if (!errors.hasErrors()) { - // get mock objects - List students = buildStudents(); - // add current student - students.add(student); - model.addAttribute("students", students); - } - return ((errors.hasErrors()) ? "addStudent" : "listStudents"); - } + @RequestMapping(value = "/saveStudent", method = RequestMethod.POST) + public String saveStudent(@Valid @ModelAttribute Student student, BindingResult errors, Model model) { + if (!errors.hasErrors()) { + // get mock objects + List students = buildStudents(); + // add current student + students.add(student); + model.addAttribute("students", students); + } + return ((errors.hasErrors()) ? "addStudent" : "listStudents"); + } - @RequestMapping(value = "/addStudent", method = RequestMethod.GET) - public String addStudent(Model model) { - model.addAttribute("student", new Student()); - return "addStudent"; - } + @RequestMapping(value = "/addStudent", method = RequestMethod.GET) + public String addStudent(Model model) { + model.addAttribute("student", new Student()); + return "addStudent"; + } - @RequestMapping(value = "/listStudents", method = RequestMethod.GET) - public String listStudent(Model model) { + @RequestMapping(value = "/listStudents", method = RequestMethod.GET) + public String listStudent(Model model) { - model.addAttribute("students", buildStudents()); + model.addAttribute("students", buildStudents()); - return "listStudents"; - } + return "listStudents"; + } - private List buildStudents() { - List students = new ArrayList(); + private List buildStudents() { + List students = new ArrayList(); - Student student1 = new Student(); - student1.setId(1001); - student1.setName("John Smith"); - student1.setGender('M'); - student1.setPercentage(Float.valueOf("80.45")); + Student student1 = new Student(); + student1.setId(1001); + student1.setName("John Smith"); + student1.setGender('M'); + student1.setPercentage(Float.valueOf("80.45")); - students.add(student1); + students.add(student1); - Student student2 = new Student(); - student2.setId(1002); - student2.setName("Jane Williams"); - student2.setGender('F'); - student2.setPercentage(Float.valueOf("60.25")); + Student student2 = new Student(); + student2.setId(1002); + student2.setName("Jane Williams"); + student2.setGender('F'); + student2.setPercentage(Float.valueOf("60.25")); - students.add(student2); - return students; - } + students.add(student2); + return students; + } } diff --git a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/model/Student.java b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/model/Student.java index bce99f286c..202c04358a 100644 --- a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/model/Student.java +++ b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/model/Student.java @@ -12,49 +12,49 @@ import javax.validation.constraints.NotNull; */ public class Student implements Serializable { - private static final long serialVersionUID = -8582553475226281591L; + private static final long serialVersionUID = -8582553475226281591L; - @NotNull(message = "Student ID is required.") - @Min(value = 1000, message = "Student ID must be at least 4 digits.") - private Integer id; + @NotNull(message = "Student ID is required.") + @Min(value = 1000, message = "Student ID must be at least 4 digits.") + private Integer id; - @NotNull(message = "Student name is required.") - private String name; + @NotNull(message = "Student name is required.") + private String name; - @NotNull(message = "Student gender is required.") - private Character gender; + @NotNull(message = "Student gender is required.") + private Character gender; - private Float percentage; + private Float percentage; - public Integer getId() { - return id; - } + public Integer getId() { + return id; + } - public void setId(Integer id) { - this.id = id; - } + public void setId(Integer id) { + this.id = id; + } - public String getName() { - return name; - } + public String getName() { + return name; + } - public void setName(String name) { - this.name = name; - } + public void setName(String name) { + this.name = name; + } - public Character getGender() { - return gender; - } + public Character getGender() { + return gender; + } - public void setGender(Character gender) { - this.gender = gender; - } + public void setGender(Character gender) { + this.gender = gender; + } - public Float getPercentage() { - return percentage; - } + public Float getPercentage() { + return percentage; + } - public void setPercentage(Float percentage) { - this.percentage = percentage; - } + public void setPercentage(Float percentage) { + this.percentage = percentage; + } } diff --git a/spring-thymeleaf/src/test/java/org/baeldung/security/csrf/CsrfEnabledIntegrationTest.java b/spring-thymeleaf/src/test/java/org/baeldung/security/csrf/CsrfEnabledIntegrationTest.java index bd70881dd8..46a28c3c74 100644 --- a/spring-thymeleaf/src/test/java/org/baeldung/security/csrf/CsrfEnabledIntegrationTest.java +++ b/spring-thymeleaf/src/test/java/org/baeldung/security/csrf/CsrfEnabledIntegrationTest.java @@ -30,17 +30,17 @@ import com.baeldung.thymeleaf.config.WebMVCSecurity; @WebAppConfiguration @ContextConfiguration(classes = { WebApp.class, WebMVCConfig.class, WebMVCSecurity.class, InitSecurity.class }) public class CsrfEnabledIntegrationTest { - - @Autowired + + @Autowired WebApplicationContext wac; @Autowired MockHttpSession session; private MockMvc mockMvc; - + @Autowired private Filter springSecurityFilterChain; - + protected RequestPostProcessor testUser() { return user("user1").password("user1Pass").roles("USER"); } @@ -52,12 +52,12 @@ public class CsrfEnabledIntegrationTest { @Test public void addStudentWithoutCSRF() throws Exception { - mockMvc.perform(post("/saveStudent").contentType(MediaType.APPLICATION_JSON).param("id", "1234567").param("name", "Joe").param("gender", "M").with(testUser())).andExpect(status().isForbidden()); + mockMvc.perform(post("/saveStudent").contentType(MediaType.APPLICATION_JSON).param("id", "1234567").param("name", "Joe").param("gender", "M").with(testUser())).andExpect(status().isForbidden()); } @Test public void addStudentWithCSRF() throws Exception { - mockMvc.perform(post("/saveStudent").contentType(MediaType.APPLICATION_JSON).param("id", "1234567").param("name", "Joe").param("gender", "M").with(testUser()).with(csrf())).andExpect(status().isOk()); + mockMvc.perform(post("/saveStudent").contentType(MediaType.APPLICATION_JSON).param("id", "1234567").param("name", "Joe").param("gender", "M").with(testUser()).with(csrf())).andExpect(status().isOk()); } } From 1e6083a13c4649ef463dd20a434f6470c0a3e9f9 Mon Sep 17 00:00:00 2001 From: eugenp Date: Sun, 25 Sep 2016 15:19:09 +0300 Subject: [PATCH 143/265] minor cleanup work --- spring-thymeleaf/pom.xml | 44 +++++++++++++++++++++------------------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/spring-thymeleaf/pom.xml b/spring-thymeleaf/pom.xml index f9493a9992..96508eb15e 100644 --- a/spring-thymeleaf/pom.xml +++ b/spring-thymeleaf/pom.xml @@ -5,26 +5,6 @@ spring-thymeleaf 0.1-SNAPSHOT war - - 1.7 - - 4.3.3.RELEASE - 3.0.1 - - 1.7.12 - 1.1.3 - - 2.1.4.RELEASE - - 1.1.0.Final - 5.1.2.Final - - - 3.5.1 - 2.6 - 2.19.1 - 1.4.18 - @@ -68,7 +48,6 @@ ${org.thymeleaf-version} - org.slf4j slf4j-api @@ -135,6 +114,7 @@ + @@ -186,4 +166,26 @@ + + + 1.8 + + 4.3.3.RELEASE + 3.0.1 + + 1.7.12 + 1.1.3 + + 2.1.4.RELEASE + + 1.1.0.Final + 5.1.2.Final + + + 3.5.1 + 2.6 + 2.19.1 + 1.4.18 + + From eae09bb13a8ae70aecf237650f3ed82245efeebb Mon Sep 17 00:00:00 2001 From: maibin Date: Sun, 25 Sep 2016 22:45:22 +0200 Subject: [PATCH 144/265] Fixed both Thymeleaf and Interceptors articles (#699) * Expression-Based Access Control PermitAll, hasRole, hasAnyRole etc. I modified classes regards to Security * Added test cases for Spring Security Expressions * Handler Interceptor - logging example * Test for logger interceptor * Removed conflicted part * UserInterceptor (adding user information to model) * Spring Handler Interceptor - session timers * Spring Security CSRF attack protection with Thymeleaf * Fix and(); * Logger update * Changed config for Thymeleaf --- .../interceptor/SessionTimerInterceptor.java | 7 +- spring-thymeleaf/pom.xml | 53 ++++++----- .../thymeleaf/config/WebMVCConfig.java | 93 ++++++++++--------- .../thymeleaf/config/WebMVCSecurity.java | 8 +- 4 files changed, 87 insertions(+), 74 deletions(-) diff --git a/spring-security-rest-full/src/main/java/org/baeldung/web/interceptor/SessionTimerInterceptor.java b/spring-security-rest-full/src/main/java/org/baeldung/web/interceptor/SessionTimerInterceptor.java index 8d967ed1ef..f5c1626989 100644 --- a/spring-security-rest-full/src/main/java/org/baeldung/web/interceptor/SessionTimerInterceptor.java +++ b/spring-security-rest-full/src/main/java/org/baeldung/web/interceptor/SessionTimerInterceptor.java @@ -31,9 +31,8 @@ public class SessionTimerInterceptor extends HandlerInterceptorAdapter { request.setAttribute("executionTime", startTime); if (UserInterceptor.isUserLogged()) { session = request.getSession(); - log.info("Who is logged in: " + SecurityContextHolder.getContext().getAuthentication().getName()); - log.info("Time since last request in this session: " - + (System.currentTimeMillis() - request.getSession().getLastAccessedTime()) + " ms"); + log.info("Time since last request in this session: {} ms", + System.currentTimeMillis() - request.getSession().getLastAccessedTime()); if (System.currentTimeMillis() - session.getLastAccessedTime() > MAX_INACTIVE_SESSION_TIME) { log.warn("Logging out, due to inactive session"); SecurityContextHolder.clearContext(); @@ -52,6 +51,6 @@ public class SessionTimerInterceptor extends HandlerInterceptorAdapter { final ModelAndView model) throws Exception { log.info("Post handle method - check execution time of handling"); long startTime = (Long) request.getAttribute("executionTime"); - log.info("Execution time for handling the request was: " + (System.currentTimeMillis() - startTime) + " ms"); + log.info("Execution time for handling the request was: {} ms", System.currentTimeMillis() - startTime); } } diff --git a/spring-thymeleaf/pom.xml b/spring-thymeleaf/pom.xml index 96508eb15e..a13f1de4c7 100644 --- a/spring-thymeleaf/pom.xml +++ b/spring-thymeleaf/pom.xml @@ -1,10 +1,30 @@ - 4.0.0 - com.baeldung - spring-thymeleaf - 0.1-SNAPSHOT - war + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 + com.baeldung + spring-thymeleaf + 0.1-SNAPSHOT + war + + 1.8 + + 4.3.3.RELEASE + 3.0.1 + + 1.7.12 + 1.1.3 + + 3.0.1.RELEASE + + 1.1.0.Final + 5.1.2.Final + + + 3.5.1 + 2.6 + 2.19.1 + 1.4.18 + @@ -167,25 +187,4 @@ - - 1.8 - - 4.3.3.RELEASE - 3.0.1 - - 1.7.12 - 1.1.3 - - 2.1.4.RELEASE - - 1.1.0.Final - 5.1.2.Final - - - 3.5.1 - 2.6 - 2.19.1 - 1.4.18 - - diff --git a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCConfig.java b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCConfig.java index cdea671c84..547d6deee9 100644 --- a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCConfig.java +++ b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCConfig.java @@ -1,17 +1,23 @@ package com.baeldung.thymeleaf.config; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Description; import org.springframework.context.support.ResourceBundleMessageSource; import org.springframework.format.FormatterRegistry; +import org.springframework.web.servlet.ViewResolver; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; +import org.thymeleaf.TemplateEngine; import org.thymeleaf.spring4.SpringTemplateEngine; +import org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver; import org.thymeleaf.spring4.view.ThymeleafViewResolver; -import org.thymeleaf.templateresolver.ServletContextTemplateResolver; +import org.thymeleaf.templatemode.TemplateMode; +import org.thymeleaf.templateresolver.ITemplateResolver; import com.baeldung.thymeleaf.formatter.NameFormatter; @@ -22,53 +28,56 @@ import com.baeldung.thymeleaf.formatter.NameFormatter; * Java configuration file that is used for Spring MVC and Thymeleaf * configurations */ -public class WebMVCConfig extends WebMvcConfigurerAdapter { +public class WebMVCConfig extends WebMvcConfigurerAdapter implements ApplicationContextAware { - @Bean - @Description("Thymeleaf Template Resolver") - public ServletContextTemplateResolver templateResolver() { - ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver(); - templateResolver.setPrefix("/WEB-INF/views/"); - templateResolver.setSuffix(".html"); - templateResolver.setTemplateMode("HTML5"); + private ApplicationContext applicationContext; - return templateResolver; - } + public void setApplicationContext(ApplicationContext applicationContext) { + this.applicationContext = applicationContext; + } - @Bean - @Description("Thymeleaf Template Engine") - public SpringTemplateEngine templateEngine() { - SpringTemplateEngine templateEngine = new SpringTemplateEngine(); - templateEngine.setTemplateResolver(templateResolver()); + @Bean + public ViewResolver viewResolver() { + ThymeleafViewResolver resolver = new ThymeleafViewResolver(); + resolver.setTemplateEngine(templateEngine()); + resolver.setCharacterEncoding("UTF-8"); + resolver.setOrder(1); + return resolver; + } - return templateEngine; - } + @Bean + public TemplateEngine templateEngine() { + SpringTemplateEngine engine = new SpringTemplateEngine(); + engine.setEnableSpringELCompiler(true); + engine.setTemplateResolver(templateResolver()); + return engine; + } - @Bean - @Description("Thymeleaf View Resolver") - public ThymeleafViewResolver viewResolver() { - ThymeleafViewResolver viewResolver = new ThymeleafViewResolver(); - viewResolver.setTemplateEngine(templateEngine()); - viewResolver.setOrder(1); - return viewResolver; - } + private ITemplateResolver templateResolver() { + SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver(); + resolver.setApplicationContext(applicationContext); + resolver.setPrefix("/WEB-INF/views/"); + resolver.setSuffix(".html"); + resolver.setTemplateMode(TemplateMode.HTML); + return resolver; + } - @Bean - @Description("Spring Message Resolver") - public ResourceBundleMessageSource messageSource() { - ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); - messageSource.setBasename("messages"); - return messageSource; - } + @Bean + @Description("Spring Message Resolver") + public ResourceBundleMessageSource messageSource() { + ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); + messageSource.setBasename("messages"); + return messageSource; + } - @Override - public void addResourceHandlers(ResourceHandlerRegistry registry) { - registry.addResourceHandler("/resources/**").addResourceLocations("/WEB-INF/resources/"); - } + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + registry.addResourceHandler("/resources/**").addResourceLocations("/WEB-INF/resources/"); + } - @Override - @Description("Custom Conversion Service") - public void addFormatters(FormatterRegistry registry) { - registry.addFormatter(new NameFormatter()); - } + @Override + @Description("Custom Conversion Service") + public void addFormatters(FormatterRegistry registry) { + registry.addFormatter(new NameFormatter()); + } } diff --git a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCSecurity.java b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCSecurity.java index 46bff38a3f..37844a2976 100644 --- a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCSecurity.java +++ b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCSecurity.java @@ -37,7 +37,13 @@ public class WebMVCSecurity extends WebSecurityConfigurerAdapter { @Override protected void configure(final HttpSecurity http) throws Exception { - http.authorizeRequests().anyRequest().authenticated().and().httpBasic(); + http + .authorizeRequests() + .anyRequest() + .authenticated() + .and() + .httpBasic() + ; } } From 4cb5b8ad4a7379dd07e61c39b453d2918f312b10 Mon Sep 17 00:00:00 2001 From: Ivan Paolillo Date: Mon, 26 Sep 2016 10:57:23 +0200 Subject: [PATCH 145/265] Add some OkHttp sample test --- okhttp/pom.xml | 44 +++++ .../okhttp/DefaultContentTypeInterceptor.java | 26 +++ .../okhttp/ProgressRequestWrapper.java | 74 ++++++++ .../org/baeldung/okhttp/OkHttpGetTest.java | 78 ++++++++ .../org/baeldung/okhttp/OkHttpHeaderTest.java | 48 +++++ .../org/baeldung/okhttp/OkHttpMiscTest.java | 104 +++++++++++ .../baeldung/okhttp/OkHttpPostingTest.java | 168 ++++++++++++++++++ .../baeldung/okhttp/OkHttpRedirectTest.java | 33 ++++ okhttp/src/test/resources/test.in | 1 + 9 files changed, 576 insertions(+) create mode 100644 okhttp/pom.xml create mode 100644 okhttp/src/main/java/org/baeldung/okhttp/DefaultContentTypeInterceptor.java create mode 100644 okhttp/src/main/java/org/baeldung/okhttp/ProgressRequestWrapper.java create mode 100644 okhttp/src/test/java/org/baeldung/okhttp/OkHttpGetTest.java create mode 100644 okhttp/src/test/java/org/baeldung/okhttp/OkHttpHeaderTest.java create mode 100644 okhttp/src/test/java/org/baeldung/okhttp/OkHttpMiscTest.java create mode 100644 okhttp/src/test/java/org/baeldung/okhttp/OkHttpPostingTest.java create mode 100644 okhttp/src/test/java/org/baeldung/okhttp/OkHttpRedirectTest.java create mode 100644 okhttp/src/test/resources/test.in diff --git a/okhttp/pom.xml b/okhttp/pom.xml new file mode 100644 index 0000000000..ba5bcf9725 --- /dev/null +++ b/okhttp/pom.xml @@ -0,0 +1,44 @@ + + 4.0.0 + org.baeldung.okhttp + okhttp + 0.0.1-SNAPSHOT + + + + + + com.squareup.okhttp3 + okhttp + ${com.squareup.okhttp3.version} + + + + + junit + junit + ${junit.version} + test + + + + org.hamcrest + hamcrest-library + ${org.hamcrest.version} + test + + + + + + + + 3.4.1 + + + 1.3 + 4.12 + + + + diff --git a/okhttp/src/main/java/org/baeldung/okhttp/DefaultContentTypeInterceptor.java b/okhttp/src/main/java/org/baeldung/okhttp/DefaultContentTypeInterceptor.java new file mode 100644 index 0000000000..2a33a1febd --- /dev/null +++ b/okhttp/src/main/java/org/baeldung/okhttp/DefaultContentTypeInterceptor.java @@ -0,0 +1,26 @@ +package org.baeldung.okhttp; + +import java.io.IOException; + +import okhttp3.Interceptor; +import okhttp3.Request; +import okhttp3.Response; + +public class DefaultContentTypeInterceptor implements Interceptor { + + private final String contentType; + + public DefaultContentTypeInterceptor(String contentType) { + this.contentType = contentType; + } + + public Response intercept(Interceptor.Chain chain) throws IOException { + + Request originalRequest = chain.request(); + Request requestWithUserAgent = originalRequest.newBuilder() + .header("Content-Type", contentType) + .build(); + + return chain.proceed(requestWithUserAgent); + } +} diff --git a/okhttp/src/main/java/org/baeldung/okhttp/ProgressRequestWrapper.java b/okhttp/src/main/java/org/baeldung/okhttp/ProgressRequestWrapper.java new file mode 100644 index 0000000000..42df4ac1ee --- /dev/null +++ b/okhttp/src/main/java/org/baeldung/okhttp/ProgressRequestWrapper.java @@ -0,0 +1,74 @@ +package org.baeldung.okhttp; + +import okhttp3.RequestBody; +import okhttp3.MediaType; + +import java.io.IOException; + +import okio.Buffer; +import okio.BufferedSink; +import okio.ForwardingSink; +import okio.Okio; +import okio.Sink; + +public class ProgressRequestWrapper extends RequestBody { + + protected RequestBody delegate; + protected ProgressListener listener; + + protected CountingSink countingSink; + + public ProgressRequestWrapper(RequestBody delegate, ProgressListener listener) { + this.delegate = delegate; + this.listener = listener; + } + + @Override + public MediaType contentType() { + return delegate.contentType(); + } + + @Override + public long contentLength() throws IOException { + return delegate.contentLength(); + } + + @Override + public void writeTo(BufferedSink sink) throws IOException { + + BufferedSink bufferedSink; + + countingSink = new CountingSink(sink); + bufferedSink = Okio.buffer(countingSink); + + delegate.writeTo(bufferedSink); + + bufferedSink.flush(); + } + + protected final class CountingSink extends ForwardingSink { + + private long bytesWritten = 0; + + public CountingSink(Sink delegate) { + super(delegate); + } + + @Override + public void write(Buffer source, long byteCount) throws IOException { + + super.write(source, byteCount); + + bytesWritten += byteCount; + listener.onRequestProgress(bytesWritten, contentLength()); + } + + } + + public static interface ProgressListener { + + public void onRequestProgress(long bytesWritten, long contentLength); + + } +} + diff --git a/okhttp/src/test/java/org/baeldung/okhttp/OkHttpGetTest.java b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpGetTest.java new file mode 100644 index 0000000000..e8edff92df --- /dev/null +++ b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpGetTest.java @@ -0,0 +1,78 @@ +package org.baeldung.okhttp; + +import static org.hamcrest.Matchers.equalTo; +import static org.junit.Assert.assertThat; + +import java.io.IOException; + +import org.junit.Test; + +import okhttp3.Call; +import okhttp3.Callback; +import okhttp3.HttpUrl; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; + +public class OkHttpGetTest { + + private static final String BASE_URL = "http://localhost:8080/spring-rest"; + + @Test + public void whenGetRequestUsingOkHttp_thenCorrect() throws IOException { + + OkHttpClient client = new OkHttpClient(); + + Request request = new Request.Builder() + .url(BASE_URL + "/date") + .build(); + + Call call = client.newCall(request); + Response response = call.execute(); + + assertThat(response.code(), equalTo(200)); + } + + @Test + public void whenGetRequestWithQueryParameterUsingOkHttp_thenCorrect() throws IOException { + + OkHttpClient client = new OkHttpClient(); + + HttpUrl.Builder urlBuilder = HttpUrl.parse(BASE_URL + "/ex/bars").newBuilder(); + urlBuilder.addQueryParameter("id", "1"); + + String url = urlBuilder.build().toString(); + + Request request = new Request.Builder() + .url(url) + .build(); + + Call call = client.newCall(request); + Response response = call.execute(); + + assertThat(response.code(), equalTo(200)); + } + + @Test + public void whenAsynchronousGetRequestUsingOkHttp_thenCorrect() { + + OkHttpClient client = new OkHttpClient(); + + Request request = new Request.Builder() + .url(BASE_URL + "/date") + .build(); + + Call call = client.newCall(request); + + call.enqueue(new Callback() { + + public void onResponse(Call call, Response response) throws IOException { + assertThat(response.code(), equalTo(200)); + } + + public void onFailure(Call call, IOException e) { + + } + }); + } +} diff --git a/okhttp/src/test/java/org/baeldung/okhttp/OkHttpHeaderTest.java b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpHeaderTest.java new file mode 100644 index 0000000000..5b2e89eca8 --- /dev/null +++ b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpHeaderTest.java @@ -0,0 +1,48 @@ +package org.baeldung.okhttp; + +import java.io.IOException; + +import org.junit.Test; + +import okhttp3.Call; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; + +public class OkHttpHeaderTest { + + private static final String SAMPLE_URL = "http://www.github.com"; + + @Test + public void whenSetHeaderUsingOkHttp_thenCorrect() throws IOException { + + OkHttpClient client = new OkHttpClient(); + + Request request = new Request.Builder() + .url(SAMPLE_URL) + .addHeader("Content-Type", "application/json") + .build(); + + Call call = client.newCall(request); + Response response = call.execute(); + response.close(); + } + + @Test + public void whenSetDefaultHeaderUsingOkHttp_thenCorrect() throws IOException { + + OkHttpClient client = new OkHttpClient.Builder() + .addInterceptor(new DefaultContentTypeInterceptor("application/json")) + .build(); + + Request request = new Request.Builder() + .url(SAMPLE_URL) + .build(); + + Call call = client.newCall(request); + Response response = call.execute(); + response.close(); + } + + +} diff --git a/okhttp/src/test/java/org/baeldung/okhttp/OkHttpMiscTest.java b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpMiscTest.java new file mode 100644 index 0000000000..246857cb71 --- /dev/null +++ b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpMiscTest.java @@ -0,0 +1,104 @@ +package org.baeldung.okhttp; + +import java.io.File; +import java.io.IOException; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; + +import org.junit.Test; + +import okhttp3.Cache; +import okhttp3.Call; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; + +public class OkHttpMiscTest { + + private static final String BASE_URL = "http://localhost:8080/spring-rest"; + + //@Test + public void whenSetRequestTimeoutUsingOkHttp_thenFail() throws IOException { + + OkHttpClient client = new OkHttpClient.Builder() + //.connectTimeout(10, TimeUnit.SECONDS) + //.writeTimeout(10, TimeUnit.SECONDS) + .readTimeout(1, TimeUnit.SECONDS) + .build(); + + Request request = new Request.Builder() + .url(BASE_URL + "/delay/2") // This URL is served with a 2 second delay. + .build(); + + Call call = client.newCall(request); + Response response = call.execute(); + response.close(); + } + + //@Test + public void whenCancelRequestUsingOkHttp_thenCorrect() throws IOException { + + ScheduledExecutorService executor = Executors.newScheduledThreadPool(1); + + OkHttpClient client = new OkHttpClient(); + + Request request = new Request.Builder() + .url(BASE_URL + "/delay/2") // This URL is served with a 2 second delay. + .build(); + + final int seconds = 1; + //final int seconds = 3; + + final long startNanos = System.nanoTime(); + final Call call = client.newCall(request); + + // Schedule a job to cancel the call in 1 second. + executor.schedule(new Runnable() { + public void run() { + + System.out.printf("%.2f Canceling call.%n", (System.nanoTime() - startNanos) / 1e9f); + call.cancel(); + System.out.printf("%.2f Canceled call.%n", (System.nanoTime() - startNanos) / 1e9f); + } + }, seconds, TimeUnit.SECONDS); + + try { + + System.out.printf("%.2f Executing call.%n", (System.nanoTime() - startNanos) / 1e9f); + Response response = call.execute(); + System.out.printf("%.2f Call was expected to fail, but completed: %s%n", (System.nanoTime() - startNanos) / 1e9f, response); + + } catch (IOException e) { + + System.out.printf("%.2f Call failed as expected: %s%n", (System.nanoTime() - startNanos) / 1e9f, e); + } + } + + @Test + public void whenSetResponseCacheUsingOkHttp_thenCorrect() throws IOException { + + int cacheSize = 10 * 1024 * 1024; // 10 MiB + File cacheDirectory = new File("src/test/resources/cache"); + Cache cache = new Cache(cacheDirectory, cacheSize); + + OkHttpClient client = new OkHttpClient.Builder() + .cache(cache) + .build(); + + Request request = new Request.Builder() + .url("http://publicobject.com/helloworld.txt") + //.cacheControl(CacheControl.FORCE_NETWORK) + //.cacheControl(CacheControl.FORCE_CACHE) + .build(); + + Response response = client.newCall(request).execute(); + + String responseBody = response.body().string(); + + System.out.println("Response response: " + response); + System.out.println("Response cache response: " + response.cacheResponse()); + System.out.println("Response network response: " + response.networkResponse()); + System.out.println("Response responseBody: " + responseBody); + } +} diff --git a/okhttp/src/test/java/org/baeldung/okhttp/OkHttpPostingTest.java b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpPostingTest.java new file mode 100644 index 0000000000..e71db94c36 --- /dev/null +++ b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpPostingTest.java @@ -0,0 +1,168 @@ +package org.baeldung.okhttp; + +import static org.hamcrest.Matchers.equalTo; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertThat; + +import java.io.File; +import java.io.IOException; + +import org.baeldung.okhttp.ProgressRequestWrapper; +import org.junit.Test; + +import okhttp3.Call; +import okhttp3.Credentials; +import okhttp3.FormBody; +import okhttp3.MediaType; +import okhttp3.MultipartBody; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; + +public class OkHttpPostingTest { + + private static final String BASE_URL = "http://localhost:8080/spring-rest"; + private static final String URL_SECURED_BY_BASIC_AUTHENTICATION = "http://browserspy.dk/password-ok.php"; + + @Test + public void whenSendPostRequestUsingOkHttp_thenCorrect() throws IOException { + + OkHttpClient client = new OkHttpClient(); + + RequestBody formBody = new FormBody.Builder() + .add("username", "test") + .add("password", "test") + .build(); + + Request request = new Request.Builder() + .url(BASE_URL + "/users") + .post(formBody) + .build(); + + Call call = client.newCall(request); + Response response = call.execute(); + + assertThat(response.code(), equalTo(200)); + } + + @Test + public void whenSendPostRequestWithAuthorizationUsingOkHttp_thenCorrect() throws IOException { + + String postBody = "test post"; + + OkHttpClient client = new OkHttpClient(); + + Request request = new Request.Builder() + .url(URL_SECURED_BY_BASIC_AUTHENTICATION) + .addHeader("Authorization", Credentials.basic("test", "test")) + .post(RequestBody.create(MediaType.parse("text/x-markdown; charset=utf-8"), postBody)) + .build(); + + Call call = client.newCall(request); + Response response = call.execute(); + + assertThat(response.code(), equalTo(200)); + } + + @Test + public void whenPostJsonUsingOkHttp_thenCorrect() throws IOException { + + OkHttpClient client = new OkHttpClient(); + + String json = "{\"id\":1,\"name\":\"John\"}"; + + RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), json); + + Request request = new Request.Builder() + .url(BASE_URL + "/users/detail") + .post(body) + .build(); + + Call call = client.newCall(request); + Response response = call.execute(); + + assertThat(response.code(), equalTo(200)); + } + + @Test + public void whenSendMultipartRequestUsingOkHttp_thenCorrect() throws IOException { + + OkHttpClient client = new OkHttpClient(); + + RequestBody requestBody = new MultipartBody.Builder() + .setType(MultipartBody.FORM) + .addFormDataPart("username", "test") + .addFormDataPart("password", "test") + .addFormDataPart("file", "file.ext", + RequestBody.create(MediaType.parse("image/png"), new File("src/test/resources/test.in"))) + .build(); + + Request request = new Request.Builder() + .url(BASE_URL + "/users/multipart") + .post(requestBody) + .build(); + + Call call = client.newCall(request); + Response response = call.execute(); + + assertThat(response.code(), equalTo(200)); + } + + @Test + public void whenUploadFileUsingOkHttp_thenCorrect() throws IOException { + + OkHttpClient client = new OkHttpClient(); + + RequestBody requestBody = new MultipartBody.Builder() + .setType(MultipartBody.FORM) + .addFormDataPart("file", "file.ext", + RequestBody.create(MediaType.parse("image/png"), new File("src/test/resources/test.in"))) + .build(); + + Request request = new Request.Builder() + .url(BASE_URL + "/users/upload") + .post(requestBody) + .build(); + + Call call = client.newCall(request); + Response response = call.execute(); + + assertThat(response.code(), equalTo(200)); + } + + @Test + public void whenGetUploadFileProgressUsingOkHttp_thenCorrect() throws IOException { + + OkHttpClient client = new OkHttpClient(); + + RequestBody requestBody = new MultipartBody.Builder() + .setType(MultipartBody.FORM) + .addFormDataPart("file", "file.ext", + RequestBody.create(MediaType.parse("image/png"), new File("src/test/resources/test.in"))) + .build(); + + + ProgressRequestWrapper.ProgressListener listener = new ProgressRequestWrapper.ProgressListener() { + + public void onRequestProgress(long bytesWritten, long contentLength) { + + float percentage = 100f * bytesWritten / contentLength; + assertFalse(Float.compare(percentage, 100) > 0); + } + }; + + ProgressRequestWrapper countingBody = new ProgressRequestWrapper(requestBody, listener); + + Request request = new Request.Builder() + .url(BASE_URL + "/users/upload") + .post(countingBody) + .build(); + + Call call = client.newCall(request); + Response response = call.execute(); + + assertThat(response.code(), equalTo(200)); + + } +} diff --git a/okhttp/src/test/java/org/baeldung/okhttp/OkHttpRedirectTest.java b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpRedirectTest.java new file mode 100644 index 0000000000..1582a5ff7f --- /dev/null +++ b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpRedirectTest.java @@ -0,0 +1,33 @@ +package org.baeldung.okhttp; + +import static org.hamcrest.Matchers.equalTo; +import static org.junit.Assert.assertThat; + +import java.io.IOException; + +import org.junit.Test; + +import okhttp3.Call; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; + +public class OkHttpRedirectTest { + + @Test + public void whenSetFollowRedirectsUsingOkHttp_thenNotRedirected() throws IOException { + + OkHttpClient client = new OkHttpClient().newBuilder() + .followRedirects(false) + .build(); + + Request request = new Request.Builder() + .url("http://t.co/I5YYd9tddw") + .build(); + + Call call = client.newCall(request); + Response response = call.execute(); + + assertThat(response.code(), equalTo(301)); + } +} diff --git a/okhttp/src/test/resources/test.in b/okhttp/src/test/resources/test.in new file mode 100644 index 0000000000..95d09f2b10 --- /dev/null +++ b/okhttp/src/test/resources/test.in @@ -0,0 +1 @@ +hello world \ No newline at end of file From 52911fede4c93f1ae7ab2f561778df335149712c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Mon, 26 Sep 2016 14:01:52 +0200 Subject: [PATCH 146/265] Remove module and try-catch (#701) * Add new module for mocks comparison. * Add sources for testing. * Changes on testCase. * Enter some tests for mockito. * More tests for Mockito. * Even more tests. * Add the rest of the mocking libraries. * Javadoc on test. * Test bare bones for EasyMock. * Fist kind of test and setup. * Add tests using EasyMock with a change on LoginService. * Create LoginControllerTest.java * Test setup * [JMockit] No method called test. * [JMockit] Two methods called test. * [JMockit] One method called test. * [JMockit] Exception mock test * [JMockit] Mocked object to pass around test. * [JMockit] Custom matcher test. * [JMockit] Partial mocking test. * [JMockit] Fix with IDE. * Not stubs. Mocks. MOCKS!!! * Remove unnecesary import. * Use correct encoding. Was having problems with buildings. * Remove failing module. * Create new module mocks and move mock-comparisons there. * Add jmockit module. * Add model class. * Add collaborator class. * Add performer class. * Add performer test. * Fix * Add interface for tests. * Test for any. * Test for with. * Test for null. * Test for times. * Test for arg that. * Test for result and returns. * Test for delegate. * Add verifications to any tests. * Add verifications to with test. * Add verification examples to methods using null. * Add verifications to methods using times. * Formatting. * Compress tests and fix one test. * Adding new article to readme. * [BAEL-178] Add collaborator for advanced article. * [BAEL-178] Add link to readme. * [BAEL-178] Add test for mockUp. * [BAEL-178] Add test for invoke method. * [BAEL-178] Add constructors and tests for mockup for constructors. * [BAEL-178] Add private fields and more test for deencapsulation. * [BAEL-178] Add inner class and test for instantiating inner classes. * [BAEL-178] Multimocks. * [BAEL-178] Add test for expectation reusing. * [BAEL-178] Move test class to tests folders. * Add postgresql dependency. * Add test and config with properties. * [BAEL-114] Add new project for JPA with JNDI. * [BAEL-114] Config without xml. * [BAEL-114] Bring part of Foo, FooServie and FooDao. * [BAEL-114] Show all foos. * [BAEL-114] Readme. * [BAEL-114] Undo changes on main jpa project. * [BAEL-114] Remove unnecesary dependencies. * [BAEL-114] Add tomcat config. * [BAEL-114] Fixes. * Add tests for Optional streams. * Add Java 9 version of the test. * Rename and move to new core-java-9 module. * Move contents from spring-jpa-jndi to spring-jpa and make necessary changes. * Do not use try-catch on configuration. --- spring-jpa-jndi/.gitignore | 13 -- spring-jpa-jndi/README.md | 7 - spring-jpa-jndi/pom.xml | 145 ------------------ .../org/baeldung/persistence/dao/FooDao.java | 22 --- .../org/baeldung/persistence/model/Foo.java | 34 ---- .../persistence/service/FooService.java | 22 --- .../src/main/resources/logback.xml | 20 --- spring-jpa/pom.xml | 33 ++++ .../config/PersistenceJNDIConfig.java | 10 +- .../org/baeldung/config/SpringWebConfig.java | 0 .../org/baeldung/config/WebInitializer.java | 0 .../java/org/baeldung/web/MainController.java | 0 .../src/main/resources/context.xml | 0 .../resources/persistence-jndi.properties | 0 .../src/main/resources/server.xml | 0 .../main/webapp/WEB-INF/views/jsp/index.jsp | 0 16 files changed, 36 insertions(+), 270 deletions(-) delete mode 100644 spring-jpa-jndi/.gitignore delete mode 100644 spring-jpa-jndi/README.md delete mode 100644 spring-jpa-jndi/pom.xml delete mode 100644 spring-jpa-jndi/src/main/java/org/baeldung/persistence/dao/FooDao.java delete mode 100644 spring-jpa-jndi/src/main/java/org/baeldung/persistence/model/Foo.java delete mode 100644 spring-jpa-jndi/src/main/java/org/baeldung/persistence/service/FooService.java delete mode 100644 spring-jpa-jndi/src/main/resources/logback.xml rename {spring-jpa-jndi => spring-jpa}/src/main/java/org/baeldung/config/PersistenceJNDIConfig.java (90%) rename {spring-jpa-jndi => spring-jpa}/src/main/java/org/baeldung/config/SpringWebConfig.java (100%) rename {spring-jpa-jndi => spring-jpa}/src/main/java/org/baeldung/config/WebInitializer.java (100%) rename {spring-jpa-jndi => spring-jpa}/src/main/java/org/baeldung/web/MainController.java (100%) rename {spring-jpa-jndi => spring-jpa}/src/main/resources/context.xml (100%) rename {spring-jpa-jndi => spring-jpa}/src/main/resources/persistence-jndi.properties (100%) rename {spring-jpa-jndi => spring-jpa}/src/main/resources/server.xml (100%) rename {spring-jpa-jndi => spring-jpa}/src/main/webapp/WEB-INF/views/jsp/index.jsp (100%) diff --git a/spring-jpa-jndi/.gitignore b/spring-jpa-jndi/.gitignore deleted file mode 100644 index 83c05e60c8..0000000000 --- a/spring-jpa-jndi/.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -*.class - -#folders# -/target -/neoDb* -/data -/src/main/webapp/WEB-INF/classes -*/META-INF/* - -# Packaged files # -*.jar -*.war -*.ear \ No newline at end of file diff --git a/spring-jpa-jndi/README.md b/spring-jpa-jndi/README.md deleted file mode 100644 index 6a99253545..0000000000 --- a/spring-jpa-jndi/README.md +++ /dev/null @@ -1,7 +0,0 @@ -========= - -## Spring JPA using JNDI Project - - -### Relevant Articles: -- [Spring Persistence (Hibernate and JPA) with a JNDI datasource](http://www.baeldung.com/spring-jpa-fndi) \ No newline at end of file diff --git a/spring-jpa-jndi/pom.xml b/spring-jpa-jndi/pom.xml deleted file mode 100644 index f7042f2384..0000000000 --- a/spring-jpa-jndi/pom.xml +++ /dev/null @@ -1,145 +0,0 @@ - - 4.0.0 - - com.baeldung - spring-jpa-jndi - 0.1-SNAPSHOT - war - - spring-jpa-jndi - - - - - - - org.springframework - spring-orm - ${org.springframework.version} - - - org.springframework - spring-context - ${org.springframework.version} - - - org.springframework - spring-webmvc - ${org.springframework.version} - - - - - javax.servlet - jstl - ${javax.servlet.jstl.version} - - - javax.servlet - servlet-api - ${javax.servlet.servlet-api.version} - - - - - - org.hibernate - hibernate-entitymanager - ${hibernate.version} - - - xml-apis - xml-apis - 1.4.01 - - - org.javassist - javassist - ${javassist.version} - - - org.springframework.data - spring-data-jpa - ${spring-data-jpa.version} - - - - - - org.hibernate - hibernate-validator - ${hibernate-validator.version} - - - javax.el - javax.el-api - 2.2.5 - - - - - - spring-jpa-jndi - - - src/main/resources - true - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - ${maven-compiler-plugin.version} - - 1.8 - 1.8 - - - - - org.apache.maven.plugins - maven-war-plugin - ${maven-war-plugin.version} - - src/main/webapp - false - - - - - - - - - - 4.3.2.RELEASE - 3.20.0-GA - - - 1.2 - 2.5 - - - 4.3.11.Final - 1.8.2.RELEASE - 1.4.192 - - - 1.7.13 - 1.1.3 - - - 5.2.2.Final - - - 3.5.1 - 2.7 - 2.4 - - - - - \ No newline at end of file diff --git a/spring-jpa-jndi/src/main/java/org/baeldung/persistence/dao/FooDao.java b/spring-jpa-jndi/src/main/java/org/baeldung/persistence/dao/FooDao.java deleted file mode 100644 index 0133a36a14..0000000000 --- a/spring-jpa-jndi/src/main/java/org/baeldung/persistence/dao/FooDao.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.baeldung.persistence.dao; - -import java.util.List; - -import javax.persistence.EntityManager; -import javax.persistence.PersistenceContext; - -import org.baeldung.persistence.model.Foo; -import org.springframework.stereotype.Repository; - -@Repository -public class FooDao { - - @PersistenceContext - private EntityManager entityManager; - - @SuppressWarnings("unchecked") - public List findAll() { - return entityManager.createQuery("from " + Foo.class.getName()).getResultList(); - } - -} diff --git a/spring-jpa-jndi/src/main/java/org/baeldung/persistence/model/Foo.java b/spring-jpa-jndi/src/main/java/org/baeldung/persistence/model/Foo.java deleted file mode 100644 index d351fc54b8..0000000000 --- a/spring-jpa-jndi/src/main/java/org/baeldung/persistence/model/Foo.java +++ /dev/null @@ -1,34 +0,0 @@ -package org.baeldung.persistence.model; - -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; - -@Entity -public class Foo { - - @Id - @GeneratedValue(strategy = GenerationType.AUTO) - @Column(name = "ID") - private long id; - @Column(name = "NAME") - private String name; - - public long getId() { - return id; - } - - public void setId(final int id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(final String name) { - this.name = name; - } -} diff --git a/spring-jpa-jndi/src/main/java/org/baeldung/persistence/service/FooService.java b/spring-jpa-jndi/src/main/java/org/baeldung/persistence/service/FooService.java deleted file mode 100644 index a3109f5042..0000000000 --- a/spring-jpa-jndi/src/main/java/org/baeldung/persistence/service/FooService.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.baeldung.persistence.service; - -import java.util.List; - -import org.baeldung.persistence.dao.FooDao; -import org.baeldung.persistence.model.Foo; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -@Service -@Transactional -public class FooService { - - @Autowired - private FooDao dao; - - public List findAll() { - return dao.findAll(); - } - -} diff --git a/spring-jpa-jndi/src/main/resources/logback.xml b/spring-jpa-jndi/src/main/resources/logback.xml deleted file mode 100644 index 1146dade63..0000000000 --- a/spring-jpa-jndi/src/main/resources/logback.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - web - %date [%thread] %-5level %logger{36} - %message%n - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/spring-jpa/pom.xml b/spring-jpa/pom.xml index 5acdae7765..ebb9c5bc83 100644 --- a/spring-jpa/pom.xml +++ b/spring-jpa/pom.xml @@ -4,6 +4,7 @@ com.baeldung spring-jpa 0.1-SNAPSHOT + war spring-jpa @@ -21,6 +22,11 @@ spring-context ${org.springframework.version} + + org.springframework + spring-webmvc + ${org.springframework.version} + @@ -73,6 +79,18 @@ javax.el-api 2.2.5 + + + + javax.servlet + jstl + ${javax.servlet.jstl.version} + + + javax.servlet + servlet-api + ${javax.servlet.servlet-api.version} + @@ -147,6 +165,16 @@ 1.8 + + + org.apache.maven.plugins + maven-war-plugin + ${maven-war-plugin.version} + + src/main/webapp + false + + org.apache.maven.plugins @@ -197,6 +225,10 @@ 5.1.38 1.10.2.RELEASE 1.4.192 + + + 1.2 + 2.5 1.7.13 @@ -224,6 +256,7 @@ 2.19.1 2.7 1.4.18 + 2.4 diff --git a/spring-jpa-jndi/src/main/java/org/baeldung/config/PersistenceJNDIConfig.java b/spring-jpa/src/main/java/org/baeldung/config/PersistenceJNDIConfig.java similarity index 90% rename from spring-jpa-jndi/src/main/java/org/baeldung/config/PersistenceJNDIConfig.java rename to spring-jpa/src/main/java/org/baeldung/config/PersistenceJNDIConfig.java index 7ea731d9d4..7f28c958f1 100644 --- a/spring-jpa-jndi/src/main/java/org/baeldung/config/PersistenceJNDIConfig.java +++ b/spring-jpa/src/main/java/org/baeldung/config/PersistenceJNDIConfig.java @@ -36,7 +36,7 @@ public class PersistenceJNDIConfig { } @Bean - public LocalContainerEntityManagerFactoryBean entityManagerFactory() { + public LocalContainerEntityManagerFactoryBean entityManagerFactory() throws NamingException { final LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean(); em.setDataSource(dataSource()); em.setPackagesToScan(new String[] { "org.baeldung.persistence.model" }); @@ -46,12 +46,8 @@ public class PersistenceJNDIConfig { } @Bean - public DataSource dataSource() { - try { - return (DataSource) new JndiTemplate().lookup(env.getProperty("jdbc.url")); - } catch (NamingException e) { - throw new IllegalArgumentException("Error looking up JNDI datasource", e); - } + public DataSource dataSource() throws NamingException { + return (DataSource) new JndiTemplate().lookup(env.getProperty("jdbc.url")); } @Bean diff --git a/spring-jpa-jndi/src/main/java/org/baeldung/config/SpringWebConfig.java b/spring-jpa/src/main/java/org/baeldung/config/SpringWebConfig.java similarity index 100% rename from spring-jpa-jndi/src/main/java/org/baeldung/config/SpringWebConfig.java rename to spring-jpa/src/main/java/org/baeldung/config/SpringWebConfig.java diff --git a/spring-jpa-jndi/src/main/java/org/baeldung/config/WebInitializer.java b/spring-jpa/src/main/java/org/baeldung/config/WebInitializer.java similarity index 100% rename from spring-jpa-jndi/src/main/java/org/baeldung/config/WebInitializer.java rename to spring-jpa/src/main/java/org/baeldung/config/WebInitializer.java diff --git a/spring-jpa-jndi/src/main/java/org/baeldung/web/MainController.java b/spring-jpa/src/main/java/org/baeldung/web/MainController.java similarity index 100% rename from spring-jpa-jndi/src/main/java/org/baeldung/web/MainController.java rename to spring-jpa/src/main/java/org/baeldung/web/MainController.java diff --git a/spring-jpa-jndi/src/main/resources/context.xml b/spring-jpa/src/main/resources/context.xml similarity index 100% rename from spring-jpa-jndi/src/main/resources/context.xml rename to spring-jpa/src/main/resources/context.xml diff --git a/spring-jpa-jndi/src/main/resources/persistence-jndi.properties b/spring-jpa/src/main/resources/persistence-jndi.properties similarity index 100% rename from spring-jpa-jndi/src/main/resources/persistence-jndi.properties rename to spring-jpa/src/main/resources/persistence-jndi.properties diff --git a/spring-jpa-jndi/src/main/resources/server.xml b/spring-jpa/src/main/resources/server.xml similarity index 100% rename from spring-jpa-jndi/src/main/resources/server.xml rename to spring-jpa/src/main/resources/server.xml diff --git a/spring-jpa-jndi/src/main/webapp/WEB-INF/views/jsp/index.jsp b/spring-jpa/src/main/webapp/WEB-INF/views/jsp/index.jsp similarity index 100% rename from spring-jpa-jndi/src/main/webapp/WEB-INF/views/jsp/index.jsp rename to spring-jpa/src/main/webapp/WEB-INF/views/jsp/index.jsp From b576a4da400e98607648325c404800391cd23991 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Mon, 26 Sep 2016 14:50:24 +0200 Subject: [PATCH 147/265] Fixed pom.xml --- pom.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/pom.xml b/pom.xml index 8115c1e902..33162777b7 100644 --- a/pom.xml +++ b/pom.xml @@ -91,7 +91,6 @@ spring-hibernate3 spring-hibernate4 spring-jpa - spring-jpa-jndi spring-katharsis spring-mockito spring-mvc-java From c774468720f6b849e26c0d9e2de6d81fee4c710a Mon Sep 17 00:00:00 2001 From: Slavisa Baeldung Date: Mon, 26 Sep 2016 17:17:07 +0200 Subject: [PATCH 148/265] NOJIRA - adding some glue text to README --- spring-cloud/README.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/spring-cloud/README.md b/spring-cloud/README.md index 86f67cf26e..3e8cd21b82 100644 --- a/spring-cloud/README.md +++ b/spring-cloud/README.md @@ -1,8 +1,18 @@ ## The Module Holds Sources for the Following Articles - [Quick Intro to Spring Cloud Configuration](http://www.baeldung.com/spring-cloud-configuration) -- [Dockerizing a Spring Boot Application](http://www.baeldung.com/dockerizing-spring-boot-application) + + Spring Cloud Config is Spring’s client/server approach for storing and serving distributed configurations across multiple applications and environments. + + In this write-up, we’ll focus on an example of how to setup a Git-backed config server, use it in a simple REST application server and setup a secure environment including encrypted property values. + - [Introduction to Spring Cloud Netflix – Eureka](http://www.baeldung.com/spring-cloud-netflix-eureka) + + In this article, we’ll introduce client-side service discovery via “Spring Cloud Netflix Eureka“. + + Client-side service discovery allows services to find and communicate with each other without hardcoding hostname and port. The only ‘fixed point’ in such an architecture consists of a service registry with which each service has to register. + - [Intro to Spring Cloud Netflix - Hystrix](http://www.baeldung.com/spring-cloud-netflix-hystrix) +- [Dockerizing a Spring Boot Application](http://www.baeldung.com/dockerizing-spring-boot-application) From d9f89bdad3b572d7e8c82aa93bdef96d95f3017e Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Mon, 26 Sep 2016 20:55:17 -0400 Subject: [PATCH 149/265] removed extra files --- .../org.eclipse.wst.common.project.facet.core.xml | 8 -------- spring-jpa/.springBeans | 15 --------------- 2 files changed, 23 deletions(-) delete mode 100644 spring-jpa/.settings/org.eclipse.wst.common.project.facet.core.xml delete mode 100644 spring-jpa/.springBeans diff --git a/spring-jpa/.settings/org.eclipse.wst.common.project.facet.core.xml b/spring-jpa/.settings/org.eclipse.wst.common.project.facet.core.xml deleted file mode 100644 index 24342c1b93..0000000000 --- a/spring-jpa/.settings/org.eclipse.wst.common.project.facet.core.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/spring-jpa/.springBeans b/spring-jpa/.springBeans deleted file mode 100644 index ff32b84d3b..0000000000 --- a/spring-jpa/.springBeans +++ /dev/null @@ -1,15 +0,0 @@ - - - 1 - - - - - - - - - - - - From 7aaae1d1433995ffd5a25a5d24d817a1bc072737 Mon Sep 17 00:00:00 2001 From: Nancy Bosecker Date: Mon, 26 Sep 2016 22:40:46 -0700 Subject: [PATCH 150/265] Moved project to core-java from eclipse folder (#703) --- .../equalshashcode/entities/ComplexClass.java | 65 +++++++++++++++++++ .../entities/PrimitiveClass.java | 0 .../equalshashcode/entities/Rectangle.java | 2 - .../equalshashcode/entities/Shape.java | 0 .../equalshashcode/entities/Square.java | 0 .../entities/ComplexClassTest.java | 5 +- .../entities/PrimitiveClassTest.java | 5 +- .../entities/SquareClassTest.java | 5 +- .../equalshashcode/entities/ComplexClass.java | 63 ------------------ 9 files changed, 71 insertions(+), 74 deletions(-) create mode 100644 core-java/src/main/java/org/baeldung/equalshashcode/entities/ComplexClass.java rename {eclipse => core-java}/src/main/java/org/baeldung/equalshashcode/entities/PrimitiveClass.java (100%) rename {eclipse => core-java}/src/main/java/org/baeldung/equalshashcode/entities/Rectangle.java (96%) rename {eclipse => core-java}/src/main/java/org/baeldung/equalshashcode/entities/Shape.java (100%) rename {eclipse => core-java}/src/main/java/org/baeldung/equalshashcode/entities/Square.java (100%) rename {eclipse => core-java}/src/test/java/org/baeldung/equalshashcode/entities/ComplexClassTest.java (90%) rename {eclipse => core-java}/src/test/java/org/baeldung/equalshashcode/entities/PrimitiveClassTest.java (84%) rename {eclipse => core-java}/src/test/java/org/baeldung/equalshashcode/entities/SquareClassTest.java (84%) delete mode 100644 eclipse/src/main/java/org/baeldung/equalshashcode/entities/ComplexClass.java diff --git a/core-java/src/main/java/org/baeldung/equalshashcode/entities/ComplexClass.java b/core-java/src/main/java/org/baeldung/equalshashcode/entities/ComplexClass.java new file mode 100644 index 0000000000..d4a6a0f42e --- /dev/null +++ b/core-java/src/main/java/org/baeldung/equalshashcode/entities/ComplexClass.java @@ -0,0 +1,65 @@ +package org.baeldung.equalshashcode.entities; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +public class ComplexClass { + + private List genericList; + private Set integerSet; + + public ComplexClass(ArrayList genericArrayList, HashSet integerHashSet) { + super(); + this.genericList = genericArrayList; + this.integerSet = integerHashSet; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((genericList == null) ? 0 : genericList.hashCode()); + result = prime * result + ((integerSet == null) ? 0 : integerSet.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (!(obj instanceof ComplexClass)) + return false; + ComplexClass other = (ComplexClass) obj; + if (genericList == null) { + if (other.genericList != null) + return false; + } else if (!genericList.equals(other.genericList)) + return false; + if (integerSet == null) { + if (other.integerSet != null) + return false; + } else if (!integerSet.equals(other.integerSet)) + return false; + return true; + } + + protected List getGenericList() { + return genericList; + } + + protected void setGenericArrayList(List genericList) { + this.genericList = genericList; + } + + protected Set getIntegerSet() { + return integerSet; + } + + protected void setIntegerSet(Set integerSet) { + this.integerSet = integerSet; + } +} diff --git a/eclipse/src/main/java/org/baeldung/equalshashcode/entities/PrimitiveClass.java b/core-java/src/main/java/org/baeldung/equalshashcode/entities/PrimitiveClass.java similarity index 100% rename from eclipse/src/main/java/org/baeldung/equalshashcode/entities/PrimitiveClass.java rename to core-java/src/main/java/org/baeldung/equalshashcode/entities/PrimitiveClass.java diff --git a/eclipse/src/main/java/org/baeldung/equalshashcode/entities/Rectangle.java b/core-java/src/main/java/org/baeldung/equalshashcode/entities/Rectangle.java similarity index 96% rename from eclipse/src/main/java/org/baeldung/equalshashcode/entities/Rectangle.java rename to core-java/src/main/java/org/baeldung/equalshashcode/entities/Rectangle.java index 315ef41a12..1e1423f0b3 100644 --- a/eclipse/src/main/java/org/baeldung/equalshashcode/entities/Rectangle.java +++ b/core-java/src/main/java/org/baeldung/equalshashcode/entities/Rectangle.java @@ -11,13 +11,11 @@ public class Rectangle extends Shape { @Override public double area() { - // A = w * l return width * length; } @Override public double perimeter() { - // P = 2(w + l) return 2 * (width + length); } diff --git a/eclipse/src/main/java/org/baeldung/equalshashcode/entities/Shape.java b/core-java/src/main/java/org/baeldung/equalshashcode/entities/Shape.java similarity index 100% rename from eclipse/src/main/java/org/baeldung/equalshashcode/entities/Shape.java rename to core-java/src/main/java/org/baeldung/equalshashcode/entities/Shape.java diff --git a/eclipse/src/main/java/org/baeldung/equalshashcode/entities/Square.java b/core-java/src/main/java/org/baeldung/equalshashcode/entities/Square.java similarity index 100% rename from eclipse/src/main/java/org/baeldung/equalshashcode/entities/Square.java rename to core-java/src/main/java/org/baeldung/equalshashcode/entities/Square.java diff --git a/eclipse/src/test/java/org/baeldung/equalshashcode/entities/ComplexClassTest.java b/core-java/src/test/java/org/baeldung/equalshashcode/entities/ComplexClassTest.java similarity index 90% rename from eclipse/src/test/java/org/baeldung/equalshashcode/entities/ComplexClassTest.java rename to core-java/src/test/java/org/baeldung/equalshashcode/entities/ComplexClassTest.java index 09123e988b..75d96e5989 100644 --- a/eclipse/src/test/java/org/baeldung/equalshashcode/entities/ComplexClassTest.java +++ b/core-java/src/test/java/org/baeldung/equalshashcode/entities/ComplexClassTest.java @@ -22,11 +22,10 @@ public class ComplexClassTest { strArrayListD.add("pqr"); ComplexClass dObject = new ComplexClass(strArrayListD, new HashSet(45, 67)); - // equals() Assert.assertTrue(aObject.equals(bObject) && bObject.equals(aObject)); - // hashCode() + Assert.assertTrue(aObject.hashCode() == bObject.hashCode()); - // non-equal objects are not equals() and have different hashCode() + Assert.assertFalse(aObject.equals(dObject)); Assert.assertFalse(aObject.hashCode() == dObject.hashCode()); } diff --git a/eclipse/src/test/java/org/baeldung/equalshashcode/entities/PrimitiveClassTest.java b/core-java/src/test/java/org/baeldung/equalshashcode/entities/PrimitiveClassTest.java similarity index 84% rename from eclipse/src/test/java/org/baeldung/equalshashcode/entities/PrimitiveClassTest.java rename to core-java/src/test/java/org/baeldung/equalshashcode/entities/PrimitiveClassTest.java index feb04d65ff..16f25ae021 100644 --- a/eclipse/src/test/java/org/baeldung/equalshashcode/entities/PrimitiveClassTest.java +++ b/core-java/src/test/java/org/baeldung/equalshashcode/entities/PrimitiveClassTest.java @@ -12,11 +12,10 @@ public class PrimitiveClassTest { PrimitiveClass bObject = new PrimitiveClass(false, 2); PrimitiveClass dObject = new PrimitiveClass(true, 2); - // equals() Assert.assertTrue(aObject.equals(bObject) && bObject.equals(aObject)); - // hashCode() + Assert.assertTrue(aObject.hashCode() == bObject.hashCode()); - // non-equal objects are not equals() and have different hashCode() + Assert.assertFalse(aObject.equals(dObject)); Assert.assertFalse(aObject.hashCode() == dObject.hashCode()); } diff --git a/eclipse/src/test/java/org/baeldung/equalshashcode/entities/SquareClassTest.java b/core-java/src/test/java/org/baeldung/equalshashcode/entities/SquareClassTest.java similarity index 84% rename from eclipse/src/test/java/org/baeldung/equalshashcode/entities/SquareClassTest.java rename to core-java/src/test/java/org/baeldung/equalshashcode/entities/SquareClassTest.java index 53ca199405..52d024a696 100644 --- a/eclipse/src/test/java/org/baeldung/equalshashcode/entities/SquareClassTest.java +++ b/core-java/src/test/java/org/baeldung/equalshashcode/entities/SquareClassTest.java @@ -15,11 +15,10 @@ public class SquareClassTest { Square dObject = new Square(20, Color.BLUE); - // equals() Assert.assertTrue(aObject.equals(bObject) && bObject.equals(aObject)); - // hashCode() + Assert.assertTrue(aObject.hashCode() == bObject.hashCode()); - // non-equal objects are not equals() and have different hashCode() + Assert.assertFalse(aObject.equals(dObject)); Assert.assertFalse(aObject.hashCode() == dObject.hashCode()); } diff --git a/eclipse/src/main/java/org/baeldung/equalshashcode/entities/ComplexClass.java b/eclipse/src/main/java/org/baeldung/equalshashcode/entities/ComplexClass.java deleted file mode 100644 index 3f7723facd..0000000000 --- a/eclipse/src/main/java/org/baeldung/equalshashcode/entities/ComplexClass.java +++ /dev/null @@ -1,63 +0,0 @@ -package org.baeldung.equalshashcode.entities; - -import java.util.ArrayList; -import java.util.HashSet; - -public class ComplexClass { - - private ArrayList genericArrayList; - private HashSet integerHashSet; - - public ComplexClass(ArrayList genericArrayList, HashSet integerHashSet) { - super(); - this.genericArrayList = genericArrayList; - this.integerHashSet = integerHashSet; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((genericArrayList == null) ? 0 : genericArrayList.hashCode()); - result = prime * result + ((integerHashSet == null) ? 0 : integerHashSet.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (!(obj instanceof ComplexClass)) - return false; - ComplexClass other = (ComplexClass) obj; - if (genericArrayList == null) { - if (other.genericArrayList != null) - return false; - } else if (!genericArrayList.equals(other.genericArrayList)) - return false; - if (integerHashSet == null) { - if (other.integerHashSet != null) - return false; - } else if (!integerHashSet.equals(other.integerHashSet)) - return false; - return true; - } - - protected ArrayList getGenericArrayList() { - return genericArrayList; - } - - protected void setGenericArrayList(ArrayList genericArrayList) { - this.genericArrayList = genericArrayList; - } - - protected HashSet getIntegerHashSet() { - return integerHashSet; - } - - protected void setIntegerHashSet(HashSet integerHashSet) { - this.integerHashSet = integerHashSet; - } -} From e1d32226f370c190ce2ef3b379373a2cb79d8535 Mon Sep 17 00:00:00 2001 From: Catalin Date: Tue, 27 Sep 2016 12:24:47 +0300 Subject: [PATCH 151/265] Updated broken link --- spring-data-neo4j/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-data-neo4j/README.md b/spring-data-neo4j/README.md index e62c69f8b9..0f13d9dbc9 100644 --- a/spring-data-neo4j/README.md +++ b/spring-data-neo4j/README.md @@ -1,7 +1,7 @@ ## Spring Data Neo4j ### Relevant Articles: -- [Introduction to Spring Data Neo4j](http://www.baeldung.com/spring-data-neo4j-tutorial) +- [Introduction to Spring Data Neo4j](http://www.baeldung.com/spring-data-neo4j-intro) ### Build the Project with Tests Running ``` From 719d4e5aa1e1830c8d7403bdf64721ce376ac485 Mon Sep 17 00:00:00 2001 From: sanketmeghani Date: Tue, 27 Sep 2016 22:13:11 +0530 Subject: [PATCH 152/265] Converting date/time retrieval methods to JUnits --- .../com/baeldung/util/GetCurrentDate.java | 20 -------- .../com/baeldung/util/GetCurrentTime.java | 20 -------- .../baeldung/util/GetCurrentTimestamp.java | 14 ------ .../baeldung/util/CurrentDateTimeTest.java | 47 +++++++++++++++++++ 4 files changed, 47 insertions(+), 54 deletions(-) delete mode 100644 core-java-8/src/main/java/com/baeldung/util/GetCurrentDate.java delete mode 100644 core-java-8/src/main/java/com/baeldung/util/GetCurrentTime.java delete mode 100644 core-java-8/src/main/java/com/baeldung/util/GetCurrentTimestamp.java create mode 100644 core-java-8/src/test/java/com/baeldung/util/CurrentDateTimeTest.java diff --git a/core-java-8/src/main/java/com/baeldung/util/GetCurrentDate.java b/core-java-8/src/main/java/com/baeldung/util/GetCurrentDate.java deleted file mode 100644 index 7bbf8b48bb..0000000000 --- a/core-java-8/src/main/java/com/baeldung/util/GetCurrentDate.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.baeldung.util; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.ZoneId; - -public class GetCurrentDate { - - public static void main(String args[]) { - - LocalDate localDate = LocalDate.now(); - System.out.println("Today's date is: " + localDate); - - localDate = LocalDate.now(ZoneId.of("GMT+02:30")); - System.out.println("Current date in GMT +02:30 timezone: " + localDate); - - LocalDateTime localDateTime = LocalDateTime.now(); - System.out.println("Today's date is: " + localDateTime.toLocalDate()); - } -} diff --git a/core-java-8/src/main/java/com/baeldung/util/GetCurrentTime.java b/core-java-8/src/main/java/com/baeldung/util/GetCurrentTime.java deleted file mode 100644 index 39934c94bf..0000000000 --- a/core-java-8/src/main/java/com/baeldung/util/GetCurrentTime.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.baeldung.util; - -import java.time.LocalDateTime; -import java.time.LocalTime; -import java.time.ZoneId; - -public class GetCurrentTime { - - public static void main(String args[]) { - - LocalTime localTime = LocalTime.now(); - System.out.println("Current time is: " + localTime); - - localTime = LocalTime.now(ZoneId.of("GMT+02:30")); - System.out.println("Current time in GMT +02:30 timezone: " + localTime); - - LocalDateTime localDateTime = LocalDateTime.now(); - System.out.println("Current time is: " + localDateTime.toLocalTime()); - } -} diff --git a/core-java-8/src/main/java/com/baeldung/util/GetCurrentTimestamp.java b/core-java-8/src/main/java/com/baeldung/util/GetCurrentTimestamp.java deleted file mode 100644 index 2387a721cf..0000000000 --- a/core-java-8/src/main/java/com/baeldung/util/GetCurrentTimestamp.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.baeldung.util; - -import java.time.Instant; - -public class GetCurrentTimestamp { - - public static void main(String args[]) { - - Instant instant = Instant.now(); - System.out.println("Current timestamp is: " + instant.toEpochMilli()); - - System.out.println("Number of seconds: " + instant.getEpochSecond()); - } -} diff --git a/core-java-8/src/test/java/com/baeldung/util/CurrentDateTimeTest.java b/core-java-8/src/test/java/com/baeldung/util/CurrentDateTimeTest.java new file mode 100644 index 0000000000..06d9394a5e --- /dev/null +++ b/core-java-8/src/test/java/com/baeldung/util/CurrentDateTimeTest.java @@ -0,0 +1,47 @@ +package com.baeldung.util; + +import static org.junit.Assert.assertEquals; + +import java.time.Instant; +import java.time.LocalDate; +import java.time.LocalTime; +import java.time.temporal.ChronoField; +import java.util.Calendar; +import java.util.GregorianCalendar; + +import org.junit.Test; + +public class CurrentDateTimeTest { + + @Test + public void shouldReturnCurrentDate() { + + final LocalDate now = LocalDate.now(); + final Calendar calendar = GregorianCalendar.getInstance(); + + assertEquals("10-10-2010".length(), now.toString().length()); + assertEquals(calendar.get(Calendar.DATE), now.get(ChronoField.DAY_OF_MONTH)); + assertEquals(calendar.get(Calendar.MONTH), now.get(ChronoField.MONTH_OF_YEAR) - 1); + assertEquals(calendar.get(Calendar.YEAR), now.get(ChronoField.YEAR)); + } + + @Test + public void shouldReturnCurrentTime() { + + final LocalTime now = LocalTime.now(); + final Calendar calendar = GregorianCalendar.getInstance(); + + assertEquals(calendar.get(Calendar.HOUR_OF_DAY), now.get(ChronoField.HOUR_OF_DAY)); + assertEquals(calendar.get(Calendar.MINUTE), now.get(ChronoField.MINUTE_OF_HOUR)); + assertEquals(calendar.get(Calendar.SECOND), now.get(ChronoField.SECOND_OF_MINUTE)); + } + + @Test + public void shouldReturnCurrentTimestamp() { + + final Instant now = Instant.now(); + final Calendar calendar = GregorianCalendar.getInstance(); + + assertEquals(calendar.getTimeInMillis() / 1000, now.getEpochSecond()); + } +} From a24db3ac1e4214c67ce85637aa24e8048cca54eb Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Tue, 27 Sep 2016 20:45:42 -0400 Subject: [PATCH 153/265] add test for custom user details service --- .../java/org/baeldung/user/dao/MyUserDAO.java | 6 ++ .../baeldung/user/service/MyUserService.java | 10 ++++ .../CustomUserDetailsServiceTest.java | 59 +++++++++++++++++++ 3 files changed, 75 insertions(+) create mode 100644 spring-userservice/src/test/java/org/baeldung/userservice/CustomUserDetailsServiceTest.java diff --git a/spring-userservice/src/main/java/org/baeldung/user/dao/MyUserDAO.java b/spring-userservice/src/main/java/org/baeldung/user/dao/MyUserDAO.java index 5741d19bf2..4cc9f61b4a 100644 --- a/spring-userservice/src/main/java/org/baeldung/user/dao/MyUserDAO.java +++ b/spring-userservice/src/main/java/org/baeldung/user/dao/MyUserDAO.java @@ -29,6 +29,12 @@ public class MyUserDAO { entityManager.persist(user); return user; } + + public void removeUserByUsername(String username) { + final Query query = entityManager.createQuery("delete from MyUser where username=:username"); + query.setParameter("username", username); + query.executeUpdate(); + } public EntityManager getEntityManager() { return entityManager; diff --git a/spring-userservice/src/main/java/org/baeldung/user/service/MyUserService.java b/spring-userservice/src/main/java/org/baeldung/user/service/MyUserService.java index f4705f3193..891d6863ce 100644 --- a/spring-userservice/src/main/java/org/baeldung/user/service/MyUserService.java +++ b/spring-userservice/src/main/java/org/baeldung/user/service/MyUserService.java @@ -1,5 +1,8 @@ package org.baeldung.user.service; +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; + import org.baeldung.persistence.model.MyUser; import org.baeldung.user.dao.MyUserDAO; import org.baeldung.web.MyUserDto; @@ -14,6 +17,9 @@ public class MyUserService { @Autowired private PasswordEncoder passwordEncoder; + + @PersistenceContext + private EntityManager entityManager; @Autowired MyUserDAO myUserDAO; @@ -33,6 +39,10 @@ public class MyUserService { final MyUser user = myUserDAO.findByUsername(username); return user; } + + public void removeUserByUsername(String username){ + myUserDAO.removeUserByUsername(username); + } private boolean usernameExists(final String username) { final MyUser user = myUserDAO.findByUsername(username); diff --git a/spring-userservice/src/test/java/org/baeldung/userservice/CustomUserDetailsServiceTest.java b/spring-userservice/src/test/java/org/baeldung/userservice/CustomUserDetailsServiceTest.java new file mode 100644 index 0000000000..29998b8fea --- /dev/null +++ b/spring-userservice/src/test/java/org/baeldung/userservice/CustomUserDetailsServiceTest.java @@ -0,0 +1,59 @@ +package org.baeldung.userservice; + +import org.baeldung.custom.config.MvcConfig; +import org.baeldung.custom.config.PersistenceDerbyJPAConfig; +import org.baeldung.custom.config.SecSecurityConfig; +import org.baeldung.user.service.MyUserService; +import org.baeldung.web.MyUserDto; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.SpringApplicationConfiguration; +import org.springframework.security.authentication.AuthenticationProvider; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.web.WebAppConfiguration; +import static org.junit.Assert.*; + +import java.util.logging.Level; +import java.util.logging.Logger; + +@RunWith(SpringJUnit4ClassRunner.class) +@SpringApplicationConfiguration(classes = { MvcConfig.class, PersistenceDerbyJPAConfig.class, SecSecurityConfig.class }) +@WebAppConfiguration +public class CustomUserDetailsServiceTest { + + private static final Logger LOG = Logger.getLogger("CustomUserDetailsServiceTest"); + + public static final String USERNAME = "user"; + public static final String PASSWORD = "pass"; + + @Autowired + MyUserService myUserService; + + @Autowired + AuthenticationProvider authenticationProvider; + + @Test + public void whenAuthenticateUser_thenRetrieveFromDb() { + try { + MyUserDto userDTO = new MyUserDto(); + userDTO.setUsername(USERNAME); + userDTO.setPassword(PASSWORD); + + myUserService.registerNewUserAccount(userDTO); + + UsernamePasswordAuthenticationToken auth = new UsernamePasswordAuthenticationToken(USERNAME, PASSWORD); + Authentication authentication = authenticationProvider.authenticate(auth); + + assertEquals(authentication.getName(), USERNAME); + + } catch (Exception exc) { + LOG.log(Level.SEVERE, "Error creating account"); + } finally { + myUserService.removeUserByUsername(USERNAME); + } + } + +} From 9226fdc110579861bb201b3ff77e92db9e5d27c1 Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Tue, 27 Sep 2016 20:48:05 -0400 Subject: [PATCH 154/265] remove unnecessary code --- .../main/java/org/baeldung/user/service/MyUserService.java | 6 ------ 1 file changed, 6 deletions(-) diff --git a/spring-userservice/src/main/java/org/baeldung/user/service/MyUserService.java b/spring-userservice/src/main/java/org/baeldung/user/service/MyUserService.java index 891d6863ce..1e05541998 100644 --- a/spring-userservice/src/main/java/org/baeldung/user/service/MyUserService.java +++ b/spring-userservice/src/main/java/org/baeldung/user/service/MyUserService.java @@ -1,8 +1,5 @@ package org.baeldung.user.service; -import javax.persistence.EntityManager; -import javax.persistence.PersistenceContext; - import org.baeldung.persistence.model.MyUser; import org.baeldung.user.dao.MyUserDAO; import org.baeldung.web.MyUserDto; @@ -17,9 +14,6 @@ public class MyUserService { @Autowired private PasswordEncoder passwordEncoder; - - @PersistenceContext - private EntityManager entityManager; @Autowired MyUserDAO myUserDAO; From 4db012d57ba6b0f0309100ac8662af7bcad7a773 Mon Sep 17 00:00:00 2001 From: Naoshadul Islam Date: Wed, 28 Sep 2016 09:51:08 +0600 Subject: [PATCH 155/265] Update README.md --- core-java-8/README.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/core-java-8/README.md b/core-java-8/README.md index e6bac2a4c9..c130e6bd41 100644 --- a/core-java-8/README.md +++ b/core-java-8/README.md @@ -11,4 +11,14 @@ - [Lambda Expressions and Functional Interfaces: Tips and Best Practices](http://www.baeldung.com/java-8-lambda-expressions-tips) - [The Double Colon Operator in Java 8](http://www.baeldung.com/java-8-double-colon-operator) - [Java 8 Streams Advanced](http://www.baeldung.com/java-8-streams) -- [Java 8 Collectors](http://www.baeldung.com/java-8-collectors) \ No newline at end of file +- [Java 8 Collectors](http://www.baeldung.com/java-8-collectors) +- [Convert String to int or Integer in Java](http://www.baeldung.com/java-convert-string-to-int-or-integer) +- [Convert char to String in Java](http://www.baeldung.com/java-convert-char-to-string) +- [Guide to Java 8’s Functional Interfaces](http://www.baeldung.com/java-8-functional-interfaces) +- [Guide To CompletableFuture](http://www.baeldung.com/java-completablefuture) +- [Introduction to Thread Pools in Java](http://www.baeldung.com/thread-pool-java-and-guava) +- [Guide to Java 8 Collectors](http://www.baeldung.com/java-8-collectors) +- [The Java 8 Stream API Tutorial](http://www.baeldung.com/java-8-streams) +- [New Features in Java 8](http://www.baeldung.com/java-8-new-features) +- [Introduction to Java 8 Streams](http://www.baeldung.com/java-8-streams-introduction) +- [Guide to the Fork/Join Framework in Java](http://www.baeldung.com/java-fork-join) From d1bd04d2dce4bbf8b67d0f3f0ab4b0ac62c2c85a Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Wed, 28 Sep 2016 16:22:31 +0200 Subject: [PATCH 156/265] Add example --- .../baeldung/java9/Java9OptionalsStreamTest.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/core-java-9/src/test/java/com/baeldung/java9/Java9OptionalsStreamTest.java b/core-java-9/src/test/java/com/baeldung/java9/Java9OptionalsStreamTest.java index 102ceda18f..b0684a94f8 100644 --- a/core-java-9/src/test/java/com/baeldung/java9/Java9OptionalsStreamTest.java +++ b/core-java-9/src/test/java/com/baeldung/java9/Java9OptionalsStreamTest.java @@ -42,6 +42,19 @@ public class Java9OptionalsStreamTest { assertEquals("bar", filteredList.get(1)); } + @Test + public void filterOutPresentOptionalsWithFlatMap2() { + assertEquals(4, listOfOptionals.size()); + + List filteredList = listOfOptionals.stream() + .flatMap(o -> o.map(Stream::of).orElseGet(Stream::empty)) + .collect(Collectors.toList()); + assertEquals(2, filteredList.size()); + + assertEquals("foo", filteredList.get(0)); + assertEquals("bar", filteredList.get(1)); + } + @Test public void filterOutPresentOptionalsWithJava9() { assertEquals(4, listOfOptionals.size()); From ea85fa99eea7bd0611022e5c85f06f360969daf1 Mon Sep 17 00:00:00 2001 From: Sergey Petunin Date: Wed, 28 Sep 2016 19:24:03 +0500 Subject: [PATCH 157/265] Added samples for annotation processing article. (#705) * Added annotation processing examples. Fixed core-java8 build on OS X * Moved projects to separate submodule --- annotations/annotation-processing/pom.xml | 50 +++++++ .../processor/BuilderProcessor.java | 132 ++++++++++++++++++ .../annotation/processor/BuilderProperty.java | 8 ++ annotations/annotation-user/pom.xml | 51 +++++++ .../java/com/baeldung/annotation/Person.java | 29 ++++ .../annotation/PersonBuilderTest.java | 22 +++ annotations/pom.xml | 20 +++ core-java-8/pom.xml | 6 +- core-java-8/src/test/resources/.gitignore | 13 -- core-java-8/src/test/resources/test.txt | 1 + pom.xml | 1 + 11 files changed, 319 insertions(+), 14 deletions(-) create mode 100644 annotations/annotation-processing/pom.xml create mode 100644 annotations/annotation-processing/src/main/java/com/baeldung/annotation/processor/BuilderProcessor.java create mode 100644 annotations/annotation-processing/src/main/java/com/baeldung/annotation/processor/BuilderProperty.java create mode 100644 annotations/annotation-user/pom.xml create mode 100644 annotations/annotation-user/src/main/java/com/baeldung/annotation/Person.java create mode 100644 annotations/annotation-user/src/test/java/com/baeldung/annotation/PersonBuilderTest.java create mode 100644 annotations/pom.xml delete mode 100644 core-java-8/src/test/resources/.gitignore create mode 100644 core-java-8/src/test/resources/test.txt diff --git a/annotations/annotation-processing/pom.xml b/annotations/annotation-processing/pom.xml new file mode 100644 index 0000000000..6d07394b87 --- /dev/null +++ b/annotations/annotation-processing/pom.xml @@ -0,0 +1,50 @@ + + + 4.0.0 + + + com.baeldung + 1.0.0-SNAPSHOT + annotations + ../ + + + annotation-processing + + + 1.0-rc2 + 3.5.1 + + + + + + com.google.auto.service + auto-service + ${auto-service.version} + provided + + + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + 1.8 + 1.8 + + + + + + + + \ No newline at end of file diff --git a/annotations/annotation-processing/src/main/java/com/baeldung/annotation/processor/BuilderProcessor.java b/annotations/annotation-processing/src/main/java/com/baeldung/annotation/processor/BuilderProcessor.java new file mode 100644 index 0000000000..0883e108e7 --- /dev/null +++ b/annotations/annotation-processing/src/main/java/com/baeldung/annotation/processor/BuilderProcessor.java @@ -0,0 +1,132 @@ +package com.baeldung.annotation.processor; + +import java.io.IOException; +import java.io.PrintWriter; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; +import javax.annotation.processing.*; +import javax.lang.model.SourceVersion; +import javax.lang.model.element.Element; +import javax.lang.model.element.TypeElement; +import javax.lang.model.type.ExecutableType; +import javax.tools.Diagnostic; +import javax.tools.JavaFileObject; + +import com.google.auto.service.AutoService; + +@SupportedAnnotationTypes("com.baeldung.annotation.processor.BuilderProperty") +@SupportedSourceVersion(SourceVersion.RELEASE_8) +@AutoService(Processor.class) +public class BuilderProcessor extends AbstractProcessor { + + @Override + public boolean process(Set annotations, RoundEnvironment roundEnv) { + for (TypeElement annotation : annotations) { + + Set annotatedElements = roundEnv.getElementsAnnotatedWith(annotation); + + Map> annotatedMethods = annotatedElements.stream() + .collect(Collectors.partitioningBy(element -> + ((ExecutableType) element.asType()).getParameterTypes().size() == 1 + && element.getSimpleName().toString().startsWith("set"))); + + List setters = annotatedMethods.get(true); + List otherMethods = annotatedMethods.get(false); + + otherMethods.forEach(element -> + processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR, + "@BuilderProperty must be applied to a setXxx method with a single argument", element)); + + if (setters.isEmpty()) { + continue; + } + + String className = ((TypeElement) setters.get(0).getEnclosingElement()).getQualifiedName().toString(); + + Map setterMap = setters.stream().collect(Collectors.toMap( + setter -> setter.getSimpleName().toString(), + setter -> ((ExecutableType) setter.asType()) + .getParameterTypes().get(0).toString() + )); + + try { + writeBuilderFile(className, setterMap); + } catch (IOException e) { + e.printStackTrace(); + } + + } + + return true; + } + + private void writeBuilderFile(String className, Map setterMap) throws IOException { + + String packageName = null; + int lastDot = className.lastIndexOf('.'); + if (lastDot > 0) { + packageName = className.substring(0, lastDot); + } + + String simpleClassName = className.substring(lastDot + 1); + String builderClassName = className + "Builder"; + String builderSimpleClassName = builderClassName.substring(lastDot + 1); + + JavaFileObject builderFile = processingEnv.getFiler().createSourceFile(builderClassName); + try (PrintWriter out = new PrintWriter(builderFile.openWriter())) { + + if (packageName != null) { + out.print("package "); + out.print(packageName); + out.println(";"); + out.println(); + } + + out.print("public class "); + out.print(builderSimpleClassName); + out.println(" {"); + out.println(); + + out.print(" private "); + out.print(simpleClassName); + out.print(" object = new "); + out.print(simpleClassName); + out.println("();"); + out.println(); + + out.print(" public "); + out.print(simpleClassName); + out.println(" build() {"); + out.println(" return object;"); + out.println(" }"); + out.println(); + + setterMap.entrySet().forEach(setter -> { + String methodName = setter.getKey(); + String argumentType = setter.getValue(); + + out.print(" public "); + out.print(builderSimpleClassName); + out.print(" "); + out.print(methodName); + + out.print("("); + + out.print(argumentType); + out.println(" value) {"); + out.print(" object."); + out.print(methodName); + out.println("(value);"); + out.println(" return this;"); + out.println(" }"); + out.println(); + }); + + out.println("}"); + + } + } + +} diff --git a/annotations/annotation-processing/src/main/java/com/baeldung/annotation/processor/BuilderProperty.java b/annotations/annotation-processing/src/main/java/com/baeldung/annotation/processor/BuilderProperty.java new file mode 100644 index 0000000000..84fcc73850 --- /dev/null +++ b/annotations/annotation-processing/src/main/java/com/baeldung/annotation/processor/BuilderProperty.java @@ -0,0 +1,8 @@ +package com.baeldung.annotation.processor; + +import java.lang.annotation.*; + +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.SOURCE) +public @interface BuilderProperty { +} diff --git a/annotations/annotation-user/pom.xml b/annotations/annotation-user/pom.xml new file mode 100644 index 0000000000..f76f691f93 --- /dev/null +++ b/annotations/annotation-user/pom.xml @@ -0,0 +1,51 @@ + + + 4.0.0 + + + annotations + com.baeldung + 1.0.0-SNAPSHOT + ../ + + + annotation-user + + + + + com.baeldung + annotation-processing + ${project.parent.version} + + + + junit + junit + 4.12 + test + + + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.5.1 + + 1.8 + 1.8 + + + + + + + + \ No newline at end of file diff --git a/annotations/annotation-user/src/main/java/com/baeldung/annotation/Person.java b/annotations/annotation-user/src/main/java/com/baeldung/annotation/Person.java new file mode 100644 index 0000000000..23787ba4f4 --- /dev/null +++ b/annotations/annotation-user/src/main/java/com/baeldung/annotation/Person.java @@ -0,0 +1,29 @@ +package com.baeldung.annotation; + +import com.baeldung.annotation.processor.BuilderProperty; + +public class Person { + + private int age; + + private String name; + + public int getAge() { + return age; + } + + @BuilderProperty + public void setAge(int age) { + this.age = age; + } + + public String getName() { + return name; + } + + @BuilderProperty + public void setName(String name) { + this.name = name; + } + +} diff --git a/annotations/annotation-user/src/test/java/com/baeldung/annotation/PersonBuilderTest.java b/annotations/annotation-user/src/test/java/com/baeldung/annotation/PersonBuilderTest.java new file mode 100644 index 0000000000..72f9ac8bc7 --- /dev/null +++ b/annotations/annotation-user/src/test/java/com/baeldung/annotation/PersonBuilderTest.java @@ -0,0 +1,22 @@ +package com.baeldung.annotation; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class PersonBuilderTest { + + @Test + public void whenBuildPersonWithBuilder_thenObjectHasPropertyValues() { + + Person person = new PersonBuilder() + .setAge(25) + .setName("John") + .build(); + + assertEquals(25, person.getAge()); + assertEquals("John", person.getName()); + + } + +} diff --git a/annotations/pom.xml b/annotations/pom.xml new file mode 100644 index 0000000000..f691674cf1 --- /dev/null +++ b/annotations/pom.xml @@ -0,0 +1,20 @@ + + + + parent-modules + com.baeldung + 1.0.0-SNAPSHOT + + 4.0.0 + + annotations + pom + + + annotation-processing + annotation-user + + + \ No newline at end of file diff --git a/core-java-8/pom.xml b/core-java-8/pom.xml index 63df0e1b95..566eb4e43a 100644 --- a/core-java-8/pom.xml +++ b/core-java-8/pom.xml @@ -1,9 +1,10 @@ 4.0.0 + com.baeldung + 1.0.0-SNAPSHOT core-java8 - 0.1-SNAPSHOT core-java8 @@ -111,6 +112,9 @@ + + UTF-8 + 1.7.13 1.0.13 diff --git a/core-java-8/src/test/resources/.gitignore b/core-java-8/src/test/resources/.gitignore deleted file mode 100644 index 83c05e60c8..0000000000 --- a/core-java-8/src/test/resources/.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -*.class - -#folders# -/target -/neoDb* -/data -/src/main/webapp/WEB-INF/classes -*/META-INF/* - -# Packaged files # -*.jar -*.war -*.ear \ No newline at end of file diff --git a/core-java-8/src/test/resources/test.txt b/core-java-8/src/test/resources/test.txt new file mode 100644 index 0000000000..652d70630f --- /dev/null +++ b/core-java-8/src/test/resources/test.txt @@ -0,0 +1 @@ +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse facilisis neque sed turpis venenatis, non dignissim risus volutpat. \ No newline at end of file diff --git a/pom.xml b/pom.xml index 33162777b7..37ed734567 100644 --- a/pom.xml +++ b/pom.xml @@ -132,6 +132,7 @@ wicket xstream java-cassandra + annotations From e5302d4e75f170b3e220b3bae6c9d0d4abe9193b Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Wed, 28 Sep 2016 10:35:21 -0400 Subject: [PATCH 158/265] add failed authentication test --- .../CustomUserDetailsServiceTest.java | 28 ++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/spring-userservice/src/test/java/org/baeldung/userservice/CustomUserDetailsServiceTest.java b/spring-userservice/src/test/java/org/baeldung/userservice/CustomUserDetailsServiceTest.java index 29998b8fea..6e1cd67e06 100644 --- a/spring-userservice/src/test/java/org/baeldung/userservice/CustomUserDetailsServiceTest.java +++ b/spring-userservice/src/test/java/org/baeldung/userservice/CustomUserDetailsServiceTest.java @@ -9,9 +9,12 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.SpringApplicationConfiguration; +import org.springframework.dao.DuplicateKeyException; import org.springframework.security.authentication.AuthenticationProvider; +import org.springframework.security.authentication.BadCredentialsException; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.Authentication; +import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.web.WebAppConfiguration; import static org.junit.Assert.*; @@ -28,6 +31,7 @@ public class CustomUserDetailsServiceTest { public static final String USERNAME = "user"; public static final String PASSWORD = "pass"; + public static final String USERNAME2 = "user2"; @Autowired MyUserService myUserService; @@ -36,7 +40,7 @@ public class CustomUserDetailsServiceTest { AuthenticationProvider authenticationProvider; @Test - public void whenAuthenticateUser_thenRetrieveFromDb() { + public void givenExistingUser_whenAuthenticate_thenRetrieveFromDb() { try { MyUserDto userDTO = new MyUserDto(); userDTO.setUsername(USERNAME); @@ -55,5 +59,27 @@ public class CustomUserDetailsServiceTest { myUserService.removeUserByUsername(USERNAME); } } + + @Test (expected = BadCredentialsException.class) + public void givenIncorrectUser_whenAuthenticate_thenBadCredentialsException() { + try { + MyUserDto userDTO = new MyUserDto(); + userDTO.setUsername(USERNAME); + userDTO.setPassword(PASSWORD); + + try { + myUserService.registerNewUserAccount(userDTO); + } + catch (Exception exc) { + LOG.log(Level.SEVERE, "Error creating account"); + } + + UsernamePasswordAuthenticationToken auth = new UsernamePasswordAuthenticationToken(USERNAME2, PASSWORD); + Authentication authentication = authenticationProvider.authenticate(auth); + } + finally { + myUserService.removeUserByUsername(USERNAME); + } + } } From e1ffd14c0d4434d1dec983a9a9772c2e9483a037 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Wed, 28 Sep 2016 19:46:18 +0200 Subject: [PATCH 159/265] Refactor JavaFolderSizeTest --- .../com/baeldung/java8/JavaFolderSizeTest.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/core-java-8/src/test/java/com/baeldung/java8/JavaFolderSizeTest.java b/core-java-8/src/test/java/com/baeldung/java8/JavaFolderSizeTest.java index efd548a4b1..f2e7452137 100644 --- a/core-java-8/src/test/java/com/baeldung/java8/JavaFolderSizeTest.java +++ b/core-java-8/src/test/java/com/baeldung/java8/JavaFolderSizeTest.java @@ -21,7 +21,7 @@ public class JavaFolderSizeTest { @Before public void init() { final String separator = File.separator; - path = "src" + separator + "test" + separator + "resources"; + path = String.format("src%stest%sresources", separator, separator); } @Test @@ -79,7 +79,9 @@ public class JavaFolderSizeTest { final File folder = new File(path); final Iterable files = com.google.common.io.Files.fileTreeTraverser().breadthFirstTraversal(folder); - final long size = StreamSupport.stream(files.spliterator(), false).filter(f -> f.isFile()).mapToLong(File::length).sum(); + final long size = StreamSupport.stream(files.spliterator(), false) + .filter(File::isFile) + .mapToLong(File::length).sum(); assertEquals(expectedSize, size); } @@ -101,13 +103,11 @@ public class JavaFolderSizeTest { long length = 0; final File[] files = folder.listFiles(); - final int count = files.length; - - for (int i = 0; i < count; i++) { - if (files[i].isFile()) { - length += files[i].length(); + for (File file : files) { + if (file.isFile()) { + length += file.length(); } else { - length += getFolderSize(files[i]); + length += getFolderSize(file); } } return length; From 651c40778790d5f34d5a08318495934e1760dbbb Mon Sep 17 00:00:00 2001 From: Kiran Date: Wed, 28 Sep 2016 16:47:13 -0400 Subject: [PATCH 160/265] Added 'spring-mvc-tiles' module to parent pom.xml --- pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/pom.xml b/pom.xml index 82cf85208c..49d046e483 100644 --- a/pom.xml +++ b/pom.xml @@ -58,6 +58,7 @@ spring-mvc-java spring-mvc-no-xml spring-mvc-xml + spring-mvc-tiles spring-openid spring-protobuf spring-quartz From f6e5e17c9a7f302efec1ee2441a0f086a8535d3a Mon Sep 17 00:00:00 2001 From: Kiran Date: Wed, 28 Sep 2016 16:49:17 -0400 Subject: [PATCH 161/265] Updated indentation --- .../springmvc/ApplicationConfiguration.java | 50 +++++++++---------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/spring-mvc-tiles/src/main/java/com/baeldung/tiles/springmvc/ApplicationConfiguration.java b/spring-mvc-tiles/src/main/java/com/baeldung/tiles/springmvc/ApplicationConfiguration.java index 1ae6d1b23c..d2e90a4f53 100644 --- a/spring-mvc-tiles/src/main/java/com/baeldung/tiles/springmvc/ApplicationConfiguration.java +++ b/spring-mvc-tiles/src/main/java/com/baeldung/tiles/springmvc/ApplicationConfiguration.java @@ -15,33 +15,33 @@ import org.springframework.web.servlet.view.tiles3.TilesViewResolver; @ComponentScan(basePackages = "com.baeldung.tiles.springmvc") public class ApplicationConfiguration extends WebMvcConfigurerAdapter { - /** - * Configure TilesConfigurer. - */ - @Bean - public TilesConfigurer tilesConfigurer() { - TilesConfigurer tilesConfigurer = new TilesConfigurer(); - tilesConfigurer.setDefinitions(new String[] { "/WEB-INF/views/**/tiles.xml" }); - tilesConfigurer.setCheckRefresh(true); - return tilesConfigurer; - } + /** + * Configure TilesConfigurer. + */ + @Bean + public TilesConfigurer tilesConfigurer() { + TilesConfigurer tilesConfigurer = new TilesConfigurer(); + tilesConfigurer.setDefinitions(new String[] { "/WEB-INF/views/**/tiles.xml" }); + tilesConfigurer.setCheckRefresh(true); + return tilesConfigurer; + } - /** - * Configure ViewResolvers to deliver views. - */ - @Override - public void configureViewResolvers(ViewResolverRegistry registry) { - TilesViewResolver viewResolver = new TilesViewResolver(); - registry.viewResolver(viewResolver); - } + /** + * Configure ViewResolvers to deliver views. + */ + @Override + public void configureViewResolvers(ViewResolverRegistry registry) { + TilesViewResolver viewResolver = new TilesViewResolver(); + registry.viewResolver(viewResolver); + } - /** - * Configure ResourceHandlers to serve static resources - */ + /** + * Configure ResourceHandlers to serve static resources + */ - @Override - public void addResourceHandlers(ResourceHandlerRegistry registry) { - registry.addResourceHandler("/static/**").addResourceLocations("/static/"); - } + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + registry.addResourceHandler("/static/**").addResourceLocations("/static/"); + } } From 7f58390d53aba4b5472ebc5ba6b1ca4c033c8114 Mon Sep 17 00:00:00 2001 From: Kiran Date: Wed, 28 Sep 2016 16:50:14 -0400 Subject: [PATCH 162/265] Updated indentation --- .../tiles/springmvc/ApplicationController.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/spring-mvc-tiles/src/main/java/com/baeldung/tiles/springmvc/ApplicationController.java b/spring-mvc-tiles/src/main/java/com/baeldung/tiles/springmvc/ApplicationController.java index b85ad54587..1a348d1c26 100644 --- a/spring-mvc-tiles/src/main/java/com/baeldung/tiles/springmvc/ApplicationController.java +++ b/spring-mvc-tiles/src/main/java/com/baeldung/tiles/springmvc/ApplicationController.java @@ -4,23 +4,22 @@ import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; - @Controller @RequestMapping("/") public class ApplicationController { - @RequestMapping(value = { "/"}, method = RequestMethod.GET) + @RequestMapping(value = { "/" }, method = RequestMethod.GET) public String homePage(ModelMap model) { return "home"; } - - @RequestMapping(value = { "/apachetiles"}, method = RequestMethod.GET) + + @RequestMapping(value = { "/apachetiles" }, method = RequestMethod.GET) public String productsPage(ModelMap model) { return "apachetiles"; } - - @RequestMapping(value = { "/springmvc"}, method = RequestMethod.GET) + + @RequestMapping(value = { "/springmvc" }, method = RequestMethod.GET) public String contactUsPage(ModelMap model) { return "springmvc"; } From d9ae777b2e62e38eda6b04ecc414ebc3c57760f1 Mon Sep 17 00:00:00 2001 From: Kiran Date: Wed, 28 Sep 2016 16:50:56 -0400 Subject: [PATCH 163/265] Updated indentation --- .../springmvc/ApplicationInitializer.java | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/spring-mvc-tiles/src/main/java/com/baeldung/tiles/springmvc/ApplicationInitializer.java b/spring-mvc-tiles/src/main/java/com/baeldung/tiles/springmvc/ApplicationInitializer.java index ababe0ae07..79583dbe83 100644 --- a/spring-mvc-tiles/src/main/java/com/baeldung/tiles/springmvc/ApplicationInitializer.java +++ b/spring-mvc-tiles/src/main/java/com/baeldung/tiles/springmvc/ApplicationInitializer.java @@ -4,19 +4,19 @@ import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatche public class ApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { - @Override - protected Class[] getRootConfigClasses() { - return new Class[] { ApplicationConfiguration.class }; - } + @Override + protected Class[] getRootConfigClasses() { + return new Class[] { ApplicationConfiguration.class }; + } - @Override - protected Class[] getServletConfigClasses() { - return null; - } + @Override + protected Class[] getServletConfigClasses() { + return null; + } - @Override - protected String[] getServletMappings() { - return new String[] { "/" }; - } + @Override + protected String[] getServletMappings() { + return new String[] { "/" }; + } } From 6b42940de807ea2fe361bd0519dc8359698951f2 Mon Sep 17 00:00:00 2001 From: Kiran Date: Wed, 28 Sep 2016 16:51:55 -0400 Subject: [PATCH 164/265] Updated indentation --- spring-mvc-tiles/pom.xml | 184 ++++++++++++++++++--------------------- 1 file changed, 85 insertions(+), 99 deletions(-) diff --git a/spring-mvc-tiles/pom.xml b/spring-mvc-tiles/pom.xml index abbb9a2870..1a72549e70 100644 --- a/spring-mvc-tiles/pom.xml +++ b/spring-mvc-tiles/pom.xml @@ -1,99 +1,85 @@ - - 4.0.0 - com.baeldung - spring-mvc-tiles - 0.0.1-SNAPSHOT - war - spring-mvc-tiles - Integrating Spring MVC with Apache Tiles - - - 4.3.2.RELEASE - 3.0.5 - - - - - - org.springframework - spring-core - ${springframework.version} - - - org.springframework - spring-web - ${springframework.version} - - - org.springframework - spring-webmvc - ${springframework.version} - - - - org.apache.tiles - tiles-core - ${apachetiles.version} - - - org.apache.tiles - tiles-api - ${apachetiles.version} - - - org.apache.tiles - tiles-servlet - ${apachetiles.version} - - - org.apache.tiles - tiles-jsp - ${apachetiles.version} - - - - - javax.servlet - javax.servlet-api - 3.1.0 - - - javax.servlet.jsp - javax.servlet.jsp-api - 2.3.1 - - - javax.servlet - jstl - 1.2 - - - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.2 - - 1.7 - 1.7 - - - - org.apache.maven.plugins - maven-war-plugin - 2.4 - - src/main/webapp - spring-mvc-tiles - false - - - - - spring-mvc-tiles - - \ No newline at end of file + + 4.0.0 + com.baeldung + spring-mvc-tiles + 0.0.1-SNAPSHOT + war + spring-mvc-tiles + Integrating Spring MVC with Apache Tiles + + + 4.3.2.RELEASE + 3.0.5 + + + + + + org.springframework + spring-core + ${springframework.version} + + + org.springframework + spring-web + ${springframework.version} + + + org.springframework + spring-webmvc + ${springframework.version} + + + + org.apache.tiles + tiles-jsp + ${apachetiles.version} + + + + + javax.servlet + javax.servlet-api + 3.1.0 + + + javax.servlet.jsp + javax.servlet.jsp-api + 2.3.1 + + + javax.servlet + jstl + 1.2 + + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.2 + + 1.7 + 1.7 + + + + org.apache.maven.plugins + maven-war-plugin + 2.4 + + src/main/webapp + spring-mvc-tiles + false + + + + + spring-mvc-tiles + + From 0836270addbc959d6da1f2bfd144a17bdec41184 Mon Sep 17 00:00:00 2001 From: Kiran Date: Wed, 28 Sep 2016 16:55:18 -0400 Subject: [PATCH 165/265] Updated indentation --- .../main/webapp/WEB-INF/views/tiles/templates/defaultMenu.jsp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-mvc-tiles/src/main/webapp/WEB-INF/views/tiles/templates/defaultMenu.jsp b/spring-mvc-tiles/src/main/webapp/WEB-INF/views/tiles/templates/defaultMenu.jsp index fdfbdc8a14..2c91eace85 100644 --- a/spring-mvc-tiles/src/main/webapp/WEB-INF/views/tiles/templates/defaultMenu.jsp +++ b/spring-mvc-tiles/src/main/webapp/WEB-INF/views/tiles/templates/defaultMenu.jsp @@ -1,8 +1,8 @@ \ No newline at end of file + From d98f232033638709ffa40446b77441e5d2fc1e13 Mon Sep 17 00:00:00 2001 From: Kiran Date: Wed, 28 Sep 2016 16:57:46 -0400 Subject: [PATCH 166/265] Updated indentation --- .../views/tiles/layouts/defaultLayout.jsp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/spring-mvc-tiles/src/main/webapp/WEB-INF/views/tiles/layouts/defaultLayout.jsp b/spring-mvc-tiles/src/main/webapp/WEB-INF/views/tiles/layouts/defaultLayout.jsp index 9b727473f9..2370ad4ab1 100644 --- a/spring-mvc-tiles/src/main/webapp/WEB-INF/views/tiles/layouts/defaultLayout.jsp +++ b/spring-mvc-tiles/src/main/webapp/WEB-INF/views/tiles/layouts/defaultLayout.jsp @@ -13,13 +13,13 @@ -
    - - -
    - -
    - -
    +
    + + +
    + +
    + +
    - \ No newline at end of file + From 4a0233f49aee2ca0a74ca399fd2f00fe53f91bdd Mon Sep 17 00:00:00 2001 From: slavisa-baeldung Date: Wed, 28 Sep 2016 23:40:29 +0200 Subject: [PATCH 167/265] BAEL-314 - removing part 1 module --- .../application-config/discovery.properties | 0 .../application-config/gateway.properties | 0 .../application-config/resource.properties | 0 .../{part-1 => }/config/pom.xml | 0 .../integration/config/ConfigApplication.java | 0 .../src/main/resources/application.properties | 0 .../{part-1 => }/discovery/pom.xml | 0 .../discovery/DiscoveryApplication.java | 0 .../src/main/resources/bootstrap.properties | 0 .../{part-1 => }/gateway/pom.xml | 0 .../resource/GatewayApplication.java | 0 .../src/main/resources/bootstrap.properties | 0 .../spring-cloud-integration/part-1/pom.xml | 25 ------------------- spring-cloud/spring-cloud-integration/pom.xml | 18 ++++++++++--- .../{part-1 => }/resource/pom.xml | 0 .../resource/ResourceApplication.java | 0 .../src/main/resources/bootstrap.properties | 0 17 files changed, 14 insertions(+), 29 deletions(-) rename spring-cloud/spring-cloud-integration/{part-1 => }/application-config/discovery.properties (100%) rename spring-cloud/spring-cloud-integration/{part-1 => }/application-config/gateway.properties (100%) rename spring-cloud/spring-cloud-integration/{part-1 => }/application-config/resource.properties (100%) rename spring-cloud/spring-cloud-integration/{part-1 => }/config/pom.xml (100%) rename spring-cloud/spring-cloud-integration/{part-1 => }/config/src/main/java/com/baeldung/spring/cloud/integration/config/ConfigApplication.java (100%) rename spring-cloud/spring-cloud-integration/{part-1 => }/config/src/main/resources/application.properties (100%) rename spring-cloud/spring-cloud-integration/{part-1 => }/discovery/pom.xml (100%) rename spring-cloud/spring-cloud-integration/{part-1 => }/discovery/src/main/java/com/baeldung/spring/cloud/integration/discovery/DiscoveryApplication.java (100%) rename spring-cloud/spring-cloud-integration/{part-1 => }/discovery/src/main/resources/bootstrap.properties (100%) rename spring-cloud/spring-cloud-integration/{part-1 => }/gateway/pom.xml (100%) rename spring-cloud/spring-cloud-integration/{part-1 => }/gateway/src/main/java/com/baeldung/spring/cloud/integration/resource/GatewayApplication.java (100%) rename spring-cloud/spring-cloud-integration/{part-1 => }/gateway/src/main/resources/bootstrap.properties (100%) delete mode 100644 spring-cloud/spring-cloud-integration/part-1/pom.xml rename spring-cloud/spring-cloud-integration/{part-1 => }/resource/pom.xml (100%) rename spring-cloud/spring-cloud-integration/{part-1 => }/resource/src/main/java/com/baeldung/spring/cloud/integration/resource/ResourceApplication.java (100%) rename spring-cloud/spring-cloud-integration/{part-1 => }/resource/src/main/resources/bootstrap.properties (100%) diff --git a/spring-cloud/spring-cloud-integration/part-1/application-config/discovery.properties b/spring-cloud/spring-cloud-integration/application-config/discovery.properties similarity index 100% rename from spring-cloud/spring-cloud-integration/part-1/application-config/discovery.properties rename to spring-cloud/spring-cloud-integration/application-config/discovery.properties diff --git a/spring-cloud/spring-cloud-integration/part-1/application-config/gateway.properties b/spring-cloud/spring-cloud-integration/application-config/gateway.properties similarity index 100% rename from spring-cloud/spring-cloud-integration/part-1/application-config/gateway.properties rename to spring-cloud/spring-cloud-integration/application-config/gateway.properties diff --git a/spring-cloud/spring-cloud-integration/part-1/application-config/resource.properties b/spring-cloud/spring-cloud-integration/application-config/resource.properties similarity index 100% rename from spring-cloud/spring-cloud-integration/part-1/application-config/resource.properties rename to spring-cloud/spring-cloud-integration/application-config/resource.properties diff --git a/spring-cloud/spring-cloud-integration/part-1/config/pom.xml b/spring-cloud/spring-cloud-integration/config/pom.xml similarity index 100% rename from spring-cloud/spring-cloud-integration/part-1/config/pom.xml rename to spring-cloud/spring-cloud-integration/config/pom.xml diff --git a/spring-cloud/spring-cloud-integration/part-1/config/src/main/java/com/baeldung/spring/cloud/integration/config/ConfigApplication.java b/spring-cloud/spring-cloud-integration/config/src/main/java/com/baeldung/spring/cloud/integration/config/ConfigApplication.java similarity index 100% rename from spring-cloud/spring-cloud-integration/part-1/config/src/main/java/com/baeldung/spring/cloud/integration/config/ConfigApplication.java rename to spring-cloud/spring-cloud-integration/config/src/main/java/com/baeldung/spring/cloud/integration/config/ConfigApplication.java diff --git a/spring-cloud/spring-cloud-integration/part-1/config/src/main/resources/application.properties b/spring-cloud/spring-cloud-integration/config/src/main/resources/application.properties similarity index 100% rename from spring-cloud/spring-cloud-integration/part-1/config/src/main/resources/application.properties rename to spring-cloud/spring-cloud-integration/config/src/main/resources/application.properties diff --git a/spring-cloud/spring-cloud-integration/part-1/discovery/pom.xml b/spring-cloud/spring-cloud-integration/discovery/pom.xml similarity index 100% rename from spring-cloud/spring-cloud-integration/part-1/discovery/pom.xml rename to spring-cloud/spring-cloud-integration/discovery/pom.xml diff --git a/spring-cloud/spring-cloud-integration/part-1/discovery/src/main/java/com/baeldung/spring/cloud/integration/discovery/DiscoveryApplication.java b/spring-cloud/spring-cloud-integration/discovery/src/main/java/com/baeldung/spring/cloud/integration/discovery/DiscoveryApplication.java similarity index 100% rename from spring-cloud/spring-cloud-integration/part-1/discovery/src/main/java/com/baeldung/spring/cloud/integration/discovery/DiscoveryApplication.java rename to spring-cloud/spring-cloud-integration/discovery/src/main/java/com/baeldung/spring/cloud/integration/discovery/DiscoveryApplication.java diff --git a/spring-cloud/spring-cloud-integration/part-1/discovery/src/main/resources/bootstrap.properties b/spring-cloud/spring-cloud-integration/discovery/src/main/resources/bootstrap.properties similarity index 100% rename from spring-cloud/spring-cloud-integration/part-1/discovery/src/main/resources/bootstrap.properties rename to spring-cloud/spring-cloud-integration/discovery/src/main/resources/bootstrap.properties diff --git a/spring-cloud/spring-cloud-integration/part-1/gateway/pom.xml b/spring-cloud/spring-cloud-integration/gateway/pom.xml similarity index 100% rename from spring-cloud/spring-cloud-integration/part-1/gateway/pom.xml rename to spring-cloud/spring-cloud-integration/gateway/pom.xml diff --git a/spring-cloud/spring-cloud-integration/part-1/gateway/src/main/java/com/baeldung/spring/cloud/integration/resource/GatewayApplication.java b/spring-cloud/spring-cloud-integration/gateway/src/main/java/com/baeldung/spring/cloud/integration/resource/GatewayApplication.java similarity index 100% rename from spring-cloud/spring-cloud-integration/part-1/gateway/src/main/java/com/baeldung/spring/cloud/integration/resource/GatewayApplication.java rename to spring-cloud/spring-cloud-integration/gateway/src/main/java/com/baeldung/spring/cloud/integration/resource/GatewayApplication.java diff --git a/spring-cloud/spring-cloud-integration/part-1/gateway/src/main/resources/bootstrap.properties b/spring-cloud/spring-cloud-integration/gateway/src/main/resources/bootstrap.properties similarity index 100% rename from spring-cloud/spring-cloud-integration/part-1/gateway/src/main/resources/bootstrap.properties rename to spring-cloud/spring-cloud-integration/gateway/src/main/resources/bootstrap.properties diff --git a/spring-cloud/spring-cloud-integration/part-1/pom.xml b/spring-cloud/spring-cloud-integration/part-1/pom.xml deleted file mode 100644 index 770e26bca2..0000000000 --- a/spring-cloud/spring-cloud-integration/part-1/pom.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - 4.0.0 - - - com.baeldung.spring.cloud - spring-cloud-integration - 1.0.0-SNAPSHOT - - - - config - discovery - gateway - resource - - - part-1 - 1.0.0-SNAPSHOT - pom - - - \ No newline at end of file diff --git a/spring-cloud/spring-cloud-integration/pom.xml b/spring-cloud/spring-cloud-integration/pom.xml index 1d56995009..c14c277d7f 100644 --- a/spring-cloud/spring-cloud-integration/pom.xml +++ b/spring-cloud/spring-cloud-integration/pom.xml @@ -4,12 +4,22 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - com.baeldung.spring.cloud + + com.baeldung.spring.cloud + spring-cloud + 1.0.0-SNAPSHOT + + + + config + discovery + gateway + resource + + + spring-cloud-integration 1.0.0-SNAPSHOT pom - - part-1 - \ No newline at end of file diff --git a/spring-cloud/spring-cloud-integration/part-1/resource/pom.xml b/spring-cloud/spring-cloud-integration/resource/pom.xml similarity index 100% rename from spring-cloud/spring-cloud-integration/part-1/resource/pom.xml rename to spring-cloud/spring-cloud-integration/resource/pom.xml diff --git a/spring-cloud/spring-cloud-integration/part-1/resource/src/main/java/com/baeldung/spring/cloud/integration/resource/ResourceApplication.java b/spring-cloud/spring-cloud-integration/resource/src/main/java/com/baeldung/spring/cloud/integration/resource/ResourceApplication.java similarity index 100% rename from spring-cloud/spring-cloud-integration/part-1/resource/src/main/java/com/baeldung/spring/cloud/integration/resource/ResourceApplication.java rename to spring-cloud/spring-cloud-integration/resource/src/main/java/com/baeldung/spring/cloud/integration/resource/ResourceApplication.java diff --git a/spring-cloud/spring-cloud-integration/part-1/resource/src/main/resources/bootstrap.properties b/spring-cloud/spring-cloud-integration/resource/src/main/resources/bootstrap.properties similarity index 100% rename from spring-cloud/spring-cloud-integration/part-1/resource/src/main/resources/bootstrap.properties rename to spring-cloud/spring-cloud-integration/resource/src/main/resources/bootstrap.properties From f3b8bb0f146d8807e53953021a87943a07e2eb68 Mon Sep 17 00:00:00 2001 From: Egima profile Date: Thu, 29 Sep 2016 00:43:59 +0300 Subject: [PATCH 168/265] Moved regex from own module to core-java (#707) * made changes to java reflection * removed redundant method makeSound in Animal abstract class * added project for play-framework article * added project for regex * changed regex project from own model to core-java --- .../java/com/baeldung/java/regex/Result.java | 27 + .../com/baeldung/java/regex/RegexTest.java | 503 ++++++++++++++++++ 2 files changed, 530 insertions(+) create mode 100644 core-java/src/main/java/com/baeldung/java/regex/Result.java create mode 100644 core-java/src/test/java/com/baeldung/java/regex/RegexTest.java diff --git a/core-java/src/main/java/com/baeldung/java/regex/Result.java b/core-java/src/main/java/com/baeldung/java/regex/Result.java new file mode 100644 index 0000000000..d47c94ad2e --- /dev/null +++ b/core-java/src/main/java/com/baeldung/java/regex/Result.java @@ -0,0 +1,27 @@ +package com.baeldung.java.regex; + +public class Result { + private boolean found = false; + private int count = 0; + + public Result() { + + } + + public boolean isFound() { + return found; + } + + public void setFound(boolean found) { + this.found = found; + } + + public int getCount() { + return count; + } + + public void setCount(int count) { + this.count = count; + } + +} diff --git a/core-java/src/test/java/com/baeldung/java/regex/RegexTest.java b/core-java/src/test/java/com/baeldung/java/regex/RegexTest.java new file mode 100644 index 0000000000..257e486600 --- /dev/null +++ b/core-java/src/test/java/com/baeldung/java/regex/RegexTest.java @@ -0,0 +1,503 @@ +package com.baeldung.java.regex; + +import static org.junit.Assert.*; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.junit.Test; + +public class RegexTest { + private static Pattern pattern; + private static Matcher matcher; + + @Test + public void givenText_whenSimpleRegexMatches_thenCorrect() { + Result result = runTest("foo", "foo"); + assertTrue(result.isFound()); + assertEquals(result.getCount(), 1); + + } + + @Test + public void givenText_whenSimpleRegexMatchesTwice_thenCorrect() { + Result result = runTest("foo", "foofoo"); + assertTrue(result.isFound()); + assertEquals(result.getCount(), 2); + + } + + @Test + public void givenText_whenMatchesWithDotMetach_thenCorrect() { + Result result = runTest(".", "foo"); + assertTrue(result.isFound()); + } + + @Test + public void givenRepeatedText_whenMatchesOnceWithDotMetach_thenCorrect() { + Result result = runTest("foo.", "foofoo"); + assertTrue(result.isFound()); + assertEquals(result.getCount(), 1); + } + + @Test + public void givenORSet_whenMatchesAny_thenCorrect() { + Result result = runTest("[abc]", "b"); + assertTrue(result.isFound()); + assertEquals(result.getCount(), 1); + } + + @Test + public void givenORSet_whenMatchesAnyAndAll_thenCorrect() { + Result result = runTest("[abc]", "cab"); + assertTrue(result.isFound()); + assertEquals(result.getCount(), 3); + } + + @Test + public void givenORSet_whenMatchesAllCombinations_thenCorrect() { + Result result = runTest("[bcr]at", "bat cat rat"); + assertTrue(result.isFound()); + assertEquals(result.getCount(), 3); + } + + @Test + public void givenNORSet_whenMatchesNon_thenCorrect() { + Result result = runTest("[^abc]", "g"); + assertTrue(result.isFound()); + } + + @Test + public void givenNORSet_whenMatchesAllExceptElements_thenCorrect() { + Result result = runTest("[^bcr]at", "sat mat eat"); + assertTrue(result.isFound()); + } + + @Test + public void givenUpperCaseRange_whenMatchesUpperCase_thenCorrect() { + Result result = runTest("[A-Z]", "Two Uppercase alphabets 34 overall"); + assertTrue(result.isFound()); + assertEquals(result.getCount(), 2); + } + + @Test + public void givenLowerCaseRange_whenMatchesLowerCase_thenCorrect() { + Result result = runTest("[a-z]", "Two Uppercase alphabets 34 overall"); + assertTrue(result.isFound()); + assertEquals(result.getCount(), 26); + } + + @Test + public void givenBothLowerAndUpperCaseRange_whenMatchesAllLetters_thenCorrect() { + Result result = runTest("[a-zA-Z]", "Two Uppercase alphabets 34 overall"); + assertTrue(result.isFound()); + assertEquals(result.getCount(), 28); + } + + @Test + public void givenNumberRange_whenMatchesAccurately_thenCorrect() { + Result result = runTest("[1-5]", "Two Uppercase alphabets 34 overall"); + assertTrue(result.isFound()); + assertEquals(result.getCount(), 2); + } + + @Test + public void givenNumberRange_whenMatchesAccurately_thenCorrect2() { + Result result = runTest("[30-35]", "Two Uppercase alphabets 34 overall"); + assertTrue(result.isFound()); + assertEquals(result.getCount(), 1); + } + + @Test + public void givenTwoSets_whenMatchesUnion_thenCorrect() { + Result result = runTest("[1-3[7-9]]", "123456789"); + assertTrue(result.isFound()); + assertEquals(result.getCount(), 6); + } + + @Test + public void givenTwoSets_whenMatchesIntersection_thenCorrect() { + Result result = runTest("[1-6&&[3-9]]", "123456789"); + assertTrue(result.isFound()); + assertEquals(result.getCount(), 4); + } + + @Test + public void givenSetWithSubtraction_whenMatchesAccurately_thenCorrect() { + Result result = runTest("[0-9&&[^2468]]", "123456789"); + assertTrue(result.isFound()); + assertEquals(result.getCount(), 5); + } + + @Test + public void givenDigits_whenMatches_thenCorrect() { + Result result = runTest("\\d", "123"); + assertTrue(result.isFound()); + assertEquals(result.getCount(), 3); + } + + @Test + public void givenNonDigits_whenMatches_thenCorrect() { + Result result = runTest("\\D", "a6c"); + assertTrue(result.isFound()); + assertEquals(result.getCount(), 2); + } + + @Test + public void givenWhiteSpace_whenMatches_thenCorrect() { + Result result = runTest("\\s", "a c"); + assertTrue(result.isFound()); + assertEquals(result.getCount(), 1); + } + + @Test + public void givenNonWhiteSpace_whenMatches_thenCorrect() { + Result result = runTest("\\S", "a c"); + assertTrue(result.isFound()); + assertEquals(result.getCount(), 2); + } + + @Test + public void givenWordCharacter_whenMatches_thenCorrect() { + Result result = runTest("\\w", "hi!"); + assertTrue(result.isFound()); + assertEquals(result.getCount(), 2); + } + + @Test + public void givenNonWordCharacter_whenMatches_thenCorrect() { + Result result = runTest("\\W", "hi!"); + assertTrue(result.isFound()); + assertEquals(result.getCount(), 1); + } + + @Test + public void givenZeroOrOneQuantifier_whenMatches_thenCorrect() { + Result result = runTest("\\a?", "hi"); + assertTrue(result.isFound()); + assertEquals(result.getCount(), 3); + } + + @Test + public void givenZeroOrOneQuantifier_whenMatches_thenCorrect2() { + Result result = runTest("\\a{0,1}", "hi"); + assertTrue(result.isFound()); + assertEquals(result.getCount(), 3); + } + + @Test + public void givenZeroOrManyQuantifier_whenMatches_thenCorrect() { + Result result = runTest("\\a*", "hi"); + assertTrue(result.isFound()); + assertEquals(result.getCount(), 3); + } + + @Test + public void givenZeroOrManyQuantifier_whenMatches_thenCorrect2() { + Result result = runTest("\\a{0,}", "hi"); + assertTrue(result.isFound()); + assertEquals(result.getCount(), 3); + } + + @Test + public void givenOneOrManyQuantifier_whenMatches_thenCorrect() { + Result result = runTest("\\a+", "hi"); + assertFalse(result.isFound()); + } + + @Test + public void givenOneOrManyQuantifier_whenMatches_thenCorrect2() { + Result result = runTest("\\a{1,}", "hi"); + assertFalse(result.isFound()); + } + + @Test + public void givenBraceQuantifier_whenMatches_thenCorrect() { + Result result = runTest("a{3}", "aaaaaa"); + assertTrue(result.isFound()); + assertEquals(result.getCount(), 2); + } + + @Test + public void givenBraceQuantifier_whenFailsToMatch_thenCorrect() { + Result result = runTest("a{3}", "aa"); + assertFalse(result.isFound()); + } + + @Test + public void givenBraceQuantifierWithRange_whenMatches_thenCorrect() { + Result result = runTest("a{2,3}", "aaaa"); + assertTrue(result.isFound()); + assertEquals(result.getCount(), 1); + } + + @Test + public void givenBraceQuantifierWithRange_whenMatchesLazily_thenCorrect() { + Result result = runTest("a{2,3}?", "aaaa"); + assertTrue(result.isFound()); + assertEquals(result.getCount(), 2); + } + + @Test + public void givenCapturingGroup_whenMatches_thenCorrect() { + Result result = runTest("(\\d\\d)", "12"); + assertTrue(result.isFound()); + assertEquals(result.getCount(), 1); + } + + @Test + public void givenCapturingGroup_whenMatches_thenCorrect2() { + Result result = runTest("(\\d\\d)", "1212"); + assertTrue(result.isFound()); + assertEquals(result.getCount(), 2); + } + + @Test + public void givenCapturingGroup_whenMatches_thenCorrect3() { + Result result = runTest("(\\d\\d)(\\d\\d)", "1212"); + assertTrue(result.isFound()); + assertEquals(result.getCount(), 1); + } + + @Test + public void givenCapturingGroup_whenMatchesWithBackReference_thenCorrect() { + Result result = runTest("(\\d\\d)\\1", "1212"); + assertTrue(result.isFound()); + assertEquals(result.getCount(), 1); + } + + @Test + public void givenCapturingGroup_whenMatchesWithBackReference_thenCorrect2() { + Result result = runTest("(\\d\\d)\\1\\1\\1", "12121212"); + assertTrue(result.isFound()); + assertEquals(result.getCount(), 1); + } + + @Test + public void givenCapturingGroupAndWrongInput_whenMatchFailsWithBackReference_thenCorrect() { + Result result = runTest("(\\d\\d)\\1", "1213"); + assertFalse(result.isFound()); + } + + @Test + public void givenText_whenMatchesAtBeginning_thenCorrect() { + Result result = runTest("^dog", "dogs are friendly"); + assertTrue(result.isFound()); + } + + @Test + public void givenTextAndWrongInput_whenMatchFailsAtBeginning_thenCorrect() { + Result result = runTest("^dog", "are dogs are friendly?"); + assertFalse(result.isFound()); + } + + @Test + public void givenText_whenMatchesAtEnd_thenCorrect() { + Result result = runTest("dog$", "Man's best friend is a dog"); + assertTrue(result.isFound()); + } + + @Test + public void givenTextAndWrongInput_whenMatchFailsAtEnd_thenCorrect() { + Result result = runTest("dog$", "is a dog man's best friend?"); + assertFalse(result.isFound()); + } + + @Test + public void givenText_whenMatchesAtWordBoundary_thenCorrect() { + Result result = runTest("\\bdog\\b", "a dog is friendly"); + assertTrue(result.isFound()); + } + + @Test + public void givenText_whenMatchesAtWordBoundary_thenCorrect2() { + Result result = runTest("\\bdog\\b", "dog is man's best friend"); + assertTrue(result.isFound()); + } + + @Test + public void givenWrongText_whenMatchFailsAtWordBoundary_thenCorrect() { + Result result = runTest("\\bdog\\b", "snoop dogg is a rapper"); + assertFalse(result.isFound()); + } + + @Test + public void givenText_whenMatchesAtWordAndNonBoundary_thenCorrect() { + Result result = runTest("\\bdog\\B", "snoop dogg is a rapper"); + assertTrue(result.isFound()); + } + + @Test + public void givenRegexWithoutCanonEq_whenMatchFailsOnEquivalentUnicode_thenCorrect() { + Result result = runTest("\u00E9", "\u0065\u0301"); + assertFalse(result.isFound()); + } + + @Test + public void givenRegexWithCanonEq_whenMatchesOnEquivalentUnicode_thenCorrect() { + Result result = runTest("\u00E9", "\u0065\u0301", Pattern.CANON_EQ); + assertTrue(result.isFound()); + } + + @Test + public void givenRegexWithDefaultMatcher_whenMatchFailsOnDifferentCases_thenCorrect() { + Result result = runTest("dog", "This is a Dog"); + assertFalse(result.isFound()); + } + + @Test + public void givenRegexWithCaseInsensitiveMatcher_whenMatchesOnDifferentCases_thenCorrect() { + Result result = runTest("dog", "This is a Dog", Pattern.CASE_INSENSITIVE); + assertTrue(result.isFound()); + } + + @Test + public void givenRegexWithEmbeddedCaseInsensitiveMatcher_whenMatchesOnDifferentCases_thenCorrect() { + Result result = runTest("(?i)dog", "This is a Dog"); + assertTrue(result.isFound()); + } + + @Test + public void givenRegexWithComments_whenMatchFailsWithoutFlag_thenCorrect() { + Result result = runTest("dog$ #check for word dog at end of text", "This is a dog"); + assertFalse(result.isFound()); + } + + @Test + public void givenRegexWithComments_whenMatchesWithFlag_thenCorrect() { + Result result = runTest("dog$ #check for word dog at end of text", "This is a dog", Pattern.COMMENTS); + assertTrue(result.isFound()); + } + + @Test + public void givenRegexWithComments_whenMatchesWithEmbeddedFlag_thenCorrect() { + Result result = runTest("(?x)dog$ #check for word dog at end of text", "This is a dog"); + assertTrue(result.isFound()); + } + + @Test + public void givenRegexWithLineTerminator_whenMatchFails_thenCorrect() { + Pattern pattern = Pattern.compile("(.*)"); + Matcher matcher = pattern.matcher("this is a text" + System.getProperty("line.separator") + " continued on another line"); + matcher.find(); + assertEquals("this is a text", matcher.group(1)); + } + + @Test + public void givenRegexWithLineTerminator_whenMatchesWithDotall_thenCorrect() { + Pattern pattern = Pattern.compile("(.*)", Pattern.DOTALL); + Matcher matcher = pattern.matcher("this is a text" + System.getProperty("line.separator") + " continued on another line"); + matcher.find(); + assertEquals("this is a text" + System.getProperty("line.separator") + " continued on another line", matcher.group(1)); + } + + @Test + public void givenRegexWithLineTerminator_whenMatchesWithEmbeddedDotall_thenCorrect() { + Pattern pattern = Pattern.compile("(?s)(.*)"); + Matcher matcher = pattern.matcher("this is a text" + System.getProperty("line.separator") + " continued on another line"); + matcher.find(); + assertEquals("this is a text" + System.getProperty("line.separator") + " continued on another line", matcher.group(1)); + } + + @Test + public void givenRegex_whenMatchesWithoutLiteralFlag_thenCorrect() { + Result result = runTest("(.*)", "text"); + assertTrue(result.isFound()); + } + + @Test + public void givenRegex_whenMatchFailsWithLiteralFlag_thenCorrect() { + Result result = runTest("(.*)", "text", Pattern.LITERAL); + assertFalse(result.isFound()); + } + + @Test + public void givenRegex_whenMatchesWithLiteralFlag_thenCorrect() { + Result result = runTest("(.*)", "text(.*)", Pattern.LITERAL); + assertTrue(result.isFound()); + } + + @Test + public void givenRegex_whenMatchFailsWithoutMultilineFlag_thenCorrect() { + Result result = runTest("dog$", "This is a dog" + System.getProperty("line.separator") + "this is a fox"); + assertFalse(result.isFound()); + } + + @Test + public void givenRegex_whenMatchesWithMultilineFlag_thenCorrect() { + Result result = runTest("dog$", "This is a dog" + System.getProperty("line.separator") + "this is a fox", Pattern.MULTILINE); + assertTrue(result.isFound()); + } + + @Test + public void givenRegex_whenMatchesWithEmbeddedMultilineFlag_thenCorrect() { + Result result = runTest("(?m)dog$", "This is a dog" + System.getProperty("line.separator") + "this is a fox"); + assertTrue(result.isFound()); + } + + @Test + public void givenMatch_whenGetsIndices_thenCorrect() { + Pattern pattern = Pattern.compile("dog"); + Matcher matcher = pattern.matcher("This dog is mine"); + matcher.find(); + assertEquals(5, matcher.start()); + assertEquals(8, matcher.end()); + } + + @Test + public void whenStudyMethodsWork_thenCorrect() { + Pattern pattern = Pattern.compile("dog"); + Matcher matcher = pattern.matcher("dogs are friendly"); + assertTrue(matcher.lookingAt()); + assertFalse(matcher.matches()); + + } + + @Test + public void whenMatchesStudyMethodWorks_thenCorrect() { + Pattern pattern = Pattern.compile("dog"); + Matcher matcher = pattern.matcher("dog"); + assertTrue(matcher.matches()); + + } + + @Test + public void whenReplaceFirstWorks_thenCorrect() { + Pattern pattern = Pattern.compile("dog"); + Matcher matcher = pattern.matcher("dogs are domestic animals, dogs are friendly"); + String newStr = matcher.replaceFirst("cat"); + assertEquals("cats are domestic animals, dogs are friendly", newStr); + + } + + @Test + public void whenReplaceAllWorks_thenCorrect() { + Pattern pattern = Pattern.compile("dog"); + Matcher matcher = pattern.matcher("dogs are domestic animals, dogs are friendly"); + String newStr = matcher.replaceAll("cat"); + assertEquals("cats are domestic animals, cats are friendly", newStr); + + } + + public synchronized static Result runTest(String regex, String text) { + pattern = Pattern.compile(regex); + matcher = pattern.matcher(text); + Result result = new Result(); + while (matcher.find()) + result.setCount(result.getCount() + 1); + if (result.getCount() > 0) + result.setFound(true); + return result; + } + + public synchronized static Result runTest(String regex, String text, int flags) { + pattern = Pattern.compile(regex, flags); + matcher = pattern.matcher(text); + Result result = new Result(); + while (matcher.find()) + result.setCount(result.getCount() + 1); + if (result.getCount() > 0) + result.setFound(true); + return result; + } +} From 25ea6ef7eeedad91acb7e452c7b19fe60c9c5380 Mon Sep 17 00:00:00 2001 From: slavisa-baeldung Date: Thu, 29 Sep 2016 00:12:05 +0200 Subject: [PATCH 169/265] BAEL-314 - renaming module --- spring-cloud/pom.xml | 2 +- .../application-config/discovery.properties | 0 .../application-config/gateway.properties | 0 .../application-config/resource.properties | 0 .../config/pom.xml | 0 .../spring/cloud/integration/config/ConfigApplication.java | 0 .../config/src/main/resources/application.properties | 0 .../discovery/pom.xml | 0 .../cloud/integration/discovery/DiscoveryApplication.java | 0 .../discovery/src/main/resources/bootstrap.properties | 0 .../gateway/pom.xml | 0 .../spring/cloud/integration/resource/GatewayApplication.java | 0 .../gateway/src/main/resources/bootstrap.properties | 0 .../pom.xml | 0 .../resource/pom.xml | 0 .../spring/cloud/integration/resource/ResourceApplication.java | 0 .../resource/src/main/resources/bootstrap.properties | 0 17 files changed, 1 insertion(+), 1 deletion(-) rename spring-cloud/{spring-cloud-integration => spring-cloud-bootstrap}/application-config/discovery.properties (100%) rename spring-cloud/{spring-cloud-integration => spring-cloud-bootstrap}/application-config/gateway.properties (100%) rename spring-cloud/{spring-cloud-integration => spring-cloud-bootstrap}/application-config/resource.properties (100%) rename spring-cloud/{spring-cloud-integration => spring-cloud-bootstrap}/config/pom.xml (100%) rename spring-cloud/{spring-cloud-integration => spring-cloud-bootstrap}/config/src/main/java/com/baeldung/spring/cloud/integration/config/ConfigApplication.java (100%) rename spring-cloud/{spring-cloud-integration => spring-cloud-bootstrap}/config/src/main/resources/application.properties (100%) rename spring-cloud/{spring-cloud-integration => spring-cloud-bootstrap}/discovery/pom.xml (100%) rename spring-cloud/{spring-cloud-integration => spring-cloud-bootstrap}/discovery/src/main/java/com/baeldung/spring/cloud/integration/discovery/DiscoveryApplication.java (100%) rename spring-cloud/{spring-cloud-integration => spring-cloud-bootstrap}/discovery/src/main/resources/bootstrap.properties (100%) rename spring-cloud/{spring-cloud-integration => spring-cloud-bootstrap}/gateway/pom.xml (100%) rename spring-cloud/{spring-cloud-integration => spring-cloud-bootstrap}/gateway/src/main/java/com/baeldung/spring/cloud/integration/resource/GatewayApplication.java (100%) rename spring-cloud/{spring-cloud-integration => spring-cloud-bootstrap}/gateway/src/main/resources/bootstrap.properties (100%) rename spring-cloud/{spring-cloud-integration => spring-cloud-bootstrap}/pom.xml (100%) rename spring-cloud/{spring-cloud-integration => spring-cloud-bootstrap}/resource/pom.xml (100%) rename spring-cloud/{spring-cloud-integration => spring-cloud-bootstrap}/resource/src/main/java/com/baeldung/spring/cloud/integration/resource/ResourceApplication.java (100%) rename spring-cloud/{spring-cloud-integration => spring-cloud-bootstrap}/resource/src/main/resources/bootstrap.properties (100%) diff --git a/spring-cloud/pom.xml b/spring-cloud/pom.xml index 340923cbdf..2349613def 100644 --- a/spring-cloud/pom.xml +++ b/spring-cloud/pom.xml @@ -10,7 +10,7 @@ spring-cloud-config spring-cloud-eureka spring-cloud-hystrix - spring-cloud-integration + spring-cloud-bootstrap pom diff --git a/spring-cloud/spring-cloud-integration/application-config/discovery.properties b/spring-cloud/spring-cloud-bootstrap/application-config/discovery.properties similarity index 100% rename from spring-cloud/spring-cloud-integration/application-config/discovery.properties rename to spring-cloud/spring-cloud-bootstrap/application-config/discovery.properties diff --git a/spring-cloud/spring-cloud-integration/application-config/gateway.properties b/spring-cloud/spring-cloud-bootstrap/application-config/gateway.properties similarity index 100% rename from spring-cloud/spring-cloud-integration/application-config/gateway.properties rename to spring-cloud/spring-cloud-bootstrap/application-config/gateway.properties diff --git a/spring-cloud/spring-cloud-integration/application-config/resource.properties b/spring-cloud/spring-cloud-bootstrap/application-config/resource.properties similarity index 100% rename from spring-cloud/spring-cloud-integration/application-config/resource.properties rename to spring-cloud/spring-cloud-bootstrap/application-config/resource.properties diff --git a/spring-cloud/spring-cloud-integration/config/pom.xml b/spring-cloud/spring-cloud-bootstrap/config/pom.xml similarity index 100% rename from spring-cloud/spring-cloud-integration/config/pom.xml rename to spring-cloud/spring-cloud-bootstrap/config/pom.xml diff --git a/spring-cloud/spring-cloud-integration/config/src/main/java/com/baeldung/spring/cloud/integration/config/ConfigApplication.java b/spring-cloud/spring-cloud-bootstrap/config/src/main/java/com/baeldung/spring/cloud/integration/config/ConfigApplication.java similarity index 100% rename from spring-cloud/spring-cloud-integration/config/src/main/java/com/baeldung/spring/cloud/integration/config/ConfigApplication.java rename to spring-cloud/spring-cloud-bootstrap/config/src/main/java/com/baeldung/spring/cloud/integration/config/ConfigApplication.java diff --git a/spring-cloud/spring-cloud-integration/config/src/main/resources/application.properties b/spring-cloud/spring-cloud-bootstrap/config/src/main/resources/application.properties similarity index 100% rename from spring-cloud/spring-cloud-integration/config/src/main/resources/application.properties rename to spring-cloud/spring-cloud-bootstrap/config/src/main/resources/application.properties diff --git a/spring-cloud/spring-cloud-integration/discovery/pom.xml b/spring-cloud/spring-cloud-bootstrap/discovery/pom.xml similarity index 100% rename from spring-cloud/spring-cloud-integration/discovery/pom.xml rename to spring-cloud/spring-cloud-bootstrap/discovery/pom.xml diff --git a/spring-cloud/spring-cloud-integration/discovery/src/main/java/com/baeldung/spring/cloud/integration/discovery/DiscoveryApplication.java b/spring-cloud/spring-cloud-bootstrap/discovery/src/main/java/com/baeldung/spring/cloud/integration/discovery/DiscoveryApplication.java similarity index 100% rename from spring-cloud/spring-cloud-integration/discovery/src/main/java/com/baeldung/spring/cloud/integration/discovery/DiscoveryApplication.java rename to spring-cloud/spring-cloud-bootstrap/discovery/src/main/java/com/baeldung/spring/cloud/integration/discovery/DiscoveryApplication.java diff --git a/spring-cloud/spring-cloud-integration/discovery/src/main/resources/bootstrap.properties b/spring-cloud/spring-cloud-bootstrap/discovery/src/main/resources/bootstrap.properties similarity index 100% rename from spring-cloud/spring-cloud-integration/discovery/src/main/resources/bootstrap.properties rename to spring-cloud/spring-cloud-bootstrap/discovery/src/main/resources/bootstrap.properties diff --git a/spring-cloud/spring-cloud-integration/gateway/pom.xml b/spring-cloud/spring-cloud-bootstrap/gateway/pom.xml similarity index 100% rename from spring-cloud/spring-cloud-integration/gateway/pom.xml rename to spring-cloud/spring-cloud-bootstrap/gateway/pom.xml diff --git a/spring-cloud/spring-cloud-integration/gateway/src/main/java/com/baeldung/spring/cloud/integration/resource/GatewayApplication.java b/spring-cloud/spring-cloud-bootstrap/gateway/src/main/java/com/baeldung/spring/cloud/integration/resource/GatewayApplication.java similarity index 100% rename from spring-cloud/spring-cloud-integration/gateway/src/main/java/com/baeldung/spring/cloud/integration/resource/GatewayApplication.java rename to spring-cloud/spring-cloud-bootstrap/gateway/src/main/java/com/baeldung/spring/cloud/integration/resource/GatewayApplication.java diff --git a/spring-cloud/spring-cloud-integration/gateway/src/main/resources/bootstrap.properties b/spring-cloud/spring-cloud-bootstrap/gateway/src/main/resources/bootstrap.properties similarity index 100% rename from spring-cloud/spring-cloud-integration/gateway/src/main/resources/bootstrap.properties rename to spring-cloud/spring-cloud-bootstrap/gateway/src/main/resources/bootstrap.properties diff --git a/spring-cloud/spring-cloud-integration/pom.xml b/spring-cloud/spring-cloud-bootstrap/pom.xml similarity index 100% rename from spring-cloud/spring-cloud-integration/pom.xml rename to spring-cloud/spring-cloud-bootstrap/pom.xml diff --git a/spring-cloud/spring-cloud-integration/resource/pom.xml b/spring-cloud/spring-cloud-bootstrap/resource/pom.xml similarity index 100% rename from spring-cloud/spring-cloud-integration/resource/pom.xml rename to spring-cloud/spring-cloud-bootstrap/resource/pom.xml diff --git a/spring-cloud/spring-cloud-integration/resource/src/main/java/com/baeldung/spring/cloud/integration/resource/ResourceApplication.java b/spring-cloud/spring-cloud-bootstrap/resource/src/main/java/com/baeldung/spring/cloud/integration/resource/ResourceApplication.java similarity index 100% rename from spring-cloud/spring-cloud-integration/resource/src/main/java/com/baeldung/spring/cloud/integration/resource/ResourceApplication.java rename to spring-cloud/spring-cloud-bootstrap/resource/src/main/java/com/baeldung/spring/cloud/integration/resource/ResourceApplication.java diff --git a/spring-cloud/spring-cloud-integration/resource/src/main/resources/bootstrap.properties b/spring-cloud/spring-cloud-bootstrap/resource/src/main/resources/bootstrap.properties similarity index 100% rename from spring-cloud/spring-cloud-integration/resource/src/main/resources/bootstrap.properties rename to spring-cloud/spring-cloud-bootstrap/resource/src/main/resources/bootstrap.properties From e0d9cd41a2e0fae80d6be324767f295517ba8fac Mon Sep 17 00:00:00 2001 From: maverick Date: Thu, 29 Sep 2016 14:57:30 +0530 Subject: [PATCH 170/265] Changes in pom.xml as suggested to remove formating changes in pom.xml commit. --- core-java/pom.xml | 347 +++++++++++++++++++++++----------------------- 1 file changed, 172 insertions(+), 175 deletions(-) diff --git a/core-java/pom.xml b/core-java/pom.xml index 802436e606..bce97d1148 100644 --- a/core-java/pom.xml +++ b/core-java/pom.xml @@ -1,214 +1,211 @@ - - 4.0.0 - com.baeldung - core-java - 0.1.0-SNAPSHOT + + 4.0.0 + com.baeldung + core-java + 0.1.0-SNAPSHOT - core-java + core-java - + - - - net.sourceforge.collections - collections-generic - 4.01 - - - com.google.guava - guava - ${guava.version} - + + + net.sourceforge.collections + collections-generic + 4.01 + + + com.google.guava + guava + ${guava.version} + - - org.apache.commons - commons-collections4 - 4.0 - + + org.apache.commons + commons-collections4 + 4.0 + - - commons-io - commons-io - 2.4 - + + commons-io + commons-io + 2.4 + - - org.apache.commons - commons-lang3 - ${commons-lang3.version} - + + org.apache.commons + commons-lang3 + ${commons-lang3.version} + - - org.apache.commons - commons-math3 - 3.3 - + + org.apache.commons + commons-math3 + 3.3 + - + - + - - com.fasterxml.jackson.core - jackson-databind - ${jackson.version} - + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + - + - - org.slf4j - slf4j-api - ${org.slf4j.version} - - - ch.qos.logback - logback-classic - ${logback.version} - - - - org.slf4j - jcl-over-slf4j - ${org.slf4j.version} - - - - org.slf4j - log4j-over-slf4j - ${org.slf4j.version} - + + org.slf4j + slf4j-api + ${org.slf4j.version} + + + ch.qos.logback + logback-classic + ${logback.version} + + + + org.slf4j + jcl-over-slf4j + ${org.slf4j.version} + + + + org.slf4j + log4j-over-slf4j + ${org.slf4j.version} + - + - - junit - junit - ${junit.version} - test - + + junit + junit + ${junit.version} + test + - - org.hamcrest - hamcrest-core - ${org.hamcrest.version} - test - - - org.hamcrest - hamcrest-library - ${org.hamcrest.version} - test - + + org.hamcrest + hamcrest-core + ${org.hamcrest.version} + test + + + org.hamcrest + hamcrest-library + ${org.hamcrest.version} + test + - - org.assertj - assertj-core - ${assertj.version} - test - + + org.assertj + assertj-core + ${assertj.version} + test + - - org.testng - testng - ${testng.version} - test - + + org.testng + testng + ${testng.version} + test + - - org.mockito - mockito-core - ${mockito.version} - test - + + org.mockito + mockito-core + ${mockito.version} + test + + + + commons-codec + commons-codec + 1.10 + - - - commons-codec - commons-codec - 1.10 - + + + core-java + + + src/main/resources + true + + - + - - core-java - - - src/main/resources - true - - + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + 1.8 + 1.8 + + - + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + + **/*IntegrationTest.java + + + - - org.apache.maven.plugins - maven-compiler-plugin - ${maven-compiler-plugin.version} - - 1.8 - 1.8 - - + - - org.apache.maven.plugins - maven-surefire-plugin - ${maven-surefire-plugin.version} - - - **/*IntegrationTest.java - - - + - + + + 4.3.11.Final + 5.1.38 - + + 2.7.2 - - - 4.3.11.Final - 5.1.38 + + 1.7.13 + 1.1.3 - - 2.7.2 + + 5.1.3.Final - - 1.7.13 - 1.1.3 + + 19.0 + 3.4 - - 5.1.3.Final + + 1.3 + 4.12 + 1.10.19 + 6.8 + 3.5.1 - - 19.0 - 3.4 + 4.4.1 + 4.5 - - 1.3 - 4.12 - 1.10.19 - 6.8 - 3.5.1 + 2.9.0 - 4.4.1 - 4.5 + + 3.5.1 + 2.6 + 2.19.1 + 2.7 + 1.4.18 - 2.9.0 - - - 3.5.1 - 2.6 - 2.19.1 - 2.7 - 1.4.18 - - + \ No newline at end of file From 758c5f7319765ed5b1fb352dfd6eca7d67c57162 Mon Sep 17 00:00:00 2001 From: maverick Date: Thu, 29 Sep 2016 15:06:45 +0530 Subject: [PATCH 171/265] Removed files not useful in this branch for MD5 article. --- .../java/com/baeldung/beans/Employee.java | 49 --------- .../org/baeldung/java/sorting/ArraySort.java | 103 ----------------- .../baeldung/java/sorting/ComparingTest.java | 38 ------- .../org/baeldung/java/sorting/Employee.java | 54 --------- .../org/baeldung/java/sorting/ListSort.java | 59 ---------- .../org/baeldung/java/sorting/MapSort.java | 104 ------------------ .../java/sorting/NaturalOrderExample.java | 34 ------ .../org/baeldung/java/sorting/SetSort.java | 54 --------- 8 files changed, 495 deletions(-) delete mode 100644 core-java/src/main/java/com/baeldung/beans/Employee.java delete mode 100644 core-java/src/test/java/org/baeldung/java/sorting/ArraySort.java delete mode 100644 core-java/src/test/java/org/baeldung/java/sorting/ComparingTest.java delete mode 100644 core-java/src/test/java/org/baeldung/java/sorting/Employee.java delete mode 100644 core-java/src/test/java/org/baeldung/java/sorting/ListSort.java delete mode 100644 core-java/src/test/java/org/baeldung/java/sorting/MapSort.java delete mode 100644 core-java/src/test/java/org/baeldung/java/sorting/NaturalOrderExample.java delete mode 100644 core-java/src/test/java/org/baeldung/java/sorting/SetSort.java diff --git a/core-java/src/main/java/com/baeldung/beans/Employee.java b/core-java/src/main/java/com/baeldung/beans/Employee.java deleted file mode 100644 index 78d65e18fe..0000000000 --- a/core-java/src/main/java/com/baeldung/beans/Employee.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.baeldung.beans; - -public class Employee implements Comparable{ - private String name; - private int age; - private double salary; - - public Employee() { - - } - - public Employee(String name, int age, double salary) { - super(); - this.name = name; - this.age = age; - this.salary = salary; - } - - public int getAge() { - return age; - } - public void setAge(int age) { - this.age = age; - } - public String getName() { - return name; - } - public void setName(String name) { - this.name = name; - } - public double getSalary() { - return salary; - } - public void setSalary(double salary) { - this.salary = salary; - } - - @Override - public String toString() { - return "("+name+","+age+","+salary+")"; - - } - - @Override - public int compareTo(Object o) { - Employee e = (Employee) o; - return getAge() - e.getAge() ; - } -} diff --git a/core-java/src/test/java/org/baeldung/java/sorting/ArraySort.java b/core-java/src/test/java/org/baeldung/java/sorting/ArraySort.java deleted file mode 100644 index 35e6c8b46d..0000000000 --- a/core-java/src/test/java/org/baeldung/java/sorting/ArraySort.java +++ /dev/null @@ -1,103 +0,0 @@ -package org.baeldung.java.sorting; - -import static org.junit.Assert.*; - -import java.sql.Array; -import java.util.Arrays; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; - -import org.junit.Before; -import org.junit.Test; - -public class ArraySort { - - private int[] numbers; - private Integer[] integers; - private String[] names; - private Employee[] employees; - - @Before - public void initData() { - numbers = new int[] { 5, 1, 89, 255, 7, 88, 200, 123, 66 }; - integers = new Integer[] { 5, 1, 89, 255, 7, 88, 200, 123, 66 }; - - names = new String[] { "John", "Apple", "Steve", "Frank", "Earl", "Jessica", "Jake", "Pearl" }; - - employees = new Employee[] { new Employee("John", 23, 5000), new Employee("Steve", 26, 6000), new Employee("Frank", 33, 7000), - new Employee("Earl", 43, 10000), new Employee("Jessica", 23, 4000), new Employee("Pearl", 33, 6000) }; - - } - - @Test - public void naturalSortIntArray() { - - Arrays.sort(numbers); - - } - - @Test - public void comparatorSortIntArray() { - - Arrays.sort(integers, new Comparator() { - - @Override - public int compare(Integer a, Integer b) { - return a - b; - } - }); - - } - - @Test - public void givenArray_whenUsingSortWithLambdas_thenSortedArray() { - Arrays.sort(integers, (a, b) -> { - return a - b; - }); - - } - - @Test - public void comparableSortEmployeeArrayByAge_NaturalOrder() { - - Arrays.sort(employees); - - } - - @Test - public void comparatorSortEmployeeArrayByName() { - Arrays.sort(employees, new Comparator() { - - @Override - public int compare(Employee o1, Employee o2) { - - return o1.getName().compareTo(o2.getName()); - } - }); - } - - @Test - public void comparatorSortEmployeeArrayByName_Java8Lambda() { - Arrays.sort(employees, (o1, o2) -> { - return o1.getName().compareTo(o2.getName()); - - }); - } - - @Test - public void givenIntArray_whenUsingRangeSort_thenRangeSortedArray() { - System.out.println(Arrays.toString(numbers)); - Arrays.sort(numbers, 3, 7); - System.out.println(Arrays.toString(numbers)); - - } - - @Test - public void givenIntArray_whenUsingParallelSort_thenParallelSortedArray() { - - Arrays.parallelSort(numbers); - - } - -} diff --git a/core-java/src/test/java/org/baeldung/java/sorting/ComparingTest.java b/core-java/src/test/java/org/baeldung/java/sorting/ComparingTest.java deleted file mode 100644 index 02cdede7db..0000000000 --- a/core-java/src/test/java/org/baeldung/java/sorting/ComparingTest.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.baeldung.java.sorting; - -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; - -import org.junit.Before; -import org.junit.Test; - -public class ComparingTest { - - private List employees; - - @Before - public void initData() { - - // employees = Arrays.asList(new Employee[] { - // new Employee("John", 23, 5000), - // new Employee("Steve", 26, 6000), - // new Employee("Frank", 33, 7000), - // new Employee("Earl", 43, 10000), - // new Employee("Jessica", 23, 4000), - // new Employee("Pearl", 33, 6000) }); - - } - - @Test - public void testComparing() { - employees = Arrays.asList(new Employee[] { new Employee("John", 23, 5000), new Employee("Steve", 26, 6000), new Employee("Frank", 33, 7000), - new Employee("Earl", 43, 10000), new Employee("Jessica", 23, 4000), new Employee("Pearl", 33, 6000) }); - - employees.sort(Comparator.comparing(Employee::getAge).thenComparing(Employee::getName)); - - } - -} diff --git a/core-java/src/test/java/org/baeldung/java/sorting/Employee.java b/core-java/src/test/java/org/baeldung/java/sorting/Employee.java deleted file mode 100644 index f36e552daf..0000000000 --- a/core-java/src/test/java/org/baeldung/java/sorting/Employee.java +++ /dev/null @@ -1,54 +0,0 @@ -package org.baeldung.java.sorting; - -public class Employee implements Comparable { - private String name; - private int age; - private double salary; - - public Employee() { - - } - - public Employee(String name, int age, double salary) { - super(); - this.name = name; - this.age = age; - this.salary = salary; - } - - public int getAge() { - return age; - } - - public void setAge(int age) { - this.age = age; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public double getSalary() { - return salary; - } - - public void setSalary(double salary) { - this.salary = salary; - } - - @Override - public String toString() { - return "(" + name + "," + age + "," + salary + ")"; - - } - - @Override - public int compareTo(Object o) { - Employee e = (Employee) o; - return getAge() - e.getAge(); - } -} diff --git a/core-java/src/test/java/org/baeldung/java/sorting/ListSort.java b/core-java/src/test/java/org/baeldung/java/sorting/ListSort.java deleted file mode 100644 index 91e1c40607..0000000000 --- a/core-java/src/test/java/org/baeldung/java/sorting/ListSort.java +++ /dev/null @@ -1,59 +0,0 @@ -package org.baeldung.java.sorting; - -import java.util.Arrays; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; - -import org.junit.Before; -import org.junit.Test; - -public class ListSort { - - private List integers; - private List employees; - - @Before - public void initData() { - integers = Arrays.asList(new Integer[] { 5, 1, 89, 255, 7, 88, 200, 123, 66 }); - - employees = Arrays.asList(new Employee[] { new Employee("John", 23, 5000), new Employee("Steve", 26, 6000), new Employee("Frank", 33, 7000), - new Employee("Earl", 43, 10000), new Employee("Jessica", 23, 4000), new Employee("Pearl", 33, 6000) }); - } - - @Test - public void naturalOrderIntegerListSort() { - - Collections.sort(integers); - - } - - @Test - public void comparableEmployeeSortByAge() { - - Collections.sort(employees); - - } - - @Test - public void comparatorEmployeeSortByName() { - - Collections.sort(employees, new Comparator() { - @Override - public int compare(Employee e1, Employee e2) { - return e1.getName().compareTo(e2.getName()); - } - }); - - } - - @Test - public void comparatorEmployeeSortByNameJava8() { - - Collections.sort(employees, (e1, e2) -> { - return e1.getName().compareTo(e1.getName()); - }); - - } - -} diff --git a/core-java/src/test/java/org/baeldung/java/sorting/MapSort.java b/core-java/src/test/java/org/baeldung/java/sorting/MapSort.java deleted file mode 100644 index 1a9fd30437..0000000000 --- a/core-java/src/test/java/org/baeldung/java/sorting/MapSort.java +++ /dev/null @@ -1,104 +0,0 @@ -package org.baeldung.java.sorting; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.TreeMap; - -import org.junit.Before; -import org.junit.Test; - -public class MapSort { - - HashMap map; - - @Before - public void initData() { - map = new HashMap<>(); - - map.put(55, "John"); - map.put(22, "Apple"); - map.put(66, "Earl"); - map.put(77, "Pearl"); - map.put(12, "George"); - map.put(6, "Rocky"); - - } - - @Test - public void sortMapByKeys() { - - - List> entries = new ArrayList<>(map.entrySet()); - - Collections.sort(entries, new Comparator>() { - - @Override - public int compare(Entry o1, Entry o2) { - - return o1.getKey().compareTo(o2.getKey()); - } - }); - - HashMap sortedMap = new LinkedHashMap<>(); - - for (Map.Entry entry : entries) { - sortedMap.put(entry.getKey(), entry.getValue()); - } - - - } - - @Test - public void sortMapByValues() { - - //showMap(map); - - List> entries = new ArrayList<>(map.entrySet()); - - Collections.sort(entries, new Comparator>() { - - @Override - public int compare(Entry o1, Entry o2) { - return o1.getValue().compareTo(o2.getValue()); - } - }); - - HashMap sortedMap = new LinkedHashMap<>(); - for (Map.Entry entry : entries) { - sortedMap.put(entry.getKey(), entry.getValue()); - } - -/// showMap(sortedMap); - } - - @Test - public void sortMapViaTreeMap() { - -// showMap(map); - Map treeMap = new TreeMap<>(new Comparator() { - @Override - public int compare(Integer o1, Integer o2) { - return o1 - o2; - } - }); - - treeMap.putAll(map); -// showMap(treeMap); - - } - - public void showMap(Map map1) { - for (Map.Entry entry : map1.entrySet()) { - System.out.println("[Key: " + entry.getKey() + " , " + "Value: " + entry.getValue() + "] "); - - } - - } - -} diff --git a/core-java/src/test/java/org/baeldung/java/sorting/NaturalOrderExample.java b/core-java/src/test/java/org/baeldung/java/sorting/NaturalOrderExample.java deleted file mode 100644 index bb35557561..0000000000 --- a/core-java/src/test/java/org/baeldung/java/sorting/NaturalOrderExample.java +++ /dev/null @@ -1,34 +0,0 @@ -package org.baeldung.java.sorting; - -import java.util.Arrays; -import java.util.Comparator; - -import org.junit.Test; - -public class NaturalOrderExample { - - @Test - public void sortArray() { - int[] numbers = new int[] { 5, 1, 89, 255, 7, 88, 200, 123, 66 }; - - Arrays.sort(numbers); - - } - - @Test - public void sortEmployees() { - Employee[] employees = new Employee[] { new Employee("John", 23, 5000), new Employee("Steve", 26, 6000), new Employee("Frank", 33, 7000), - new Employee("Earl", 43, 10000), new Employee("Jessica", 23, 4000), new Employee("Pearl", 33, 6000) }; - - Arrays.sort(employees, new Comparator() { - - @Override - public int compare(Employee o1, Employee o2) { - return -(int) (o1.getSalary() - o2.getSalary()); - } - }); - - - } - -} diff --git a/core-java/src/test/java/org/baeldung/java/sorting/SetSort.java b/core-java/src/test/java/org/baeldung/java/sorting/SetSort.java deleted file mode 100644 index d892223862..0000000000 --- a/core-java/src/test/java/org/baeldung/java/sorting/SetSort.java +++ /dev/null @@ -1,54 +0,0 @@ -package org.baeldung.java.sorting; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.TreeSet; - -import org.junit.Before; -import org.junit.Test; - -public class SetSort { - - private HashSet integers; - private TreeSet employees; - - @Before - public void initData() { - - integers = new HashSet<>(); - integers.addAll(Arrays.asList(new Integer[] { 5, 1, 89, 255, 7, 88, 200, 123, 66 })); - - employees = new TreeSet<>(); - - employees.addAll(Arrays.asList(new Employee[] { new Employee("John", 23, 5000), new Employee("Steve", 26, 6000), - new Employee("Frank", 33, 7000), new Employee("Earl", 43, 10000), new Employee("Jessica", 23, 4000), new Employee("Pearl", 33, 6000) })); - - } - - @Test - public void hashSetSortIntegers() { - - - - ArrayList list = new ArrayList(integers); - Collections.sort(list, (i1, i2) -> { - return i2 - i1; - }); - - - } - - @Test - public void treeSetEmployeeSorting() { - - ArrayList list = new ArrayList(employees); - Collections.sort(list, (e1, e2) -> { - return e2.getName().compareTo(e1.getName()); - }); - - } - -} From de699f18321b579655e79a850c686687c42454ed Mon Sep 17 00:00:00 2001 From: Ivan Paolillo Date: Thu, 29 Sep 2016 14:22:10 +0200 Subject: [PATCH 172/265] OkHttp test refactoring --- .../okhttp/OkHttpFileUploadingTest.java | 81 +++++++++++++++++++ .../org/baeldung/okhttp/OkHttpMiscTest.java | 21 +++-- .../baeldung/okhttp/OkHttpPostingTest.java | 59 -------------- 3 files changed, 96 insertions(+), 65 deletions(-) create mode 100644 okhttp/src/test/java/org/baeldung/okhttp/OkHttpFileUploadingTest.java diff --git a/okhttp/src/test/java/org/baeldung/okhttp/OkHttpFileUploadingTest.java b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpFileUploadingTest.java new file mode 100644 index 0000000000..6c43af6778 --- /dev/null +++ b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpFileUploadingTest.java @@ -0,0 +1,81 @@ +package org.baeldung.okhttp; + +import static org.hamcrest.Matchers.equalTo; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertThat; + +import java.io.File; +import java.io.IOException; + +import org.baeldung.okhttp.ProgressRequestWrapper; +import org.junit.Test; + +import okhttp3.Call; +import okhttp3.MediaType; +import okhttp3.MultipartBody; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; + +public class OkHttpFileUploadingTest { + + private static final String BASE_URL = "http://localhost:8080/spring-rest"; + + @Test + public void whenUploadFileUsingOkHttp_thenCorrect() throws IOException { + + OkHttpClient client = new OkHttpClient(); + + RequestBody requestBody = new MultipartBody.Builder() + .setType(MultipartBody.FORM) + .addFormDataPart("file", "file.ext", + RequestBody.create(MediaType.parse("image/png"), new File("src/test/resources/test.in"))) + .build(); + + Request request = new Request.Builder() + .url(BASE_URL + "/users/upload") + .post(requestBody) + .build(); + + Call call = client.newCall(request); + Response response = call.execute(); + + assertThat(response.code(), equalTo(200)); + } + + @Test + public void whenGetUploadFileProgressUsingOkHttp_thenCorrect() throws IOException { + + OkHttpClient client = new OkHttpClient(); + + RequestBody requestBody = new MultipartBody.Builder() + .setType(MultipartBody.FORM) + .addFormDataPart("file", "file.ext", + RequestBody.create(MediaType.parse("image/png"), new File("src/test/resources/test.in"))) + .build(); + + + ProgressRequestWrapper.ProgressListener listener = new ProgressRequestWrapper.ProgressListener() { + + public void onRequestProgress(long bytesWritten, long contentLength) { + + float percentage = 100f * bytesWritten / contentLength; + assertFalse(Float.compare(percentage, 100) > 0); + } + }; + + ProgressRequestWrapper countingBody = new ProgressRequestWrapper(requestBody, listener); + + Request request = new Request.Builder() + .url(BASE_URL + "/users/upload") + .post(countingBody) + .build(); + + Call call = client.newCall(request); + Response response = call.execute(); + + assertThat(response.code(), equalTo(200)); + + } +} diff --git a/okhttp/src/test/java/org/baeldung/okhttp/OkHttpMiscTest.java b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpMiscTest.java index 246857cb71..829bafe8ef 100644 --- a/okhttp/src/test/java/org/baeldung/okhttp/OkHttpMiscTest.java +++ b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpMiscTest.java @@ -92,13 +92,22 @@ public class OkHttpMiscTest { //.cacheControl(CacheControl.FORCE_CACHE) .build(); - Response response = client.newCall(request).execute(); + Response response1 = client.newCall(request).execute(); - String responseBody = response.body().string(); + String responseBody1 = response1.body().string(); - System.out.println("Response response: " + response); - System.out.println("Response cache response: " + response.cacheResponse()); - System.out.println("Response network response: " + response.networkResponse()); - System.out.println("Response responseBody: " + responseBody); + System.out.println("Response 1 response: " + response1); + System.out.println("Response 1 cache response: " + response1.cacheResponse()); + System.out.println("Response 1 network response: " + response1.networkResponse()); + System.out.println("Response 1 responseBody: " + responseBody1); + + Response response2 = client.newCall(request).execute(); + + String responseBody2 = response2.body().string(); + + System.out.println("Response 2 response: " + response2); + System.out.println("Response 2 cache response: " + response2.cacheResponse()); + System.out.println("Response 2 network response: " + response2.networkResponse()); + System.out.println("Response 2 responseBody: " + responseBody2); } } diff --git a/okhttp/src/test/java/org/baeldung/okhttp/OkHttpPostingTest.java b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpPostingTest.java index e71db94c36..cdb7f2ac8d 100644 --- a/okhttp/src/test/java/org/baeldung/okhttp/OkHttpPostingTest.java +++ b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpPostingTest.java @@ -1,13 +1,11 @@ package org.baeldung.okhttp; import static org.hamcrest.Matchers.equalTo; -import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertThat; import java.io.File; import java.io.IOException; -import org.baeldung.okhttp.ProgressRequestWrapper; import org.junit.Test; import okhttp3.Call; @@ -108,61 +106,4 @@ public class OkHttpPostingTest { assertThat(response.code(), equalTo(200)); } - - @Test - public void whenUploadFileUsingOkHttp_thenCorrect() throws IOException { - - OkHttpClient client = new OkHttpClient(); - - RequestBody requestBody = new MultipartBody.Builder() - .setType(MultipartBody.FORM) - .addFormDataPart("file", "file.ext", - RequestBody.create(MediaType.parse("image/png"), new File("src/test/resources/test.in"))) - .build(); - - Request request = new Request.Builder() - .url(BASE_URL + "/users/upload") - .post(requestBody) - .build(); - - Call call = client.newCall(request); - Response response = call.execute(); - - assertThat(response.code(), equalTo(200)); - } - - @Test - public void whenGetUploadFileProgressUsingOkHttp_thenCorrect() throws IOException { - - OkHttpClient client = new OkHttpClient(); - - RequestBody requestBody = new MultipartBody.Builder() - .setType(MultipartBody.FORM) - .addFormDataPart("file", "file.ext", - RequestBody.create(MediaType.parse("image/png"), new File("src/test/resources/test.in"))) - .build(); - - - ProgressRequestWrapper.ProgressListener listener = new ProgressRequestWrapper.ProgressListener() { - - public void onRequestProgress(long bytesWritten, long contentLength) { - - float percentage = 100f * bytesWritten / contentLength; - assertFalse(Float.compare(percentage, 100) > 0); - } - }; - - ProgressRequestWrapper countingBody = new ProgressRequestWrapper(requestBody, listener); - - Request request = new Request.Builder() - .url(BASE_URL + "/users/upload") - .post(countingBody) - .build(); - - Call call = client.newCall(request); - Response response = call.execute(); - - assertThat(response.code(), equalTo(200)); - - } } From 769956a808235ba55e0ea2440df38010a85880cf Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Thu, 29 Sep 2016 09:35:12 -0400 Subject: [PATCH 173/265] added pom.xml --- spring-userservice/pom.xml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/spring-userservice/pom.xml b/spring-userservice/pom.xml index 5edaf15d9b..341e232ec6 100644 --- a/spring-userservice/pom.xml +++ b/spring-userservice/pom.xml @@ -195,7 +195,17 @@ jstl-api 1.2 - + + org.springframework.boot + spring-boot-test + 1.4.1.RELEASE + + + org.springframework.boot + spring-boot + 1.4.1.RELEASE + + spring-userservice From e021ca1be62bbad90c1ca288d9701d2c288c5c5b Mon Sep 17 00:00:00 2001 From: slavisa-baeldung Date: Thu, 29 Sep 2016 16:17:07 +0200 Subject: [PATCH 174/265] BAEL-255 - read file from Java --- core-java-8/src/main/resources/fileTest.txt | 1 + .../com/baeldung/file/FileOperationsTest.java | 78 +++++++++++++++++++ 2 files changed, 79 insertions(+) create mode 100644 core-java-8/src/main/resources/fileTest.txt create mode 100644 core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java diff --git a/core-java-8/src/main/resources/fileTest.txt b/core-java-8/src/main/resources/fileTest.txt new file mode 100644 index 0000000000..ce4bea208b --- /dev/null +++ b/core-java-8/src/main/resources/fileTest.txt @@ -0,0 +1 @@ +Hello World from fileTest.txt!!! \ No newline at end of file diff --git a/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java b/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java new file mode 100644 index 0000000000..b1476b6360 --- /dev/null +++ b/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java @@ -0,0 +1,78 @@ +package com.baeldung.file; + +import org.hamcrest.Matchers; +import org.junit.Assert; +import org.junit.Test; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.URL; +import java.net.URLConnection; + +import static org.hamcrest.CoreMatchers.containsString; + +public class FileOperationsTest { + + @Test + public void givenFileName_whenUsingClassloader_thenFileData() throws IOException { + String expectedData = "Hello World from fileTest.txt!!!"; + + ClassLoader classLoader = getClass().getClassLoader(); + InputStream inputStream = classLoader.getResourceAsStream("fileTest.txt"); + String data = readFromInputStream(inputStream); + + Assert.assertThat(data, containsString(expectedData)); +} + + @Test + public void givenFileNameAsAbsolutePath_whenUsingClasspath_thenFileData() throws IOException { + String expectedData = "Hello World from fileTest.txt!!!"; + + Class clazz = FileOperationsTest.class; + InputStream inputStream = clazz.getResourceAsStream("/fileTest.txt"); + String data = readFromInputStream(inputStream); + + Assert.assertThat(data, containsString(expectedData)); + } + + @Test + public void givenURLName_whenUsingURL_thenFileData() throws IOException { + String expectedData = "Baeldung"; + + URL urlObject = new URL("http://www.baeldung.com/"); + URLConnection urlConnection = urlObject.openConnection(); + + InputStream inputStream = urlConnection.getInputStream(); + String data = readFromInputStream(inputStream); + + Assert.assertThat(data, containsString(expectedData)); + } + + @Test + public void givenFileName_whenUsingJarFile_thenFileData() throws IOException { + String expectedData = "BSD License"; + + Class clazz = Matchers.class; + InputStream inputStream = clazz.getResourceAsStream("/LICENSE.txt"); + String data = readFromInputStream(inputStream); + + Assert.assertThat(data, containsString(expectedData)); + } + + private String readFromInputStream(InputStream inputStream) throws IOException { + InputStreamReader inputStreamReader = new InputStreamReader(inputStream); + BufferedReader bufferedReader = new BufferedReader(inputStreamReader); + StringBuilder resultStringBuilder = new StringBuilder(); + String line; + while ((line = bufferedReader.readLine()) != null) { + resultStringBuilder.append(line); + resultStringBuilder.append("\n"); + } + bufferedReader.close(); + inputStreamReader.close(); + inputStream.close(); + return resultStringBuilder.toString(); + } +} \ No newline at end of file From d12d4e6ca56e9127964d71ed9a832047a6be676c Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Thu, 29 Sep 2016 13:52:11 -0400 Subject: [PATCH 175/265] update dependency --- spring-userservice/pom.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/spring-userservice/pom.xml b/spring-userservice/pom.xml index 341e232ec6..93b01ee49c 100644 --- a/spring-userservice/pom.xml +++ b/spring-userservice/pom.xml @@ -139,11 +139,6 @@ ${org.springframework.version} - - javax.servlet - servlet-api - 3.0-alpha-1 - org.springframework.security spring-security-core @@ -205,6 +200,11 @@ spring-boot 1.4.1.RELEASE + + javax.servlet + javax.servlet-api + 3.1.0 + From 1b57da559b7b0dba3f1bb4daaee143c6368d91d6 Mon Sep 17 00:00:00 2001 From: Slavisa Baeldung Date: Fri, 30 Sep 2016 16:10:03 +0200 Subject: [PATCH 176/265] BAEL-305 - flatten the module structure for patterns section --- .../patterns/front/controller/data/Book.java | 15 -------- enterprise-patterns/pom.xml | 35 ------------------ .../pom.xml | 20 ++++++---- .../controller/FrontControllerServlet.java | 0 .../controller/commands/FrontCommand.java | 0 .../controller/commands/SearchCommand.java | 0 .../controller/commands/UnknownCommand.java | 0 .../patterns/front/controller/data/Book.java | 12 ++---- .../front/controller/data/Bookshelf.java | 4 +- .../front/controller/data/BookshelfImpl.java | 0 .../src/main/resources/front controller.png | Bin .../src/main/resources/front controller.puml | 0 .../main/webapp/WEB-INF/jsp/book-found.jsp | 0 .../main/webapp/WEB-INF/jsp/book-notfound.jsp | 0 .../src/main/webapp/WEB-INF/jsp/unknown.jsp | 0 .../src/main/webapp/WEB-INF/web.xml | 0 16 files changed, 18 insertions(+), 68 deletions(-) delete mode 100644 enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Book.java delete mode 100644 enterprise-patterns/pom.xml rename {enterprise-patterns/front-controller-pattern => patterns}/pom.xml (77%) rename {enterprise-patterns/front-controller-pattern => patterns}/src/main/java/com/baeldung/enterprise/patterns/front/controller/FrontControllerServlet.java (100%) rename {enterprise-patterns/front-controller-pattern => patterns}/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/FrontCommand.java (100%) rename {enterprise-patterns/front-controller-pattern => patterns}/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/SearchCommand.java (100%) rename {enterprise-patterns/front-controller-pattern => patterns}/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/UnknownCommand.java (100%) rename enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/BookImpl.java => patterns/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Book.java (75%) rename {enterprise-patterns/front-controller-pattern => patterns}/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Bookshelf.java (55%) rename {enterprise-patterns/front-controller-pattern => patterns}/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/BookshelfImpl.java (100%) rename {enterprise-patterns/front-controller-pattern => patterns}/src/main/resources/front controller.png (100%) rename {enterprise-patterns/front-controller-pattern => patterns}/src/main/resources/front controller.puml (100%) rename {enterprise-patterns/front-controller-pattern => patterns}/src/main/webapp/WEB-INF/jsp/book-found.jsp (100%) rename {enterprise-patterns/front-controller-pattern => patterns}/src/main/webapp/WEB-INF/jsp/book-notfound.jsp (100%) rename {enterprise-patterns/front-controller-pattern => patterns}/src/main/webapp/WEB-INF/jsp/unknown.jsp (100%) rename {enterprise-patterns/front-controller-pattern => patterns}/src/main/webapp/WEB-INF/web.xml (100%) diff --git a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Book.java b/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Book.java deleted file mode 100644 index abadcc0d76..0000000000 --- a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Book.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.baeldung.enterprise.patterns.front.controller.data; - -public interface Book { - String getAuthor(); - - void setAuthor(String author); - - String getTitle(); - - void setTitle(String title); - - Double getPrice(); - - void setPrice(Double price); -} diff --git a/enterprise-patterns/pom.xml b/enterprise-patterns/pom.xml deleted file mode 100644 index 2fba12547f..0000000000 --- a/enterprise-patterns/pom.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - 4.0.0 - - com.baeldung.enterprise.patterns - enterprise-patterns-parent - pom - - front-controller-pattern - - - - com.baeldung - parent-modules - 1.0.0-SNAPSHOT - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.5.1 - - 1.8 - 1.8 - - - - - - diff --git a/enterprise-patterns/front-controller-pattern/pom.xml b/patterns/pom.xml similarity index 77% rename from enterprise-patterns/front-controller-pattern/pom.xml rename to patterns/pom.xml index dbcd4f1b1d..7c23b6f55d 100644 --- a/enterprise-patterns/front-controller-pattern/pom.xml +++ b/patterns/pom.xml @@ -4,15 +4,10 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - front-controller-pattern + com.baeldung.enterprise.patterns + patterns war - - enterprise-patterns-parent - com.baeldung.enterprise.patterns - 1.0.0-SNAPSHOT - - javax.servlet @@ -22,11 +17,22 @@ + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + + org.apache.maven.plugins maven-compiler-plugin + 3.5.1 + + 1.8 + 1.8 + org.eclipse.jetty diff --git a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/FrontControllerServlet.java b/patterns/src/main/java/com/baeldung/enterprise/patterns/front/controller/FrontControllerServlet.java similarity index 100% rename from enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/FrontControllerServlet.java rename to patterns/src/main/java/com/baeldung/enterprise/patterns/front/controller/FrontControllerServlet.java diff --git a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/FrontCommand.java b/patterns/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/FrontCommand.java similarity index 100% rename from enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/FrontCommand.java rename to patterns/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/FrontCommand.java diff --git a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/SearchCommand.java b/patterns/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/SearchCommand.java similarity index 100% rename from enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/SearchCommand.java rename to patterns/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/SearchCommand.java diff --git a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/UnknownCommand.java b/patterns/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/UnknownCommand.java similarity index 100% rename from enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/UnknownCommand.java rename to patterns/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/UnknownCommand.java diff --git a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/BookImpl.java b/patterns/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Book.java similarity index 75% rename from enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/BookImpl.java rename to patterns/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Book.java index b270bc7985..634e05c3a0 100644 --- a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/BookImpl.java +++ b/patterns/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Book.java @@ -1,45 +1,39 @@ package com.baeldung.enterprise.patterns.front.controller.data; -public class BookImpl implements Book { +public class Book { private String author; private String title; private Double price; - public BookImpl() { + public Book() { } - public BookImpl(String author, String title, Double price) { + public Book(String author, String title, Double price) { this.author = author; this.title = title; this.price = price; } - @Override public String getAuthor() { return author; } - @Override public void setAuthor(String author) { this.author = author; } - @Override public String getTitle() { return title; } - @Override public void setTitle(String title) { this.title = title; } - @Override public Double getPrice() { return price; } - @Override public void setPrice(Double price) { this.price = price; } diff --git a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Bookshelf.java b/patterns/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Bookshelf.java similarity index 55% rename from enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Bookshelf.java rename to patterns/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Bookshelf.java index 1e30452d95..524e000bd9 100644 --- a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Bookshelf.java +++ b/patterns/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Bookshelf.java @@ -3,8 +3,8 @@ package com.baeldung.enterprise.patterns.front.controller.data; public interface Bookshelf { default void init() { - add(new BookImpl("Wilson, Robert Anton & Shea, Robert", "Illuminati", 9.99)); - add(new BookImpl("Fowler, Martin", "Patterns of Enterprise Application Architecture", 27.88)); + add(new Book("Wilson, Robert Anton & Shea, Robert", "Illuminati", 9.99)); + add(new Book("Fowler, Martin", "Patterns of Enterprise Application Architecture", 27.88)); } Bookshelf getInstance(); diff --git a/enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/BookshelfImpl.java b/patterns/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/BookshelfImpl.java similarity index 100% rename from enterprise-patterns/front-controller-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/BookshelfImpl.java rename to patterns/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/BookshelfImpl.java diff --git a/enterprise-patterns/front-controller-pattern/src/main/resources/front controller.png b/patterns/src/main/resources/front controller.png similarity index 100% rename from enterprise-patterns/front-controller-pattern/src/main/resources/front controller.png rename to patterns/src/main/resources/front controller.png diff --git a/enterprise-patterns/front-controller-pattern/src/main/resources/front controller.puml b/patterns/src/main/resources/front controller.puml similarity index 100% rename from enterprise-patterns/front-controller-pattern/src/main/resources/front controller.puml rename to patterns/src/main/resources/front controller.puml diff --git a/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/book-found.jsp b/patterns/src/main/webapp/WEB-INF/jsp/book-found.jsp similarity index 100% rename from enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/book-found.jsp rename to patterns/src/main/webapp/WEB-INF/jsp/book-found.jsp diff --git a/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/book-notfound.jsp b/patterns/src/main/webapp/WEB-INF/jsp/book-notfound.jsp similarity index 100% rename from enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/book-notfound.jsp rename to patterns/src/main/webapp/WEB-INF/jsp/book-notfound.jsp diff --git a/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/unknown.jsp b/patterns/src/main/webapp/WEB-INF/jsp/unknown.jsp similarity index 100% rename from enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/jsp/unknown.jsp rename to patterns/src/main/webapp/WEB-INF/jsp/unknown.jsp diff --git a/enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/web.xml b/patterns/src/main/webapp/WEB-INF/web.xml similarity index 100% rename from enterprise-patterns/front-controller-pattern/src/main/webapp/WEB-INF/web.xml rename to patterns/src/main/webapp/WEB-INF/web.xml From a7340609b2399bd6c1252154844d8925d05ec997 Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Fri, 30 Sep 2016 12:01:23 -0400 Subject: [PATCH 177/265] update loaduserbyusername --- .../java/org/baeldung/security/MyUserDetailsService.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/spring-userservice/src/main/java/org/baeldung/security/MyUserDetailsService.java b/spring-userservice/src/main/java/org/baeldung/security/MyUserDetailsService.java index 4c02f53d20..fe97984af8 100644 --- a/spring-userservice/src/main/java/org/baeldung/security/MyUserDetailsService.java +++ b/spring-userservice/src/main/java/org/baeldung/security/MyUserDetailsService.java @@ -1,6 +1,7 @@ package org.baeldung.security; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import org.baeldung.persistence.model.MyUser; @@ -27,11 +28,8 @@ public class MyUserDetailsService implements UserDetailsService { if (user == null) { throw new UsernameNotFoundException("No user found with username: " + username); } - else { - final Collection authorities = new ArrayList<>(); - authorities.add(new SimpleGrantedAuthority("ROLE_USER")); - return new User(user.getUsername(), user.getPassword(), authorities); - } + return new User(user.getUsername(), user.getPassword(), Arrays.asList(new SimpleGrantedAuthority("ROLE_USER"))); + } } From c8ff59ffe2329c6d3083e427278fac9ea5eb57f0 Mon Sep 17 00:00:00 2001 From: slavisa-baeldung Date: Fri, 30 Sep 2016 21:19:27 +0200 Subject: [PATCH 178/265] NOJIRA - fixing build --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 7f7a145056..b4158ef67e 100644 --- a/pom.xml +++ b/pom.xml @@ -30,7 +30,7 @@ dependency-injection deltaspike - enterprise-patterns + patterns feign-client From 62fb8b257b2ab67a1b6c4ecd5807ec6da496a0e0 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Sat, 1 Oct 2016 09:58:51 +0200 Subject: [PATCH 179/265] Refactor MyUserDetailsService --- .../service/MyUserDetailsService.java | 40 +++++-------------- 1 file changed, 9 insertions(+), 31 deletions(-) diff --git a/spring-security-mvc-persisted-remember-me/src/main/java/org/baeldung/service/MyUserDetailsService.java b/spring-security-mvc-persisted-remember-me/src/main/java/org/baeldung/service/MyUserDetailsService.java index 2baf88a62d..c662c32738 100644 --- a/spring-security-mvc-persisted-remember-me/src/main/java/org/baeldung/service/MyUserDetailsService.java +++ b/spring-security-mvc-persisted-remember-me/src/main/java/org/baeldung/service/MyUserDetailsService.java @@ -1,11 +1,5 @@ package org.baeldung.service; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.baeldung.security.SecurityRole; @@ -17,9 +11,9 @@ import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.stereotype.Service; -/** - * User Details Service - hard coded to two users for the example. - */ +import java.util.*; +import java.util.stream.Collectors; + @Service public class MyUserDetailsService implements UserDetailsService { @@ -28,24 +22,19 @@ public class MyUserDetailsService implements UserDetailsService { private final Map availableUsers = new HashMap(); public MyUserDetailsService() { - populateDemoUsers(); - } - // - @Override public UserDetails loadUserByUsername(final String username) throws UsernameNotFoundException { logger.info("Load user by username " + username); final UserDetails user = availableUsers.get(username); if (user == null) { - throw new UsernameNotFoundException("Username not found"); - } else { - return availableUsers.get(username); + throw new UsernameNotFoundException(username); } + return user; } /** @@ -59,24 +48,13 @@ public class MyUserDetailsService implements UserDetailsService { availableUsers.put("admin", createUser("admin", "password", Arrays.asList(SecurityRole.ROLE_ADMIN))); } - /** - * Create a demo User. - * - * @param username - * Username - * @param password - * Password - * @param roles - * Role names user is assigned to - * @return User - */ private User createUser(final String username, final String password, final List roles) { logger.info("Create user " + username); - final List authorities = new ArrayList(); - for (final SecurityRole role : roles) { - authorities.add(new SimpleGrantedAuthority(role.toString())); - } + final List authorities = roles.stream() + .map(role -> new SimpleGrantedAuthority(role.toString())) + .collect(Collectors.toList()); + return new User(username, password, true, true, true, true, authorities); } } From c5fd46e5f2fae5eeaf0e665661eadfc185582bec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Sat, 1 Oct 2016 10:47:34 +0200 Subject: [PATCH 180/265] Code for FileNotFoundException article. (#710) * Add new module for mocks comparison. * Add sources for testing. * Changes on testCase. * Enter some tests for mockito. * More tests for Mockito. * Even more tests. * Add the rest of the mocking libraries. * Javadoc on test. * Test bare bones for EasyMock. * Fist kind of test and setup. * Add tests using EasyMock with a change on LoginService. * Create LoginControllerTest.java * Test setup * [JMockit] No method called test. * [JMockit] Two methods called test. * [JMockit] One method called test. * [JMockit] Exception mock test * [JMockit] Mocked object to pass around test. * [JMockit] Custom matcher test. * [JMockit] Partial mocking test. * [JMockit] Fix with IDE. * Not stubs. Mocks. MOCKS!!! * Remove unnecesary import. * Use correct encoding. Was having problems with buildings. * Remove failing module. * Create new module mocks and move mock-comparisons there. * Add jmockit module. * Add model class. * Add collaborator class. * Add performer class. * Add performer test. * Fix * Add interface for tests. * Test for any. * Test for with. * Test for null. * Test for times. * Test for arg that. * Test for result and returns. * Test for delegate. * Add verifications to any tests. * Add verifications to with test. * Add verification examples to methods using null. * Add verifications to methods using times. * Formatting. * Compress tests and fix one test. * Adding new article to readme. * [BAEL-178] Add collaborator for advanced article. * [BAEL-178] Add link to readme. * [BAEL-178] Add test for mockUp. * [BAEL-178] Add test for invoke method. * [BAEL-178] Add constructors and tests for mockup for constructors. * [BAEL-178] Add private fields and more test for deencapsulation. * [BAEL-178] Add inner class and test for instantiating inner classes. * [BAEL-178] Multimocks. * [BAEL-178] Add test for expectation reusing. * [BAEL-178] Move test class to tests folders. * Add postgresql dependency. * Add test and config with properties. * [BAEL-114] Add new project for JPA with JNDI. * [BAEL-114] Config without xml. * [BAEL-114] Bring part of Foo, FooServie and FooDao. * [BAEL-114] Show all foos. * [BAEL-114] Readme. * [BAEL-114] Undo changes on main jpa project. * [BAEL-114] Remove unnecesary dependencies. * [BAEL-114] Add tomcat config. * [BAEL-114] Fixes. * Add tests for Optional streams. * Add Java 9 version of the test. * Rename and move to new core-java-9 module. * Move contents from spring-jpa-jndi to spring-jpa and make necessary changes. * Do not use try-catch on configuration. * Add example for FileNotFoundException mini-article. --- .../FileNotFoundExceptionExample.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 core-java/src/main/java/com/baeldung/core/exceptions/FileNotFoundExceptionExample.java diff --git a/core-java/src/main/java/com/baeldung/core/exceptions/FileNotFoundExceptionExample.java b/core-java/src/main/java/com/baeldung/core/exceptions/FileNotFoundExceptionExample.java new file mode 100644 index 0000000000..2ac4e49869 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/core/exceptions/FileNotFoundExceptionExample.java @@ -0,0 +1,20 @@ +package com.baeldung.core.exceptions; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.IOException; + +public class FileNotFoundExceptionExample { + + public static void main(String[] args) throws IOException { + BufferedReader rd = null; + try { + rd = new BufferedReader(new FileReader(new File("notExisting"))); + rd.readLine(); + } catch (FileNotFoundException ex) { + ex.printStackTrace(); + } + } +} \ No newline at end of file From 72b2eacb4fb76d086be8bc82918ccaa383a7bafc Mon Sep 17 00:00:00 2001 From: maibin Date: Sat, 1 Oct 2016 10:59:54 +0200 Subject: [PATCH 181/265] Thymeleaf inlining and natural processing (#711) * Expression-Based Access Control PermitAll, hasRole, hasAnyRole etc. I modified classes regards to Security * Added test cases for Spring Security Expressions * Handler Interceptor - logging example * Test for logger interceptor * Removed conflicted part * UserInterceptor (adding user information to model) * Spring Handler Interceptor - session timers * Spring Security CSRF attack protection with Thymeleaf * Fix and(); * Logger update * Changed config for Thymeleaf * Thymeleaf Natural Processing and Inlining --- .../thymeleaf/config/WebMVCConfig.java | 75 ++++++++++++++----- .../thymeleaf/controller/HomeController.java | 2 +- .../controller/InliningController.java | 33 ++++++++ .../controller/StudentController.java | 67 ++++++----------- .../baeldung/thymeleaf/utils/ArrayUtil.java | 8 ++ .../thymeleaf/utils/StudentUtils.java | 34 +++++++++ .../main/webapp/WEB-INF/js/studentCheck.js | 2 + .../main/webapp/WEB-INF/txt/studentsList.txt | 8 ++ .../webapp/WEB-INF/views/inliningExample.html | 12 +++ .../webapp/WEB-INF/views/listStudents.html | 9 +++ .../csrf/CsrfEnabledIntegrationTest.java | 19 ++++- 11 files changed, 205 insertions(+), 64 deletions(-) create mode 100644 spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/InliningController.java create mode 100644 spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/utils/ArrayUtil.java create mode 100644 spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/utils/StudentUtils.java create mode 100644 spring-thymeleaf/src/main/webapp/WEB-INF/js/studentCheck.js create mode 100644 spring-thymeleaf/src/main/webapp/WEB-INF/txt/studentsList.txt create mode 100644 spring-thymeleaf/src/main/webapp/WEB-INF/views/inliningExample.html diff --git a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCConfig.java b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCConfig.java index 547d6deee9..444b780673 100644 --- a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCConfig.java +++ b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCConfig.java @@ -20,6 +20,8 @@ import org.thymeleaf.templatemode.TemplateMode; import org.thymeleaf.templateresolver.ITemplateResolver; import com.baeldung.thymeleaf.formatter.NameFormatter; +import com.baeldung.thymeleaf.utils.ArrayUtil; + @Configuration @EnableWebMvc @@ -37,30 +39,67 @@ public class WebMVCConfig extends WebMvcConfigurerAdapter implements Application } @Bean - public ViewResolver viewResolver() { + public ViewResolver htmlViewResolver() { ThymeleafViewResolver resolver = new ThymeleafViewResolver(); - resolver.setTemplateEngine(templateEngine()); + resolver.setTemplateEngine(templateEngine(htmlTemplateResolver())); + resolver.setContentType("text/html"); resolver.setCharacterEncoding("UTF-8"); - resolver.setOrder(1); + resolver.setViewNames(ArrayUtil.array("*.html")); return resolver; } - + @Bean - public TemplateEngine templateEngine() { - SpringTemplateEngine engine = new SpringTemplateEngine(); - engine.setEnableSpringELCompiler(true); - engine.setTemplateResolver(templateResolver()); - return engine; - } + public ViewResolver javascriptViewResolver() { + ThymeleafViewResolver resolver = new ThymeleafViewResolver(); + resolver.setTemplateEngine(templateEngine(javascriptTemplateResolver())); + resolver.setContentType("application/javascript"); + resolver.setCharacterEncoding("UTF-8"); + resolver.setViewNames(ArrayUtil.array("*.js")); + return resolver; + } + + @Bean + public ViewResolver plainViewResolver() { + ThymeleafViewResolver resolver = new ThymeleafViewResolver(); + resolver.setTemplateEngine(templateEngine(plainTemplateResolver())); + resolver.setContentType("text/plain"); + resolver.setCharacterEncoding("UTF-8"); + resolver.setViewNames(ArrayUtil.array("*.txt")); + return resolver; + } - private ITemplateResolver templateResolver() { - SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver(); - resolver.setApplicationContext(applicationContext); - resolver.setPrefix("/WEB-INF/views/"); - resolver.setSuffix(".html"); - resolver.setTemplateMode(TemplateMode.HTML); - return resolver; - } + private TemplateEngine templateEngine(ITemplateResolver templateResolver) { + SpringTemplateEngine engine = new SpringTemplateEngine(); + engine.setTemplateResolver(templateResolver); + return engine; + } + + private ITemplateResolver htmlTemplateResolver() { + SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver(); + resolver.setApplicationContext(applicationContext); + resolver.setPrefix("/WEB-INF/views/"); + resolver.setCacheable(false); + resolver.setTemplateMode(TemplateMode.HTML); + return resolver; + } + + private ITemplateResolver javascriptTemplateResolver() { + SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver(); + resolver.setApplicationContext(applicationContext); + resolver.setPrefix("/WEB-INF/js/"); + resolver.setCacheable(false); + resolver.setTemplateMode(TemplateMode.JAVASCRIPT); + return resolver; + } + + private ITemplateResolver plainTemplateResolver() { + SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver(); + resolver.setApplicationContext(applicationContext); + resolver.setPrefix("/WEB-INF/txt/"); + resolver.setCacheable(false); + resolver.setTemplateMode(TemplateMode.TEXT); + return resolver; + } @Bean @Description("Spring Message Resolver") diff --git a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/HomeController.java b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/HomeController.java index a28d059acc..f1a394cac4 100644 --- a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/HomeController.java +++ b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/HomeController.java @@ -21,7 +21,7 @@ public class HomeController { DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, Locale.getDefault()); model.addAttribute("serverTime", dateFormat.format(new Date())); - return "home"; + return "home.html"; } } diff --git a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/InliningController.java b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/InliningController.java new file mode 100644 index 0000000000..9e3f14ac8e --- /dev/null +++ b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/InliningController.java @@ -0,0 +1,33 @@ +package com.baeldung.thymeleaf.controller; + +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; + +import com.baeldung.thymeleaf.utils.StudentUtils; + +@Controller +public class InliningController { + + @RequestMapping(value = "/html", method = RequestMethod.GET) + public String getExampleHTML(Model model) { + model.addAttribute("title", "Baeldung"); + model.addAttribute("description", "Thymeleaf tutorial"); + return "inliningExample.html"; + } + + @RequestMapping(value = "/js", method = RequestMethod.GET) + public String getExampleJS(Model model) { + model.addAttribute("students", StudentUtils.buildStudents()); + return "studentCheck.js"; + } + + @RequestMapping(value = "/plain", method = RequestMethod.GET) + public String getExamplePlain(Model model) { + model.addAttribute("username", SecurityContextHolder.getContext().getAuthentication().getName()); + model.addAttribute("students", StudentUtils.buildStudents()); + return "studentsList.txt"; + } +} diff --git a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/StudentController.java b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/StudentController.java index da34b2d7b0..1f40046caa 100644 --- a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/StudentController.java +++ b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/StudentController.java @@ -1,11 +1,9 @@ package com.baeldung.thymeleaf.controller; -import java.util.ArrayList; import java.util.List; import javax.validation.Valid; -import com.baeldung.thymeleaf.model.Student; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; @@ -13,6 +11,9 @@ import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; +import com.baeldung.thymeleaf.model.Student; +import com.baeldung.thymeleaf.utils.StudentUtils; + /** * Handles requests for the student model. * @@ -20,50 +21,30 @@ import org.springframework.web.bind.annotation.RequestMethod; @Controller public class StudentController { - @RequestMapping(value = "/saveStudent", method = RequestMethod.POST) - public String saveStudent(@Valid @ModelAttribute Student student, BindingResult errors, Model model) { - if (!errors.hasErrors()) { - // get mock objects - List students = buildStudents(); - // add current student - students.add(student); - model.addAttribute("students", students); - } - return ((errors.hasErrors()) ? "addStudent" : "listStudents"); - } + @RequestMapping(value = "/saveStudent", method = RequestMethod.POST) + public String saveStudent(@Valid @ModelAttribute Student student, BindingResult errors, Model model) { + if (!errors.hasErrors()) { + // get mock objects + List students = StudentUtils.buildStudents(); + // add current student + students.add(student); + model.addAttribute("students", students); + } + return ((errors.hasErrors()) ? "addStudent.html" : "listStudents.html"); + } - @RequestMapping(value = "/addStudent", method = RequestMethod.GET) - public String addStudent(Model model) { - model.addAttribute("student", new Student()); - return "addStudent"; - } + @RequestMapping(value = "/addStudent", method = RequestMethod.GET) + public String addStudent(Model model) { + model.addAttribute("student", new Student()); + return "addStudent.html"; + } - @RequestMapping(value = "/listStudents", method = RequestMethod.GET) - public String listStudent(Model model) { + @RequestMapping(value = "/listStudents", method = RequestMethod.GET) + public String listStudent(Model model) { - model.addAttribute("students", buildStudents()); + model.addAttribute("students", StudentUtils.buildStudents()); - return "listStudents"; - } + return "listStudents.html"; + } - private List buildStudents() { - List students = new ArrayList(); - - Student student1 = new Student(); - student1.setId(1001); - student1.setName("John Smith"); - student1.setGender('M'); - student1.setPercentage(Float.valueOf("80.45")); - - students.add(student1); - - Student student2 = new Student(); - student2.setId(1002); - student2.setName("Jane Williams"); - student2.setGender('F'); - student2.setPercentage(Float.valueOf("60.25")); - - students.add(student2); - return students; - } } diff --git a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/utils/ArrayUtil.java b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/utils/ArrayUtil.java new file mode 100644 index 0000000000..d85c70c1b7 --- /dev/null +++ b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/utils/ArrayUtil.java @@ -0,0 +1,8 @@ +package com.baeldung.thymeleaf.utils; + +public class ArrayUtil { + + public static String[] array(String... args) { + return args; + } +} \ No newline at end of file diff --git a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/utils/StudentUtils.java b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/utils/StudentUtils.java new file mode 100644 index 0000000000..f7ed254641 --- /dev/null +++ b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/utils/StudentUtils.java @@ -0,0 +1,34 @@ +package com.baeldung.thymeleaf.utils; + +import java.util.ArrayList; +import java.util.List; + +import com.baeldung.thymeleaf.model.Student; + +public class StudentUtils { + + private static List students = new ArrayList(); + + public static List buildStudents() { + if (students.isEmpty()){ + Student student1 = new Student(); + student1.setId(1001); + student1.setName("John Smith"); + student1.setGender('M'); + student1.setPercentage(Float.valueOf("80.45")); + + students.add(student1); + + Student student2 = new Student(); + student2.setId(1002); + student2.setName("Jane Williams"); + student2.setGender('F'); + student2.setPercentage(Float.valueOf("60.25")); + + students.add(student2); + } + + return students; + } + +} diff --git a/spring-thymeleaf/src/main/webapp/WEB-INF/js/studentCheck.js b/spring-thymeleaf/src/main/webapp/WEB-INF/js/studentCheck.js new file mode 100644 index 0000000000..625e0b37e5 --- /dev/null +++ b/spring-thymeleaf/src/main/webapp/WEB-INF/js/studentCheck.js @@ -0,0 +1,2 @@ +var count = [[${students.size()}]]; +alert("Number of students in group: " + count); diff --git a/spring-thymeleaf/src/main/webapp/WEB-INF/txt/studentsList.txt b/spring-thymeleaf/src/main/webapp/WEB-INF/txt/studentsList.txt new file mode 100644 index 0000000000..b27796c6ab --- /dev/null +++ b/spring-thymeleaf/src/main/webapp/WEB-INF/txt/studentsList.txt @@ -0,0 +1,8 @@ +Dear [(${username})], + +This is the list of our students: +[# th:each="s : ${students}"] + - [(${s.name})]. ID: [(${s.id})] +[/] +Thanks, +The Baeldung University \ No newline at end of file diff --git a/spring-thymeleaf/src/main/webapp/WEB-INF/views/inliningExample.html b/spring-thymeleaf/src/main/webapp/WEB-INF/views/inliningExample.html new file mode 100644 index 0000000000..cd20746c3a --- /dev/null +++ b/spring-thymeleaf/src/main/webapp/WEB-INF/views/inliningExample.html @@ -0,0 +1,12 @@ + + + + +Inlining example + + +

    Title of tutorial: [[${title}]]

    +

    Description: [(${description})]

    + + \ No newline at end of file diff --git a/spring-thymeleaf/src/main/webapp/WEB-INF/views/listStudents.html b/spring-thymeleaf/src/main/webapp/WEB-INF/views/listStudents.html index c25de9eb17..a894e41e88 100644 --- a/spring-thymeleaf/src/main/webapp/WEB-INF/views/listStudents.html +++ b/spring-thymeleaf/src/main/webapp/WEB-INF/views/listStudents.html @@ -4,6 +4,15 @@ Student List + +

    Student List

    diff --git a/spring-thymeleaf/src/test/java/org/baeldung/security/csrf/CsrfEnabledIntegrationTest.java b/spring-thymeleaf/src/test/java/org/baeldung/security/csrf/CsrfEnabledIntegrationTest.java index 46a28c3c74..3542571bbc 100644 --- a/spring-thymeleaf/src/test/java/org/baeldung/security/csrf/CsrfEnabledIntegrationTest.java +++ b/spring-thymeleaf/src/test/java/org/baeldung/security/csrf/CsrfEnabledIntegrationTest.java @@ -2,8 +2,8 @@ package org.baeldung.security.csrf; import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.csrf; import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.user; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; import javax.servlet.Filter; @@ -59,5 +59,20 @@ public class CsrfEnabledIntegrationTest { public void addStudentWithCSRF() throws Exception { mockMvc.perform(post("/saveStudent").contentType(MediaType.APPLICATION_JSON).param("id", "1234567").param("name", "Joe").param("gender", "M").with(testUser()).with(csrf())).andExpect(status().isOk()); } + + @Test + public void htmlInliningTest() throws Exception { + mockMvc.perform(get("/html").with(testUser()).with(csrf())).andExpect(status().isOk()).andExpect(view().name("inliningExample.html")); + } + + @Test + public void jsInliningTest() throws Exception { + mockMvc.perform(get("/js").with(testUser()).with(csrf())).andExpect(status().isOk()).andExpect(view().name("studentCheck.js")); + } + + @Test + public void plainInliningTest() throws Exception { + mockMvc.perform(get("/plain").with(testUser()).with(csrf())).andExpect(status().isOk()).andExpect(view().name("studentsList.txt")); + } } From 78998f1d2034b494d7b539a229f6b14c06d09523 Mon Sep 17 00:00:00 2001 From: Kevin Gilmore Date: Sat, 1 Oct 2016 21:25:26 -0500 Subject: [PATCH 182/265] BAEL-202: Consolidated Couchbase SDK and Spring Data Couchbase from five modules down to two --- .../.mvn/wrapper/maven-wrapper.jar | Bin 49502 -> 0 bytes .../.mvn/wrapper/maven-wrapper.properties | 1 - couchbase-sdk-async/.springBeans | 15 -- .../couchbase/IntegrationTestConfig.java | 9 - .../.mvn/wrapper/maven-wrapper.jar | Bin 49502 -> 0 bytes .../.mvn/wrapper/maven-wrapper.properties | 1 - couchbase-sdk-intro/mvnw | 233 ------------------ couchbase-sdk-intro/mvnw.cmd | 145 ----------- couchbase-sdk-intro/pom.xml | 40 --- .../.mvn/wrapper/maven-wrapper.jar | Bin 49502 -> 0 bytes .../.mvn/wrapper/maven-wrapper.properties | 1 - couchbase-sdk-spring-service/mvnw | 233 ------------------ couchbase-sdk-spring-service/mvnw.cmd | 145 ----------- couchbase-sdk-spring-service/pom.xml | 102 -------- .../person/FluentPersonDocumentConverter.java | 31 --- .../src/main/resources/application.properties | 0 .../src/main/resources/logback.xml | 17 -- couchbase-sdk/README.md | 50 ++++ {couchbase-sdk-async => couchbase-sdk}/mvnw | 0 .../mvnw.cmd | 0 .../pom.xml | 6 +- .../couchbase/async}/CouchbaseEntity.java | 2 +- .../couchbase/async}/person/Person.java | 4 +- .../async}/person/PersonCrudService.java | 6 +- .../person/PersonDocumentConverter.java | 4 +- .../async}/person/RegistrationService.java | 2 +- .../async}/service/AbstractBucketService.java | 2 +- .../async}/service/AbstractCrudService.java | 3 +- .../async}/service/BucketService.java | 2 +- .../async}/service/ClusterService.java | 2 +- .../async}/service/ClusterServiceImpl.java | 2 +- .../couchbase/async}/service/CrudService.java | 2 +- .../async}/service/JsonDocumentConverter.java | 2 +- .../async}/service/TutorialBucketService.java | 2 +- .../couchbase/intro}/CodeSnippets.java | 2 +- .../couchbase/spring}/person/Person.java | 2 +- .../spring}/person/PersonCrudService.java | 7 +- .../person/PersonDocumentConverter.java | 4 +- .../spring}/person/RegistrationService.java | 2 +- .../spring}/service/BucketService.java | 2 +- .../spring}/service/ClusterService.java | 2 +- .../spring}/service/ClusterServiceImpl.java | 2 +- .../spring}/service/CrudService.java | 2 +- .../service/JsonDocumentConverter.java | 2 +- .../service/TutorialBucketService.java | 2 +- .../src/main/resources/application.properties | 0 .../src/main/resources/logback.xml | 0 .../couchbase/async/AsyncIntegrationTest.java | 6 +- .../async/AsyncIntegrationTestConfig.java | 9 + .../async}/person/PersonCrudServiceTest.java | 11 +- .../async}/service/ClusterServiceTest.java | 11 +- .../couchbase/spring}/IntegrationTest.java | 2 +- .../spring}/IntegrationTestConfig.java | 4 +- .../spring}/person/PersonCrudServiceTest.java | 4 +- .../spring}/service/ClusterServiceTest.java | 6 +- pom.xml | 4 +- spring-data-couchbase-2/README.md | 18 +- .../spring/data/couchbase/model/Campus.java | 0 .../couchbase2b}/repos/CampusRepository.java | 2 +- .../couchbase2b}/repos/PersonRepository.java | 2 +- .../couchbase2b}/repos/StudentRepository.java | 2 +- .../couchbase2b}/service/CampusService.java | 2 +- .../service/CampusServiceImpl.java | 8 +- .../couchbase2b}/service/PersonService.java | 2 +- .../service/PersonServiceImpl.java | 10 +- .../couchbase2b}/service/StudentService.java | 2 +- .../service/StudentServiceImpl.java | 10 +- ...java => CustomTypeKeyCouchbaseConfig.java} | 8 +- .../data/couchbase/MyCouchbaseConfig.java | 0 .../ReadYourOwnWritesCouchbaseConfig.java | 11 + .../couchbase/service/PersonServiceTest.java | 7 - .../MultiBucketCouchbaseConfig.java | 16 +- .../MultiBucketIntegationTest.java | 7 +- .../MultiBucketIntegrationTestConfig.java | 10 + .../service/CampusServiceImplTest.java | 17 +- .../service/PersonServiceImplTest.java | 76 +++--- .../service/StudentServiceImplTest.java | 50 ++-- spring-data-couchbase-2b/README.md | 36 --- spring-data-couchbase-2b/pom.xml | 105 -------- .../spring/data/couchbase/model/Person.java | 87 ------- .../spring/data/couchbase/model/Student.java | 113 --------- .../src/main/resources/logback.xml | 17 -- spring-data-couchbase-2b/src/site/site.xml | 25 -- .../data/couchbase/IntegrationTestConfig.java | 9 - .../data/couchbase/TestCouchbaseConfig.java | 17 -- .../src/test/resources/logback.xml | 17 -- 86 files changed, 254 insertions(+), 1582 deletions(-) delete mode 100644 couchbase-sdk-async/.mvn/wrapper/maven-wrapper.jar delete mode 100644 couchbase-sdk-async/.mvn/wrapper/maven-wrapper.properties delete mode 100644 couchbase-sdk-async/.springBeans delete mode 100644 couchbase-sdk-async/src/test/java/com/baeldung/couchbase/IntegrationTestConfig.java delete mode 100644 couchbase-sdk-intro/.mvn/wrapper/maven-wrapper.jar delete mode 100644 couchbase-sdk-intro/.mvn/wrapper/maven-wrapper.properties delete mode 100755 couchbase-sdk-intro/mvnw delete mode 100644 couchbase-sdk-intro/mvnw.cmd delete mode 100644 couchbase-sdk-intro/pom.xml delete mode 100644 couchbase-sdk-spring-service/.mvn/wrapper/maven-wrapper.jar delete mode 100644 couchbase-sdk-spring-service/.mvn/wrapper/maven-wrapper.properties delete mode 100755 couchbase-sdk-spring-service/mvnw delete mode 100644 couchbase-sdk-spring-service/mvnw.cmd delete mode 100644 couchbase-sdk-spring-service/pom.xml delete mode 100644 couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/person/FluentPersonDocumentConverter.java delete mode 100644 couchbase-sdk-spring-service/src/main/resources/application.properties delete mode 100644 couchbase-sdk-spring-service/src/main/resources/logback.xml create mode 100644 couchbase-sdk/README.md rename {couchbase-sdk-async => couchbase-sdk}/mvnw (100%) rename {couchbase-sdk-async => couchbase-sdk}/mvnw.cmd (100%) rename {couchbase-sdk-async => couchbase-sdk}/pom.xml (95%) rename {couchbase-sdk-async/src/main/java/com/baeldung/couchbase/service => couchbase-sdk/src/main/java/com/baeldung/couchbase/async}/CouchbaseEntity.java (70%) rename {couchbase-sdk-async/src/main/java/com/baeldung/couchbase => couchbase-sdk/src/main/java/com/baeldung/couchbase/async}/person/Person.java (94%) rename {couchbase-sdk-async/src/main/java/com/baeldung/couchbase => couchbase-sdk/src/main/java/com/baeldung/couchbase/async}/person/PersonCrudService.java (77%) rename {couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase => couchbase-sdk/src/main/java/com/baeldung/couchbase/async}/person/PersonDocumentConverter.java (88%) rename {couchbase-sdk-async/src/main/java/com/baeldung/couchbase => couchbase-sdk/src/main/java/com/baeldung/couchbase/async}/person/RegistrationService.java (93%) rename {couchbase-sdk-async/src/main/java/com/baeldung/couchbase => couchbase-sdk/src/main/java/com/baeldung/couchbase/async}/service/AbstractBucketService.java (93%) rename {couchbase-sdk-async/src/main/java/com/baeldung/couchbase => couchbase-sdk/src/main/java/com/baeldung/couchbase/async}/service/AbstractCrudService.java (98%) rename {couchbase-sdk-async/src/main/java/com/baeldung/couchbase => couchbase-sdk/src/main/java/com/baeldung/couchbase/async}/service/BucketService.java (69%) rename {couchbase-sdk-async/src/main/java/com/baeldung/couchbase => couchbase-sdk/src/main/java/com/baeldung/couchbase/async}/service/ClusterService.java (74%) rename {couchbase-sdk-async/src/main/java/com/baeldung/couchbase => couchbase-sdk/src/main/java/com/baeldung/couchbase/async}/service/ClusterServiceImpl.java (95%) rename {couchbase-sdk-async/src/main/java/com/baeldung/couchbase => couchbase-sdk/src/main/java/com/baeldung/couchbase/async}/service/CrudService.java (89%) rename {couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase => couchbase-sdk/src/main/java/com/baeldung/couchbase/async}/service/JsonDocumentConverter.java (79%) rename {couchbase-sdk-async/src/main/java/com/baeldung/couchbase => couchbase-sdk/src/main/java/com/baeldung/couchbase/async}/service/TutorialBucketService.java (93%) rename {couchbase-sdk-intro/src/main/java/com/baeldung/couchbase/examples => couchbase-sdk/src/main/java/com/baeldung/couchbase/intro}/CodeSnippets.java (98%) rename {couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase => couchbase-sdk/src/main/java/com/baeldung/couchbase/spring}/person/Person.java (97%) rename {couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase => couchbase-sdk/src/main/java/com/baeldung/couchbase/spring}/person/PersonCrudService.java (88%) rename {couchbase-sdk-async/src/main/java/com/baeldung/couchbase => couchbase-sdk/src/main/java/com/baeldung/couchbase/spring}/person/PersonDocumentConverter.java (88%) rename {couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase => couchbase-sdk/src/main/java/com/baeldung/couchbase/spring}/person/RegistrationService.java (93%) rename {couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase => couchbase-sdk/src/main/java/com/baeldung/couchbase/spring}/service/BucketService.java (69%) rename {couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase => couchbase-sdk/src/main/java/com/baeldung/couchbase/spring}/service/ClusterService.java (90%) rename {couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase => couchbase-sdk/src/main/java/com/baeldung/couchbase/spring}/service/ClusterServiceImpl.java (98%) rename {couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase => couchbase-sdk/src/main/java/com/baeldung/couchbase/spring}/service/CrudService.java (82%) rename {couchbase-sdk-async/src/main/java/com/baeldung/couchbase => couchbase-sdk/src/main/java/com/baeldung/couchbase/spring}/service/JsonDocumentConverter.java (79%) rename {couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase => couchbase-sdk/src/main/java/com/baeldung/couchbase/spring}/service/TutorialBucketService.java (93%) rename {couchbase-sdk-async => couchbase-sdk}/src/main/resources/application.properties (100%) rename {couchbase-sdk-async => couchbase-sdk}/src/main/resources/logback.xml (100%) rename couchbase-sdk-spring-service/src/test/java/com/baeldung/couchbase/IntegrationTest.java => couchbase-sdk/src/test/java/com/baeldung/couchbase/async/AsyncIntegrationTest.java (74%) create mode 100644 couchbase-sdk/src/test/java/com/baeldung/couchbase/async/AsyncIntegrationTestConfig.java rename {couchbase-sdk-async/src/test/java/com/baeldung/couchbase => couchbase-sdk/src/test/java/com/baeldung/couchbase/async}/person/PersonCrudServiceTest.java (93%) rename {couchbase-sdk-async/src/test/java/com/baeldung/couchbase => couchbase-sdk/src/test/java/com/baeldung/couchbase/async}/service/ClusterServiceTest.java (73%) rename {couchbase-sdk-async/src/test/java/com/baeldung/couchbase => couchbase-sdk/src/test/java/com/baeldung/couchbase/spring}/IntegrationTest.java (93%) rename {couchbase-sdk-spring-service/src/test/java/com/baeldung/couchbase => couchbase-sdk/src/test/java/com/baeldung/couchbase/spring}/IntegrationTestConfig.java (63%) rename {couchbase-sdk-spring-service/src/test/java/com/baeldung/couchbase => couchbase-sdk/src/test/java/com/baeldung/couchbase/spring}/person/PersonCrudServiceTest.java (96%) rename {couchbase-sdk-spring-service/src/test/java/com/baeldung/couchbase => couchbase-sdk/src/test/java/com/baeldung/couchbase/spring}/service/ClusterServiceTest.java (87%) rename {spring-data-couchbase-2b => spring-data-couchbase-2}/src/main/java/org/baeldung/spring/data/couchbase/model/Campus.java (100%) rename {spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase => spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b}/repos/CampusRepository.java (92%) rename {spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase => spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b}/repos/PersonRepository.java (86%) rename {spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase => spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b}/repos/StudentRepository.java (86%) rename {spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase => spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b}/service/CampusService.java (88%) rename spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/CampusRepositoryService.java => spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/CampusServiceImpl.java (80%) rename {spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase => spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b}/service/PersonService.java (87%) rename spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/PersonRepositoryService.java => spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/PersonServiceImpl.java (81%) rename {spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase => spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b}/service/StudentService.java (87%) rename spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryService.java => spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/StudentServiceImpl.java (81%) rename spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/{TestCouchbaseConfig.java => CustomTypeKeyCouchbaseConfig.java} (50%) rename spring-data-couchbase-2/src/{main => test}/java/org/baeldung/spring/data/couchbase/MyCouchbaseConfig.java (100%) create mode 100644 spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/ReadYourOwnWritesCouchbaseConfig.java rename spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/MyCouchbaseConfig.java => spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/MultiBucketCouchbaseConfig.java (86%) rename spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/IntegrationTest.java => spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/MultiBucketIntegationTest.java (68%) create mode 100644 spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/MultiBucketIntegrationTestConfig.java rename spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/service/CampusRepositoryServiceTest.java => spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/CampusServiceImplTest.java (90%) rename spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/service/PersonRepositoryServiceTest.java => spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/PersonServiceImplTest.java (54%) rename spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryServiceTest.java => spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/StudentServiceImplTest.java (77%) delete mode 100644 spring-data-couchbase-2b/README.md delete mode 100644 spring-data-couchbase-2b/pom.xml delete mode 100644 spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/model/Person.java delete mode 100644 spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/model/Student.java delete mode 100644 spring-data-couchbase-2b/src/main/resources/logback.xml delete mode 100644 spring-data-couchbase-2b/src/site/site.xml delete mode 100644 spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/IntegrationTestConfig.java delete mode 100644 spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/TestCouchbaseConfig.java delete mode 100644 spring-data-couchbase-2b/src/test/resources/logback.xml diff --git a/couchbase-sdk-async/.mvn/wrapper/maven-wrapper.jar b/couchbase-sdk-async/.mvn/wrapper/maven-wrapper.jar deleted file mode 100644 index 5fd4d5023f1463b5ba3970e33c460c1eb26d748d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49502 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%0A$pwhjXzyA0ZzErH{1@M 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 OJOEd-=rxTO#Qy`$*1Hh^ diff --git a/couchbase-sdk-async/.mvn/wrapper/maven-wrapper.properties b/couchbase-sdk-async/.mvn/wrapper/maven-wrapper.properties deleted file mode 100644 index eb91947648..0000000000 --- a/couchbase-sdk-async/.mvn/wrapper/maven-wrapper.properties +++ /dev/null @@ -1 +0,0 @@ -distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.3.3/apache-maven-3.3.3-bin.zip \ No newline at end of file diff --git a/couchbase-sdk-async/.springBeans b/couchbase-sdk-async/.springBeans deleted file mode 100644 index ff32b84d3b..0000000000 --- a/couchbase-sdk-async/.springBeans +++ /dev/null @@ -1,15 +0,0 @@ - - - 1 - - - - - - - - - - - - diff --git a/couchbase-sdk-async/src/test/java/com/baeldung/couchbase/IntegrationTestConfig.java b/couchbase-sdk-async/src/test/java/com/baeldung/couchbase/IntegrationTestConfig.java deleted file mode 100644 index d593aac52d..0000000000 --- a/couchbase-sdk-async/src/test/java/com/baeldung/couchbase/IntegrationTestConfig.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.baeldung.couchbase; - -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; - -@Configuration -@ComponentScan(basePackages={"com.baeldung.couchbase"}) -public class IntegrationTestConfig { -} diff --git a/couchbase-sdk-intro/.mvn/wrapper/maven-wrapper.jar b/couchbase-sdk-intro/.mvn/wrapper/maven-wrapper.jar deleted file mode 100644 index 5fd4d5023f1463b5ba3970e33c460c1eb26d748d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49502 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%0A$pwhjXzyA0ZzErH{1@M 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 OJOEd-=rxTO#Qy`$*1Hh^ diff --git a/couchbase-sdk-intro/.mvn/wrapper/maven-wrapper.properties b/couchbase-sdk-intro/.mvn/wrapper/maven-wrapper.properties deleted file mode 100644 index eb91947648..0000000000 --- a/couchbase-sdk-intro/.mvn/wrapper/maven-wrapper.properties +++ /dev/null @@ -1 +0,0 @@ -distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.3.3/apache-maven-3.3.3-bin.zip \ No newline at end of file diff --git a/couchbase-sdk-intro/mvnw b/couchbase-sdk-intro/mvnw deleted file mode 100755 index a1ba1bf554..0000000000 --- a/couchbase-sdk-intro/mvnw +++ /dev/null @@ -1,233 +0,0 @@ -#!/bin/sh -# ---------------------------------------------------------------------------- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# ---------------------------------------------------------------------------- - -# ---------------------------------------------------------------------------- -# Maven2 Start Up Batch script -# -# Required ENV vars: -# ------------------ -# JAVA_HOME - location of a JDK home dir -# -# Optional ENV vars -# ----------------- -# M2_HOME - location of maven2's installed home dir -# MAVEN_OPTS - parameters passed to the Java VM when running Maven -# e.g. to debug Maven itself, use -# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -# MAVEN_SKIP_RC - flag to disable loading of mavenrc files -# ---------------------------------------------------------------------------- - -if [ -z "$MAVEN_SKIP_RC" ] ; then - - if [ -f /etc/mavenrc ] ; then - . /etc/mavenrc - fi - - if [ -f "$HOME/.mavenrc" ] ; then - . "$HOME/.mavenrc" - fi - -fi - -# OS specific support. $var _must_ be set to either true or false. -cygwin=false; -darwin=false; -mingw=false -case "`uname`" in - CYGWIN*) cygwin=true ;; - MINGW*) mingw=true;; - Darwin*) darwin=true - # - # Look for the Apple JDKs first to preserve the existing behaviour, and then look - # for the new JDKs provided by Oracle. - # - if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK ] ; then - # - # Apple JDKs - # - export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home - fi - - if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Java/JavaVirtualMachines/CurrentJDK ] ; then - # - # Apple JDKs - # - export JAVA_HOME=/System/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home - fi - - if [ -z "$JAVA_HOME" ] && [ -L "/Library/Java/JavaVirtualMachines/CurrentJDK" ] ; then - # - # Oracle JDKs - # - export JAVA_HOME=/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home - fi - - if [ -z "$JAVA_HOME" ] && [ -x "/usr/libexec/java_home" ]; then - # - # Apple JDKs - # - export JAVA_HOME=`/usr/libexec/java_home` - fi - ;; -esac - -if [ -z "$JAVA_HOME" ] ; then - if [ -r /etc/gentoo-release ] ; then - JAVA_HOME=`java-config --jre-home` - fi -fi - -if [ -z "$M2_HOME" ] ; then - ## resolve links - $0 may be a link to maven's home - PRG="$0" - - # need this for relative symlinks - while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG="`dirname "$PRG"`/$link" - fi - done - - saveddir=`pwd` - - M2_HOME=`dirname "$PRG"`/.. - - # make it fully qualified - M2_HOME=`cd "$M2_HOME" && pwd` - - cd "$saveddir" - # echo Using m2 at $M2_HOME -fi - -# For Cygwin, ensure paths are in UNIX format before anything is touched -if $cygwin ; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --unix "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --unix "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --unix "$CLASSPATH"` -fi - -# For Migwn, ensure paths are in UNIX format before anything is touched -if $mingw ; then - [ -n "$M2_HOME" ] && - M2_HOME="`(cd "$M2_HOME"; pwd)`" - [ -n "$JAVA_HOME" ] && - JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" - # TODO classpath? -fi - -if [ -z "$JAVA_HOME" ]; then - javaExecutable="`which javac`" - if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then - # readlink(1) is not available as standard on Solaris 10. - readLink=`which readlink` - if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then - if $darwin ; then - javaHome="`dirname \"$javaExecutable\"`" - javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" - else - javaExecutable="`readlink -f \"$javaExecutable\"`" - fi - javaHome="`dirname \"$javaExecutable\"`" - javaHome=`expr "$javaHome" : '\(.*\)/bin'` - JAVA_HOME="$javaHome" - export JAVA_HOME - fi - fi -fi - -if [ -z "$JAVACMD" ] ; then - if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - else - JAVACMD="`which java`" - fi -fi - -if [ ! -x "$JAVACMD" ] ; then - echo "Error: JAVA_HOME is not defined correctly." >&2 - echo " We cannot execute $JAVACMD" >&2 - exit 1 -fi - -if [ -z "$JAVA_HOME" ] ; then - echo "Warning: JAVA_HOME environment variable is not set." -fi - -CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher - -# For Cygwin, switch paths to Windows format before running java -if $cygwin; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --path --windows "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --windows "$CLASSPATH"` -fi - -# traverses directory structure from process work directory to filesystem root -# first directory with .mvn subdirectory is considered project base directory -find_maven_basedir() { - local basedir=$(pwd) - local wdir=$(pwd) - while [ "$wdir" != '/' ] ; do - if [ -d "$wdir"/.mvn ] ; then - basedir=$wdir - break - fi - wdir=$(cd "$wdir/.."; pwd) - done - echo "${basedir}" -} - -# concatenates all lines of a file -concat_lines() { - if [ -f "$1" ]; then - echo "$(tr -s '\n' ' ' < "$1")" - fi -} - -export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-$(find_maven_basedir)} -MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" - -# Provide a "standardized" way to retrieve the CLI args that will -# work with both Windows and non-Windows executions. -MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" -export MAVEN_CMD_LINE_ARGS - -WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -exec "$JAVACMD" \ - $MAVEN_OPTS \ - -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ - "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ - ${WRAPPER_LAUNCHER} "$@" diff --git a/couchbase-sdk-intro/mvnw.cmd b/couchbase-sdk-intro/mvnw.cmd deleted file mode 100644 index 2b934e89dd..0000000000 --- a/couchbase-sdk-intro/mvnw.cmd +++ /dev/null @@ -1,145 +0,0 @@ -@REM ---------------------------------------------------------------------------- -@REM Licensed to the Apache Software Foundation (ASF) under one -@REM or more contributor license agreements. See the NOTICE file -@REM distributed with this work for additional information -@REM regarding copyright ownership. The ASF licenses this file -@REM to you under the Apache License, Version 2.0 (the -@REM "License"); you may not use this file except in compliance -@REM with the License. You may obtain a copy of the License at -@REM -@REM http://www.apache.org/licenses/LICENSE-2.0 -@REM -@REM Unless required by applicable law or agreed to in writing, -@REM software distributed under the License is distributed on an -@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -@REM KIND, either express or implied. See the License for the -@REM specific language governing permissions and limitations -@REM under the License. -@REM ---------------------------------------------------------------------------- - -@REM ---------------------------------------------------------------------------- -@REM Maven2 Start Up Batch script -@REM -@REM Required ENV vars: -@REM JAVA_HOME - location of a JDK home dir -@REM -@REM Optional ENV vars -@REM M2_HOME - location of maven2's installed home dir -@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands -@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending -@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven -@REM e.g. to debug Maven itself, use -@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files -@REM ---------------------------------------------------------------------------- - -@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' -@echo off -@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' -@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% - -@REM set %HOME% to equivalent of $HOME -if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") - -@REM Execute a user defined script before this one -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre -@REM check for pre script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" -if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" -:skipRcPre - -@setlocal - -set ERROR_CODE=0 - -@REM To isolate internal variables from possible post scripts, we use another setlocal -@setlocal - -@REM ==== START VALIDATION ==== -if not "%JAVA_HOME%" == "" goto OkJHome - -echo. -echo Error: JAVA_HOME not found in your environment. >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -:OkJHome -if exist "%JAVA_HOME%\bin\java.exe" goto init - -echo. -echo Error: JAVA_HOME is set to an invalid directory. >&2 -echo JAVA_HOME = "%JAVA_HOME%" >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -@REM ==== END VALIDATION ==== - -:init - -set MAVEN_CMD_LINE_ARGS=%* - -@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". -@REM Fallback to current working directory if not found. - -set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% -IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir - -set EXEC_DIR=%CD% -set WDIR=%EXEC_DIR% -:findBaseDir -IF EXIST "%WDIR%"\.mvn goto baseDirFound -cd .. -IF "%WDIR%"=="%CD%" goto baseDirNotFound -set WDIR=%CD% -goto findBaseDir - -:baseDirFound -set MAVEN_PROJECTBASEDIR=%WDIR% -cd "%EXEC_DIR%" -goto endDetectBaseDir - -:baseDirNotFound -set MAVEN_PROJECTBASEDIR=%EXEC_DIR% -cd "%EXEC_DIR%" - -:endDetectBaseDir - -IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig - -@setlocal EnableExtensions EnableDelayedExpansion -for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a -@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% - -:endReadAdditionalConfig - -SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" - -set WRAPPER_JAR="".\.mvn\wrapper\maven-wrapper.jar"" -set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CMD_LINE_ARGS% -if ERRORLEVEL 1 goto error -goto end - -:error -set ERROR_CODE=1 - -:end -@endlocal & set ERROR_CODE=%ERROR_CODE% - -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost -@REM check for post script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" -if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" -:skipRcPost - -@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' -if "%MAVEN_BATCH_PAUSE%" == "on" pause - -if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% - -exit /B %ERROR_CODE% \ No newline at end of file diff --git a/couchbase-sdk-intro/pom.xml b/couchbase-sdk-intro/pom.xml deleted file mode 100644 index 1c2ca5ee05..0000000000 --- a/couchbase-sdk-intro/pom.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - 4.0.0 - com.baeldung - couchbase-sdk-intro - 0.1-SNAPSHOT - jar - couchbase-sdk-intro - Intro to the Couchbase SDK - - - - - com.couchbase.client - java-client - ${couchbase.client.version} - - - - - - - maven-compiler-plugin - 2.3.2 - - 1.7 - 1.7 - - - - - - - 1.7 - UTF-8 - 2.2.6 - - - diff --git a/couchbase-sdk-spring-service/.mvn/wrapper/maven-wrapper.jar b/couchbase-sdk-spring-service/.mvn/wrapper/maven-wrapper.jar deleted file mode 100644 index 5fd4d5023f1463b5ba3970e33c460c1eb26d748d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49502 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%0A$pwhjXzyA0ZzErH{1@M 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 OJOEd-=rxTO#Qy`$*1Hh^ diff --git a/couchbase-sdk-spring-service/.mvn/wrapper/maven-wrapper.properties b/couchbase-sdk-spring-service/.mvn/wrapper/maven-wrapper.properties deleted file mode 100644 index eb91947648..0000000000 --- a/couchbase-sdk-spring-service/.mvn/wrapper/maven-wrapper.properties +++ /dev/null @@ -1 +0,0 @@ -distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.3.3/apache-maven-3.3.3-bin.zip \ No newline at end of file diff --git a/couchbase-sdk-spring-service/mvnw b/couchbase-sdk-spring-service/mvnw deleted file mode 100755 index a1ba1bf554..0000000000 --- a/couchbase-sdk-spring-service/mvnw +++ /dev/null @@ -1,233 +0,0 @@ -#!/bin/sh -# ---------------------------------------------------------------------------- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# ---------------------------------------------------------------------------- - -# ---------------------------------------------------------------------------- -# Maven2 Start Up Batch script -# -# Required ENV vars: -# ------------------ -# JAVA_HOME - location of a JDK home dir -# -# Optional ENV vars -# ----------------- -# M2_HOME - location of maven2's installed home dir -# MAVEN_OPTS - parameters passed to the Java VM when running Maven -# e.g. to debug Maven itself, use -# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -# MAVEN_SKIP_RC - flag to disable loading of mavenrc files -# ---------------------------------------------------------------------------- - -if [ -z "$MAVEN_SKIP_RC" ] ; then - - if [ -f /etc/mavenrc ] ; then - . /etc/mavenrc - fi - - if [ -f "$HOME/.mavenrc" ] ; then - . "$HOME/.mavenrc" - fi - -fi - -# OS specific support. $var _must_ be set to either true or false. -cygwin=false; -darwin=false; -mingw=false -case "`uname`" in - CYGWIN*) cygwin=true ;; - MINGW*) mingw=true;; - Darwin*) darwin=true - # - # Look for the Apple JDKs first to preserve the existing behaviour, and then look - # for the new JDKs provided by Oracle. - # - if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK ] ; then - # - # Apple JDKs - # - export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home - fi - - if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Java/JavaVirtualMachines/CurrentJDK ] ; then - # - # Apple JDKs - # - export JAVA_HOME=/System/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home - fi - - if [ -z "$JAVA_HOME" ] && [ -L "/Library/Java/JavaVirtualMachines/CurrentJDK" ] ; then - # - # Oracle JDKs - # - export JAVA_HOME=/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home - fi - - if [ -z "$JAVA_HOME" ] && [ -x "/usr/libexec/java_home" ]; then - # - # Apple JDKs - # - export JAVA_HOME=`/usr/libexec/java_home` - fi - ;; -esac - -if [ -z "$JAVA_HOME" ] ; then - if [ -r /etc/gentoo-release ] ; then - JAVA_HOME=`java-config --jre-home` - fi -fi - -if [ -z "$M2_HOME" ] ; then - ## resolve links - $0 may be a link to maven's home - PRG="$0" - - # need this for relative symlinks - while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG="`dirname "$PRG"`/$link" - fi - done - - saveddir=`pwd` - - M2_HOME=`dirname "$PRG"`/.. - - # make it fully qualified - M2_HOME=`cd "$M2_HOME" && pwd` - - cd "$saveddir" - # echo Using m2 at $M2_HOME -fi - -# For Cygwin, ensure paths are in UNIX format before anything is touched -if $cygwin ; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --unix "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --unix "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --unix "$CLASSPATH"` -fi - -# For Migwn, ensure paths are in UNIX format before anything is touched -if $mingw ; then - [ -n "$M2_HOME" ] && - M2_HOME="`(cd "$M2_HOME"; pwd)`" - [ -n "$JAVA_HOME" ] && - JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" - # TODO classpath? -fi - -if [ -z "$JAVA_HOME" ]; then - javaExecutable="`which javac`" - if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then - # readlink(1) is not available as standard on Solaris 10. - readLink=`which readlink` - if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then - if $darwin ; then - javaHome="`dirname \"$javaExecutable\"`" - javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" - else - javaExecutable="`readlink -f \"$javaExecutable\"`" - fi - javaHome="`dirname \"$javaExecutable\"`" - javaHome=`expr "$javaHome" : '\(.*\)/bin'` - JAVA_HOME="$javaHome" - export JAVA_HOME - fi - fi -fi - -if [ -z "$JAVACMD" ] ; then - if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - else - JAVACMD="`which java`" - fi -fi - -if [ ! -x "$JAVACMD" ] ; then - echo "Error: JAVA_HOME is not defined correctly." >&2 - echo " We cannot execute $JAVACMD" >&2 - exit 1 -fi - -if [ -z "$JAVA_HOME" ] ; then - echo "Warning: JAVA_HOME environment variable is not set." -fi - -CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher - -# For Cygwin, switch paths to Windows format before running java -if $cygwin; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --path --windows "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --windows "$CLASSPATH"` -fi - -# traverses directory structure from process work directory to filesystem root -# first directory with .mvn subdirectory is considered project base directory -find_maven_basedir() { - local basedir=$(pwd) - local wdir=$(pwd) - while [ "$wdir" != '/' ] ; do - if [ -d "$wdir"/.mvn ] ; then - basedir=$wdir - break - fi - wdir=$(cd "$wdir/.."; pwd) - done - echo "${basedir}" -} - -# concatenates all lines of a file -concat_lines() { - if [ -f "$1" ]; then - echo "$(tr -s '\n' ' ' < "$1")" - fi -} - -export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-$(find_maven_basedir)} -MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" - -# Provide a "standardized" way to retrieve the CLI args that will -# work with both Windows and non-Windows executions. -MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" -export MAVEN_CMD_LINE_ARGS - -WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -exec "$JAVACMD" \ - $MAVEN_OPTS \ - -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ - "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ - ${WRAPPER_LAUNCHER} "$@" diff --git a/couchbase-sdk-spring-service/mvnw.cmd b/couchbase-sdk-spring-service/mvnw.cmd deleted file mode 100644 index 2b934e89dd..0000000000 --- a/couchbase-sdk-spring-service/mvnw.cmd +++ /dev/null @@ -1,145 +0,0 @@ -@REM ---------------------------------------------------------------------------- -@REM Licensed to the Apache Software Foundation (ASF) under one -@REM or more contributor license agreements. See the NOTICE file -@REM distributed with this work for additional information -@REM regarding copyright ownership. The ASF licenses this file -@REM to you under the Apache License, Version 2.0 (the -@REM "License"); you may not use this file except in compliance -@REM with the License. You may obtain a copy of the License at -@REM -@REM http://www.apache.org/licenses/LICENSE-2.0 -@REM -@REM Unless required by applicable law or agreed to in writing, -@REM software distributed under the License is distributed on an -@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -@REM KIND, either express or implied. See the License for the -@REM specific language governing permissions and limitations -@REM under the License. -@REM ---------------------------------------------------------------------------- - -@REM ---------------------------------------------------------------------------- -@REM Maven2 Start Up Batch script -@REM -@REM Required ENV vars: -@REM JAVA_HOME - location of a JDK home dir -@REM -@REM Optional ENV vars -@REM M2_HOME - location of maven2's installed home dir -@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands -@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending -@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven -@REM e.g. to debug Maven itself, use -@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files -@REM ---------------------------------------------------------------------------- - -@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' -@echo off -@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' -@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% - -@REM set %HOME% to equivalent of $HOME -if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") - -@REM Execute a user defined script before this one -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre -@REM check for pre script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" -if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" -:skipRcPre - -@setlocal - -set ERROR_CODE=0 - -@REM To isolate internal variables from possible post scripts, we use another setlocal -@setlocal - -@REM ==== START VALIDATION ==== -if not "%JAVA_HOME%" == "" goto OkJHome - -echo. -echo Error: JAVA_HOME not found in your environment. >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -:OkJHome -if exist "%JAVA_HOME%\bin\java.exe" goto init - -echo. -echo Error: JAVA_HOME is set to an invalid directory. >&2 -echo JAVA_HOME = "%JAVA_HOME%" >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -@REM ==== END VALIDATION ==== - -:init - -set MAVEN_CMD_LINE_ARGS=%* - -@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". -@REM Fallback to current working directory if not found. - -set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% -IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir - -set EXEC_DIR=%CD% -set WDIR=%EXEC_DIR% -:findBaseDir -IF EXIST "%WDIR%"\.mvn goto baseDirFound -cd .. -IF "%WDIR%"=="%CD%" goto baseDirNotFound -set WDIR=%CD% -goto findBaseDir - -:baseDirFound -set MAVEN_PROJECTBASEDIR=%WDIR% -cd "%EXEC_DIR%" -goto endDetectBaseDir - -:baseDirNotFound -set MAVEN_PROJECTBASEDIR=%EXEC_DIR% -cd "%EXEC_DIR%" - -:endDetectBaseDir - -IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig - -@setlocal EnableExtensions EnableDelayedExpansion -for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a -@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% - -:endReadAdditionalConfig - -SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" - -set WRAPPER_JAR="".\.mvn\wrapper\maven-wrapper.jar"" -set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CMD_LINE_ARGS% -if ERRORLEVEL 1 goto error -goto end - -:error -set ERROR_CODE=1 - -:end -@endlocal & set ERROR_CODE=%ERROR_CODE% - -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost -@REM check for post script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" -if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" -:skipRcPost - -@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' -if "%MAVEN_BATCH_PAUSE%" == "on" pause - -if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% - -exit /B %ERROR_CODE% \ No newline at end of file diff --git a/couchbase-sdk-spring-service/pom.xml b/couchbase-sdk-spring-service/pom.xml deleted file mode 100644 index d344f8c756..0000000000 --- a/couchbase-sdk-spring-service/pom.xml +++ /dev/null @@ -1,102 +0,0 @@ - - - 4.0.0 - com.baeldung - couchbase-sdk-spring-service - 0.1-SNAPSHOT - jar - couchbase-sdk-spring-service - Intro to the Couchbase SDK - - - - - com.couchbase.client - java-client - ${couchbase.client.version} - - - - - org.springframework - spring-context - ${spring-framework.version} - - - org.springframework - spring-context-support - ${spring-framework.version} - - - - - org.slf4j - slf4j-api - ${org.slf4j.version} - compile - - - ch.qos.logback - logback-classic - ${logback.version} - - - org.slf4j - jcl-over-slf4j - ${org.slf4j.version} - - - org.slf4j - log4j-over-slf4j - ${org.slf4j.version} - - - - - org.springframework - spring-test - ${spring-framework.version} - test - - - junit - junit - ${junit.version} - test - - - - - org.apache.commons - commons-lang3 - ${commons-lang3.version} - test - - - - - - - maven-compiler-plugin - 2.3.2 - - 1.7 - 1.7 - - - - - - - 1.7 - UTF-8 - 2.2.6 - 4.2.4.RELEASE - 1.1.3 - 1.7.12 - 4.11 - 3.4 - - - diff --git a/couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/person/FluentPersonDocumentConverter.java b/couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/person/FluentPersonDocumentConverter.java deleted file mode 100644 index 8210c10b3a..0000000000 --- a/couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/person/FluentPersonDocumentConverter.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.baeldung.couchbase.person; - -import org.springframework.stereotype.Service; - -import com.baeldung.couchbase.service.JsonDocumentConverter; -import com.couchbase.client.java.document.JsonDocument; -import com.couchbase.client.java.document.json.JsonObject; - -@Service -public class FluentPersonDocumentConverter implements JsonDocumentConverter { - - @Override - public JsonDocument toDocument(Person p) { - JsonObject content = JsonObject.empty() - .put("type", "Person") - .put("name", p.getName()) - .put("homeTown", p.getHomeTown()); - return JsonDocument.create(p.getId(), content); - } - - @Override - public Person fromDocument(JsonDocument doc) { - JsonObject content = doc.content(); - return Person.Builder.newInstance() - .id(doc.id()) - .type("Person") - .name(content.getString("name")) - .homeTown(content.getString("homeTown")) - .build(); - } -} diff --git a/couchbase-sdk-spring-service/src/main/resources/application.properties b/couchbase-sdk-spring-service/src/main/resources/application.properties deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/couchbase-sdk-spring-service/src/main/resources/logback.xml b/couchbase-sdk-spring-service/src/main/resources/logback.xml deleted file mode 100644 index efcc6fb4c7..0000000000 --- a/couchbase-sdk-spring-service/src/main/resources/logback.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - web - %date [%thread] %-5level %logger{36} - %message%n - - - - - - - - - - - - \ No newline at end of file diff --git a/couchbase-sdk/README.md b/couchbase-sdk/README.md new file mode 100644 index 0000000000..9cdcdea012 --- /dev/null +++ b/couchbase-sdk/README.md @@ -0,0 +1,50 @@ +## Couchbase SDK Tutorial Project + +### Relevant Articles: +- [Introduction to Couchbase SDK for Java](http://www.baeldung.com/java-couchbase-sdk) +- [Using Couchbase in a Spring Application](http://www.baeldung.com/couchbase-sdk-spring) +- [Asynchronous Batch Opereations in Couchbase](http://www.baeldung.com/async-batch-operations-in-couchbase) + +### Overview +This Maven project contains the Java code for the Couchbase entities and Spring services +as described in the tutorials, as well as a unit/integration test +for each service implementation. + +### Working with the Code +The project was developed and tested using Java 7 and 8 in the Eclipse-based +Spring Source Toolkit (STS) and therefore should run fine in any +recent version of Eclipse or another IDE of your choice +that supports Java 7 or later. + +### Building the Project +You can also build the project using Maven outside of any IDE: +``` +mvn clean install +``` + +### Package Organization +Java classes for the intro tutorial are in the +org.baeldung.couchbase.intro package. + +Java classes for the Spring service tutorial are in the +org.baeldung.couchbase.spring package hierarchy. + +Java classes for the Asynchronous Couchbase tutorial are in the +org.baeldung.couchbase.async package hierarchy. + + +### Running the tests +The test classes for the Spring service tutorial are: +- org.baeldung.couchbase.spring.service.ClusterServiceTest +- org.baeldung.couchbase.spring.person.PersonCrudServiceTest + +The test classes for the Asynchronous Couchbase tutorial are in the +org.baeldung.couchbase.async package hierarchy: +- org.baeldung.couchbase.async.service.ClusterServiceTest +- org.baeldung.couchbase.async.person.PersonCrudServiceTest + +The test classes may be run as JUnit tests from your IDE +or using the Maven command line: +``` +mvn test +``` diff --git a/couchbase-sdk-async/mvnw b/couchbase-sdk/mvnw similarity index 100% rename from couchbase-sdk-async/mvnw rename to couchbase-sdk/mvnw diff --git a/couchbase-sdk-async/mvnw.cmd b/couchbase-sdk/mvnw.cmd similarity index 100% rename from couchbase-sdk-async/mvnw.cmd rename to couchbase-sdk/mvnw.cmd diff --git a/couchbase-sdk-async/pom.xml b/couchbase-sdk/pom.xml similarity index 95% rename from couchbase-sdk-async/pom.xml rename to couchbase-sdk/pom.xml index 9062ef8e15..4c277f4c85 100644 --- a/couchbase-sdk-async/pom.xml +++ b/couchbase-sdk/pom.xml @@ -3,11 +3,11 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 com.baeldung - couchbase-sdk-async + couchbase-sdk 0.1-SNAPSHOT jar - couchbase-sdk-async - Couchbase SDK Asynchronous Operations + couchbase-sdk + Couchbase SDK Tutorials diff --git a/couchbase-sdk-async/src/main/java/com/baeldung/couchbase/service/CouchbaseEntity.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/CouchbaseEntity.java similarity index 70% rename from couchbase-sdk-async/src/main/java/com/baeldung/couchbase/service/CouchbaseEntity.java rename to couchbase-sdk/src/main/java/com/baeldung/couchbase/async/CouchbaseEntity.java index 4d2500197b..16e1876719 100644 --- a/couchbase-sdk-async/src/main/java/com/baeldung/couchbase/service/CouchbaseEntity.java +++ b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/CouchbaseEntity.java @@ -1,4 +1,4 @@ -package com.baeldung.couchbase.service; +package com.baeldung.couchbase.async; public interface CouchbaseEntity { diff --git a/couchbase-sdk-async/src/main/java/com/baeldung/couchbase/person/Person.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/person/Person.java similarity index 94% rename from couchbase-sdk-async/src/main/java/com/baeldung/couchbase/person/Person.java rename to couchbase-sdk/src/main/java/com/baeldung/couchbase/async/person/Person.java index bf248c3999..32ed2ebbe4 100644 --- a/couchbase-sdk-async/src/main/java/com/baeldung/couchbase/person/Person.java +++ b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/person/Person.java @@ -1,6 +1,6 @@ -package com.baeldung.couchbase.person; +package com.baeldung.couchbase.async.person; -import com.baeldung.couchbase.service.CouchbaseEntity; +import com.baeldung.couchbase.async.CouchbaseEntity; public class Person implements CouchbaseEntity { diff --git a/couchbase-sdk-async/src/main/java/com/baeldung/couchbase/person/PersonCrudService.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/person/PersonCrudService.java similarity index 77% rename from couchbase-sdk-async/src/main/java/com/baeldung/couchbase/person/PersonCrudService.java rename to couchbase-sdk/src/main/java/com/baeldung/couchbase/async/person/PersonCrudService.java index d5302bd6db..b2ef985725 100644 --- a/couchbase-sdk-async/src/main/java/com/baeldung/couchbase/person/PersonCrudService.java +++ b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/person/PersonCrudService.java @@ -1,4 +1,4 @@ -package com.baeldung.couchbase.person; +package com.baeldung.couchbase.async.person; import javax.annotation.PostConstruct; @@ -6,8 +6,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; -import com.baeldung.couchbase.service.AbstractCrudService; -import com.baeldung.couchbase.service.BucketService; +import com.baeldung.couchbase.async.service.AbstractCrudService; +import com.baeldung.couchbase.async.service.BucketService; @Service public class PersonCrudService extends AbstractCrudService { diff --git a/couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/person/PersonDocumentConverter.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/person/PersonDocumentConverter.java similarity index 88% rename from couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/person/PersonDocumentConverter.java rename to couchbase-sdk/src/main/java/com/baeldung/couchbase/async/person/PersonDocumentConverter.java index cfb20a2bfb..8646cf247a 100644 --- a/couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/person/PersonDocumentConverter.java +++ b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/person/PersonDocumentConverter.java @@ -1,8 +1,8 @@ -package com.baeldung.couchbase.person; +package com.baeldung.couchbase.async.person; import org.springframework.stereotype.Service; -import com.baeldung.couchbase.service.JsonDocumentConverter; +import com.baeldung.couchbase.async.service.JsonDocumentConverter; import com.couchbase.client.java.document.JsonDocument; import com.couchbase.client.java.document.json.JsonObject; diff --git a/couchbase-sdk-async/src/main/java/com/baeldung/couchbase/person/RegistrationService.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/person/RegistrationService.java similarity index 93% rename from couchbase-sdk-async/src/main/java/com/baeldung/couchbase/person/RegistrationService.java rename to couchbase-sdk/src/main/java/com/baeldung/couchbase/async/person/RegistrationService.java index 53af1c4041..926cd7f4e8 100644 --- a/couchbase-sdk-async/src/main/java/com/baeldung/couchbase/person/RegistrationService.java +++ b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/person/RegistrationService.java @@ -1,4 +1,4 @@ -package com.baeldung.couchbase.person; +package com.baeldung.couchbase.async.person; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; diff --git a/couchbase-sdk-async/src/main/java/com/baeldung/couchbase/service/AbstractBucketService.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/AbstractBucketService.java similarity index 93% rename from couchbase-sdk-async/src/main/java/com/baeldung/couchbase/service/AbstractBucketService.java rename to couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/AbstractBucketService.java index 08acf5deed..cbc03cbcda 100644 --- a/couchbase-sdk-async/src/main/java/com/baeldung/couchbase/service/AbstractBucketService.java +++ b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/AbstractBucketService.java @@ -1,4 +1,4 @@ -package com.baeldung.couchbase.service; +package com.baeldung.couchbase.async.service; import com.couchbase.client.java.Bucket; diff --git a/couchbase-sdk-async/src/main/java/com/baeldung/couchbase/service/AbstractCrudService.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/AbstractCrudService.java similarity index 98% rename from couchbase-sdk-async/src/main/java/com/baeldung/couchbase/service/AbstractCrudService.java rename to couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/AbstractCrudService.java index ce95074015..861e2404e5 100644 --- a/couchbase-sdk-async/src/main/java/com/baeldung/couchbase/service/AbstractCrudService.java +++ b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/AbstractCrudService.java @@ -1,4 +1,4 @@ -package com.baeldung.couchbase.service; +package com.baeldung.couchbase.async.service; import java.util.ArrayList; import java.util.List; @@ -8,6 +8,7 @@ import java.util.concurrent.TimeUnit; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.baeldung.couchbase.async.CouchbaseEntity; import com.couchbase.client.core.BackpressureException; import com.couchbase.client.core.time.Delay; import com.couchbase.client.java.AsyncBucket; diff --git a/couchbase-sdk-async/src/main/java/com/baeldung/couchbase/service/BucketService.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/BucketService.java similarity index 69% rename from couchbase-sdk-async/src/main/java/com/baeldung/couchbase/service/BucketService.java rename to couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/BucketService.java index df9156d87d..28470be99f 100644 --- a/couchbase-sdk-async/src/main/java/com/baeldung/couchbase/service/BucketService.java +++ b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/BucketService.java @@ -1,4 +1,4 @@ -package com.baeldung.couchbase.service; +package com.baeldung.couchbase.async.service; import com.couchbase.client.java.Bucket; diff --git a/couchbase-sdk-async/src/main/java/com/baeldung/couchbase/service/ClusterService.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/ClusterService.java similarity index 74% rename from couchbase-sdk-async/src/main/java/com/baeldung/couchbase/service/ClusterService.java rename to couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/ClusterService.java index 437ec00ff4..ee67405b12 100644 --- a/couchbase-sdk-async/src/main/java/com/baeldung/couchbase/service/ClusterService.java +++ b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/ClusterService.java @@ -1,4 +1,4 @@ -package com.baeldung.couchbase.service; +package com.baeldung.couchbase.async.service; import com.couchbase.client.java.Bucket; diff --git a/couchbase-sdk-async/src/main/java/com/baeldung/couchbase/service/ClusterServiceImpl.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/ClusterServiceImpl.java similarity index 95% rename from couchbase-sdk-async/src/main/java/com/baeldung/couchbase/service/ClusterServiceImpl.java rename to couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/ClusterServiceImpl.java index c8ff56269d..7ce75d21f5 100644 --- a/couchbase-sdk-async/src/main/java/com/baeldung/couchbase/service/ClusterServiceImpl.java +++ b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/ClusterServiceImpl.java @@ -1,4 +1,4 @@ -package com.baeldung.couchbase.service; +package com.baeldung.couchbase.async.service; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; diff --git a/couchbase-sdk-async/src/main/java/com/baeldung/couchbase/service/CrudService.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/CrudService.java similarity index 89% rename from couchbase-sdk-async/src/main/java/com/baeldung/couchbase/service/CrudService.java rename to couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/CrudService.java index e0f0831abb..5bd0e52214 100644 --- a/couchbase-sdk-async/src/main/java/com/baeldung/couchbase/service/CrudService.java +++ b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/CrudService.java @@ -1,4 +1,4 @@ -package com.baeldung.couchbase.service; +package com.baeldung.couchbase.async.service; import java.util.List; diff --git a/couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/service/JsonDocumentConverter.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/JsonDocumentConverter.java similarity index 79% rename from couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/service/JsonDocumentConverter.java rename to couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/JsonDocumentConverter.java index 87331d2a17..85e14a87ce 100644 --- a/couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/service/JsonDocumentConverter.java +++ b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/JsonDocumentConverter.java @@ -1,4 +1,4 @@ -package com.baeldung.couchbase.service; +package com.baeldung.couchbase.async.service; import com.couchbase.client.java.document.JsonDocument; diff --git a/couchbase-sdk-async/src/main/java/com/baeldung/couchbase/service/TutorialBucketService.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/TutorialBucketService.java similarity index 93% rename from couchbase-sdk-async/src/main/java/com/baeldung/couchbase/service/TutorialBucketService.java rename to couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/TutorialBucketService.java index 2e40321272..459585d995 100644 --- a/couchbase-sdk-async/src/main/java/com/baeldung/couchbase/service/TutorialBucketService.java +++ b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/TutorialBucketService.java @@ -1,4 +1,4 @@ -package com.baeldung.couchbase.service; +package com.baeldung.couchbase.async.service; import javax.annotation.PostConstruct; diff --git a/couchbase-sdk-intro/src/main/java/com/baeldung/couchbase/examples/CodeSnippets.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/intro/CodeSnippets.java similarity index 98% rename from couchbase-sdk-intro/src/main/java/com/baeldung/couchbase/examples/CodeSnippets.java rename to couchbase-sdk/src/main/java/com/baeldung/couchbase/intro/CodeSnippets.java index 088f7af7b1..2cb9e1f4f7 100644 --- a/couchbase-sdk-intro/src/main/java/com/baeldung/couchbase/examples/CodeSnippets.java +++ b/couchbase-sdk/src/main/java/com/baeldung/couchbase/intro/CodeSnippets.java @@ -1,4 +1,4 @@ -package com.baeldung.couchbase.examples; +package com.baeldung.couchbase.intro; import java.util.List; import java.util.UUID; diff --git a/couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/person/Person.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/person/Person.java similarity index 97% rename from couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/person/Person.java rename to couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/person/Person.java index 48b7a38780..0348ba1e5f 100644 --- a/couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/person/Person.java +++ b/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/person/Person.java @@ -1,4 +1,4 @@ -package com.baeldung.couchbase.person; +package com.baeldung.couchbase.spring.person; public class Person { diff --git a/couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/person/PersonCrudService.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/person/PersonCrudService.java similarity index 88% rename from couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/person/PersonCrudService.java rename to couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/person/PersonCrudService.java index 0203bf30bb..de035f1d2c 100644 --- a/couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/person/PersonCrudService.java +++ b/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/person/PersonCrudService.java @@ -1,4 +1,4 @@ -package com.baeldung.couchbase.person; +package com.baeldung.couchbase.spring.person; import java.util.List; import java.util.UUID; @@ -8,8 +8,9 @@ import javax.annotation.PostConstruct; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import com.baeldung.couchbase.service.CrudService; -import com.baeldung.couchbase.service.TutorialBucketService;import com.couchbase.client.java.Bucket; +import com.baeldung.couchbase.spring.service.CrudService; +import com.baeldung.couchbase.spring.service.TutorialBucketService; +import com.couchbase.client.java.Bucket; import com.couchbase.client.java.ReplicaMode; import com.couchbase.client.java.document.JsonDocument; diff --git a/couchbase-sdk-async/src/main/java/com/baeldung/couchbase/person/PersonDocumentConverter.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/person/PersonDocumentConverter.java similarity index 88% rename from couchbase-sdk-async/src/main/java/com/baeldung/couchbase/person/PersonDocumentConverter.java rename to couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/person/PersonDocumentConverter.java index cfb20a2bfb..030c9fde27 100644 --- a/couchbase-sdk-async/src/main/java/com/baeldung/couchbase/person/PersonDocumentConverter.java +++ b/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/person/PersonDocumentConverter.java @@ -1,8 +1,8 @@ -package com.baeldung.couchbase.person; +package com.baeldung.couchbase.spring.person; import org.springframework.stereotype.Service; -import com.baeldung.couchbase.service.JsonDocumentConverter; +import com.baeldung.couchbase.spring.service.JsonDocumentConverter; import com.couchbase.client.java.document.JsonDocument; import com.couchbase.client.java.document.json.JsonObject; diff --git a/couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/person/RegistrationService.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/person/RegistrationService.java similarity index 93% rename from couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/person/RegistrationService.java rename to couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/person/RegistrationService.java index 53af1c4041..5ffe7acf24 100644 --- a/couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/person/RegistrationService.java +++ b/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/person/RegistrationService.java @@ -1,4 +1,4 @@ -package com.baeldung.couchbase.person; +package com.baeldung.couchbase.spring.person; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; diff --git a/couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/service/BucketService.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/BucketService.java similarity index 69% rename from couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/service/BucketService.java rename to couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/BucketService.java index c2562dd38e..97ff1e4fd5 100644 --- a/couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/service/BucketService.java +++ b/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/BucketService.java @@ -1,4 +1,4 @@ -package com.baeldung.couchbase.service; +package com.baeldung.couchbase.spring.service; import com.couchbase.client.java.Bucket; diff --git a/couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/service/ClusterService.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/ClusterService.java similarity index 90% rename from couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/service/ClusterService.java rename to couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/ClusterService.java index 4713893899..a8543fbd91 100644 --- a/couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/service/ClusterService.java +++ b/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/ClusterService.java @@ -1,4 +1,4 @@ -package com.baeldung.couchbase.service; +package com.baeldung.couchbase.spring.service; import java.util.List; diff --git a/couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/service/ClusterServiceImpl.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/ClusterServiceImpl.java similarity index 98% rename from couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/service/ClusterServiceImpl.java rename to couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/ClusterServiceImpl.java index 3c355d2a27..3499fa956e 100644 --- a/couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/service/ClusterServiceImpl.java +++ b/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/ClusterServiceImpl.java @@ -1,4 +1,4 @@ -package com.baeldung.couchbase.service; +package com.baeldung.couchbase.spring.service; import java.util.ArrayList; import java.util.List; diff --git a/couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/service/CrudService.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/CrudService.java similarity index 82% rename from couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/service/CrudService.java rename to couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/CrudService.java index 20ee851b39..f683b9f562 100644 --- a/couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/service/CrudService.java +++ b/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/CrudService.java @@ -1,4 +1,4 @@ -package com.baeldung.couchbase.service; +package com.baeldung.couchbase.spring.service; public interface CrudService { diff --git a/couchbase-sdk-async/src/main/java/com/baeldung/couchbase/service/JsonDocumentConverter.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/JsonDocumentConverter.java similarity index 79% rename from couchbase-sdk-async/src/main/java/com/baeldung/couchbase/service/JsonDocumentConverter.java rename to couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/JsonDocumentConverter.java index 87331d2a17..cf4861fbeb 100644 --- a/couchbase-sdk-async/src/main/java/com/baeldung/couchbase/service/JsonDocumentConverter.java +++ b/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/JsonDocumentConverter.java @@ -1,4 +1,4 @@ -package com.baeldung.couchbase.service; +package com.baeldung.couchbase.spring.service; import com.couchbase.client.java.document.JsonDocument; diff --git a/couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/service/TutorialBucketService.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/TutorialBucketService.java similarity index 93% rename from couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/service/TutorialBucketService.java rename to couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/TutorialBucketService.java index 903a568399..8a28deb1d6 100644 --- a/couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/service/TutorialBucketService.java +++ b/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/TutorialBucketService.java @@ -1,4 +1,4 @@ -package com.baeldung.couchbase.service; +package com.baeldung.couchbase.spring.service; import javax.annotation.PostConstruct; diff --git a/couchbase-sdk-async/src/main/resources/application.properties b/couchbase-sdk/src/main/resources/application.properties similarity index 100% rename from couchbase-sdk-async/src/main/resources/application.properties rename to couchbase-sdk/src/main/resources/application.properties diff --git a/couchbase-sdk-async/src/main/resources/logback.xml b/couchbase-sdk/src/main/resources/logback.xml similarity index 100% rename from couchbase-sdk-async/src/main/resources/logback.xml rename to couchbase-sdk/src/main/resources/logback.xml diff --git a/couchbase-sdk-spring-service/src/test/java/com/baeldung/couchbase/IntegrationTest.java b/couchbase-sdk/src/test/java/com/baeldung/couchbase/async/AsyncIntegrationTest.java similarity index 74% rename from couchbase-sdk-spring-service/src/test/java/com/baeldung/couchbase/IntegrationTest.java rename to couchbase-sdk/src/test/java/com/baeldung/couchbase/async/AsyncIntegrationTest.java index d1cc807f7a..3079fc928a 100644 --- a/couchbase-sdk-spring-service/src/test/java/com/baeldung/couchbase/IntegrationTest.java +++ b/couchbase-sdk/src/test/java/com/baeldung/couchbase/async/AsyncIntegrationTest.java @@ -1,4 +1,4 @@ -package com.baeldung.couchbase; +package com.baeldung.couchbase.async; import org.junit.runner.RunWith; import org.springframework.test.context.ContextConfiguration; @@ -7,7 +7,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.support.DependencyInjectionTestExecutionListener; @RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(classes = { IntegrationTestConfig.class }) +@ContextConfiguration(classes = { AsyncIntegrationTestConfig.class }) @TestExecutionListeners(listeners = { DependencyInjectionTestExecutionListener.class }) -public abstract class IntegrationTest { +public abstract class AsyncIntegrationTest { } diff --git a/couchbase-sdk/src/test/java/com/baeldung/couchbase/async/AsyncIntegrationTestConfig.java b/couchbase-sdk/src/test/java/com/baeldung/couchbase/async/AsyncIntegrationTestConfig.java new file mode 100644 index 0000000000..6afdfe04bd --- /dev/null +++ b/couchbase-sdk/src/test/java/com/baeldung/couchbase/async/AsyncIntegrationTestConfig.java @@ -0,0 +1,9 @@ +package com.baeldung.couchbase.async; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ComponentScan(basePackages={"com.baeldung.couchbase.async"}) +public class AsyncIntegrationTestConfig { +} diff --git a/couchbase-sdk-async/src/test/java/com/baeldung/couchbase/person/PersonCrudServiceTest.java b/couchbase-sdk/src/test/java/com/baeldung/couchbase/async/person/PersonCrudServiceTest.java similarity index 93% rename from couchbase-sdk-async/src/test/java/com/baeldung/couchbase/person/PersonCrudServiceTest.java rename to couchbase-sdk/src/test/java/com/baeldung/couchbase/async/person/PersonCrudServiceTest.java index 3da282492c..afc5bbd53b 100644 --- a/couchbase-sdk-async/src/test/java/com/baeldung/couchbase/person/PersonCrudServiceTest.java +++ b/couchbase-sdk/src/test/java/com/baeldung/couchbase/async/person/PersonCrudServiceTest.java @@ -1,4 +1,4 @@ -package com.baeldung.couchbase.person; +package com.baeldung.couchbase.async.person; import static org.junit.Assert.*; @@ -13,12 +13,15 @@ import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; -import com.baeldung.couchbase.IntegrationTest; -import com.baeldung.couchbase.service.BucketService; +import com.baeldung.couchbase.async.AsyncIntegrationTest; +import com.baeldung.couchbase.async.person.Person; +import com.baeldung.couchbase.async.person.PersonCrudService; +import com.baeldung.couchbase.async.person.PersonDocumentConverter; +import com.baeldung.couchbase.async.service.BucketService; import com.couchbase.client.java.Bucket; import com.couchbase.client.java.document.JsonDocument; -public class PersonCrudServiceTest extends IntegrationTest { +public class PersonCrudServiceTest extends AsyncIntegrationTest { @Autowired private PersonCrudService personService; diff --git a/couchbase-sdk-async/src/test/java/com/baeldung/couchbase/service/ClusterServiceTest.java b/couchbase-sdk/src/test/java/com/baeldung/couchbase/async/service/ClusterServiceTest.java similarity index 73% rename from couchbase-sdk-async/src/test/java/com/baeldung/couchbase/service/ClusterServiceTest.java rename to couchbase-sdk/src/test/java/com/baeldung/couchbase/async/service/ClusterServiceTest.java index 7795f41c93..8ecb51a4b9 100644 --- a/couchbase-sdk-async/src/test/java/com/baeldung/couchbase/service/ClusterServiceTest.java +++ b/couchbase-sdk/src/test/java/com/baeldung/couchbase/async/service/ClusterServiceTest.java @@ -1,4 +1,4 @@ -package com.baeldung.couchbase.service; +package com.baeldung.couchbase.async.service; import static org.junit.Assert.*; @@ -10,14 +10,15 @@ import org.springframework.test.context.TestExecutionListeners; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.support.DependencyInjectionTestExecutionListener; -import com.baeldung.couchbase.IntegrationTest; -import com.baeldung.couchbase.IntegrationTestConfig; +import com.baeldung.couchbase.async.AsyncIntegrationTest; +import com.baeldung.couchbase.async.AsyncIntegrationTestConfig; +import com.baeldung.couchbase.async.service.ClusterService; import com.couchbase.client.java.Bucket; @RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(classes = { IntegrationTestConfig.class }) +@ContextConfiguration(classes = { AsyncIntegrationTestConfig.class }) @TestExecutionListeners(listeners = { DependencyInjectionTestExecutionListener.class }) -public class ClusterServiceTest extends IntegrationTest { +public class ClusterServiceTest extends AsyncIntegrationTest { @Autowired private ClusterService couchbaseService; diff --git a/couchbase-sdk-async/src/test/java/com/baeldung/couchbase/IntegrationTest.java b/couchbase-sdk/src/test/java/com/baeldung/couchbase/spring/IntegrationTest.java similarity index 93% rename from couchbase-sdk-async/src/test/java/com/baeldung/couchbase/IntegrationTest.java rename to couchbase-sdk/src/test/java/com/baeldung/couchbase/spring/IntegrationTest.java index d1cc807f7a..9c0b0a50c1 100644 --- a/couchbase-sdk-async/src/test/java/com/baeldung/couchbase/IntegrationTest.java +++ b/couchbase-sdk/src/test/java/com/baeldung/couchbase/spring/IntegrationTest.java @@ -1,4 +1,4 @@ -package com.baeldung.couchbase; +package com.baeldung.couchbase.spring; import org.junit.runner.RunWith; import org.springframework.test.context.ContextConfiguration; diff --git a/couchbase-sdk-spring-service/src/test/java/com/baeldung/couchbase/IntegrationTestConfig.java b/couchbase-sdk/src/test/java/com/baeldung/couchbase/spring/IntegrationTestConfig.java similarity index 63% rename from couchbase-sdk-spring-service/src/test/java/com/baeldung/couchbase/IntegrationTestConfig.java rename to couchbase-sdk/src/test/java/com/baeldung/couchbase/spring/IntegrationTestConfig.java index d593aac52d..ac71911b9b 100644 --- a/couchbase-sdk-spring-service/src/test/java/com/baeldung/couchbase/IntegrationTestConfig.java +++ b/couchbase-sdk/src/test/java/com/baeldung/couchbase/spring/IntegrationTestConfig.java @@ -1,9 +1,9 @@ -package com.baeldung.couchbase; +package com.baeldung.couchbase.spring; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @Configuration -@ComponentScan(basePackages={"com.baeldung.couchbase"}) +@ComponentScan(basePackages={"com.baeldung.couchbase.spring"}) public class IntegrationTestConfig { } diff --git a/couchbase-sdk-spring-service/src/test/java/com/baeldung/couchbase/person/PersonCrudServiceTest.java b/couchbase-sdk/src/test/java/com/baeldung/couchbase/spring/person/PersonCrudServiceTest.java similarity index 96% rename from couchbase-sdk-spring-service/src/test/java/com/baeldung/couchbase/person/PersonCrudServiceTest.java rename to couchbase-sdk/src/test/java/com/baeldung/couchbase/spring/person/PersonCrudServiceTest.java index e19e90769c..601b261f6e 100644 --- a/couchbase-sdk-spring-service/src/test/java/com/baeldung/couchbase/person/PersonCrudServiceTest.java +++ b/couchbase-sdk/src/test/java/com/baeldung/couchbase/spring/person/PersonCrudServiceTest.java @@ -1,4 +1,4 @@ -package com.baeldung.couchbase.person; +package com.baeldung.couchbase.spring.person; import static org.junit.Assert.*; @@ -8,7 +8,7 @@ import org.apache.commons.lang3.RandomStringUtils; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; -import com.baeldung.couchbase.IntegrationTest; +import com.baeldung.couchbase.spring.IntegrationTest; public class PersonCrudServiceTest extends IntegrationTest { diff --git a/couchbase-sdk-spring-service/src/test/java/com/baeldung/couchbase/service/ClusterServiceTest.java b/couchbase-sdk/src/test/java/com/baeldung/couchbase/spring/service/ClusterServiceTest.java similarity index 87% rename from couchbase-sdk-spring-service/src/test/java/com/baeldung/couchbase/service/ClusterServiceTest.java rename to couchbase-sdk/src/test/java/com/baeldung/couchbase/spring/service/ClusterServiceTest.java index 7795f41c93..d1968e1c04 100644 --- a/couchbase-sdk-spring-service/src/test/java/com/baeldung/couchbase/service/ClusterServiceTest.java +++ b/couchbase-sdk/src/test/java/com/baeldung/couchbase/spring/service/ClusterServiceTest.java @@ -1,4 +1,4 @@ -package com.baeldung.couchbase.service; +package com.baeldung.couchbase.spring.service; import static org.junit.Assert.*; @@ -10,8 +10,8 @@ import org.springframework.test.context.TestExecutionListeners; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.support.DependencyInjectionTestExecutionListener; -import com.baeldung.couchbase.IntegrationTest; -import com.baeldung.couchbase.IntegrationTestConfig; +import com.baeldung.couchbase.spring.IntegrationTest; +import com.baeldung.couchbase.spring.IntegrationTestConfig; import com.couchbase.client.java.Bucket; @RunWith(SpringJUnit4ClassRunner.class) diff --git a/pom.xml b/pom.xml index e82b964900..7b4711361c 100644 --- a/pom.xml +++ b/pom.xml @@ -19,8 +19,7 @@ autovalue-tutorial core-java core-java-8 - couchbase-sdk-intro - couchbase-sdk-spring-service + couchbase-sdk dependency-injection gatling @@ -61,7 +60,6 @@ spring-cucumber spring-data-cassandra spring-data-couchbase-2 - spring-data-couchbase-2b spring-data-elasticsearch spring-data-neo4j spring-data-mongodb diff --git a/spring-data-couchbase-2/README.md b/spring-data-couchbase-2/README.md index 3ed226fb33..2e56b25fef 100644 --- a/spring-data-couchbase-2/README.md +++ b/spring-data-couchbase-2/README.md @@ -3,6 +3,7 @@ ### Relevant Articles: - [Spring Data Couchbase](http://www.baeldung.com/spring-data-couchbase) - [Entity Validation, Query Consistency, and Optimistic Locking in Spring Data Couchbase](http://www.baeldung.com/entity-validation-locking-and-query-consistency-in-spring-data-couchbase) +- [Multiple Buckets and Spatial View Queries in Spring Data Couchbase](http://www.baeldung.com/spring-data-couchbase-buckets-and-spatial-view-queries) ### Overview This Maven project contains the Java code for Spring Data Couchbase @@ -11,7 +12,7 @@ as described in the tutorials, as well as a unit/integration test for each service implementation. ### Working with the Code -The project was developed and tested using Java 7 nad 8 in the Eclipse-based +The project was developed and tested using Java 7 and 8 in the Eclipse-based Spring Source Toolkit (STS) and therefore should run fine in any recent version of Eclipse or another IDE of your choice that supports Java 7 or later. @@ -22,8 +23,15 @@ You can also build the project using Maven outside of any IDE: mvn clean install ``` +### Package Organization +Java classes for the first two tutorials listed above are in src/main/java in the package hierarchy +org.baeldung.spring.data.couchbase + +Java classes for the multiple-bucket tutorials are in src/main/java in the package hierarchy +org.baeldung.spring.data.couchbase2b + ### Running the tests -The following test classes are in src/test/java in the package +The test classes for the single-bucket tutorials are in src/test/java in the package org.baeldung.spring.data.couchbase.service: - PersonServiceTest (abstract) - PersonRepositoryTest (concrete) @@ -32,6 +40,12 @@ org.baeldung.spring.data.couchbase.service: - StudentRepositoryTest (concrete) - StudentTemplateServiceTest (concrete) +The concrete test classes for the multiple-bucket tutorial are in src/test/java in the package +org.baeldung.spring.data.couchbase2b.service: +- CampusRepositoryServiceImplTest +- PersonRepositoryServiceImplTest +- StudentRepositoryServiceImplTest + The concrete test classes may be run as JUnit tests from your IDE or using the Maven command line: ``` diff --git a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/model/Campus.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/model/Campus.java similarity index 100% rename from spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/model/Campus.java rename to spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/model/Campus.java diff --git a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/repos/CampusRepository.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/CampusRepository.java similarity index 92% rename from spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/repos/CampusRepository.java rename to spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/CampusRepository.java index 22b2fb2735..2cf388f518 100644 --- a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/repos/CampusRepository.java +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/CampusRepository.java @@ -1,4 +1,4 @@ -package org.baeldung.spring.data.couchbase.repos; +package org.baeldung.spring.data.couchbase2b.repos; import java.util.Set; diff --git a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/repos/PersonRepository.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/PersonRepository.java similarity index 86% rename from spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/repos/PersonRepository.java rename to spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/PersonRepository.java index 14b77759e3..e441bec6e4 100644 --- a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/repos/PersonRepository.java +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/PersonRepository.java @@ -1,4 +1,4 @@ -package org.baeldung.spring.data.couchbase.repos; +package org.baeldung.spring.data.couchbase2b.repos; import java.util.List; diff --git a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/repos/StudentRepository.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/StudentRepository.java similarity index 86% rename from spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/repos/StudentRepository.java rename to spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/StudentRepository.java index 433964c872..2a960d37de 100644 --- a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/repos/StudentRepository.java +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/StudentRepository.java @@ -1,4 +1,4 @@ -package org.baeldung.spring.data.couchbase.repos; +package org.baeldung.spring.data.couchbase2b.repos; import java.util.List; diff --git a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/CampusService.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/CampusService.java similarity index 88% rename from spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/CampusService.java rename to spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/CampusService.java index e82c14cb87..d098c39011 100644 --- a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/CampusService.java +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/CampusService.java @@ -1,4 +1,4 @@ -package org.baeldung.spring.data.couchbase.service; +package org.baeldung.spring.data.couchbase2b.service; import java.util.Set; diff --git a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/CampusRepositoryService.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/CampusServiceImpl.java similarity index 80% rename from spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/CampusRepositoryService.java rename to spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/CampusServiceImpl.java index d12e59ba1f..612774fec9 100644 --- a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/CampusRepositoryService.java +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/CampusServiceImpl.java @@ -1,20 +1,18 @@ -package org.baeldung.spring.data.couchbase.service; +package org.baeldung.spring.data.couchbase2b.service; import java.util.HashSet; import java.util.Iterator; import java.util.Set; import org.baeldung.spring.data.couchbase.model.Campus; -import org.baeldung.spring.data.couchbase.repos.CampusRepository; +import org.baeldung.spring.data.couchbase2b.repos.CampusRepository; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.data.geo.Distance; import org.springframework.data.geo.Point; import org.springframework.stereotype.Service; @Service -@Qualifier("CampusRepositoryService") -public class CampusRepositoryService implements CampusService { +public class CampusServiceImpl implements CampusService { private CampusRepository repo; @Autowired diff --git a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/PersonService.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/PersonService.java similarity index 87% rename from spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/PersonService.java rename to spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/PersonService.java index a823908b01..c2c96ffb9c 100644 --- a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/PersonService.java +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/PersonService.java @@ -1,4 +1,4 @@ -package org.baeldung.spring.data.couchbase.service; +package org.baeldung.spring.data.couchbase2b.service; import java.util.List; diff --git a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/PersonRepositoryService.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/PersonServiceImpl.java similarity index 81% rename from spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/PersonRepositoryService.java rename to spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/PersonServiceImpl.java index 90cc36780a..f1ff513bff 100644 --- a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/PersonRepositoryService.java +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/PersonServiceImpl.java @@ -1,20 +1,18 @@ -package org.baeldung.spring.data.couchbase.service; +package org.baeldung.spring.data.couchbase2b.service; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.baeldung.spring.data.couchbase.model.Person; -import org.baeldung.spring.data.couchbase.repos.PersonRepository; +import org.baeldung.spring.data.couchbase2b.repos.PersonRepository; import org.joda.time.DateTime; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; @Service -@Qualifier("PersonRepositoryService") -public class PersonRepositoryService implements PersonService { - +public class PersonServiceImpl implements PersonService { + private PersonRepository repo; @Autowired public void setPersonRepository(PersonRepository repo) { diff --git a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/StudentService.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/StudentService.java similarity index 87% rename from spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/StudentService.java rename to spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/StudentService.java index f483ef0fb6..5b83b403bb 100644 --- a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/StudentService.java +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/StudentService.java @@ -1,4 +1,4 @@ -package org.baeldung.spring.data.couchbase.service; +package org.baeldung.spring.data.couchbase2b.service; import java.util.List; diff --git a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryService.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/StudentServiceImpl.java similarity index 81% rename from spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryService.java rename to spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/StudentServiceImpl.java index 58304afc1c..65400636cf 100644 --- a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryService.java +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/StudentServiceImpl.java @@ -1,20 +1,18 @@ -package org.baeldung.spring.data.couchbase.service; +package org.baeldung.spring.data.couchbase2b.service; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.baeldung.spring.data.couchbase.model.Student; -import org.baeldung.spring.data.couchbase.repos.StudentRepository; +import org.baeldung.spring.data.couchbase2b.repos.StudentRepository; import org.joda.time.DateTime; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; @Service -@Qualifier("StudentRepositoryService") -public class StudentRepositoryService implements StudentService { - +public class StudentServiceImpl implements StudentService { + private StudentRepository repo; @Autowired public void setStudentRepository(StudentRepository repo) { diff --git a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/TestCouchbaseConfig.java b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/CustomTypeKeyCouchbaseConfig.java similarity index 50% rename from spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/TestCouchbaseConfig.java rename to spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/CustomTypeKeyCouchbaseConfig.java index c298ef0a61..0e2e8d5dd3 100644 --- a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/TestCouchbaseConfig.java +++ b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/CustomTypeKeyCouchbaseConfig.java @@ -1,17 +1,11 @@ package org.baeldung.spring.data.couchbase; import org.springframework.data.couchbase.core.convert.MappingCouchbaseConverter; -import org.springframework.data.couchbase.core.query.Consistency; -public class TestCouchbaseConfig extends MyCouchbaseConfig { +public class CustomTypeKeyCouchbaseConfig extends MyCouchbaseConfig { @Override public String typeKey() { return MappingCouchbaseConverter.TYPEKEY_SYNCGATEWAY_COMPATIBLE; } - - @Override - public Consistency getDefaultConsistency() { - return Consistency.READ_YOUR_OWN_WRITES; - } } diff --git a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/MyCouchbaseConfig.java b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/MyCouchbaseConfig.java similarity index 100% rename from spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/MyCouchbaseConfig.java rename to spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/MyCouchbaseConfig.java diff --git a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/ReadYourOwnWritesCouchbaseConfig.java b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/ReadYourOwnWritesCouchbaseConfig.java new file mode 100644 index 0000000000..b4a372487e --- /dev/null +++ b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/ReadYourOwnWritesCouchbaseConfig.java @@ -0,0 +1,11 @@ +package org.baeldung.spring.data.couchbase; + +import org.springframework.data.couchbase.core.query.Consistency; + +public class ReadYourOwnWritesCouchbaseConfig extends MyCouchbaseConfig { + + @Override + public Consistency getDefaultConsistency() { + return Consistency.READ_YOUR_OWN_WRITES; + } +} diff --git a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/PersonServiceTest.java b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/PersonServiceTest.java index 3fabf7a11e..c3bf9f2138 100644 --- a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/PersonServiceTest.java +++ b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/PersonServiceTest.java @@ -83,13 +83,6 @@ public abstract class PersonServiceTest extends IntegrationTest { assertTrue(allResultsContainExpectedLastName(resultList, expectedLastName)); } - @Test - public void whenFindingByFirstNameJohn_thenReturnsOnePersonNamedJohn() { - final String expectedFirstName = john; - final List resultList = personService.findByFirstName(expectedFirstName); - assertTrue(resultList.size() == 1); - } - private boolean resultContains(List resultList, Person person) { boolean found = false; for (final Person p : resultList) { diff --git a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/MyCouchbaseConfig.java b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/MultiBucketCouchbaseConfig.java similarity index 86% rename from spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/MyCouchbaseConfig.java rename to spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/MultiBucketCouchbaseConfig.java index 8eeda08455..f419ba3499 100644 --- a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/MyCouchbaseConfig.java +++ b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/MultiBucketCouchbaseConfig.java @@ -1,4 +1,4 @@ -package org.baeldung.spring.data.couchbase; +package org.baeldung.spring.data.couchbase2b; import java.util.Arrays; import java.util.List; @@ -17,9 +17,9 @@ import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean; import com.couchbase.client.java.Bucket; @Configuration -@EnableCouchbaseRepositories(basePackages={"org.baeldung.spring.data.couchbase"}) -public class MyCouchbaseConfig extends AbstractCouchbaseConfiguration { - +@EnableCouchbaseRepositories(basePackages = { "org.baeldung.spring.data.couchbase2b" }) +public class MultiBucketCouchbaseConfig extends AbstractCouchbaseConfiguration { + public static final List NODE_LIST = Arrays.asList("localhost"); public static final String DEFAULT_BUCKET_NAME = "baeldung"; public static final String DEFAULT_BUCKET_PASSWORD = ""; @@ -44,11 +44,13 @@ public class MyCouchbaseConfig extends AbstractCouchbaseConfiguration { return couchbaseCluster().openBucket("baeldung2", ""); } - @Bean + @Bean(name = "campusTemplate") public CouchbaseTemplate campusTemplate() throws Exception { CouchbaseTemplate template = new CouchbaseTemplate( - couchbaseClusterInfo(), campusBucket(), - mappingCouchbaseConverter(), translationService()); + couchbaseClusterInfo(), + campusBucket(), + mappingCouchbaseConverter(), + translationService()); template.setDefaultConsistency(getDefaultConsistency()); return template; } diff --git a/spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/IntegrationTest.java b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/MultiBucketIntegationTest.java similarity index 68% rename from spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/IntegrationTest.java rename to spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/MultiBucketIntegationTest.java index ce2daa92cd..cb671dc469 100644 --- a/spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/IntegrationTest.java +++ b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/MultiBucketIntegationTest.java @@ -1,4 +1,4 @@ -package org.baeldung.spring.data.couchbase; +package org.baeldung.spring.data.couchbase2b; import org.junit.runner.RunWith; import org.springframework.test.context.ContextConfiguration; @@ -7,7 +7,8 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.support.DependencyInjectionTestExecutionListener; @RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(classes = { MyCouchbaseConfig.class, IntegrationTestConfig.class }) +@ContextConfiguration(classes = { MultiBucketCouchbaseConfig.class, MultiBucketIntegrationTestConfig.class }) @TestExecutionListeners(listeners = { DependencyInjectionTestExecutionListener.class }) -public abstract class IntegrationTest { +public abstract class MultiBucketIntegationTest { + } diff --git a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/MultiBucketIntegrationTestConfig.java b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/MultiBucketIntegrationTestConfig.java new file mode 100644 index 0000000000..94a95b06bb --- /dev/null +++ b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/MultiBucketIntegrationTestConfig.java @@ -0,0 +1,10 @@ +package org.baeldung.spring.data.couchbase2b; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ComponentScan(basePackages = { "org.baeldung.spring.data.couchbase2b" }) +public class MultiBucketIntegrationTestConfig { + +} diff --git a/spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/service/CampusRepositoryServiceTest.java b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/CampusServiceImplTest.java similarity index 90% rename from spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/service/CampusRepositoryServiceTest.java rename to spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/CampusServiceImplTest.java index 5a718f0807..7e24952e32 100644 --- a/spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/service/CampusRepositoryServiceTest.java +++ b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/CampusServiceImplTest.java @@ -1,26 +1,27 @@ -package org.baeldung.spring.data.couchbase.service; +package org.baeldung.spring.data.couchbase2b.service; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; import java.util.Set; import javax.annotation.PostConstruct; -import org.baeldung.spring.data.couchbase.IntegrationTest; import org.baeldung.spring.data.couchbase.model.Campus; -import org.baeldung.spring.data.couchbase.repos.CampusRepository; +import org.baeldung.spring.data.couchbase2b.MultiBucketIntegationTest; +import org.baeldung.spring.data.couchbase2b.repos.CampusRepository; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.data.geo.Distance; import org.springframework.data.geo.Metrics; import org.springframework.data.geo.Point; -public class CampusRepositoryServiceTest extends IntegrationTest { +public class CampusServiceImplTest extends MultiBucketIntegationTest { @Autowired - @Qualifier("CampusRepositoryService") - private CampusRepositoryService campusService; + private CampusServiceImpl campusService; @Autowired private CampusRepository campusRepo; diff --git a/spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/service/PersonRepositoryServiceTest.java b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/PersonServiceImplTest.java similarity index 54% rename from spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/service/PersonRepositoryServiceTest.java rename to spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/PersonServiceImplTest.java index 84b6f75d56..e1a880d9da 100644 --- a/spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/service/PersonRepositoryServiceTest.java +++ b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/PersonServiceImplTest.java @@ -1,4 +1,4 @@ -package org.baeldung.spring.data.couchbase.service; +package org.baeldung.spring.data.couchbase2b.service; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -7,14 +7,13 @@ import static org.junit.Assert.assertTrue; import java.util.List; -import org.baeldung.spring.data.couchbase.IntegrationTest; -import org.baeldung.spring.data.couchbase.MyCouchbaseConfig; import org.baeldung.spring.data.couchbase.model.Person; +import org.baeldung.spring.data.couchbase2b.MultiBucketCouchbaseConfig; +import org.baeldung.spring.data.couchbase2b.MultiBucketIntegationTest; import org.joda.time.DateTime; import org.junit.BeforeClass; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; import com.couchbase.client.java.Bucket; import com.couchbase.client.java.Cluster; @@ -22,37 +21,28 @@ import com.couchbase.client.java.CouchbaseCluster; import com.couchbase.client.java.document.JsonDocument; import com.couchbase.client.java.document.json.JsonObject; -public class PersonRepositoryServiceTest extends IntegrationTest { +public class PersonServiceImplTest extends MultiBucketIntegationTest { - private static final String typeField = "_class"; - private static final String john = "John"; - private static final String smith = "Smith"; - private static final String johnSmithId = "person:" + john + ":" + smith; - private static final Person johnSmith = new Person(johnSmithId, john, smith); - private static final JsonObject jsonJohnSmith = JsonObject.empty() - .put(typeField, Person.class.getName()) - .put("firstName", john) - .put("lastName", smith) - .put("created", DateTime.now().getMillis()); + static final String typeField = "_class"; + static final String john = "John"; + static final String smith = "Smith"; + static final String johnSmithId = "person:" + john + ":" + smith; + static final Person johnSmith = new Person(johnSmithId, john, smith); + static final JsonObject jsonJohnSmith = JsonObject.empty().put(typeField, Person.class.getName()).put("firstName", john).put("lastName", smith).put("created", DateTime.now().getMillis()); + + static final String foo = "Foo"; + static final String bar = "Bar"; + static final String foobarId = "person:" + foo + ":" + bar; + static final Person foobar = new Person(foobarId, foo, bar); + static final JsonObject jsonFooBar = JsonObject.empty().put(typeField, Person.class.getName()).put("firstName", foo).put("lastName", bar).put("created", DateTime.now().getMillis()); - private static final String foo = "Foo"; - private static final String bar = "Bar"; - private static final String foobarId = "person:" + foo + ":" + bar; - private static final Person foobar = new Person(foobarId, foo, bar); - private static final JsonObject jsonFooBar = JsonObject.empty() - .put(typeField, Person.class.getName()) - .put("firstName", foo) - .put("lastName", bar) - .put("created", DateTime.now().getMillis()); - @Autowired - @Qualifier("PersonRepositoryService") - private PersonService personService; - + private PersonServiceImpl personService; + @BeforeClass public static void setupBeforeClass() { - Cluster cluster = CouchbaseCluster.create(MyCouchbaseConfig.NODE_LIST); - Bucket bucket = cluster.openBucket(MyCouchbaseConfig.DEFAULT_BUCKET_NAME, MyCouchbaseConfig.DEFAULT_BUCKET_PASSWORD); + final Cluster cluster = CouchbaseCluster.create(MultiBucketCouchbaseConfig.NODE_LIST); + final Bucket bucket = cluster.openBucket(MultiBucketCouchbaseConfig.DEFAULT_BUCKET_NAME, MultiBucketCouchbaseConfig.DEFAULT_BUCKET_PASSWORD); bucket.upsert(JsonDocument.create(johnSmithId, jsonJohnSmith)); bucket.upsert(JsonDocument.create(foobarId, jsonFooBar)); bucket.close(); @@ -61,7 +51,7 @@ public class PersonRepositoryServiceTest extends IntegrationTest { @Test public void whenFindingPersonByJohnSmithId_thenReturnsJohnSmith() { - Person actualPerson = personService.findOne(johnSmithId); + final Person actualPerson = personService.findOne(johnSmithId); assertNotNull(actualPerson); assertNotNull(actualPerson.getCreated()); assertEquals(johnSmith, actualPerson); @@ -69,7 +59,7 @@ public class PersonRepositoryServiceTest extends IntegrationTest { @Test public void whenFindingAllPersons_thenReturnsTwoOrMorePersonsIncludingJohnSmithAndFooBar() { - List resultList = personService.findAll(); + final List resultList = personService.findAll(); assertNotNull(resultList); assertFalse(resultList.isEmpty()); assertTrue(resultContains(resultList, johnSmith)); @@ -79,8 +69,8 @@ public class PersonRepositoryServiceTest extends IntegrationTest { @Test public void whenFindingByFirstNameJohn_thenReturnsOnlyPersonsNamedJohn() { - String expectedFirstName = john; - List resultList = personService.findByFirstName(expectedFirstName); + final String expectedFirstName = john; + final List resultList = personService.findByFirstName(expectedFirstName); assertNotNull(resultList); assertFalse(resultList.isEmpty()); assertTrue(allResultsContainExpectedFirstName(resultList, expectedFirstName)); @@ -88,17 +78,17 @@ public class PersonRepositoryServiceTest extends IntegrationTest { @Test public void whenFindingByLastNameSmith_thenReturnsOnlyPersonsNamedSmith() { - String expectedLastName = smith; - List resultList = personService.findByLastName(expectedLastName); + final String expectedLastName = smith; + final List resultList = personService.findByLastName(expectedLastName); assertNotNull(resultList); assertFalse(resultList.isEmpty()); assertTrue(allResultsContainExpectedLastName(resultList, expectedLastName)); } - + private boolean resultContains(List resultList, Person person) { boolean found = false; - for(Person p : resultList) { - if(p.equals(person)) { + for (final Person p : resultList) { + if (p.equals(person)) { found = true; break; } @@ -108,8 +98,8 @@ public class PersonRepositoryServiceTest extends IntegrationTest { private boolean allResultsContainExpectedFirstName(List resultList, String firstName) { boolean found = false; - for(Person p : resultList) { - if(p.getFirstName().equals(firstName)) { + for (final Person p : resultList) { + if (p.getFirstName().equals(firstName)) { found = true; break; } @@ -119,8 +109,8 @@ public class PersonRepositoryServiceTest extends IntegrationTest { private boolean allResultsContainExpectedLastName(List resultList, String lastName) { boolean found = false; - for(Person p : resultList) { - if(p.getLastName().equals(lastName)) { + for (final Person p : resultList) { + if (p.getLastName().equals(lastName)) { found = true; break; } diff --git a/spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryServiceTest.java b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/StudentServiceImplTest.java similarity index 77% rename from spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryServiceTest.java rename to spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/StudentServiceImplTest.java index 166f01d754..220c2c3b00 100644 --- a/spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryServiceTest.java +++ b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/StudentServiceImplTest.java @@ -1,4 +1,4 @@ -package org.baeldung.spring.data.couchbase.service; +package org.baeldung.spring.data.couchbase2b.service; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -9,14 +9,13 @@ import java.util.List; import javax.validation.ConstraintViolationException; -import org.baeldung.spring.data.couchbase.IntegrationTest; -import org.baeldung.spring.data.couchbase.MyCouchbaseConfig; import org.baeldung.spring.data.couchbase.model.Student; +import org.baeldung.spring.data.couchbase2b.MultiBucketCouchbaseConfig; +import org.baeldung.spring.data.couchbase2b.MultiBucketIntegationTest; import org.joda.time.DateTime; import org.junit.BeforeClass; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; import com.couchbase.client.java.Bucket; import com.couchbase.client.java.Cluster; @@ -24,47 +23,46 @@ import com.couchbase.client.java.CouchbaseCluster; import com.couchbase.client.java.document.JsonDocument; import com.couchbase.client.java.document.json.JsonObject; -public class StudentRepositoryServiceTest extends IntegrationTest { +public class StudentServiceImplTest extends MultiBucketIntegationTest { - private static final String typeField = "_class"; - private static final String joe = "Joe"; - private static final String college = "College"; - private static final String joeCollegeId = "student:" + joe + ":" + college; - private static final DateTime joeCollegeDob = DateTime.now().minusYears(21); - private static final Student joeCollege = new Student(joeCollegeId, joe, college, joeCollegeDob); - private static final JsonObject jsonJoeCollege = JsonObject.empty() + static final String typeField = "_class"; + static final String joe = "Joe"; + static final String college = "College"; + static final String joeCollegeId = "student:" + joe + ":" + college; + static final DateTime joeCollegeDob = DateTime.now().minusYears(21); + static final Student joeCollege = new Student(joeCollegeId, joe, college, joeCollegeDob); + static final JsonObject jsonJoeCollege = JsonObject.empty() .put(typeField, Student.class.getName()) .put("firstName", joe) .put("lastName", college) .put("created", DateTime.now().getMillis()) .put("version", 1); - private static final String judy = "Judy"; - private static final String jetson = "Jetson"; - private static final String judyJetsonId = "student:" + judy + ":" + jetson; - private static final DateTime judyJetsonDob = DateTime.now().minusYears(19).minusMonths(5).minusDays(3); - private static final Student judyJetson = new Student(judyJetsonId, judy, jetson, judyJetsonDob); - private static final JsonObject jsonJudyJetson = JsonObject.empty() + static final String judy = "Judy"; + static final String jetson = "Jetson"; + static final String judyJetsonId = "student:" + judy + ":" + jetson; + static final DateTime judyJetsonDob = DateTime.now().minusYears(19).minusMonths(5).minusDays(3); + static final Student judyJetson = new Student(judyJetsonId, judy, jetson, judyJetsonDob); + static final JsonObject jsonJudyJetson = JsonObject.empty() .put(typeField, Student.class.getName()) .put("firstName", judy) .put("lastName", jetson) .put("created", DateTime.now().getMillis()) .put("version", 1); - + @Autowired - @Qualifier("StudentRepositoryService") - private StudentService studentService; - + StudentServiceImpl studentService; + @BeforeClass public static void setupBeforeClass() { - Cluster cluster = CouchbaseCluster.create(MyCouchbaseConfig.NODE_LIST); - Bucket bucket = cluster.openBucket(MyCouchbaseConfig.DEFAULT_BUCKET_NAME, MyCouchbaseConfig.DEFAULT_BUCKET_PASSWORD); + Cluster cluster = CouchbaseCluster.create(MultiBucketCouchbaseConfig.NODE_LIST); + Bucket bucket = cluster.openBucket(MultiBucketCouchbaseConfig.DEFAULT_BUCKET_NAME, MultiBucketCouchbaseConfig.DEFAULT_BUCKET_PASSWORD); bucket.upsert(JsonDocument.create(joeCollegeId, jsonJoeCollege)); bucket.upsert(JsonDocument.create(judyJetsonId, jsonJudyJetson)); bucket.close(); cluster.disconnect(); } - + @Test public void whenCreatingStudent_thenDocumentIsPersisted() { String firstName = "Eric"; @@ -134,7 +132,7 @@ public class StudentRepositoryServiceTest extends IntegrationTest { assertFalse(resultList.isEmpty()); assertTrue(allResultsContainExpectedLastName(resultList, expectedLastName)); } - + private boolean resultContains(List resultList, Student student) { boolean found = false; for(Student p : resultList) { diff --git a/spring-data-couchbase-2b/README.md b/spring-data-couchbase-2b/README.md deleted file mode 100644 index 262962f58a..0000000000 --- a/spring-data-couchbase-2b/README.md +++ /dev/null @@ -1,36 +0,0 @@ -## Spring Data Couchbase Tutorial Project - -### Relevant Articles: -- [Spring Data Couchbase](http://www.baeldung.com/spring-data-couchbase) -- [Entity Validation, Query Consistency, and Optimistic Locking in Spring Data Couchbase](http://www.baeldung.com/entity-validation-locking-and-query-consistency-in-spring-data-couchbase) - -### Overview -This Maven project contains the Java code for Spring Data Couchbase -entities, repositories, and repository-based services -as described in the tutorials, as well as a unit/integration test -for each service implementation. - -### Working with the Code -The project was developed and tested using Java 7 and 8 in the Eclipse-based -Spring Source Toolkit (STS) and therefore should run fine in any -recent version of Eclipse or another IDE of your choice -that supports Java 7 or later. - -### Building the Project -You can also build the project using Maven outside of any IDE: -``` -mvn clean install -``` - -### Running the tests -The following test classes are in src/test/java in the package -org.baeldung.spring.data.couchbase.service: -- CampusRepositoryServiceTest -- PersonRepositoryServiceTest -- StudentRepositoryServiceTest - -These may be run as JUnit tests from your IDE -or using the Maven command line: -``` -mvn test -``` diff --git a/spring-data-couchbase-2b/pom.xml b/spring-data-couchbase-2b/pom.xml deleted file mode 100644 index 7d58f78ce5..0000000000 --- a/spring-data-couchbase-2b/pom.xml +++ /dev/null @@ -1,105 +0,0 @@ - - 4.0.0 - org.baeldung - spring-data-couchbase-2b - 0.1-SNAPSHOT - spring-data-couchbase-2b - jar - - - - - - org.springframework - spring-context - ${spring-framework.version} - - - org.springframework - spring-context-support - ${spring-framework.version} - - - org.springframework.data - spring-data-couchbase - ${spring-data-couchbase.version} - - - - - org.hibernate - hibernate-validator - ${hibernate-validator.version} - - - - joda-time - joda-time - ${joda-time.version} - - - - - org.slf4j - slf4j-api - ${org.slf4j.version} - compile - - - ch.qos.logback - logback-classic - ${logback.version} - - - org.slf4j - jcl-over-slf4j - ${org.slf4j.version} - - - org.slf4j - log4j-over-slf4j - ${org.slf4j.version} - - - - - org.springframework - spring-test - ${spring-framework.version} - test - - - junit - junit - ${junit.version} - test - - - - - - - maven-compiler-plugin - 2.3.2 - - 1.7 - 1.7 - - - - - - - 1.7 - UTF-8 - 4.2.4.RELEASE - 2.1.1.RELEASE - 5.2.4.Final - 2.9.2 - 1.1.3 - 1.7.12 - 4.11 - - - - diff --git a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/model/Person.java b/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/model/Person.java deleted file mode 100644 index 9220e157ed..0000000000 --- a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/model/Person.java +++ /dev/null @@ -1,87 +0,0 @@ -package org.baeldung.spring.data.couchbase.model; - -import javax.validation.constraints.NotNull; - -import org.joda.time.DateTime; -import org.springframework.data.annotation.Id; -import org.springframework.data.couchbase.core.mapping.Document; - -import com.couchbase.client.java.repository.annotation.Field; - -@Document -public class Person { - - @Id - private String id; - @Field - @NotNull - private String firstName; - @Field - @NotNull - private String lastName; - @Field - @NotNull - private DateTime created; - @Field - private DateTime updated; - - public Person(String id, String firstName, String lastName) { - this.id = id; - this.firstName = firstName; - this.lastName = lastName; - } - - public String getId() { - return id; - } - public void setId(String id) { - this.id = id; - } - public String getFirstName() { - return firstName; - } - public void setFirstName(String firstName) { - this.firstName = firstName; - } - public String getLastName() { - return lastName; - } - public void setLastName(String lastName) { - this.lastName = lastName; - } - public DateTime getCreated() { - return created; - } - public void setCreated(DateTime created) { - this.created = created; - } - public DateTime getUpdated() { - return updated; - } - public void setUpdated(DateTime updated) { - this.updated = updated; - } - - @Override - public int hashCode() { - int hash = 1; - if(id != null) { - hash = hash * 31 + id.hashCode(); - } - if(firstName != null) { - hash = hash * 31 + firstName.hashCode(); - } - if(lastName != null) { - hash = hash * 31 + lastName.hashCode(); - } - return hash; - } - - @Override - public boolean equals(Object obj) { - if((obj == null) || (obj.getClass() != this.getClass())) return false; - if(obj == this) return true; - Person other = (Person) obj; - return this.hashCode() == other.hashCode(); - } -} diff --git a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/model/Student.java b/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/model/Student.java deleted file mode 100644 index 9c266c2c62..0000000000 --- a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/model/Student.java +++ /dev/null @@ -1,113 +0,0 @@ -package org.baeldung.spring.data.couchbase.model; - -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Past; -import javax.validation.constraints.Pattern; -import javax.validation.constraints.Size; - -import org.joda.time.DateTime; -import org.springframework.data.annotation.Id; -import org.springframework.data.annotation.Version; -import org.springframework.data.couchbase.core.mapping.Document; - -import com.couchbase.client.java.repository.annotation.Field; - -@Document -public class Student { - private static final String NAME_REGEX = "^[a-zA-Z .'-]+$"; - - @Id - private String id; - @Field - @NotNull - @Size(min=1, max=20) - @Pattern(regexp=NAME_REGEX) - private String firstName; - @Field - @NotNull - @Size(min=1, max=20) - @Pattern(regexp=NAME_REGEX) - private String lastName; - @Field - @Past - private DateTime dateOfBirth; - @Field - @NotNull - private DateTime created; - @Field - private DateTime updated; - @Version - private long version; - - public Student() {} - - public Student(String id, String firstName, String lastName, DateTime dateOfBirth) { - this.id = id; - this.firstName = firstName; - this.lastName = lastName; - this.dateOfBirth = dateOfBirth; - } - - public String getId() { - return id; - } - public void setId(String id) { - this.id = id; - } - public String getFirstName() { - return firstName; - } - public void setFirstName(String firstName) { - this.firstName = firstName; - } - public String getLastName() { - return lastName; - } - public void setLastName(String lastName) { - this.lastName = lastName; - } - public DateTime getDateOfBirth() { - return dateOfBirth; - } - public void setDateOfBirth(DateTime dateOfBirth) { - this.dateOfBirth = dateOfBirth; - } - public DateTime getCreated() { - return created; - } - public void setCreated(DateTime created) { - this.created = created; - } - public DateTime getUpdated() { - return updated; - } - public void setUpdated(DateTime updated) { - this.updated = updated; - } - - @Override - public int hashCode() { - int hash = 1; - if(id != null) { - hash = hash * 31 + id.hashCode(); - } - if(firstName != null) { - hash = hash * 31 + firstName.hashCode(); - } - if(lastName != null) { - hash = hash * 31 + lastName.hashCode(); - } - if(dateOfBirth != null) { - hash = hash * 31 + dateOfBirth.hashCode(); - } - return hash; - } - - @Override - public boolean equals(Object obj) { - if((obj == null) || (obj.getClass() != this.getClass())) return false; - if(obj == this) return true; - Student other = (Student) obj; - return this.hashCode() == other.hashCode(); - } -} \ No newline at end of file diff --git a/spring-data-couchbase-2b/src/main/resources/logback.xml b/spring-data-couchbase-2b/src/main/resources/logback.xml deleted file mode 100644 index d9067fd1da..0000000000 --- a/spring-data-couchbase-2b/src/main/resources/logback.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - web - %date [%thread] %-5level %logger{36} - %message%n - - - - - - - - - - - - \ No newline at end of file diff --git a/spring-data-couchbase-2b/src/site/site.xml b/spring-data-couchbase-2b/src/site/site.xml deleted file mode 100644 index dda96feecd..0000000000 --- a/spring-data-couchbase-2b/src/site/site.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - Spring Sample: ${project.name} - index.html - - - - org.springframework.maven.skins - maven-spring-skin - 1.0.5 - - - - - - - - - - - - - diff --git a/spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/IntegrationTestConfig.java b/spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/IntegrationTestConfig.java deleted file mode 100644 index 6f040c34db..0000000000 --- a/spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/IntegrationTestConfig.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.baeldung.spring.data.couchbase; - -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; - -@Configuration -@ComponentScan(basePackages = "org.baeldung.spring.data.couchbase") -public class IntegrationTestConfig { -} diff --git a/spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/TestCouchbaseConfig.java b/spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/TestCouchbaseConfig.java deleted file mode 100644 index c298ef0a61..0000000000 --- a/spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/TestCouchbaseConfig.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.baeldung.spring.data.couchbase; - -import org.springframework.data.couchbase.core.convert.MappingCouchbaseConverter; -import org.springframework.data.couchbase.core.query.Consistency; - -public class TestCouchbaseConfig extends MyCouchbaseConfig { - - @Override - public String typeKey() { - return MappingCouchbaseConverter.TYPEKEY_SYNCGATEWAY_COMPATIBLE; - } - - @Override - public Consistency getDefaultConsistency() { - return Consistency.READ_YOUR_OWN_WRITES; - } -} diff --git a/spring-data-couchbase-2b/src/test/resources/logback.xml b/spring-data-couchbase-2b/src/test/resources/logback.xml deleted file mode 100644 index d9067fd1da..0000000000 --- a/spring-data-couchbase-2b/src/test/resources/logback.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - web - %date [%thread] %-5level %logger{36} - %message%n - - - - - - - - - - - - \ No newline at end of file From 455c71ae714a78691a6fef52805949bac002c4e3 Mon Sep 17 00:00:00 2001 From: Egima profile Date: Mon, 3 Oct 2016 22:06:01 +0300 Subject: [PATCH 183/265] 3 major changes (#716) * made changes to java reflection * removed redundant method makeSound in Animal abstract class * added project for play-framework article * added project for regex * changed regex project from own model to core-java * added project for routing in play * made changes to regex project * refactored code for REST API with Play project --- .../java/com/baeldung/java/regex/Result.java | 27 -- .../com/baeldung/java/regex/RegexTest.java | 333 ++++++++------- .../app/controllers/StudentController.java | 4 +- .../student-api/app/models/StudentStore.java | 18 +- routing-in-play/.gitignore | 8 + routing-in-play/LICENSE | 8 + routing-in-play/README | 49 +++ routing-in-play/app/Filters.java | 46 ++ routing-in-play/app/Module.java | 31 ++ .../app/controllers/HomeController.java | 33 ++ .../app/filters/ExampleFilter.java | 45 ++ .../app/services/ApplicationTimer.java | 50 +++ .../app/services/AtomicCounter.java | 26 ++ routing-in-play/app/services/Counter.java | 13 + routing-in-play/app/views/index.scala.html | 20 + routing-in-play/app/views/main.scala.html | 23 + routing-in-play/bin/activator | 397 ++++++++++++++++++ routing-in-play/bin/activator.bat | 248 +++++++++++ routing-in-play/build.sbt | 13 + routing-in-play/conf/application.conf | 353 ++++++++++++++++ routing-in-play/conf/logback.xml | 41 ++ routing-in-play/conf/routes | 7 + .../libexec/activator-launch-1.3.10.jar | Bin 0 -> 1206790 bytes routing-in-play/project/build.properties | 4 + routing-in-play/project/plugins.sbt | 21 + routing-in-play/public/images/favicon.png | Bin 0 -> 687 bytes routing-in-play/public/javascripts/hello.js | 3 + routing-in-play/public/stylesheets/main.css | 0 routing-in-play/test/ApplicationTest.java | 45 ++ routing-in-play/test/IntegrationTest.java | 25 ++ 30 files changed, 1685 insertions(+), 206 deletions(-) delete mode 100644 core-java/src/main/java/com/baeldung/java/regex/Result.java create mode 100644 routing-in-play/.gitignore create mode 100644 routing-in-play/LICENSE create mode 100644 routing-in-play/README create mode 100644 routing-in-play/app/Filters.java create mode 100644 routing-in-play/app/Module.java create mode 100644 routing-in-play/app/controllers/HomeController.java create mode 100644 routing-in-play/app/filters/ExampleFilter.java create mode 100644 routing-in-play/app/services/ApplicationTimer.java create mode 100644 routing-in-play/app/services/AtomicCounter.java create mode 100644 routing-in-play/app/services/Counter.java create mode 100644 routing-in-play/app/views/index.scala.html create mode 100644 routing-in-play/app/views/main.scala.html create mode 100644 routing-in-play/bin/activator create mode 100644 routing-in-play/bin/activator.bat create mode 100644 routing-in-play/build.sbt create mode 100644 routing-in-play/conf/application.conf create mode 100644 routing-in-play/conf/logback.xml create mode 100644 routing-in-play/conf/routes create mode 100644 routing-in-play/libexec/activator-launch-1.3.10.jar create mode 100644 routing-in-play/project/build.properties create mode 100644 routing-in-play/project/plugins.sbt create mode 100644 routing-in-play/public/images/favicon.png create mode 100644 routing-in-play/public/javascripts/hello.js create mode 100644 routing-in-play/public/stylesheets/main.css create mode 100644 routing-in-play/test/ApplicationTest.java create mode 100644 routing-in-play/test/IntegrationTest.java diff --git a/core-java/src/main/java/com/baeldung/java/regex/Result.java b/core-java/src/main/java/com/baeldung/java/regex/Result.java deleted file mode 100644 index d47c94ad2e..0000000000 --- a/core-java/src/main/java/com/baeldung/java/regex/Result.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.baeldung.java.regex; - -public class Result { - private boolean found = false; - private int count = 0; - - public Result() { - - } - - public boolean isFound() { - return found; - } - - public void setFound(boolean found) { - this.found = found; - } - - public int getCount() { - return count; - } - - public void setCount(int count) { - this.count = count; - } - -} diff --git a/core-java/src/test/java/com/baeldung/java/regex/RegexTest.java b/core-java/src/test/java/com/baeldung/java/regex/RegexTest.java index 257e486600..414401eb85 100644 --- a/core-java/src/test/java/com/baeldung/java/regex/RegexTest.java +++ b/core-java/src/test/java/com/baeldung/java/regex/RegexTest.java @@ -13,366 +13,368 @@ public class RegexTest { @Test public void givenText_whenSimpleRegexMatches_thenCorrect() { - Result result = runTest("foo", "foo"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 1); - + Pattern pattern = Pattern.compile("foo"); + Matcher matcher = pattern.matcher("foo"); + assertTrue(matcher.find()); } @Test public void givenText_whenSimpleRegexMatchesTwice_thenCorrect() { - Result result = runTest("foo", "foofoo"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 2); + Pattern pattern = Pattern.compile("foo"); + Matcher matcher = pattern.matcher("foofoo"); + int matches = 0; + while (matcher.find()) + matches++; + assertEquals(matches, 2); } @Test public void givenText_whenMatchesWithDotMetach_thenCorrect() { - Result result = runTest(".", "foo"); - assertTrue(result.isFound()); + int matches = runTest(".", "foo"); + assertTrue(matches > 0); } @Test public void givenRepeatedText_whenMatchesOnceWithDotMetach_thenCorrect() { - Result result = runTest("foo.", "foofoo"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 1); + int matches = runTest("foo.", "foofoo"); + assertTrue(matches > 0); + assertEquals(matches, 1); } @Test public void givenORSet_whenMatchesAny_thenCorrect() { - Result result = runTest("[abc]", "b"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 1); + int matches = runTest("[abc]", "b"); + assertTrue(matches > 0); + assertEquals(matches, 1); } @Test public void givenORSet_whenMatchesAnyAndAll_thenCorrect() { - Result result = runTest("[abc]", "cab"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 3); + int matches = runTest("[abc]", "cab"); + assertTrue(matches > 0); + assertEquals(matches, 3); } @Test public void givenORSet_whenMatchesAllCombinations_thenCorrect() { - Result result = runTest("[bcr]at", "bat cat rat"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 3); + int matches = runTest("[bcr]at", "bat cat rat"); + assertTrue(matches > 0); + assertEquals(matches, 3); } @Test public void givenNORSet_whenMatchesNon_thenCorrect() { - Result result = runTest("[^abc]", "g"); - assertTrue(result.isFound()); + int matches = runTest("[^abc]", "g"); + assertTrue(matches > 0); } @Test public void givenNORSet_whenMatchesAllExceptElements_thenCorrect() { - Result result = runTest("[^bcr]at", "sat mat eat"); - assertTrue(result.isFound()); + int matches = runTest("[^bcr]at", "sat mat eat"); + assertTrue(matches > 0); } @Test public void givenUpperCaseRange_whenMatchesUpperCase_thenCorrect() { - Result result = runTest("[A-Z]", "Two Uppercase alphabets 34 overall"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 2); + int matches = runTest("[A-Z]", "Two Uppercase alphabets 34 overall"); + assertTrue(matches > 0); + assertEquals(matches, 2); } @Test public void givenLowerCaseRange_whenMatchesLowerCase_thenCorrect() { - Result result = runTest("[a-z]", "Two Uppercase alphabets 34 overall"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 26); + int matches = runTest("[a-z]", "Two Uppercase alphabets 34 overall"); + assertTrue(matches > 0); + assertEquals(matches, 26); } @Test public void givenBothLowerAndUpperCaseRange_whenMatchesAllLetters_thenCorrect() { - Result result = runTest("[a-zA-Z]", "Two Uppercase alphabets 34 overall"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 28); + int matches = runTest("[a-zA-Z]", "Two Uppercase alphabets 34 overall"); + assertTrue(matches > 0); + assertEquals(matches, 28); } @Test public void givenNumberRange_whenMatchesAccurately_thenCorrect() { - Result result = runTest("[1-5]", "Two Uppercase alphabets 34 overall"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 2); + int matches = runTest("[1-5]", "Two Uppercase alphabets 34 overall"); + assertTrue(matches > 0); + assertEquals(matches, 2); } @Test public void givenNumberRange_whenMatchesAccurately_thenCorrect2() { - Result result = runTest("[30-35]", "Two Uppercase alphabets 34 overall"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 1); + int matches = runTest("[30-35]", "Two Uppercase alphabets 34 overall"); + assertTrue(matches > 0); + assertEquals(matches, 1); } @Test public void givenTwoSets_whenMatchesUnion_thenCorrect() { - Result result = runTest("[1-3[7-9]]", "123456789"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 6); + int matches = runTest("[1-3[7-9]]", "123456789"); + assertTrue(matches > 0); + assertEquals(matches, 6); } @Test public void givenTwoSets_whenMatchesIntersection_thenCorrect() { - Result result = runTest("[1-6&&[3-9]]", "123456789"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 4); + int matches = runTest("[1-6&&[3-9]]", "123456789"); + assertTrue(matches > 0); + assertEquals(matches, 4); } @Test public void givenSetWithSubtraction_whenMatchesAccurately_thenCorrect() { - Result result = runTest("[0-9&&[^2468]]", "123456789"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 5); + int matches = runTest("[0-9&&[^2468]]", "123456789"); + assertTrue(matches > 0); + assertEquals(matches, 5); } @Test public void givenDigits_whenMatches_thenCorrect() { - Result result = runTest("\\d", "123"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 3); + int matches = runTest("\\d", "123"); + assertTrue(matches > 0); + assertEquals(matches, 3); } @Test public void givenNonDigits_whenMatches_thenCorrect() { - Result result = runTest("\\D", "a6c"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 2); + int matches = runTest("\\D", "a6c"); + assertTrue(matches > 0); + assertEquals(matches, 2); } @Test public void givenWhiteSpace_whenMatches_thenCorrect() { - Result result = runTest("\\s", "a c"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 1); + int matches = runTest("\\s", "a c"); + assertTrue(matches > 0); + assertEquals(matches, 1); } @Test public void givenNonWhiteSpace_whenMatches_thenCorrect() { - Result result = runTest("\\S", "a c"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 2); + int matches = runTest("\\S", "a c"); + assertTrue(matches > 0); + assertEquals(matches, 2); } @Test public void givenWordCharacter_whenMatches_thenCorrect() { - Result result = runTest("\\w", "hi!"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 2); + int matches = runTest("\\w", "hi!"); + assertTrue(matches > 0); + assertEquals(matches, 2); } @Test public void givenNonWordCharacter_whenMatches_thenCorrect() { - Result result = runTest("\\W", "hi!"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 1); + int matches = runTest("\\W", "hi!"); + assertTrue(matches > 0); + assertEquals(matches, 1); } @Test public void givenZeroOrOneQuantifier_whenMatches_thenCorrect() { - Result result = runTest("\\a?", "hi"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 3); + int matches = runTest("\\a?", "hi"); + assertTrue(matches > 0); + assertEquals(matches, 3); } @Test public void givenZeroOrOneQuantifier_whenMatches_thenCorrect2() { - Result result = runTest("\\a{0,1}", "hi"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 3); + int matches = runTest("\\a{0,1}", "hi"); + assertTrue(matches > 0); + assertEquals(matches, 3); } @Test public void givenZeroOrManyQuantifier_whenMatches_thenCorrect() { - Result result = runTest("\\a*", "hi"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 3); + int matches = runTest("\\a*", "hi"); + assertTrue(matches > 0); + assertEquals(matches, 3); } @Test public void givenZeroOrManyQuantifier_whenMatches_thenCorrect2() { - Result result = runTest("\\a{0,}", "hi"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 3); + int matches = runTest("\\a{0,}", "hi"); + assertTrue(matches > 0); + assertEquals(matches, 3); } @Test public void givenOneOrManyQuantifier_whenMatches_thenCorrect() { - Result result = runTest("\\a+", "hi"); - assertFalse(result.isFound()); + int matches = runTest("\\a+", "hi"); + assertFalse(matches > 0); } @Test public void givenOneOrManyQuantifier_whenMatches_thenCorrect2() { - Result result = runTest("\\a{1,}", "hi"); - assertFalse(result.isFound()); + int matches = runTest("\\a{1,}", "hi"); + assertFalse(matches > 0); } @Test public void givenBraceQuantifier_whenMatches_thenCorrect() { - Result result = runTest("a{3}", "aaaaaa"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 2); + int matches = runTest("a{3}", "aaaaaa"); + assertTrue(matches > 0); + assertEquals(matches, 2); } @Test public void givenBraceQuantifier_whenFailsToMatch_thenCorrect() { - Result result = runTest("a{3}", "aa"); - assertFalse(result.isFound()); + int matches = runTest("a{3}", "aa"); + assertFalse(matches > 0); } @Test public void givenBraceQuantifierWithRange_whenMatches_thenCorrect() { - Result result = runTest("a{2,3}", "aaaa"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 1); + int matches = runTest("a{2,3}", "aaaa"); + assertTrue(matches > 0); + assertEquals(matches, 1); } @Test public void givenBraceQuantifierWithRange_whenMatchesLazily_thenCorrect() { - Result result = runTest("a{2,3}?", "aaaa"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 2); + int matches = runTest("a{2,3}?", "aaaa"); + assertTrue(matches > 0); + assertEquals(matches, 2); } @Test public void givenCapturingGroup_whenMatches_thenCorrect() { - Result result = runTest("(\\d\\d)", "12"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 1); + int matches = runTest("(\\d\\d)", "12"); + assertTrue(matches > 0); + assertEquals(matches, 1); } @Test public void givenCapturingGroup_whenMatches_thenCorrect2() { - Result result = runTest("(\\d\\d)", "1212"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 2); + int matches = runTest("(\\d\\d)", "1212"); + assertTrue(matches > 0); + assertEquals(matches, 2); } @Test public void givenCapturingGroup_whenMatches_thenCorrect3() { - Result result = runTest("(\\d\\d)(\\d\\d)", "1212"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 1); + int matches = runTest("(\\d\\d)(\\d\\d)", "1212"); + assertTrue(matches > 0); + assertEquals(matches, 1); } @Test public void givenCapturingGroup_whenMatchesWithBackReference_thenCorrect() { - Result result = runTest("(\\d\\d)\\1", "1212"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 1); + int matches = runTest("(\\d\\d)\\1", "1212"); + assertTrue(matches > 0); + assertEquals(matches, 1); } @Test public void givenCapturingGroup_whenMatchesWithBackReference_thenCorrect2() { - Result result = runTest("(\\d\\d)\\1\\1\\1", "12121212"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 1); + int matches = runTest("(\\d\\d)\\1\\1\\1", "12121212"); + assertTrue(matches > 0); + assertEquals(matches, 1); } @Test public void givenCapturingGroupAndWrongInput_whenMatchFailsWithBackReference_thenCorrect() { - Result result = runTest("(\\d\\d)\\1", "1213"); - assertFalse(result.isFound()); + int matches = runTest("(\\d\\d)\\1", "1213"); + assertFalse(matches > 0); } @Test public void givenText_whenMatchesAtBeginning_thenCorrect() { - Result result = runTest("^dog", "dogs are friendly"); - assertTrue(result.isFound()); + int matches = runTest("^dog", "dogs are friendly"); + assertTrue(matches > 0); } @Test public void givenTextAndWrongInput_whenMatchFailsAtBeginning_thenCorrect() { - Result result = runTest("^dog", "are dogs are friendly?"); - assertFalse(result.isFound()); + int matches = runTest("^dog", "are dogs are friendly?"); + assertFalse(matches > 0); } @Test public void givenText_whenMatchesAtEnd_thenCorrect() { - Result result = runTest("dog$", "Man's best friend is a dog"); - assertTrue(result.isFound()); + int matches = runTest("dog$", "Man's best friend is a dog"); + assertTrue(matches > 0); } @Test public void givenTextAndWrongInput_whenMatchFailsAtEnd_thenCorrect() { - Result result = runTest("dog$", "is a dog man's best friend?"); - assertFalse(result.isFound()); + int matches = runTest("dog$", "is a dog man's best friend?"); + assertFalse(matches > 0); } @Test public void givenText_whenMatchesAtWordBoundary_thenCorrect() { - Result result = runTest("\\bdog\\b", "a dog is friendly"); - assertTrue(result.isFound()); + int matches = runTest("\\bdog\\b", "a dog is friendly"); + assertTrue(matches > 0); } @Test public void givenText_whenMatchesAtWordBoundary_thenCorrect2() { - Result result = runTest("\\bdog\\b", "dog is man's best friend"); - assertTrue(result.isFound()); + int matches = runTest("\\bdog\\b", "dog is man's best friend"); + assertTrue(matches > 0); } @Test public void givenWrongText_whenMatchFailsAtWordBoundary_thenCorrect() { - Result result = runTest("\\bdog\\b", "snoop dogg is a rapper"); - assertFalse(result.isFound()); + int matches = runTest("\\bdog\\b", "snoop dogg is a rapper"); + assertFalse(matches > 0); } @Test public void givenText_whenMatchesAtWordAndNonBoundary_thenCorrect() { - Result result = runTest("\\bdog\\B", "snoop dogg is a rapper"); - assertTrue(result.isFound()); + int matches = runTest("\\bdog\\B", "snoop dogg is a rapper"); + assertTrue(matches > 0); } @Test public void givenRegexWithoutCanonEq_whenMatchFailsOnEquivalentUnicode_thenCorrect() { - Result result = runTest("\u00E9", "\u0065\u0301"); - assertFalse(result.isFound()); + int matches = runTest("\u00E9", "\u0065\u0301"); + assertFalse(matches > 0); } @Test public void givenRegexWithCanonEq_whenMatchesOnEquivalentUnicode_thenCorrect() { - Result result = runTest("\u00E9", "\u0065\u0301", Pattern.CANON_EQ); - assertTrue(result.isFound()); + int matches = runTest("\u00E9", "\u0065\u0301", Pattern.CANON_EQ); + assertTrue(matches > 0); } @Test public void givenRegexWithDefaultMatcher_whenMatchFailsOnDifferentCases_thenCorrect() { - Result result = runTest("dog", "This is a Dog"); - assertFalse(result.isFound()); + int matches = runTest("dog", "This is a Dog"); + assertFalse(matches > 0); } @Test public void givenRegexWithCaseInsensitiveMatcher_whenMatchesOnDifferentCases_thenCorrect() { - Result result = runTest("dog", "This is a Dog", Pattern.CASE_INSENSITIVE); - assertTrue(result.isFound()); + int matches = runTest("dog", "This is a Dog", Pattern.CASE_INSENSITIVE); + assertTrue(matches > 0); } @Test public void givenRegexWithEmbeddedCaseInsensitiveMatcher_whenMatchesOnDifferentCases_thenCorrect() { - Result result = runTest("(?i)dog", "This is a Dog"); - assertTrue(result.isFound()); + int matches = runTest("(?i)dog", "This is a Dog"); + assertTrue(matches > 0); } @Test public void givenRegexWithComments_whenMatchFailsWithoutFlag_thenCorrect() { - Result result = runTest("dog$ #check for word dog at end of text", "This is a dog"); - assertFalse(result.isFound()); + int matches = runTest("dog$ #check for word dog at end of text", "This is a dog"); + assertFalse(matches > 0); } @Test public void givenRegexWithComments_whenMatchesWithFlag_thenCorrect() { - Result result = runTest("dog$ #check for word dog at end of text", "This is a dog", Pattern.COMMENTS); - assertTrue(result.isFound()); + int matches = runTest("dog$ #check for word dog at end of text", "This is a dog", Pattern.COMMENTS); + assertTrue(matches > 0); } @Test public void givenRegexWithComments_whenMatchesWithEmbeddedFlag_thenCorrect() { - Result result = runTest("(?x)dog$ #check for word dog at end of text", "This is a dog"); - assertTrue(result.isFound()); + int matches = runTest("(?x)dog$ #check for word dog at end of text", "This is a dog"); + assertTrue(matches > 0); } @Test @@ -401,38 +403,38 @@ public class RegexTest { @Test public void givenRegex_whenMatchesWithoutLiteralFlag_thenCorrect() { - Result result = runTest("(.*)", "text"); - assertTrue(result.isFound()); + int matches = runTest("(.*)", "text"); + assertTrue(matches > 0); } @Test public void givenRegex_whenMatchFailsWithLiteralFlag_thenCorrect() { - Result result = runTest("(.*)", "text", Pattern.LITERAL); - assertFalse(result.isFound()); + int matches = runTest("(.*)", "text", Pattern.LITERAL); + assertFalse(matches > 0); } @Test public void givenRegex_whenMatchesWithLiteralFlag_thenCorrect() { - Result result = runTest("(.*)", "text(.*)", Pattern.LITERAL); - assertTrue(result.isFound()); + int matches = runTest("(.*)", "text(.*)", Pattern.LITERAL); + assertTrue(matches > 0); } @Test public void givenRegex_whenMatchFailsWithoutMultilineFlag_thenCorrect() { - Result result = runTest("dog$", "This is a dog" + System.getProperty("line.separator") + "this is a fox"); - assertFalse(result.isFound()); + int matches = runTest("dog$", "This is a dog" + System.getProperty("line.separator") + "this is a fox"); + assertFalse(matches > 0); } @Test public void givenRegex_whenMatchesWithMultilineFlag_thenCorrect() { - Result result = runTest("dog$", "This is a dog" + System.getProperty("line.separator") + "this is a fox", Pattern.MULTILINE); - assertTrue(result.isFound()); + int matches = runTest("dog$", "This is a dog" + System.getProperty("line.separator") + "this is a fox", Pattern.MULTILINE); + assertTrue(matches > 0); } @Test public void givenRegex_whenMatchesWithEmbeddedMultilineFlag_thenCorrect() { - Result result = runTest("(?m)dog$", "This is a dog" + System.getProperty("line.separator") + "this is a fox"); - assertTrue(result.isFound()); + int matches = runTest("(?m)dog$", "This is a dog" + System.getProperty("line.separator") + "this is a fox"); + assertTrue(matches > 0); } @Test @@ -479,25 +481,22 @@ public class RegexTest { } - public synchronized static Result runTest(String regex, String text) { + public synchronized static int runTest(String regex, String text) { pattern = Pattern.compile(regex); matcher = pattern.matcher(text); - Result result = new Result(); + int matches = 0; while (matcher.find()) - result.setCount(result.getCount() + 1); - if (result.getCount() > 0) - result.setFound(true); - return result; + matches++; + return matches; } - public synchronized static Result runTest(String regex, String text, int flags) { + public synchronized static int runTest(String regex, String text, int flags) { pattern = Pattern.compile(regex, flags); matcher = pattern.matcher(text); - Result result = new Result(); + int matches = 0; while (matcher.find()) - result.setCount(result.getCount() + 1); - if (result.getCount() > 0) - result.setFound(true); - return result; + matches++; + return matches; } } + diff --git a/play-framework/student-api/app/controllers/StudentController.java b/play-framework/student-api/app/controllers/StudentController.java index 0adedfa432..08318733b5 100644 --- a/play-framework/student-api/app/controllers/StudentController.java +++ b/play-framework/student-api/app/controllers/StudentController.java @@ -38,8 +38,8 @@ public class StudentController extends Controller { return ok(Util.createResponse(jsonObjects,true)); } public Result listStudents() { - List result=StudentStore.getInstance().getAllStudents(); - ObjectMapper mapper = new ObjectMapper(); + Set result=StudentStore.getInstance().getAllStudents(); + ObjectMapper mapper = new ObjectMapper(); JsonNode jsonData=mapper.convertValue(result, JsonNode.class); return ok(Util.createResponse(jsonData,true)); diff --git a/play-framework/student-api/app/models/StudentStore.java b/play-framework/student-api/app/models/StudentStore.java index 3290e141cd..01b565a22e 100644 --- a/play-framework/student-api/app/models/StudentStore.java +++ b/play-framework/student-api/app/models/StudentStore.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; public class StudentStore { private static StudentStore instance; @@ -22,19 +23,16 @@ public class StudentStore { } public Student getStudent(int id) { - if (students.containsKey(id)) - return students.get(id); - return null; + return students.get(id); } - public List getAllStudents() { - return new ArrayList(students.values()); + public Set getAllStudents() { + return (Set)students.values(); } public Student updateStudent(Student student) { int id=student.getId(); if (students.containsKey(id)) { - student.setId(id); students.put(id, student); return student; } @@ -42,11 +40,11 @@ public class StudentStore { } public boolean deleteStudent(int id) { - - if (!students.containsKey(id)) + Student student=students.remove(id); + if (student == null) return false; - students.remove(id); - return true; + else + return true; } } \ No newline at end of file diff --git a/routing-in-play/.gitignore b/routing-in-play/.gitignore new file mode 100644 index 0000000000..eb372fc719 --- /dev/null +++ b/routing-in-play/.gitignore @@ -0,0 +1,8 @@ +logs +target +/.idea +/.idea_modules +/.classpath +/.project +/.settings +/RUNNING_PID diff --git a/routing-in-play/LICENSE b/routing-in-play/LICENSE new file mode 100644 index 0000000000..4baedcb95f --- /dev/null +++ b/routing-in-play/LICENSE @@ -0,0 +1,8 @@ +This software is licensed under the Apache 2 license, quoted below. + +Licensed under the Apache License, Version 2.0 (the "License"); you may not use this project except in compliance with +the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0. + +Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific +language governing permissions and limitations under the License. \ No newline at end of file diff --git a/routing-in-play/README b/routing-in-play/README new file mode 100644 index 0000000000..f21d092edf --- /dev/null +++ b/routing-in-play/README @@ -0,0 +1,49 @@ +This is your new Play application +================================= + +This file will be packaged with your application when using `activator dist`. + +There are several demonstration files available in this template. + +Controllers +=========== + +- HomeController.java: + + Shows how to handle simple HTTP requests. + +- AsyncController.java: + + Shows how to do asynchronous programming when handling a request. + +- CountController.java: + + Shows how to inject a component into a controller and use the component when + handling requests. + +Components +========== + +- Module.java: + + Shows how to use Guice to bind all the components needed by your application. + +- Counter.java: + + An example of a component that contains state, in this case a simple counter. + +- ApplicationTimer.java: + + An example of a component that starts when the application starts and stops + when the application stops. + +Filters +======= + +- Filters.java: + + Creates the list of HTTP filters used by your application. + +- ExampleFilter.java + + A simple filter that adds a header to every response. \ No newline at end of file diff --git a/routing-in-play/app/Filters.java b/routing-in-play/app/Filters.java new file mode 100644 index 0000000000..255de8ca93 --- /dev/null +++ b/routing-in-play/app/Filters.java @@ -0,0 +1,46 @@ +import javax.inject.*; +import play.*; +import play.mvc.EssentialFilter; +import play.http.HttpFilters; +import play.mvc.*; + +import filters.ExampleFilter; + +/** + * This class configures filters that run on every request. This + * class is queried by Play to get a list of filters. + * + * Play will automatically use filters from any class called + * Filters that is placed the root package. You can load filters + * from a different class by adding a `play.http.filters` setting to + * the application.conf configuration file. + */ +@Singleton +public class Filters implements HttpFilters { + + private final Environment env; + private final EssentialFilter exampleFilter; + + /** + * @param env Basic environment settings for the current application. + * @param exampleFilter A demonstration filter that adds a header to + */ + @Inject + public Filters(Environment env, ExampleFilter exampleFilter) { + this.env = env; + this.exampleFilter = exampleFilter; + } + + @Override + public EssentialFilter[] filters() { + // Use the example filter if we're running development mode. If + // we're running in production or test mode then don't use any + // filters at all. + if (env.mode().equals(Mode.DEV)) { + return new EssentialFilter[] { exampleFilter }; + } else { + return new EssentialFilter[] {}; + } + } + +} diff --git a/routing-in-play/app/Module.java b/routing-in-play/app/Module.java new file mode 100644 index 0000000000..6e7d1766ef --- /dev/null +++ b/routing-in-play/app/Module.java @@ -0,0 +1,31 @@ +import com.google.inject.AbstractModule; +import java.time.Clock; + +import services.ApplicationTimer; +import services.AtomicCounter; +import services.Counter; + +/** + * This class is a Guice module that tells Guice how to bind several + * different types. This Guice module is created when the Play + * application starts. + * + * Play will automatically use any class called `Module` that is in + * the root package. You can create modules in other locations by + * adding `play.modules.enabled` settings to the `application.conf` + * configuration file. + */ +public class Module extends AbstractModule { + + @Override + public void configure() { + // Use the system clock as the default implementation of Clock + bind(Clock.class).toInstance(Clock.systemDefaultZone()); + // Ask Guice to create an instance of ApplicationTimer when the + // application starts. + bind(ApplicationTimer.class).asEagerSingleton(); + // Set AtomicCounter as the implementation for Counter. + bind(Counter.class).to(AtomicCounter.class); + } + +} diff --git a/routing-in-play/app/controllers/HomeController.java b/routing-in-play/app/controllers/HomeController.java new file mode 100644 index 0000000000..6e340d594f --- /dev/null +++ b/routing-in-play/app/controllers/HomeController.java @@ -0,0 +1,33 @@ +package controllers; + +import play.mvc.*; + +import views.html.*; + +/** + * This controller contains an action to handle HTTP requests + * to the application's home page. + */ +public class HomeController extends Controller { + + /** + * An action that renders an HTML page with a welcome message. + * The configuration in the routes file means that + * this method will be called when the application receives a + * GET request with a path of /. + */ + public Result index(String author,int id) { + return ok("Routing in Play by:"+author+" ID:"+id); + } + public Result greet(String name,int age) { + return ok("Hello "+name+", you are "+age+" years old"); + } + public Result introduceMe(String data) { + String[] clientData=data.split(","); + return ok("Your name is "+clientData[0]+", you are "+clientData[1]+" years old"); + } + public Result squareMe(Long num) { + return ok(num+" Squared is "+(num*num)); + } + +} diff --git a/routing-in-play/app/filters/ExampleFilter.java b/routing-in-play/app/filters/ExampleFilter.java new file mode 100644 index 0000000000..67a6a36cc3 --- /dev/null +++ b/routing-in-play/app/filters/ExampleFilter.java @@ -0,0 +1,45 @@ +package filters; + +import akka.stream.Materializer; +import java.util.concurrent.CompletionStage; +import java.util.concurrent.Executor; +import java.util.function.Function; +import javax.inject.*; +import play.mvc.*; +import play.mvc.Http.RequestHeader; + + +/** + * This is a simple filter that adds a header to all requests. It's + * added to the application's list of filters by the + * {@link Filters} class. + */ +@Singleton +public class ExampleFilter extends Filter { + + private final Executor exec; + + /** + * @param mat This object is needed to handle streaming of requests + * and responses. + * @param exec This class is needed to execute code asynchronously. + * It is used below by the thenAsyncApply method. + */ + @Inject + public ExampleFilter(Materializer mat, Executor exec) { + super(mat); + this.exec = exec; + } + + @Override + public CompletionStage apply( + Function> next, + RequestHeader requestHeader) { + + return next.apply(requestHeader).thenApplyAsync( + result -> result.withHeader("X-ExampleFilter", "foo"), + exec + ); + } + +} diff --git a/routing-in-play/app/services/ApplicationTimer.java b/routing-in-play/app/services/ApplicationTimer.java new file mode 100644 index 0000000000..a951562b1d --- /dev/null +++ b/routing-in-play/app/services/ApplicationTimer.java @@ -0,0 +1,50 @@ +package services; + +import java.time.Clock; +import java.time.Instant; +import java.util.concurrent.CompletableFuture; +import javax.inject.*; +import play.Logger; +import play.inject.ApplicationLifecycle; + +/** + * This class demonstrates how to run code when the + * application starts and stops. It starts a timer when the + * application starts. When the application stops it prints out how + * long the application was running for. + * + * This class is registered for Guice dependency injection in the + * {@link Module} class. We want the class to start when the application + * starts, so it is registered as an "eager singleton". See the code + * in the {@link Module} class to see how this happens. + * + * This class needs to run code when the server stops. It uses the + * application's {@link ApplicationLifecycle} to register a stop hook. + */ +@Singleton +public class ApplicationTimer { + + private final Clock clock; + private final ApplicationLifecycle appLifecycle; + private final Instant start; + + @Inject + public ApplicationTimer(Clock clock, ApplicationLifecycle appLifecycle) { + this.clock = clock; + this.appLifecycle = appLifecycle; + // This code is called when the application starts. + start = clock.instant(); + Logger.info("ApplicationTimer demo: Starting application at " + start); + + // When the application starts, register a stop hook with the + // ApplicationLifecycle object. The code inside the stop hook will + // be run when the application stops. + appLifecycle.addStopHook(() -> { + Instant stop = clock.instant(); + Long runningTime = stop.getEpochSecond() - start.getEpochSecond(); + Logger.info("ApplicationTimer demo: Stopping application at " + clock.instant() + " after " + runningTime + "s."); + return CompletableFuture.completedFuture(null); + }); + } + +} diff --git a/routing-in-play/app/services/AtomicCounter.java b/routing-in-play/app/services/AtomicCounter.java new file mode 100644 index 0000000000..41f741cbf7 --- /dev/null +++ b/routing-in-play/app/services/AtomicCounter.java @@ -0,0 +1,26 @@ +package services; + +import java.util.concurrent.atomic.AtomicInteger; +import javax.inject.*; + +/** + * This class is a concrete implementation of the {@link Counter} trait. + * It is configured for Guice dependency injection in the {@link Module} + * class. + * + * This class has a {@link Singleton} annotation because we need to make + * sure we only use one counter per application. Without this + * annotation we would get a new instance every time a {@link Counter} is + * injected. + */ +@Singleton +public class AtomicCounter implements Counter { + + private final AtomicInteger atomicCounter = new AtomicInteger(); + + @Override + public int nextCount() { + return atomicCounter.getAndIncrement(); + } + +} diff --git a/routing-in-play/app/services/Counter.java b/routing-in-play/app/services/Counter.java new file mode 100644 index 0000000000..dadad8b09d --- /dev/null +++ b/routing-in-play/app/services/Counter.java @@ -0,0 +1,13 @@ +package services; + +/** + * This interface demonstrates how to create a component that is injected + * into a controller. The interface represents a counter that returns a + * incremented number each time it is called. + * + * The {@link Modules} class binds this interface to the + * {@link AtomicCounter} implementation. + */ +public interface Counter { + int nextCount(); +} diff --git a/routing-in-play/app/views/index.scala.html b/routing-in-play/app/views/index.scala.html new file mode 100644 index 0000000000..4539f5a10b --- /dev/null +++ b/routing-in-play/app/views/index.scala.html @@ -0,0 +1,20 @@ +@* + * This template takes a single argument, a String containing a + * message to display. + *@ +@(message: String) + +@* + * Call the `main` template with two arguments. The first + * argument is a `String` with the title of the page, the second + * argument is an `Html` object containing the body of the page. + *@ +@main("Welcome to Play") { + + @* + * Get an `Html` object by calling the built-in Play welcome + * template and passing a `String` message. + *@ + @play20.welcome(message, style = "Java") + +} diff --git a/routing-in-play/app/views/main.scala.html b/routing-in-play/app/views/main.scala.html new file mode 100644 index 0000000000..9414f4be6e --- /dev/null +++ b/routing-in-play/app/views/main.scala.html @@ -0,0 +1,23 @@ +@* + * This template is called from the `index` template. This template + * handles the rendering of the page header and body tags. It takes + * two arguments, a `String` for the title of the page and an `Html` + * object to insert into the body of the page. + *@ +@(title: String)(content: Html) + + + + + @* Here's where we render the page title `String`. *@ + @title + + + + + + @* And here's where we render the `Html` object containing + * the page content. *@ + @content + + diff --git a/routing-in-play/bin/activator b/routing-in-play/bin/activator new file mode 100644 index 0000000000..a8b11d482f --- /dev/null +++ b/routing-in-play/bin/activator @@ -0,0 +1,397 @@ +#!/usr/bin/env bash + +### ------------------------------- ### +### Helper methods for BASH scripts ### +### ------------------------------- ### + +realpath () { +( + TARGET_FILE="$1" + FIX_CYGPATH="$2" + + cd "$(dirname "$TARGET_FILE")" + TARGET_FILE=$(basename "$TARGET_FILE") + + COUNT=0 + while [ -L "$TARGET_FILE" -a $COUNT -lt 100 ] + do + TARGET_FILE=$(readlink "$TARGET_FILE") + cd "$(dirname "$TARGET_FILE")" + TARGET_FILE=$(basename "$TARGET_FILE") + COUNT=$(($COUNT + 1)) + done + + # make sure we grab the actual windows path, instead of cygwin's path. + if [[ "x$FIX_CYGPATH" != "x" ]]; then + echo "$(cygwinpath "$(pwd -P)/$TARGET_FILE")" + else + echo "$(pwd -P)/$TARGET_FILE" + fi +) +} + + +# Uses uname to detect if we're in the odd cygwin environment. +is_cygwin() { + local os=$(uname -s) + case "$os" in + CYGWIN*) return 0 ;; + *) return 1 ;; + esac +} + +# TODO - Use nicer bash-isms here. +CYGWIN_FLAG=$(if is_cygwin; then echo true; else echo false; fi) + + +# This can fix cygwin style /cygdrive paths so we get the +# windows style paths. +cygwinpath() { + local file="$1" + if [[ "$CYGWIN_FLAG" == "true" ]]; then + echo $(cygpath -w $file) + else + echo $file + fi +} + +# Make something URI friendly +make_url() { + url="$1" + local nospaces=${url// /%20} + if is_cygwin; then + echo "/${nospaces//\\//}" + else + echo "$nospaces" + fi +} + +declare -a residual_args +declare -a java_args +declare -a scalac_args +declare -a sbt_commands +declare java_cmd=java +declare java_version +declare -r real_script_path="$(realpath "$0")" +declare -r sbt_home="$(realpath "$(dirname "$(dirname "$real_script_path")")")" +declare -r sbt_bin_dir="$(dirname "$real_script_path")" +declare -r app_version="1.3.10" + +declare -r script_name=activator +declare -r java_opts=( "${ACTIVATOR_OPTS[@]}" "${SBT_OPTS[@]}" "${JAVA_OPTS[@]}" "${java_opts[@]}" ) +userhome="$HOME" +if is_cygwin; then + # cygwin sets home to something f-d up, set to real windows homedir + userhome="$USERPROFILE" +fi +declare -r activator_user_home_dir="${userhome}/.activator" +declare -r java_opts_config_home="${activator_user_home_dir}/activatorconfig.txt" +declare -r java_opts_config_version="${activator_user_home_dir}/${app_version}/activatorconfig.txt" + +echoerr () { + echo 1>&2 "$@" +} +vlog () { + [[ $verbose || $debug ]] && echoerr "$@" +} +dlog () { + [[ $debug ]] && echoerr "$@" +} + +jar_file () { + echo "$(cygwinpath "${sbt_home}/libexec/activator-launch-${app_version}.jar")" +} + +acquire_sbt_jar () { + sbt_jar="$(jar_file)" + + if [[ ! -f "$sbt_jar" ]]; then + echoerr "Could not find launcher jar: $sbt_jar" + exit 2 + fi +} + +execRunner () { + # print the arguments one to a line, quoting any containing spaces + [[ $verbose || $debug ]] && echo "# Executing command line:" && { + for arg; do + if printf "%s\n" "$arg" | grep -q ' '; then + printf "\"%s\"\n" "$arg" + else + printf "%s\n" "$arg" + fi + done + echo "" + } + + # THis used to be exec, but we loose the ability to re-hook stty then + # for cygwin... Maybe we should flag the feature here... + "$@" +} + +addJava () { + dlog "[addJava] arg = '$1'" + java_args=( "${java_args[@]}" "$1" ) +} +addSbt () { + dlog "[addSbt] arg = '$1'" + sbt_commands=( "${sbt_commands[@]}" "$1" ) +} +addResidual () { + dlog "[residual] arg = '$1'" + residual_args=( "${residual_args[@]}" "$1" ) +} +addDebugger () { + addJava "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=$1" +} + +get_mem_opts () { + # if we detect any of these settings in ${JAVA_OPTS} we need to NOT output our settings. + # The reason is the Xms/Xmx, if they don't line up, cause errors. + if [[ "${JAVA_OPTS}" == *-Xmx* ]] || [[ "${JAVA_OPTS}" == *-Xms* ]] || [[ "${JAVA_OPTS}" == *-XX:MaxPermSize* ]] || [[ "${JAVA_OPTS}" == *-XX:MaxMetaspaceSize* ]] || [[ "${JAVA_OPTS}" == *-XX:ReservedCodeCacheSize* ]]; then + echo "" + else + # a ham-fisted attempt to move some memory settings in concert + # so they need not be messed around with individually. + local mem=${1:-1024} + local codecache=$(( $mem / 8 )) + (( $codecache > 128 )) || codecache=128 + (( $codecache < 512 )) || codecache=512 + local class_metadata_size=$(( $codecache * 2 )) + local class_metadata_opt=$([[ "$java_version" < "1.8" ]] && echo "MaxPermSize" || echo "MaxMetaspaceSize") + + echo "-Xms${mem}m -Xmx${mem}m -XX:ReservedCodeCacheSize=${codecache}m -XX:${class_metadata_opt}=${class_metadata_size}m" + fi +} + +require_arg () { + local type="$1" + local opt="$2" + local arg="$3" + if [[ -z "$arg" ]] || [[ "${arg:0:1}" == "-" ]]; then + echo "$opt requires <$type> argument" + exit 1 + fi +} + +is_function_defined() { + declare -f "$1" > /dev/null +} + +# If we're *not* running in a terminal, and we don't have any arguments, then we need to add the 'ui' parameter +detect_terminal_for_ui() { + [[ ! -t 0 ]] && [[ "${#residual_args}" == "0" ]] && { + addResidual "ui" + } + # SPECIAL TEST FOR MAC + [[ "$(uname)" == "Darwin" ]] && [[ "$HOME" == "$PWD" ]] && [[ "${#residual_args}" == "0" ]] && { + echo "Detected MAC OSX launched script...." + echo "Swapping to UI" + addResidual "ui" + } +} + +process_args () { + while [[ $# -gt 0 ]]; do + case "$1" in + -h|-help) usage; exit 1 ;; + -v|-verbose) verbose=1 && shift ;; + -d|-debug) debug=1 && shift ;; + + -ivy) require_arg path "$1" "$2" && addJava "-Dsbt.ivy.home=$2" && shift 2 ;; + -mem) require_arg integer "$1" "$2" && sbt_mem="$2" && shift 2 ;; + -jvm-debug) require_arg port "$1" "$2" && addDebugger $2 && shift 2 ;; + -batch) exec &1 | awk -F '"' '/version/ {print $2}') + vlog "[process_args] java_version = '$java_version'" +} + +# Detect that we have java installed. +checkJava() { + local required_version="$1" + # Now check to see if it's a good enough version + if [[ "$java_version" == "" ]]; then + echo + echo No java installations was detected. + echo Please go to http://www.java.com/getjava/ and download + echo + exit 1 + elif [[ ! "$java_version" > "$required_version" ]]; then + echo + echo The java installation you have is not up to date + echo $script_name requires at least version $required_version+, you have + echo version $java_version + echo + echo Please go to http://www.java.com/getjava/ and download + echo a valid Java Runtime and install before running $script_name. + echo + exit 1 + fi +} + + +run() { + # no jar? download it. + [[ -f "$sbt_jar" ]] || acquire_sbt_jar "$sbt_version" || { + # still no jar? uh-oh. + echo "Download failed. Obtain the sbt-launch.jar manually and place it at $sbt_jar" + exit 1 + } + + # process the combined args, then reset "$@" to the residuals + process_args "$@" + detect_terminal_for_ui + set -- "${residual_args[@]}" + argumentCount=$# + + # TODO - java check should be configurable... + checkJava "1.6" + + #If we're in cygwin, we should use the windows config, and terminal hacks + if [[ "$CYGWIN_FLAG" == "true" ]]; then + stty -icanon min 1 -echo > /dev/null 2>&1 + addJava "-Djline.terminal=jline.UnixTerminal" + addJava "-Dsbt.cygwin=true" + fi + + # run sbt + execRunner "$java_cmd" \ + "-Dactivator.home=$(make_url "$sbt_home")" \ + ${SBT_OPTS:-$default_sbt_opts} \ + $(get_mem_opts $sbt_mem) \ + ${JAVA_OPTS} \ + ${java_args[@]} \ + -jar "$sbt_jar" \ + "${sbt_commands[@]}" \ + "${residual_args[@]}" + + exit_code=$? + + # Clean up the terminal from cygwin hacks. + if [[ "$CYGWIN_FLAG" == "true" ]]; then + stty icanon echo > /dev/null 2>&1 + fi + exit $exit_code +} + + +declare -r noshare_opts="-Dsbt.global.base=project/.sbtboot -Dsbt.boot.directory=project/.boot -Dsbt.ivy.home=project/.ivy" +declare -r sbt_opts_file=".sbtopts" +declare -r etc_sbt_opts_file="${sbt_home}/conf/sbtopts" +declare -r win_sbt_opts_file="${sbt_home}/conf/sbtconfig.txt" + +usage() { + cat < path to global settings/plugins directory (default: ~/.sbt) + -sbt-boot path to shared boot directory (default: ~/.sbt/boot in 0.11 series) + -ivy path to local Ivy repository (default: ~/.ivy2) + -mem set memory options (default: $sbt_mem, which is $(get_mem_opts $sbt_mem)) + -no-share use all local caches; no sharing + -no-global uses global caches, but does not use global ~/.sbt directory. + -jvm-debug Turn on JVM debugging, open at the given port. + -batch Disable interactive mode + + # sbt version (default: from project/build.properties if present, else latest release) + -sbt-version use the specified version of sbt + -sbt-jar use the specified jar as the sbt launcher + -sbt-rc use an RC version of sbt + -sbt-snapshot use a snapshot version of sbt + + # java version (default: java from PATH, currently $(java -version 2>&1 | grep version)) + -java-home alternate JAVA_HOME + + # jvm options and output control + JAVA_OPTS environment variable, if unset uses "$java_opts" + SBT_OPTS environment variable, if unset uses "$default_sbt_opts" + ACTIVATOR_OPTS Environment variable, if unset uses "" + .sbtopts if this file exists in the current directory, it is + prepended to the runner args + /etc/sbt/sbtopts if this file exists, it is prepended to the runner args + -Dkey=val pass -Dkey=val directly to the java runtime + -J-X pass option -X directly to the java runtime + (-J is stripped) + -S-X add -X to sbt's scalacOptions (-S is stripped) + +In the case of duplicated or conflicting options, the order above +shows precedence: JAVA_OPTS lowest, command line options highest. +EOM +} + + + +process_my_args () { + while [[ $# -gt 0 ]]; do + case "$1" in + -no-colors) addJava "-Dsbt.log.noformat=true" && shift ;; + -no-share) addJava "$noshare_opts" && shift ;; + -no-global) addJava "-Dsbt.global.base=$(pwd)/project/.sbtboot" && shift ;; + -sbt-boot) require_arg path "$1" "$2" && addJava "-Dsbt.boot.directory=$2" && shift 2 ;; + -sbt-dir) require_arg path "$1" "$2" && addJava "-Dsbt.global.base=$2" && shift 2 ;; + -debug-inc) addJava "-Dxsbt.inc.debug=true" && shift ;; + -batch) exec ^&1') do ( + if %%~j==java set JAVAINSTALLED=1 + if %%~j==openjdk set JAVAINSTALLED=1 +) + +rem Detect the same thing about javac +if "%_JAVACCMD%"=="" ( + if not "%JAVA_HOME%"=="" ( + if exist "%JAVA_HOME%\bin\javac.exe" set "_JAVACCMD=%JAVA_HOME%\bin\javac.exe" + ) +) +if "%_JAVACCMD%"=="" set _JAVACCMD=javac +for /F %%j in ('"%_JAVACCMD%" -version 2^>^&1') do ( + if %%~j==javac set JAVACINSTALLED=1 +) + +rem BAT has no logical or, so we do it OLD SCHOOL! Oppan Redmond Style +set JAVAOK=true +if not defined JAVAINSTALLED set JAVAOK=false +if not defined JAVACINSTALLED set JAVAOK=false + +if "%JAVAOK%"=="false" ( + echo. + echo A Java JDK is not installed or can't be found. + if not "%JAVA_HOME%"=="" ( + echo JAVA_HOME = "%JAVA_HOME%" + ) + echo. + echo Please go to + echo http://www.oracle.com/technetwork/java/javase/downloads/index.html + echo and download a valid Java JDK and install before running Activator. + echo. + echo If you think this message is in error, please check + echo your environment variables to see if "java.exe" and "javac.exe" are + echo available via JAVA_HOME or PATH. + echo. + if defined DOUBLECLICKED pause + exit /B 1 +) + +rem Check what Java version is being used to determine what memory options to use +for /f "tokens=3" %%g in ('java -version 2^>^&1 ^| findstr /i "version"') do ( + set JAVA_VERSION=%%g +) + +rem Strips away the " characters +set JAVA_VERSION=%JAVA_VERSION:"=% + +rem TODO Check if there are existing mem settings in JAVA_OPTS/CFG_OPTS and use those instead of the below +for /f "delims=. tokens=1-3" %%v in ("%JAVA_VERSION%") do ( + set MAJOR=%%v + set MINOR=%%w + set BUILD=%%x + + set META_SIZE=-XX:MetaspaceSize=64M -XX:MaxMetaspaceSize=256M + if "!MINOR!" LSS "8" ( + set META_SIZE=-XX:PermSize=64M -XX:MaxPermSize=256M + ) + + set MEM_OPTS=!META_SIZE! + ) + +rem We use the value of the JAVA_OPTS environment variable if defined, rather than the config. +set _JAVA_OPTS=%JAVA_OPTS% +if "%_JAVA_OPTS%"=="" set _JAVA_OPTS=%CFG_OPTS% + +set DEBUG_OPTS= + +rem Loop through the arguments, building remaining args in args variable +set args= +:argsloop +if not "%~1"=="" ( + rem Checks if the argument contains "-D" and if true, adds argument 1 with 2 and puts an equal sign between them. + rem This is done since batch considers "=" to be a delimiter so we need to circumvent this behavior with a small hack. + set arg1=%~1 + if "!arg1:~0,2!"=="-D" ( + set "args=%args% "%~1"="%~2"" + shift + shift + goto argsloop + ) + + if "%~1"=="-jvm-debug" ( + if not "%~2"=="" ( + rem This piece of magic somehow checks that an argument is a number + for /F "delims=0123456789" %%i in ("%~2") do ( + set var="%%i" + ) + if defined var ( + rem Not a number, assume no argument given and default to 9999 + set JPDA_PORT=9999 + ) else ( + rem Port was given, shift arguments + set JPDA_PORT=%~2 + shift + ) + ) else ( + set JPDA_PORT=9999 + ) + shift + + set DEBUG_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=!JPDA_PORT! + goto argsloop + ) + rem else + set "args=%args% "%~1"" + shift + goto argsloop +) + +:run + +if "!args!"=="" ( + if defined DOUBLECLICKED ( + set CMDS="ui" + ) else set CMDS=!args! +) else set CMDS=!args! + +rem We add a / in front, so we get file:///C: instead of file://C: +rem Java considers the later a UNC path. +rem We also attempt a solid effort at making it URI friendly. +rem We don't even bother with UNC paths. +set JAVA_FRIENDLY_HOME_1=/!ACTIVATOR_HOME:\=/! +set JAVA_FRIENDLY_HOME=/!JAVA_FRIENDLY_HOME_1: =%%20! + +rem Checks if the command contains spaces to know if it should be wrapped in quotes or not +set NON_SPACED_CMD=%_JAVACMD: =% +if "%_JAVACMD%"=="%NON_SPACED_CMD%" %_JAVACMD% %DEBUG_OPTS% %MEM_OPTS% %ACTIVATOR_OPTS% %SBT_OPTS% %_JAVA_OPTS% "-Dactivator.home=%JAVA_FRIENDLY_HOME%" -jar "%ACTIVATOR_HOME%\libexec\%ACTIVATOR_LAUNCH_JAR%" %CMDS% +if NOT "%_JAVACMD%"=="%NON_SPACED_CMD%" "%_JAVACMD%" %DEBUG_OPTS% %MEM_OPTS% %ACTIVATOR_OPTS% %SBT_OPTS% %_JAVA_OPTS% "-Dactivator.home=%JAVA_FRIENDLY_HOME%" -jar "%ACTIVATOR_HOME%\libexec\%ACTIVATOR_LAUNCH_JAR%" %CMDS% + +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end + +@endlocal + +exit /B %ERROR_CODE% diff --git a/routing-in-play/build.sbt b/routing-in-play/build.sbt new file mode 100644 index 0000000000..083d071676 --- /dev/null +++ b/routing-in-play/build.sbt @@ -0,0 +1,13 @@ +name := """webapp""" + +version := "1.0-SNAPSHOT" + +lazy val root = (project in file(".")).enablePlugins(PlayJava) + +scalaVersion := "2.11.7" + +libraryDependencies ++= Seq( + javaJdbc, + cache, + javaWs +) diff --git a/routing-in-play/conf/application.conf b/routing-in-play/conf/application.conf new file mode 100644 index 0000000000..489d3f9b3e --- /dev/null +++ b/routing-in-play/conf/application.conf @@ -0,0 +1,353 @@ +# This is the main configuration file for the application. +# https://www.playframework.com/documentation/latest/ConfigFile +# ~~~~~ +# Play uses HOCON as its configuration file format. HOCON has a number +# of advantages over other config formats, but there are two things that +# can be used when modifying settings. +# +# You can include other configuration files in this main application.conf file: +#include "extra-config.conf" +# +# You can declare variables and substitute for them: +#mykey = ${some.value} +# +# And if an environment variable exists when there is no other subsitution, then +# HOCON will fall back to substituting environment variable: +#mykey = ${JAVA_HOME} + +## Akka +# https://www.playframework.com/documentation/latest/ScalaAkka#Configuration +# https://www.playframework.com/documentation/latest/JavaAkka#Configuration +# ~~~~~ +# Play uses Akka internally and exposes Akka Streams and actors in Websockets and +# other streaming HTTP responses. +akka { + # "akka.log-config-on-start" is extraordinarly useful because it log the complete + # configuration at INFO level, including defaults and overrides, so it s worth + # putting at the very top. + # + # Put the following in your conf/logback.xml file: + # + # + # + # And then uncomment this line to debug the configuration. + # + #log-config-on-start = true +} + +## Secret key +# http://www.playframework.com/documentation/latest/ApplicationSecret +# ~~~~~ +# The secret key is used to sign Play's session cookie. +# This must be changed for production, but we don't recommend you change it in this file. +play.crypto.secret = "changeme" + +## Modules +# https://www.playframework.com/documentation/latest/Modules +# ~~~~~ +# Control which modules are loaded when Play starts. Note that modules are +# the replacement for "GlobalSettings", which are deprecated in 2.5.x. +# Please see https://www.playframework.com/documentation/latest/GlobalSettings +# for more information. +# +# You can also extend Play functionality by using one of the publically available +# Play modules: https://playframework.com/documentation/latest/ModuleDirectory +play.modules { + # By default, Play will load any class called Module that is defined + # in the root package (the "app" directory), or you can define them + # explicitly below. + # If there are any built-in modules that you want to disable, you can list them here. + #enabled += my.application.Module + + # If there are any built-in modules that you want to disable, you can list them here. + #disabled += "" +} + +## IDE +# https://www.playframework.com/documentation/latest/IDE +# ~~~~~ +# Depending on your IDE, you can add a hyperlink for errors that will jump you +# directly to the code location in the IDE in dev mode. The following line makes +# use of the IntelliJ IDEA REST interface: +#play.editor="http://localhost:63342/api/file/?file=%s&line=%s" + +## Internationalisation +# https://www.playframework.com/documentation/latest/JavaI18N +# https://www.playframework.com/documentation/latest/ScalaI18N +# ~~~~~ +# Play comes with its own i18n settings, which allow the user's preferred language +# to map through to internal messages, or allow the language to be stored in a cookie. +play.i18n { + # The application languages + langs = [ "en" ] + + # Whether the language cookie should be secure or not + #langCookieSecure = true + + # Whether the HTTP only attribute of the cookie should be set to true + #langCookieHttpOnly = true +} + +## Play HTTP settings +# ~~~~~ +play.http { + ## Router + # https://www.playframework.com/documentation/latest/JavaRouting + # https://www.playframework.com/documentation/latest/ScalaRouting + # ~~~~~ + # Define the Router object to use for this application. + # This router will be looked up first when the application is starting up, + # so make sure this is the entry point. + # Furthermore, it's assumed your route file is named properly. + # So for an application router like `my.application.Router`, + # you may need to define a router file `conf/my.application.routes`. + # Default to Routes in the root package (aka "apps" folder) (and conf/routes) + #router = my.application.Router + + ## Action Creator + # https://www.playframework.com/documentation/latest/JavaActionCreator + # ~~~~~ + #actionCreator = null + + ## ErrorHandler + # https://www.playframework.com/documentation/latest/JavaRouting + # https://www.playframework.com/documentation/latest/ScalaRouting + # ~~~~~ + # If null, will attempt to load a class called ErrorHandler in the root package, + #errorHandler = null + + ## Filters + # https://www.playframework.com/documentation/latest/ScalaHttpFilters + # https://www.playframework.com/documentation/latest/JavaHttpFilters + # ~~~~~ + # Filters run code on every request. They can be used to perform + # common logic for all your actions, e.g. adding common headers. + # Defaults to "Filters" in the root package (aka "apps" folder) + # Alternatively you can explicitly register a class here. + #filters = my.application.Filters + + ## Session & Flash + # https://www.playframework.com/documentation/latest/JavaSessionFlash + # https://www.playframework.com/documentation/latest/ScalaSessionFlash + # ~~~~~ + session { + # Sets the cookie to be sent only over HTTPS. + #secure = true + + # Sets the cookie to be accessed only by the server. + #httpOnly = true + + # Sets the max-age field of the cookie to 5 minutes. + # NOTE: this only sets when the browser will discard the cookie. Play will consider any + # cookie value with a valid signature to be a valid session forever. To implement a server side session timeout, + # you need to put a timestamp in the session and check it at regular intervals to possibly expire it. + #maxAge = 300 + + # Sets the domain on the session cookie. + #domain = "example.com" + } + + flash { + # Sets the cookie to be sent only over HTTPS. + #secure = true + + # Sets the cookie to be accessed only by the server. + #httpOnly = true + } +} + +## Netty Provider +# https://www.playframework.com/documentation/latest/SettingsNetty +# ~~~~~ +play.server.netty { + # Whether the Netty wire should be logged + #log.wire = true + + # If you run Play on Linux, you can use Netty's native socket transport + # for higher performance with less garbage. + #transport = "native" +} + +## WS (HTTP Client) +# https://www.playframework.com/documentation/latest/ScalaWS#Configuring-WS +# ~~~~~ +# The HTTP client primarily used for REST APIs. The default client can be +# configured directly, but you can also create different client instances +# with customized settings. You must enable this by adding to build.sbt: +# +# libraryDependencies += ws // or javaWs if using java +# +play.ws { + # Sets HTTP requests not to follow 302 requests + #followRedirects = false + + # Sets the maximum number of open HTTP connections for the client. + #ahc.maxConnectionsTotal = 50 + + ## WS SSL + # https://www.playframework.com/documentation/latest/WsSSL + # ~~~~~ + ssl { + # Configuring HTTPS with Play WS does not require programming. You can + # set up both trustManager and keyManager for mutual authentication, and + # turn on JSSE debugging in development with a reload. + #debug.handshake = true + #trustManager = { + # stores = [ + # { type = "JKS", path = "exampletrust.jks" } + # ] + #} + } +} + +## Cache +# https://www.playframework.com/documentation/latest/JavaCache +# https://www.playframework.com/documentation/latest/ScalaCache +# ~~~~~ +# Play comes with an integrated cache API that can reduce the operational +# overhead of repeated requests. You must enable this by adding to build.sbt: +# +# libraryDependencies += cache +# +play.cache { + # If you want to bind several caches, you can bind the individually + #bindCaches = ["db-cache", "user-cache", "session-cache"] +} + +## Filters +# https://www.playframework.com/documentation/latest/Filters +# ~~~~~ +# There are a number of built-in filters that can be enabled and configured +# to give Play greater security. You must enable this by adding to build.sbt: +# +# libraryDependencies += filters +# +play.filters { + ## CORS filter configuration + # https://www.playframework.com/documentation/latest/CorsFilter + # ~~~~~ + # CORS is a protocol that allows web applications to make requests from the browser + # across different domains. + # NOTE: You MUST apply the CORS configuration before the CSRF filter, as CSRF has + # dependencies on CORS settings. + cors { + # Filter paths by a whitelist of path prefixes + #pathPrefixes = ["/some/path", ...] + + # The allowed origins. If null, all origins are allowed. + #allowedOrigins = ["http://www.example.com"] + + # The allowed HTTP methods. If null, all methods are allowed + #allowedHttpMethods = ["GET", "POST"] + } + + ## CSRF Filter + # https://www.playframework.com/documentation/latest/ScalaCsrf#Applying-a-global-CSRF-filter + # https://www.playframework.com/documentation/latest/JavaCsrf#Applying-a-global-CSRF-filter + # ~~~~~ + # Play supports multiple methods for verifying that a request is not a CSRF request. + # The primary mechanism is a CSRF token. This token gets placed either in the query string + # or body of every form submitted, and also gets placed in the users session. + # Play then verifies that both tokens are present and match. + csrf { + # Sets the cookie to be sent only over HTTPS + #cookie.secure = true + + # Defaults to CSRFErrorHandler in the root package. + #errorHandler = MyCSRFErrorHandler + } + + ## Security headers filter configuration + # https://www.playframework.com/documentation/latest/SecurityHeaders + # ~~~~~ + # Defines security headers that prevent XSS attacks. + # If enabled, then all options are set to the below configuration by default: + headers { + # The X-Frame-Options header. If null, the header is not set. + #frameOptions = "DENY" + + # The X-XSS-Protection header. If null, the header is not set. + #xssProtection = "1; mode=block" + + # The X-Content-Type-Options header. If null, the header is not set. + #contentTypeOptions = "nosniff" + + # The X-Permitted-Cross-Domain-Policies header. If null, the header is not set. + #permittedCrossDomainPolicies = "master-only" + + # The Content-Security-Policy header. If null, the header is not set. + #contentSecurityPolicy = "default-src 'self'" + } + + ## Allowed hosts filter configuration + # https://www.playframework.com/documentation/latest/AllowedHostsFilter + # ~~~~~ + # Play provides a filter that lets you configure which hosts can access your application. + # This is useful to prevent cache poisoning attacks. + hosts { + # Allow requests to example.com, its subdomains, and localhost:9000. + #allowed = [".example.com", "localhost:9000"] + } +} + +## Evolutions +# https://www.playframework.com/documentation/latest/Evolutions +# ~~~~~ +# Evolutions allows database scripts to be automatically run on startup in dev mode +# for database migrations. You must enable this by adding to build.sbt: +# +# libraryDependencies += evolutions +# +play.evolutions { + # You can disable evolutions for a specific datasource if necessary + #db.default.enabled = false +} + +## Database Connection Pool +# https://www.playframework.com/documentation/latest/SettingsJDBC +# ~~~~~ +# Play doesn't require a JDBC database to run, but you can easily enable one. +# +# libraryDependencies += jdbc +# +play.db { + # The combination of these two settings results in "db.default" as the + # default JDBC pool: + #config = "db" + #default = "default" + + # Play uses HikariCP as the default connection pool. You can override + # settings by changing the prototype: + prototype { + # Sets a fixed JDBC connection pool size of 50 + #hikaricp.minimumIdle = 50 + #hikaricp.maximumPoolSize = 50 + } +} + +## JDBC Datasource +# https://www.playframework.com/documentation/latest/JavaDatabase +# https://www.playframework.com/documentation/latest/ScalaDatabase +# ~~~~~ +# Once JDBC datasource is set up, you can work with several different +# database options: +# +# Slick (Scala preferred option): https://www.playframework.com/documentation/latest/PlaySlick +# JPA (Java preferred option): https://playframework.com/documentation/latest/JavaJPA +# EBean: https://playframework.com/documentation/latest/JavaEbean +# Anorm: https://www.playframework.com/documentation/latest/ScalaAnorm +# +db { + # You can declare as many datasources as you want. + # By convention, the default datasource is named `default` + + # https://www.playframework.com/documentation/latest/Developing-with-the-H2-Database + #default.driver = org.h2.Driver + #default.url = "jdbc:h2:mem:play" + #default.username = sa + #default.password = "" + + # You can turn on SQL logging for any datasource + # https://www.playframework.com/documentation/latest/Highlights25#Logging-SQL-statements + #default.logSql=true +} diff --git a/routing-in-play/conf/logback.xml b/routing-in-play/conf/logback.xml new file mode 100644 index 0000000000..86ec12c0af --- /dev/null +++ b/routing-in-play/conf/logback.xml @@ -0,0 +1,41 @@ + + + + + + + ${application.home:-.}/logs/application.log + + %date [%level] from %logger in %thread - %message%n%xException + + + + + + %coloredLevel %logger{15} - %message%n%xException{10} + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/routing-in-play/conf/routes b/routing-in-play/conf/routes new file mode 100644 index 0000000000..f72d8a1a14 --- /dev/null +++ b/routing-in-play/conf/routes @@ -0,0 +1,7 @@ +GET / controllers.HomeController.index(author="Baeldung",id:Int?=1) +GET /:author controllers.HomeController.index(author,id:Int?=1) +GET /greet/:name/:age controllers.HomeController.greet(name,age:Integer) +GET /square/$num<[0-9]+> controllers.HomeController.squareMe(num:Long) +# Map static resources from the /public folder to the /assets URL path +GET /assets/*file controllers.Assets.versioned(path="/public", file: Asset) +GET /*data controllers.HomeController.introduceMe(data) diff --git a/routing-in-play/libexec/activator-launch-1.3.10.jar b/routing-in-play/libexec/activator-launch-1.3.10.jar new file mode 100644 index 0000000000000000000000000000000000000000..69050e7decce1da12207fe83f49afb1d26308acb GIT binary patch literal 1206790 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෼r~5(jyj8wH+RW- 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
  • cvo@>>KRA_ewqv=Wf=+zw@*R)auUuj>~FxBG# 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≠mUT4^gVSLIYPY(10O20 zjXlaR8yDtEuHd)qVtU6zZWh!y;_0!pkw0Cxp>>>PvN<1i{q@8;z0c+r;hnuZ_v^E; z6WK8ZR;W`tL6k_EqqhxZH-0Fn^W&??iY!OX!-H2l=V_|RM^}CLyHx9koR?=Ou`yN)UqwJ{(PiW&euS zbm-m`)2%1y9seu^D0!wCrx^Dix0}-|@VcXZh{Z5Y^9f!#xd6hX{h4)@grg-$?-l0T z5*8_d6pw%Mf%#0@+G;P{j;nYox_==<;hWQk4Zx|P#;TEWWM?dIbBMqrTx||cIm|~m z@rZTD-Q3+f$cK%o5F(!Nc++y`k@o51SEAeeTkd8Ajj!r%b;k3=TF8^OC4jw#qZK1| zc49L_LWF;3Pgc(Ps(3xuz8b`=4e9Cg`cDnJH*Taz&Tqid_CIP6Q2ggu`mHx0ZDIBA zB*pb;_nQ|S9Gn>3))gGy6^K#Tw6w$IsECOP z(wH=b^z4}AsQCPi+ytnZiAh`^1B}%#UI0pnikZE&iG-1o9JM4YI^I9s9|BQ9WnebH0po9K8b{ljf=B^p|y#yiK)T2 z;JlQH$9IqI-zg^9>K{=mWSf?@o>ZC2F+S2yl;Thkh8E~H0GLXXAHrF**Jco{&_Z)9 z3DY;?3;4xv4OP@)8tPksy#Qm0lw2EHWsPc(P^ zRx-^oJc*7ekpgdZ-x$+MVZdRw8`XpK5(3=A3h7o-$57lwkuDse3q&0aTcf?yP^6Hw z*kb?8ycuW-ri~~eggfj?n?-Gtff+i7yD`&d6RFX65aWasTg-i-i`ClLim5f@U2MHC zY$j|crN6nec6PtT$J`R8e=#4Gs>x@jahKASw(8z|@)EDQ6D+nYyv7veUYXXexe$MJ zGB$hIUw!A9Jf`h8iO#_P)>z;+y`ev91$8l4YZ}(%NJSc!DHnuOo;8|oYI>o@;EXg* zT7E2cJ2i>UU*23bJ|qsA6YbGv8FEruYqkY!JPQU{;qL?oG>hF%RFNiXQ8HFCgGMjP z5{EQgAtKjIW#mkg{q!^qAyjlS4rz&m>zi|tfGR_xpX_ZRY3Q=%s2$b?yQl%8q!9>d zue2(v&Jv{?gV&CKdkvc67E+S9kUw55lPMM^;;1HXE+3MPFjI8)Dr2g_)}ER+t*BiF zh3CwjS};^um&!W_zSE<=I5>oVFeWNLH_Xt~Pt`K1&k+f*mE+s2kZ}g94BG*^nqT+v zJTFY2zu@CH&ovdL2}@y&9Q)n2pTI+R8o6w5gVZ%pH~HA9P2d`Ku6sfws_hKP>*=R& zeSuibH@6qeS9PU7r_v)jv1`P#ykJ)kTkZeRGaPy5d+s#r&`Nk^66jHon>^WFTKHxW zGd!}wTO}(G++*lhVehv?xE6zi!6(>>fGigFOd!Wa_vn3mR=9`({w7tRtQovV5Zhld z3V{&Y_uNxD8I6oC7aR5fDMfiFPsM8VP?&9RW83Ls9TV*n`dVEQjbTdFQ2x(`H^_1c zJJWY`0{@RH2mfW@{~u~7-|OG>v~G1RH|%drUo_=NePSp^#&0a>N4TJ|RG{}H7)Kl# zVTd2SpHNhu_Q=8?1tO^insm-$^a)(g(zy_+4(Oz&;F@GpLh_yEnuqXa_d|%ADdcM! zf(stAk(3c5166fy^W1cwr;F<>pB}q668v8uyI(&Z_L};#`f5RQP~0VVJp9o?by1$1 z`|Ln{sc*Raw_)A|c4C3)q248SO#IaX5XHffhWHWB>)FHL+DOA(VH?`Br*W;}8`~qN z5i`xG53(a4~J=1~$`dm3#Dv-d%Z+($_P2+R9qj>>j)U zT9bHj)!T$^p|#O$fMLoO%wL>QEnQ{KFgkvd9h+N6@J&UtLL#QfL*47)H}Xf&FG zIG*`VDSSSB-?W1}Z%5N{wj??$UL4(#jIvxt>FJRY;8XvP9u73g=_&>yq56F>1VR1wcE%JZ(vwRVO{@s~mK z;87`Vi=fQ3ur>3=piul)&2t!EXIQRs^LY2mHjHZ}#eYR!UFqQOp}|n9ul!JRjiu2N z-LXEY9ctsKqZ{WHaq_p_yN&w8r(Nu{teo1!i13W`hQSnGV(w*x=MfIGSr^k%*}1|s zLTpkLMmN1Z5`=Y)aXLq99h?CP@nI0f4D)TiQjTIsix=Bjs#cO~#wzu-s_ z8B5Z1rec{GKv$p>{mc_vzbKBK800Jf44A*wr@2QiBOuD422;%wo5iuA4$#&B?lH zcdbSuxQa`N)8mC#RGP(cHL;0RE%Eg?JTRfUP?Yy*{vr=BBDwiH?)h(u%_cC5?^XTu3TMjSpO{_rY=@;f0`4;4d z6@fy*Lb)z6Re_i)OOH=Uhu)!BldL<;j4=e0x^o|G9-PQtkX^pO&p%>_GG>UeANVq* zb3Z%7N}jw0@1S?#Py@ zoord1L6dzoGU%OZU7tyfd(q_3`(sDCL4({dIZ8KyQFMK#sB2YvAr5Z1%O9BJpG*lN zJHf9rL7R1lQv;YpZMEF&R~g=B2w*?;-WoV|*W&Q&r4Aia%TLF&e*H-c>^r~W8eY@R z>+k9rSkUAx(yB2VUVAEOHQm&zSMX*(Jw=+KaH&Qe6a}j|CWWMjIK6fQ8ngD0R!BfL zICyM-_{?FAgZ>qqVyQ_oC>%G6fhqN3GfU=yasc%wr>=^`LwS9X5C#de6Y>zaMYk`e zk?yQp$SSY0Ry*)oslX>}1VF5drcn@S-nxS8mU2d8@1X$|nV33TKuS}CR2o$qfZF5j zS>5N@g63x6Lb9x`ZsS*6Go*-1)6AIC*bFeDEns!QV?>wJCNbbGZ}!$airAh;9WPb) zPG=w2Z{SEqfjNO?Z-mMjRDsFETXaFHw)Ou2QFQ{rS>l;>Gv{8-TG?Vsl;BhXUA(e^a%STV^!+Q)TxhO zV#p`|cujD1&NS*cNYgFE)p3-rosY4#GFvBFQ*>B?rRA96E)f|?*IH?KXyi_XJ&|g- z4S=c&f&wu3bEZ|Ex=m9t>=sqfQ;xuh>Od88GE|U9HCAe-#T3mA763)5LlNU(%p;Dh zC4)86KzqcL(gJZu%cR!D1A?$R)`TCqWcN;2JZYC?+Kc4bM zTjrS3=cyuh$k^ZH5_w{paJ|Syz+d=sIt*0|eY+%eBx--I4}Mayme}WgOX*drSjrkG zkeY^OR{mLV!Bb$b=CE6(n!os`$!H4L#v<1D1k3c#|8yVzza`v%Gwiz6)}4?|P`+$3 zj3qj{g9Rnpq5VrXX)M+pt&oNsD~o6q&8zd;WLikSldnv~FpO?{`F=1tj!!c^ukr}+ z+I;_QKc?BcR@OYbSf7(CyG_HU>)y_DoRjOUThBJfHb?LEI(;wi>!;Wcn>I>AfD2SKO)V#?G0nm>6{x*?iQMC>8bMF2@SX+acNvVp)6a`mmxhA0_#$bCTKJ@F8&t4 z$4j==OAQ!w5$v+$7&&AO|AANADwu(D8i91FR8cvI_N^1bb(TrI|@(BP#&yzW|C+T=0v?3 zx6oisopC))gaB&-jXZMARcf@1((XV5VNLy7-Qj0b#ZUqv(PIKS|Pso9QX_fd;9IbFeP z&US3iTii-kkeLZ{l=vd8Xr%oW%Y2(l*9X(57bVRz%KVT?I@ycA!AhBr}>9)-pi zH(jB`vf0fZFM03;W$#+Lk9GNFPE?GUc~0^MbF*rbMa9go$5{;4;hu5p%UwC#tk6=W z#c73y=Jke<6M+W}c_RcddAu zg%UVhC~Cf@T=7pOpcM~+%m|E%Y57ZFwxUKO16HB=CVNB2h=}Cnf%%6thbQ?FRy19x zG8(F`ALY+g1qsQ{{+?!C2g`AhrrSFyRwsZMX_}pCF(2_M-E^SibmU@6Y^{t`lFZyj`_%2 zp2qP1T+U-_wiC>AmE&~+r3_i)<-@2ATQb*B!Q97-7_DPMD_>^1`qtxR z)%25^G0DV72>v+DnB|ojWc-`m5dwg(9g3f3NAwPGP z_*Hwf&yG5Jo1)Kdd60~XxR3ro&XjYAeQ0mms&HzMEkgE+kq0^LD%CDwBUK;(1wt83 zihii(8b8+9kFwAZg&+||!SXoCCeEDl+z|A*4CR?7D{u3l6-;BVX(o2H2q5v zlD*(xpUu@SFwDL92SCKAJKo2~R+;*m#geJTLD+4U^ljzeE-CzUg*%y1o`Pi>cU)-! zFLj_UX}Vgix9^pYt{?*$Al#Knr_kkIPgC_FfqaL-O}oVs%&7JihGP;XUeI9W%3;Q5 z%>ac>Wtvh&R)4)UOT>MArgppz#jk{0Q{Pb8lQK!B3#AfwJZ09_$-Y&p8-#6gM+_wW z08=CHQM31|ul|=gF>sAB_4AkPgY5rCvHjNo_m@(yLdDwgOR4A0LaQBTvpI7!1EGx1 zmo^?()Ydo@AqRI1$-+ln(j;v&B9JECC|(T={ERxrmY;ow$~!0V{rqT))D-Jo5GM5S z%x0BHn$!NSH|xh^^C8b;#^GA~51-H1V%=|dTd|R{#%r;$iS*=zw1yJF#D*Fo{37xL zk&&$oJn{6DhB5=(=#PLg@UVEk7vC^qz;e(Bm+xxWyALw)JlPNeaYdK0AmeU_@lJ9< za`C=m7sk8s;IUxx;HUA@+;Y&ht(aK6`0KX#xKHfFy3r%an!>$Vl9!;W(M=rHyG79q z9W%$FfjK59&`jfden8BKQNW?e#dNy^BR1vWg}@@GSao#e_=B$f7&?&Dik(8rVshv| zzUuA`v)4vlM|j)zY+$3#own%}{dpQ9{Fqw@WLt2W7uX=S*k$b{^3(KwO~}*jtw9X= zh3JgHjib=?-fd*e1e|e9>&<{)&7-^SF0>lD1TQgTW6gi9#{ zYjes`w*W$idSqQ0JF_X|7K@SHJe@6($d!K&z70l?tkj7|PuoHik2xc|}|a z(BwE!It~W{S@jteHn&7K{-3Z#;*Ay1=X! z;o|PVoJZG)cNr`PZmTG_=IwYh+d>*d3g{XIHX@TK{T3l$ ziLG__qCx{3FJe=;74Sq5?-+t_ueqPLp`V;CmM!Oktj!&Q)WF@RAD%)#ZnPz4O&Z0P}kMGq#k(Y z28kvBud5HDtN2;uMJun9Cm$?pW9}}^gM&VP2O@6aDa;yN|2+%@>^&mkt9Q?EOhm&+ zT_|>ix6Y3+!@mE7G9GJ{3a+yXM?`FVwK~XzVHCs(4&~sx9cgCQ zEsCUnWY8Gl(@`vpeNQw_E&Rap?&5yq_o5lS4zF>`tYJ%B{s_0RdqaU}C$S$H6yt8` zYMx(~e4P`t7F6;IXFYa5C4W$c@Xjt;>jAw;@HW^ZPt%a^#f8sJnGfgSIC?}*_?f0@ z2XWcTyhn5j=7pdfG5``*y;xiUQQ7Qo8NHi632 zU9sK?Ug5)C;S;o=E7Hnrawt`2S?Iu!UNh>5F=APFJ)kvBHF%+g#^DcWTd!9^%r-_@Af?Ss?> z1^4q$tsW*aoUzVV(T@DT(dzwGwExoTC8}5}Dt<*SvxKQTHpB7#0!A(e0dEe&56v@B z4mT)mQ_GX9t5_#Ww_~=|L7;l*_de$>+2q`ppG*BHkSV@9YybWwg(r=# zZJx|>d|;ov7~bgoc)xf3=Jgc3%QGk#O(hzg-zC52)~9bj=9s`Xf(427lbz>KZO^Ue zItUgE9@mrYT#zu2=V|&>kdcOrv7|e|5#vFhFZCAVS$k&6HwFYdn1SB-g(>`eaViie z3L#^jjHM(pcT5VRuC8s3`>9m`A}xCAF1qvn)@oViv69h zJeV^|PLHm#s3<1(kldpb+h<@GZnHOlNgGs8wmxn9FWQaqU|1jbnis9CyCF(r9X5)P zYPYkfpIn+#61{#Gdef-6GSJ}8LzZ*!CHp@<5Ghn@A%y*koKVYCODM%3MTkJUXg4|- zpD_lRw8JMZr5qS*bAp+--k+S(xa?w5K}jLoGuD#}VxMfJN{urQ!dlL(PvhxuTp6>r zClXJ9#m#PWF+KC}?G_y}=k(=|Kpjz0h)xODGHfG?gEemuc;LgPN7H&V9J!N^P`q9i zwy^&Jm2oPaE&EtBfr#hWKVzVm!;6Aga|r-Wh?^*!^Z}igiCadQ8K_hN7%Qa-CW}f% z9_KhWg)Tn%IxbNmR4QYtxUhoa4ZI?8>Q06l=3&}BA|xDpGg{JIC6=eoz@ak4Rw0h{ z&OG=tH`l@k?e0W{WL{^PYQ^A?orYS`Xq+@UK?9g-Z_fqb5RcL6tfTSn_ib7xw!~O+ z0#KbH)Zm645SmO!cR)uqw>!M)WZSb4_LT!Yu>=EhXrU2RYLVTg|4>3?R@tEweM@sL_ z9%)=XiaW*)4AvfA-yca+wr}7UIs!{ifET7_3_4xdI--LJ9ANhBp%F0;#AmEMV-PT7Zr%YrryF?rp&X-FQJvp32e+NuYPA##3ap$ORcgFsOF~3)4M-!0E`&u~ zkkCt!(5oY?Hu!4C@!EpBZa_2|j?n@$Jk%ZID=a|bQ}S8;Beh?r(^l4%T0ImP=y>Ui z9wQ-kX&_vum(Ungro}f6%a6*aX9{B2HM+sWW=5kS*p22&?jT#VQ=Usn*cR9PUFkKz zKcWR5r`<@6q{gBZ&xB7Qn15|; zjd93Og;>h^SIr;!yCPa!%qKJWHa6HG>^1N!2ookHH!2?&FqH}YR@gVH!1AYRPgC}6 z9agmV<2B+UCGVNEC#wtIt!F67k+t&1{ruCOw}TUkXzNRz7Z34w*vUVr^ZqECf2#BT z`0=mRVPe9o%$JMfK&QE6vNj4CDlHx=Ic42wq1AVI{unY01RDArcv|||bFn0=M(I{d zg2_Exe{iC>r*Aw7*JCvVh)hmPpz$&A$ofd&d9C5Mkw z`h26w$!En*-6HXWRr2@T_{UQ+8Xz(vz=J{ZcR-kfld8V@pXa)i6bgnu#%1K-2`Lxn zWS<@OgkRt| zT!5WOo*cI;t|6`?P_I5w^`AW8$^5KHAZn47v|>9MEOy(@IkI+X>4*;V`FF&d$&MCO zv1NaO7W$XiT>DEV9gt0VEF*%jKWcfWJ1lc`o+U{5(FW|B{V;4+y5=4I-aWE1Fq>RH z3KAfZbUhW%zxpLf*5q>Bd#Hv@O5oz|jLEvwUl_^(@mY-z9#KuPpj#Q=Y z9u~Kyn-*{XxAHiP;Cizc_HFMc_Bz{3ie1;*fhBU47@!x z^)}0N!|`Bj@bHw=7eoR90-=Ez$+!=1G*nQ&D@KJ(s(gq~Id)K@>K6kN<@^O8E0y43 zr7`$LdS!k#M6qck4Ej#u3AVPi{iu`FXDI%BI82zKD;`>n_AETAVJmGLX1;B#LRLMa z^^Y@9^-L}1nu>A5m4_jpNWD^5cZXGLODG2NAKTI(`zzQ#w4BCrOca2)1WDHF-%Z+W zLI=8k(;?-tqd5exr}jMdz-JBL-(G^0hz)LaoW^cXWbmLUvKQ8eye zQI#J9dK6@?{QY78nNMVXXf&j7AxV6!!9-dKcFF=0JXA?e#FR>DT!5N+l=7ZOG1%~RMPP7a&lQaSTeS2c#=3>y0B$DV)d>RT&Y8}au*Q)f0OVMG``rYtjRnZ9>BP4v6KjhH!`K&gBD%!8BUSg6v}T0G%t zlyX|FwW8fJPc>(-v70M8$H6&tx1D{i*0l}^VErD7YkX2>UHRPLaJaP^(@dB)3sr1+ zQbdn>d;}v|HxNf;_bl@!W$!+Ul%Sv zJW7(N4}4ggwzHG{W( z$zxM9hGZ-j8Ci?m?8AA8%OXvkX^L!7PI+Npdzf{=(eFPcaoF;V&J+?>h6_lp8lYT1 zs(!(r6bmHu26=F6YK+O4kkqQv^S3wlj+d!X>xc48+1K&&qpkzX=s}cG96X=Bk#_0UzKx}>}3&u*PxM=;DUw}yoRpkZshP-2| zSk%#*>C20B)w+>W9J4Z*TGb}_L~SE7;wm)cBYT9cU(D_Q3Ak)ek9{=>Vs3+L28sDx z{Tr9_i3l$XHZ-%8+jD9TN{CvoqobdN*IB!CnmgkS`d$8x^d3hNWW-*9=N?6S{4C_g z-g> zlwbW}CcIGb(`(%afRlTPZRY8(Y#)+9_mZ3EsGonv?ugQR@6CMmX$F5g-u^?h_+NFB zNXFLaFWy^}vb8MM7cO}*aW+wtNz=+#A^E*N`kbM5H4&hJuNyURr9}>U04Tq@m(I`J zRCg_T;05z4K0ED*6pW%*6n_S}ICQBso6&quoLCA=f1P-}!9gZ=yt$E7gRYNc^bOgr6v|S-6MwaQV0t7u&QH}vy5Sz$STZ{kz=`vJ}d+fM5 z3vIF4pg0RVOYsuaF&$meE>w|IhOsRGFv~6n&30R~I*TJ)@vd`%Q``6WabaxRypml8 zD!)Ma>$3AAKHDv{-FU-`pfK`u-uV^kMtnHd6CS}C2X0@vn|xIukemE{%m?b$z18`s znfiLn%Goq{Ho@&8!&jH#(r2FjHjVl{Ws38p_Jh{KnnkOMCa3}`T#46M-&Ech3-4K* zB^db>_KfUqQ&|7x)x`QwVU%0=>)tb()_LEV{`~Fyxs1>i38bPM(PiA~WRLi!J>~X= z3||giO;>Xj%u%|?s80^-Fg z*2_AH(SkkizpP*Pi~vFgk>?14`9s-wqD#^%+i7y#$Acu=oi%fK4WI;{4$wY4N(+*#ot#)Aw-nUGYl>7oQNnkwkZ>r^Zuc+56a;s+?c(vCE&_0W$v z19}ZmsgqeprQtPqFzfj`7kh)^@`cBmB!JjFq=9&(O`ybUa9GD-3Lpd0UwoF`aSF32 z4vi9Pm=$nOvH-tPz<48@JI7C>NY}B z0VpN&p(m}PoKlYrmxxR!p*a3F#x-uhzk{dX4F|kH>tDeoyy0-IapNeVwCg9`h zvlt*Brv=}+9^k6ywF|r%D_-Y*Y2R&}VoWDliDK>G&QQ})^Xj?*{n7C1-utKzeeupF zzE(=3` zK1@9C{@(Nkr326vQ5O*&2#%CSPl}{QUuCdDXGV{PVhuo98_Pj%WH1xV+Li&a?UKXe zSDgyP4}L_uVDKEWlf|!w4;sSgg${m19-@lv{?_XptRK7zfds{{hvpOvtF$&q)Qi+x z7cTEPaK$dj-;XeW&SRn`ca5xqrlRZ_AxhEF8yS9CUDVSjO0huyTj1(fI6bnnXXy@o zhn`zWPj6nJqsBUnr!-fR-G|%DhM}Ux@ZPXFA>wE_kK# z-03W$Wl;nWhhqYs6o1qMy91}4JVg|8MdnA3G=#>^#2iYKn@@)}kMQbbCYja^#M#}n z&|(q=I&8Mwry;W){nji!GVcX8%3AQT_{7wkGh*VWf-(veKbKlk669EzO)cC?)CX z-!YV(v*IeC3@@g#l{HxS&5}bnW={M)v9 zpZ+ab{xVAk)lVly9mtLmG6jl_G2RJo&E)(kzTsr=io868m`wdxGr(O^{)6ok>t^Nq z3(WNae41>FnG+Aub+y==LkeMz^5!6C^*Y==&zF@yZ`bPZ8t8FT;GC$)n)}LkN81z7 zqnT_${LNaVIM>H%AE15o6?6L91y5hfI*(_tRMVp;R`GNFi<$zVdUWl0QKHs5Yj8ormCG4N2+W+B%7UQPlrTn5H$fwX!lc{3ENE z*8Ja;bK3uNwfRpvh=Z}?7bX3_;(z2P{}{nPNL<%f>gK#tLck30E6k=9)q#lJG|u#Z za0Z>jW0%#{UHxCmPl%9&4nIoFT<(kXpxPb}+Am)>(%pGGadp38EY(&S>#z1i2WdkZ zV}dMLrKpYL!*bHI`%Be7@Y(6y2j8W(_>Yi2R`MEod$MPjju(T`lx-{(`?q+L1Lh-Be>gcTO{z zeF~f|M?-e>KTD@MhMi+ckJGlkPcq$mPc3lg^1JW&rXlr`d-W&sm%herF7Y*abN}t+ z{STR||31J!(Z7HH`3nJzsg~)bgA4wYl*|ZB0LX+xECF=FtD{7QOd#)))02$?m6Y+< zFx{%A2$sOR{>Fv0V-?M(FRN1fyFw8Xx~$LMf%_v?@93RPl%791|)G$oDdF0OE?m<9h!u>BDm8Bk12 zPYxg#l+3jNYTbzN!y2~`U7(d{)|(vfCGyG~yZX|p>^-!m-fMXDV`x=6H7=XlgsAl3 zB=i6WzWLLS@h%=@>K5jYTKFk0BAN4bls~iBxvO@yBe_&2MYHUVzSku28?w%`ohs)~E?0QVDLFEDQip)7$8ewSbq0v2_;yPP6AV^Ma{;|0t4F|cE1l2~vIQuK~2 z+{)k1`*Ce{A|aK9AV9@!^8BZ^ZEP6U;o|Eq#r*AE`X2zIU(ofx3UQ{2rsApy(uYwO z0Dezlu6aD14FQ^yY{#Rh zvxkaG=%5PUaX_bb=KDnBVMhCNw$JAqBp<@O3>W-$BAB+2P9T0Bo_`ow_!6o;UeB2T zW&(|qzJLHwJ_3hbdT&7>nFvv6O43xACRQ-JlzpgU%C=pIpa6ki3J|y<)`i5;KvSf; zCy^qYB?Hd3Aj~Kh&vq5fuA-I0QrtB<1A_yWi=FHMj*5{dp!7haT8zHECipGGh+2Yt z_aH!?#BiOZ^7r=p=(v#*cWu*J0FH$4e$h&|iahEgbe41)FtZ5h3dkmm^bwqsL64r9 z^Y=cLj~MieJYP(sN{p65(#RU)*m0`WFlH0mqeMs%$H>=ckf_SmvFTfs(KOLWHbL9H zCgYHS`kZSo6UITNC#kk|`#Zw}rREbDN@c3`{gGY%ER#|tM|S#H=5nrq)#TcfQia4U z2(*ZLl;gxMl^{;U`w8HJ9EypMT~OhBysrCm5}!LCWd9y?E2PopX!A?jn;Pjp&(Ha^ zbNBKHzgBCK(8q(NVx4JM3*-o5+Pxy$Ll9#objaRab{?31C}k^!hz&;T*>>6-uVyVh zr>xqdaTd!$E=QN99A6yWn@U#7&q~=&^@db|SlK|ZklVhfiV)cv%J6UGs+H^@n#|3f zd#NM%;;5jRAb&#(56lGR@t@_HPt$KuwF10MzDmRq zGp=Z5P0aG-$I8s|o&bonam;DW<{>#S@9Om%5Sz48Zeoscs_!}WkwxnWwCFwUnM)g% zf=E`ElxcWJQ^D-20%-CkU)q#J`})18MpweFGw9AyQn1>@jsxfI_sVlgQV(yjsw?nO5!Ngs z_Pbybt9Y<2YUP5_>9W7rREB=;tSZX;L+TX#g{)0qTsGk18ko>fcJ19DS7#8#|L;|bZ<2QFtP6hz> zWAWYBzy7}Jv`S;;BABk!^;rJ&EjtGZyTiQW>N~nPItRoA8$(_+2Z#67&#P9(=CU}8md}B$)FI|hUy_72=;ZmpMe)>f&SNHK9c0y zl_7aAMew|LLT;))V6O?Ukq%{kls;iEA(SQ>#~YGEMK(Y^9hIqDXzuz?3LTXoW++W# zt6oKh2E*(~(b$Aseb|7W9ELlFyHPaXZaoI9xYz+1bU`Rt!_G*;qj-Cyb%rc`HxzA# ztX>^-TDpB;SU1c^)5!JoBvC3__Tb#PPy>k&89md@hly#)PY8ld3?8eMb5H`-m?>G4!uC zMyhzsfq27Xp-1g6QWE46qt8)dITPeAnzZzU6Xg_3ibpfK`=tb- zXFP4-e;DahH5pB&g`&(lxe#+SSTD_Qpd@TvGR*?oJLj8NcQO|C!Ny^VMqBDK3POsj z#);1##mWf)zJ~@voMLFLVO{D}*98^4>=eZ+Fa^NS{PrNLIASWP0rj+5Iw3c02&-}F z-MLT%=YB5}xCmldN)js~>nZ>^j1FwM292z=Wn~UHvkuuUb4HUJdP6*7nT<-hPa@Bp zaVirq<=EIPDhHnzi*nrKDVd?606&FhRNk~KippB>m@!WYuI=Y=%=s-YPI2vBFOJC} zfR39ZkmB{wE%Y)vfSjgaJ;^Z+RH)KG$~h~pUHCT9CTf06)aH6kJVu@ue`HVPk6g>) znP+WJIW4ZUhAsk(GZ!5v3VRriv7BF^MB!b?2*L7LGJdUd(jJE|EL(0? z)YvSAOKdZDrI{$g{B{CVru9Zr?9N{HTnGscYQ_>!iJ&bhpsRP|jv>Y-c2pnPE5xlG z!$F+w5m|zpGn;Eu@MO~hB5*N(zD?y%NLI=%8W5~8`7wWwV8J<=^m z32apJGDPY{$i`F5xvhQS=w2-ge@Tbq>b4mZg3y8k9b||NPwBFb)~0P(a)QzCk3k+$ zMD}i4ZHMGX*_X0<5(dJR&F{vbhSCnQJps3G=_VqF-VPz#

    kCk9-S@|oSTC2d%H;2^mi87D8K%VD@O{tz!xLjTpGQzF7e`Q(V$xxa$OLZZ-#OXv> zLRjbWZFNM-4WZ!50POL_H{UyPFn))2z4*@Cf!fE214LbSq6!8^c)ZSrjl3M-igLfY z?}-iF@W^(BeU%esk{b+T!^T#EV5AgeBq7XDhORX{tu4s|MwbG^iTYa57D|eI6Vcss zgS{c|F@TtpO3ViREX%%N@UQ|9P+p1>L!`8Lrii&~Fv2HTJD6txZq9omLUBl@EzwUn z9QEPaH(in62<@Xs9B$dftv>4c2WFcS#^&^`3v_M2p8BTt7kBxp%kJM& z?@6qurgQF5r3}f_Pb~CFy*;)jlSj^)ZUWC6?FQurqPGF=ugY#JOP%2SWT0)u6$u8ak6D5+YXrz%$l7rVm zGL3Q5?fk1f3t=eKD{qrR&6d7-6tJ$-sHIOK?+fU}&~|EIX~>Q`K{HsqD0kp8nYfLe z`Mz^4uzDl`L)oQt_{w?FJuI}tq_wA7s)-cVVzqzEYFoB6&#GSw0r}Ncs%|{##-UN@ zjVJPLpZ}Byl|{QZrz1M!;UBol{-ER#cPY!5HeT+npDpztR;(sS8 z+5Z$fad<8=Z^}jEoAk%9>Sm9b0y=pF4NB&&oA=)iQ!rcBgw9XY(Cu-qSt~ ztbnnvXaWHSuZ6joE029^AFlty490((tZn13EJ` z&QHA%9-NgB2a9)r8EO9Y2p=Zad)cO zj9mcB5@~>$5!T1gc`G*A(lt+s(ghlW(stE~dE5h4E258*`K*^F>3b*5(oai@70F@c z=bu>dyz!e@DTQz&Mu6fez*DBwtWivnrh%7Lu7=7@LMnB3N%3821P=G&s!74gbTSnWgAbL49PTsv_Uplx@Gitf) zH-xsxckJlu`9|x3(fLM99bAJ$WHmMD!COr|`XZZ}@}}^pv_LG|TJ5!ZHHX+oApm>T z;7QR}9-@2bN-P_eyd;p-sI_|t7QEOW#X7@c9Bwv5t>Q3T&Jd?UNtZONWjvh++5jCN zH52M0jh1lV+b=VIYVf2i0V&HkI(A+qzea4Y_8XUQ6rgUK!O+U3GS`q*L=(cn?Yx() zU3AfGpP(Ok_$kY=%z9}2eh&n3p^Ig)6GZ=66S|zt^PId0A&()UNJhbyN*X%uoDRf4 z_*Pj3AX?Wd#Z}lAg?iLn`n5zS&slP9iKr^pLa4^z{jFM}NG;}(l7T3aVIjCDkceB) zR4w%hF|$V*d-xr!fKiFLA>hv<5GN@rHjbyIxlRl>t{Ml$NV)De?kTjh^_(K#e8uxJ zcLS)y|HgLW0^tQro3qJaIo~HW$w7~@M`$Y~7T@5B#@3hKyMV|p_GR$mE`OpxE9uk^ zQwztzdJk}g%p}29-RuDa=dN!-(N4dXk+#m4XdPz zr0Hf8+DvVD1>NDjpfN7}GfS=@JE+e9;1Dd21%AbT2a@>sCeHK|%!iVtAx!F3F!lYZqgt|!S+_r!{5g@z!RYGWlx$(Z!F@!-OU zdPJ$?D62+PyNR(a?JTNw@2~7Iqg!Dvi#ANjnBHjr_#w!VV5f_5clz}>Ia|%irnld2 zEHzH}9>dH2Lxfy*2aIn+gFns5T&#rxRM8XcYJXXFgTa4W+Bw+9Fua zRrHS4NpNJS*)Mtwaky9_8umVLzDfIw>~n5^ys)BT+g7eFHf>X;Td&g-L$MVkC`iN0 zbPA7JA%qrPl%U2H8m9De6V3V5b{Ql%GXwJZ(W|o5FLm&u$$gc}ZIXtu%%4vYZ_NeZ z3ot3aE@3+$QZat5tIs^~4v3A4IO(T`*Gx?$_del$Va}?qA0vLC*nY~<^y^n`Yndp- zi&P4hq^{=}U$0{o>_O3eXSkgnG_7H*2rFhNT;=g^H*;Wa)k>fkqOiJ$#NW@fi5wa7 z4m(cnl=D6>^>ia0%y}65OciIf%a;wmpw>@n_&(hFR3b@5X8mBPYGY30#oF+PUB&#m zdHlo7mI*Ui>(>V9Zq(4EDTl>aO43^PQ@wswi+1XHbL4gxAdF9E8x8J+pHW@A*^)tm z$w*g*9_vXR7uMLi6xA!uxgoaPDi`?dfm# zr6Fit{XGXH=jB@|Jgv-WP-Utpeas}XvCuM5R3QDdCpr8nxu^e{LRMy*oc@ZZ_5eJf z*<9PCf_?IN;wEI%!Ec#V_8?ZtN=y9|AX3QcbWAr0D;Ot8ndSTKAms8lZIkm@y!fW% z;Lp{AHoPZyR@~)bh#)nRfJDgBdc@N_23Sy*K_IulD~$~7?(leax};?%F4SPMl!p*` zQH#vc;b&Da!a;)TmXyTSKhNV6O&|CPB9|#;t>cCnM%==VbCpUqk0V@(7BMI5MT6SG z_*dy+DGZFipUd=9ju?swr!Z>iECM?57A zhB%LbDfYR|Dj-J(+1i#Zxmc@{+mBZ)BG0(NPfNA$LW+}Ses1wCo~j(l+8rd%rx>`9 zc{lZtO}Zs2u>6o(z)qr1wkumkWle1!E@s*1OoHkrAJs|$XtAkuGZ|kLVaW;XbFNsj zEVCuYU(f_V&gr{#CZe9U2pdgWi$odQv+sdz|I!x(a~eoqCjT)aEChHolX%CLEFg&E z6gBzK)Ky+cJTR5B%wcRKfEu5?l%_W=F|L(sP$b>O1`X1GSEySR@&5Z2G`T#Z@HRB^ z%h1(-ZM{VjMTG^T3CwhmQZVl}Mb7^dEQQ3ggyX6mjJV7L9j5vST-hDHX>a% zq4ttu0nL(AkDA0=Y~;bX?l?WaYt9Bi#=pL$8zlCc^ZC7UJfNA>7G5MYIt7i zgK~7Pr<~S0cdDLwI_Bz$(a&P;Iu-YgOVzP3Ssd4RmDZ!0p7)G3&*K92fH8YOsUIpvPRG&s-?g?ug3j@bs4jvw&D$OxdhD z!}xdVg^7Yfwg~6y6z*tUlWm{P>Y-&u%Zma!n3gi=OH8RcJx2YiwytI4TAO#S>&YM> zmBxm#92WTlM~Q=VdTuUUYc-y(0b-?y z@RL2en@F;kICqhlfWqcG@R}iJT{_1kIOY-t{6c z&Bk-(bKUT*`3N!|^(ka@8(bqdSE9`HL1=WqG-04_=(<_5jl3poU3VA0*F}!lMc?D+ zLH8z(6_)|(vBh&JgNmMwvR;orCu0@6r8u*k7!_8wPL}GrEG@B$9m`MgY}JesWd@d? zM=WWaan^FQOJkHv)Ma>AZY4BlT%)K07<#J-5I8X!w>(=14LE`WMnuFQ8CGR1ngh05 z)xh@PjHL03;4;k@Tx!4#-@J5Xu^W~@1aaq%8Qo9Kf22NXILUz^`Lgk7h z-rzcS*2P}43)Oa!!>zoB(^F@TSpc-m@7kq3pIqOo-A)gti0u#pbHQOTPZ*5`!slJ1 z<-aI8k9_Noq$c`(LPW%ee~Cs+Y!^scAG}&0#af>r-{MCGyY3`h@BR2hwLJ4xe#O|{ z!l#ayfaRA6^MSy8BgZ{!f}K=6?PwDKHwaThP0hJ0>UY|N`^&e#yoorO?cw)*-!>+J zSVV2R8lNBgRfJH&NpRibT}crGwKVFO-z~&*6gvqkm99XA#vu{QMNW8Zhl02&Hwm%apIB zjf4p?dfa_6c0Wm9n_gaq_#)EU1th z&aow9nd2)aSYFHt;|+-_gXEu7J~&EWOILc%rw6iZGsQHmVezcE0Y$R)YcV~l>FueJ z7m?h41u0Wznr_WnNP_|Jo=_7@9{F7vO{pe?D0*vI#_)+=aaPb;t}K7*DRu{4tTyW= z^_}h%hbMeD?_G(SUQLMM8#bGqZ<7zf;|QZqXAkc#b(-ArV~ ztf!`BYS!d42GhE+&%3;cH1gF>7wuDls#P19ozBlD^4&6N96K(rj#-H39>m>!Re1PV z6XCjb)-k3U8QIGAJ@v0Ac=k|0%ojK(sJtd*gO-L4lP5`+-SMjd3zhtrRia~0|8goV zPDiq@9R%(j;1=_0nv+2uNP3^+!a}jNAdoBJb!Q5G}I@%6?Xiro@c~WpN}gQ=7PQR+@`A3^Q`TkAg4;1Lf_yT0(o>y*^jSu+y>70{WpG- zx|Rowrvf#y>`G_{jtA74g@)Nu<$YvYLzI8NPesQha5Iue6Pi9~9;WNK&?n>@c`|Zd zRxru)T3;~&w|C5q)w`R~oUACEZ5FHpk{3XFON^(Gz=y4&7SD1va`oTXji&F|;~X)p zqp3O!<4IVD6jrHp^y45|?q2M}Y_@S&tV1bTtx1+~>Lp<(rXK{=tAkRObix~>ab_zg z8$)r2%QX;f+V^_80mzP!m#s$%E>nV&R#%bi0U6!f;Z<=?*iX3o3!Z~Gf~1aSa-mbt zhioT8`IpB6*CYoEVDco;yM+-fAw;`ddrI`>7K$=6d$!(4Jl&x+53Iruc%%<-MSQJu zBo{vl?r6F~^SYM%fjVB7_!hxx&i$T=nn_(j zb8ZScZIC)5Dk!NIOiul!XNa*ZkjC3jk@aBxwje!vU;T$a8*uxE6w7??98_M>H>$+F z_U!1AFWF-r=e2$V+dJahhv`7Q^rTuf*F`_ZUuEfe-SL1-sVmuzRX9?)8D>8{eC&qn z0MG+|8#}=GbW&e%oN}1Yjtay^&6CHj`>_0K%u=G=tU_ZKP+Dyc-pcZ%(UZbn!2EIS!qfiC@ZhOWWFkoyDnD)p<{+Nm>M6Knl#B> z1j|=T_nT*}{^nmjuzBT@3Ti??4ZN5&cXj2tBqYhF%x-EEP`sbM5P277I z0{zREKcC5X|Fdy}^Z)%W8#(L0PU+*6<^J)^`Q?;2op;z}m-(jMC@DMUwuWyhqN1sO zOH@uwhC^wS>tfX*;9a$W_lFZKMk@)1fF?)zw9Pf8$9&V}@_d@Q$jRb7|9yMEPxXa& zHD7GKj~${FY~;HI5@vNawUJg%xRkwK4kkK4bFqvgfi<1Jdbc^uEw{lD(t@Fx?N=WS zyhh8~qB%S^E}na*&nVyuitk~wC)(`fnl<(E2|ZlxHKB7PM1)1P^YR#h^D@BYgR01; z7Nh-Va?pBO)Ohid4r}Tehlm-|-PbX1PYon++(%I~$gIdVH>5#jjqp7s9=ynxKxA;z z<+3W4%y;Uzh`pZ0XLvtQ1k>|x;7&&SF{)VTR`>T<(Ta*T&$PR5g%wPT`WUpg*+o#? z(A<@BGyU~19xCC>lGImDAU(94QEKvEu(I-B2IHuo^aPFuu?N!D@I44hddP)!V^8Jd zHh&q_mpk9phRM!v_TFEBA$NZtdhjH75Df+py-u@Z0b=7F(su?cO9H6WNT(hVYbX4l<5_>cE6C!96LL& zraAtoyrEK}+1dEsK))2ndRViJN8B1+<#D^rbRWxK`To6q#1F);I8vN0G%hslZ>hI7 zvcn+DWHDbB$5Y{89bI?jvzcs;qo<6`a;*;x4xyOj1%}@vr8`ac!yOS|#O-RjIugbp zEP&>pdQM=jV0%F}Jj(tyc_e!D{1%xsA5PEBJxuuC-4D@)%6!w@`Q~J6n`x*Noi4&J zf4_+jOzm$NZ7nzsj&G^;%s=C><_M`MXC!c_ZmRSHaG~`j#BIVSm>X(*f0J9Sm^G7~ z5kX?fUk}tmN-ZWLr$ymcSnJ-w^`tw% zww%-hRu2=fOfvb~1wT2(0sCAgy0iHM)XrS)L(G~aYmWfj-g2f z2l~O_UPOBCHIR9U3)RS(jqZd5mc#P0(0&&UeEqruPTsv5 zyr6HKbyI{${8&Vo0xsHpvkUyP4?gMLAV(k=2mt5X2_t@nyK!Q&ACO|=fpnu1pzKTi z@(hoHZ8#mnD0Ddh3pV^U(yIa98_>FE3urab4pe|)UWi4?Mf)}vOE`bFo!AE*0A8W@(Q_&IiGfd+%y?6)LSG&JSQ`Hf+K>3E?2-6q3KDCguox2}W1A0_{u9&7sFjb@29nSFj)q z=LfavU-H;q5??QLY@Ck8&_Z(rofhY{YNKD3cGkEuG3y;kus;!Mzt2z)wtk;k<+js@ zFK?D*DIX~2;ACHCj@nuOj@SYdEB{$s1qClu!GgVPEve(tRt!qn-k^8=2TwLDAd!!X`r@6EA=ic;Y& z>;`B)atu7RT(=bgawjvuCE%dJf>cOMweC__|fX00M+qTyxfHGxl*i%>n}i3zhbg{08da zYNOLdoS5CQyXD*8o|18Qh@V3as?m#!7S0?Rb|RO{&aHDbcxAu%t4iswY%Lxkm-6?m zm)Xpf`3Q|~LL0NK0HYFnH2lTu9xQA`H1->0;=$+>w}lNSEa8NteJ4d`_YdT4v5S11 zBBbQu%PjnZWbF?KoF;fQ=BwIi6-I-SPI97WRVx8CYF@Z2jiI-_GN|23WER8ij$wrq z);72INFd`8N-_*_+dBd0?Q#kk$Ji6c z;tV;5SzkqR)J@fzD6|6@qPHOJxtTc~ zlWAw8JB`>frv0)_rmiI~FKR=h$0fx(-K1s4PZ8bFfzcU5BOw=t!8c8GZvfFV>~^S6`n^eZcS1d|;?}{*p@1d(z2n6aOnK z+wFcNXuSS*@Ow?;?oq0&gMZz*;`k<2sSF>8Fl{Bz$-1rTNGlqj5;*~P43^4s?>ykz zL#DYjWp^B6*zqLXIn08h>vyRau`nh)X5lnmp>QqG%u1@Voi3-C8DB1+;|Mg>1k}4M zTc2k_`K9r8rJ+ZDX0uL>*=06JCu{tP({z$xRKYliLM%e_;xN%9fVRp%D{7b%QNflI zZni;bifEc=+pETovB-9}OzRth5xco}#S4pZ@5|qTg9;I_!fpFnXR^KsCp-bnYRzlz z=1&Ns8ydRd>PKRQlI@H0_jF1%Z%$EkVw#E+6z!;JO;ImgKD6o3#jvGxAD_~RAtsk>kPWmBWU2lw^uicf&+1Xbp*VexiT zcyVlz^b3D2do0^5+p++)9*C$nb)@j85O)H^Od;s{iG~j764m}@-z(d=Yj*LNa+dQx z@Ag97vjxtRAV6H>=f9@Hb=VMqIHJpS=|G>Y{m9u9@l)IgZU*k%$6zG1DSZ(do_-2R z<|@F&2v*`F;F%_X_AueDlPTd!<^=hvc1J|T#O8&0&~qD4V8D{?s%Q!Yy%3h4KVw!j z(kQ(2G2ltxot%-^kKEd;sseAz6t@dx+ciZ5Dp*T-f$xm$Z9Kl^d;Kn@BpGR(v42nVCM+k!a92`mr)gH+;nRvk{7 z-Qf1e!wJ=^N;EHO^ZJKTo_CEX_Q!&zzU@N!&nUfS@#rXoBc}*SGO}5n(H&qNg{Jj{ z-pU+@n&~CFZ!P!?9C+Ph&0eixpRlPkIx)N-`^a=87n{8&i=Wh>#nZA3~IM`Guo zBPQCMe5U&?gv!I!7c11Qmd8I`RX{sF$yR&4{-klW4bqbfBuU#ZH5c;9{+0R7<RVj2BKxv+gJdi zxIF>4yy8qBY9bd5JW^jF3i?7b8bdFp)`3~I*Z#Bq#Y)>T_LtR=OV;W%qmX`WyW@{#|qB$3T{rEofCK;-NSj54^8&`1Xmq(l# zD8((j2#D|pqL^}h&k&~HYZ)e0i)61(PYV`7Jf(^$MQeA9H2jHKCe{?meS@e$WQzh5 zt#jNwVo?e2h3=0ly^l3H;q3{{s6qhuRNXtXt%e5s*^N7j_Emymjf%}F1;G&MbzXiY zJlx5zexxD4zg-T8kwL`}VnUW{FX>2v4X{edDQVNm5oqnSc#SfJ9)l~ONv0U`{hIV+e_Z-XSnqB zb?$v$b%MY5%=?$4$T0P{zG!0YTQWL-TaZFEa4Nb$`!*S~w_(qWPQPJqMqSAS(}kjo zVK3U!IlGq@wpON*n? z?~1uPwqpx5#G8#QzE97Kk!v!-r8~Hz&Pyq5;)ohj$NG{_C{O8b3>_kKkr|8=B7^H2 z)Bor$E0)_2Lg*RzT<|qmUOEUDwE7TyllmbM+*yFh{fO?W`+QJ@?u$FlP#V}q2tECV z3aG=zydm(ozA61}xVjTNlu(@5{bBdGzFGZd2(_m5IsI-3JvyPZzH$AGP}>=|v{z=1 ziT#5JL`II0{R;^B8MiuJH2Z{n)cbm$FiZZo+&+l038&vT45WGZbVyJbd8#FOqVl*O#5Ut?p>pCz3xOT>z?xE)|Lbg@Tjei2Dx7_xA>f&uARD(zHOqEmaQ z)%-f!zIqOQPcol58?Leb<}V!Z@C%3)&4%8=8X`X=Vx*v_yYzNjAr2ic09_@_g2ft< zs8qAI?{E*Tt*T(@(@BN0q^e-UmI+gp{{s)+vXBF9N2>@VBImEy<>VSy z_@lpBe3K|TtSG7D8%sO1;rwE21=cft!c}Bw@yE_DpkRI^>U&hk!b+7>z%22zh41)H z-CROcz(?R)gQaKZnO4dN)N8hMY?CwY`asl?BDweqhK7mL4DGwfirDti(_05CeK^ll zldhc#nGidgB`2E;ISntziDL?*>AfKl@`+Vg6{CYYCR%=pM!Pp*?JBO~`rd`*)}%|P zGvpx}qg?2K(B?<9@56yi4V{L!0Jof62hKCf*nQ>HY)aLV*G)I`xpwmjQhc+#c_dU*umfb9?F3} z7YhJwcCpd~O%wh$jq)B$GWYx($!&4$h_qFDZ-XzLV=n)g$ra(STlH6se{dJ~?EWt? z-}s+61s6M_o48Z{W#HZXVLzcjg4#Sl*m9J~Zs|PKBA8U2< z=eo;9P_1+LdyAbdO*ECa{ibyQyBrmOa<)8L(hmTJ6gq2?nG!Wxbb+YKHfugD0Gl%f z;(Nktqh;ce{KPngTa`LJHcmS&h7vwnO|6-O~E{IEoA%rK_P% zckfi9fX^xkcBY5zyqfNda_I z)|h8M#zf^{M>;l!%B8A?%-$>ncJ#9Nu9i8@P2c%kKYY}%NJqpEb#}R|DEFkEX&~wI zFVH;HDNUpNJ#?g!_3a4WV%`vCm@%F9`X2c*R&-5*ZA@ZTs&3&bQ~;OgW^iN;$v!8N z81+mwEpr)kCnaiBg!Ynt1jRcvM`hPraamslSopX=bkpFEK1)J;Dha;wKP{RLEoS_O zEusr=m#1IpPa{faxts$gl#Cx4ZX?tPK)!&SJ~Km7h;0eQN(drJn-M0BGw0hlm6 ze>^toWNE*B?~9j;KeygpOd@Q&lwVT+!fdCjI5du}DQ@|hqRqx{&yQylcA4fMlB zLPj!xUW=u-OqC-07vAPHvI-BG`X7D(%>ZGAzOIZ;4WS{F7Hj$g&#<|MK z<+?rn;JSrcEXZbX=}O+)-)DX}m*+#U9)o@n)Avw9yiVZvijis5AYRYu9aq$Rg@d!s zo!Zl3EOd^i<4P(!#Gyx6A_W&r0T@`MKG!1w+1sV%KV1}3i*9>OkKt$GzsTjEyx{%x z?*~`gkugJa4f2NmkYn*&e6>#I5`cBUmanS)$slXYphP4pA~;S89?cyUPTyku1AJq)qRpO@k)U|r@QZjJpShMJK{xv#t+ zt831KsgcQHoMDAtJD_tQ$4jfig^dIYAeT*K78|gHRhc^%^vfC0%zQ=ZP5i-<<1JxrUQpSJ+>%C(><2V{{{^=m>;-x7G$O6qrQam zl)7Siaaz_TCUG`OsD)4KMnyz|Peg%FRP3>jvUUrs?fhDnx;5)oLo76hNyLi5u^l?x$miW8u3;7_qDK9 z>7F@H6Z-DLo9&|O?vOlv5oe#&yLo$CeR)U@W|NT&`NFcQcxjDuIq!xa&UW0Fwzecw z$NE6w-gz5_Ooys^n&nrAA$pLuQBKOxJg<@u{BV2RWwQNCdlMGkD<<}usKlA0gtbQe zU3T^Kt^S07?1NK?t}GL*l&mps)Q^wuBCZ0;k#}MA7I{6vug`)IMWmH7nj9$= zmSsRzi!-G076v7uXn2U`Wj1sX{UzH5cpx7d6@YwkytzuY=4i5Oc5FElGTxv24o+Sw zP1l20*Y<#^vYQas_FSb)?-A_9Tfhv@<7?Ptf!~rFoOdhs$$H$M)^D9t3}70qU(ejM z(dXv#7H(3#Sbra$O3jZge)~4gqNQrc(eeQ@##oM?TP4M?J~gRGOSq&-Qt_4^LhKI^ zVI$y4K!Wp%9A`+1>Xs=1eKiolmj4COl;iW2;>qGq3+%2iERj7a>vMF zhbv%6!c`?0Emq3lmGd8=Retu18s;-9bMfDr@74bojs^dl&?5g&#bqkzVCrUTrflYJ z^$$M(|H|jhQ(ph%GotXHH*4)>Hp@+vZuo$qX`DsFMag{mNh=H|U1&|W#rZV6Io?q9 z$b&{4_7&}G6tqBKf^e*ewxk+SH2us4!3;MbKaW_j*AKcrh&^5{zLVgY>&k_VD;qOa z$)n$KE-d7KW9^+{MTxpK(Y3;`PkwJ zlf;OgD`&(O3`?>5TNmnGNva5K0{Rw&1hK|;c|o{cXaW{VXQc+XO4t$C^X6(WP9=*) zI4zw!vhqPht`P zW^Vbt1}2~A;i!dI%gE_pubPolbFZEew7;M1(R53%gwc4l_ejh=>W9g{sQp*O=-jgV zL}s6ckyHz>^pR9cui%m0h1Xi<@0JnY>U&q_Z>;Fv%KKf5PoC)B+WTGePoU@@-NO%- zZ?Nbeg+n}xPon4_i9%8{Rv`(DdWrsyA`!=I(sUgmGxXy2N9 zI_7V@Xy5Yt-@7-D^v=J!V)B)RW6MA<4bjU$uLemWiTyPUA{DhL&_-Hhu}>$pSs0qm zSSt@FW3Jai;#(a`%y?}j?U_T?QEFf&QB%sQ7*hfn0H|maLD5p4uZqx8xmQxzDv7AB zXwyM)Ejy4^*(#3cRI!hxyipnUuK24k{8iz`j{;Y5U{>KKjsjPCfS|%%9KloJrin6J zcA%lcT^i9{;iij%Q?XVWfu?+4K&h)ZOs9O`K&h)RTv_2JgHl_00He}X9-&upK%??0 ziDFxMuv+0JhSIAr+*$EjO}V2q{890mP01@ie5+EghvF+gjHhy+Psyt|oU43aPsyt= zTw3wkNcnAe+4OBZFnq-cxN0`Ad=(DPzKeJu-EF+ zmUT^Z2j~w6{+ZKP3j7`I$Hes+cj?j=pd+=12K+6(#{{h1JQ%xn3C!Cx=uF)IbVbRv z#b1oIUhMM9kj&c11->P*M+@kR)E3)!2XwLvkne`;@OZ z{=M+8*Z_F^`uP3?z%j)1!F|eri{R3&gECi;T%SQYMxmMOu~&9bog1*fUoEj{n)!bE z3K6hZw2$e^4(lTmr=@`kqDx{A57>_P#<-PeF9YYsu(x4w`w9RsmT-^1Pewlk=yU7D z5A+!a(1v}_swKUz8@z1aDo3nOA}^{>7%T{!V+fWIKLQ@_#E)JfXnhcP1K|!EkQPvk z9e-d4|E?Jb(>(=)6k6EfH9k@D2eS-yXIt!TZv$(ybk+#-P`}uemC?j}`EiXfGYMEm@M! zBo^Tn&fgXs+ph1rYYf1(4h!NF9Y78I=<-u*M|h7Aa22sFzHb`XhG0&54;JtReoaW9 z&i@qR>OUbugXk)PB4u>i$IpXOL3{H8^HPEsDJNYNVyK z!!`umEs6~Pw9%19Oz%jW;^|;dApV^OmCBtn>Mjq+vGeTy(R8Hs-!2T#e-h|S9lcx{ zqT0?6*MI8jOr4~{wE)Q$_7q3+iQ(8kD_&aQE{O2#mPE2} zmqFnzR~N4|x~26kcHAj#a{>Y&(uim0POl=~T@nsiIwPE1Iw26uL<@K3)UFPL?vzDF z3$F~dUKk?5!LQ{-I+opN-z*Nh6TiNFGV5sbAGXDfxFGD7MMg>-rp^ItOYS-N1k?J6 zCpv)qgwxg(byR|DPvb2PvnanK_*+6~kJc^@KPh+kOR_y|I^7$2Y)|>-MdpHwpv5jo z+a6Lm*JuB}0-z4}%_uTRb$#^jr=|5l@*j1cmwot3{t-m;J)A{w6G8JWrTB=# z{1zzoeZado(EBXyc!m3^r|mg-IX}Sq4x)wK8$j57xbAq3;VX^|RK7TBy@0$^a}K_r zbP6t{j@Yxkh#06{MZtosF~0lfEOK0X84&`h#0atWb`5+(a>oQ1i?~)z1#2-adY+68 z=q^bA2b4O|pN7ftgc=PfKHZ%Xh=z#?@xlGFZXjoU4lMlkN$Avv{^J3q{}xs;XAGBUonvdv+K-GZj(-qT|C;bQ>77Dx4{EdodYEn(H| zLR%pzjt%>n^ooZmGU435%@s2Ipv0Z0uu(fBrdE@k@ zfIixvQ;K-H`3Sf&Epx-7b;k=JoKnv;ruaSX*Me=r9_@XtdMx`fH2?)l{#S4URJ8Ilhu?cRA)|R` zLtOGnQQ0%kM-(v7k4>@u^JrN8I7*d8)ayIKJqO&L=1j4j`~b$Cupgck`evaH-8pwI zZMC?5VKGjzbxCRR)^CNrIC zIP_MxsXT>c2Yl+I^i^eJ80s>PhZn<9V)v!DfgU}6IO&Tta*P{cv_TW1$B>G~@w_O=F@7(n89MG#6bP!5*B)#S|@quj%Y-@=jRk4AQ;uDYYct zWo?s|2ZdTN30_7kSbgautfx=j4%%J8w5Z)vT+*SZSZk5LvLLXMrew^0f> z_>PAYM!rxORs@YrdEQ7IGFvq5A+Ta}_~hb(6?r$A1VK~*ne_9}%{YAgNx5P0Th*g5 zd|-zlTeskV3iLzdXm-X7m|V#_Z)e$|ha8HUpjA6@N9N~&i1|xMfx0*6E^pE6t8xWL zG_P+qc3Z$SmAIMCOR1A>csJs7+QAYG^>vP_5BQLAx~NNRZXL#P>7b@aB~f!vYJiIY z2F`gwQM~BoA_F_Jq1DWUM=*P-{gXv`{DW?R7>k>g<|l9UMpK9SybMo;w^he`)8$_u zk15{TssLs$)cCM-VF@Dus-QdE~GB4P2;=^lstH>uKTm7>C~ zgPM4<<x4*K#2P(Plp#0SHCX-NoO~FH%SG%aTF%r1`M#J znO`~=fBX@0HVW;+LrJ%v6|kVIo&V2g*lM2rIEN&Nuv^B`} z#Z%Z>Ba^$_xz`^0w{vs5g9GTH82$*+jl4O`Ko|GzWgXT66 zl_j+!w}GBDb?NnVx}MRP+$kpn&f;iAk4w(`oQ;{w!fSJ#uL6~LFY!vgFFxCt_x!Z0xXX{*4R7c8ho-n z39geqq;s~onwLLBFg~%RfRgpxns_>178$pQ61xxZ-Rv~F8Jxe{Y%gz86EE-qBp|8v zuQzGR<_SF^V#Vsn>NwJDk8&NSbE9v!CLX)JUQeFvH=wMrL__vAYBEMc$B|Jmo!m8? zOgwfVKs$`9oN`LhtIhqF6;Ht0mEQiG!e#fOb36)M3#t3P_t1=^Vzs*aotXfst_fQ; z_0SPp4+$zVV@PE>hXtD;;j6h-s*ZIO)k0IM*x6)zP?M8H;nTsUj$;ebhD!eH#yhGK zR%87kuPXG2jvhauxyLT~6PB|BZI+*I%7b36Q9d~1B2YtJa;DpW{4o#zdfn$EZ|XIO zV(AbOC0skZu&{_3w!bjXN~Da}D#s(6gw=_*SNgcW<5rbck0NyRBQ1jJKt+E^UYC@b zW6E6`IE%OyVjYTv8G9~oEBR!w9~N2X^EX*sf-pwaV z`Ie$fYb4#yJ#}3ZW{}JS-r(8o(-^lmGuvl1G5}RkPf1~HTi#`|AsvU35~?)Kr=5#b zFx3Qz&>b0djUFCq_t`b{jOdpxETG)Y%{w9BI;7GH5tb*^tDtgjB}p|H5655jY#7&d_~{loZ09dg26@e?e)ZOP`x*4ppY)ZKSBu>9F=bL{+RO|4Yqb_q_1} zeJ*Z*n^>HCkjH8^%YUZchSR`hr}FF0+@aWNgS~F!4Kp~-a5hGPR@wqEzm<@_8qE$n z|JtUpw<|4V#wck&j4OkOjm@Ap0JOo);nZe#2S02S0QK{X4z1}24Y<4rYw;JP0EN}Q z#C4jw#3VG(Cd#ofjUyj0cKh4k^y?xoy^+=7u~SeqU2b_9cl3L8G&nd}YNnv-;TV@; z)Z>gl68^KApT!Rvc+9lJh;~T0(MKO7d>I!V3D_nOgo#CXWQW}_(e;cbQYKSWzx>{v z1Me(7TNYt9${cp>5ZcM?KcNyjSVhp<2tWg&g9nQ*f9VXOR@e&D*1@4R6wOc}fCsAG zlpGViM|)vmg}W+B1osGel>7QR>esn>O#}e9OjB4X{Om#J)^a#9=oV<`s7KZ zp1-V733FXW+j3X8gB2E(k>a5MgVA>G@yX1tjBL&}*onY39AR}kBEDp7$5UWmmC}87 z($ZOm>x$&%oL0M#op)H^hi{WrX@8iP0n#JSo*>U-aZp6T!cti(GhkEZJ^xPnZw>_F zp=@B{3WzZ<-W$}=5*VzJ6Ir{p3BtJ%7EOdFnh0#)s+VsAEW$92rF?X7?If>-e_MMo zuHl?U!IUQ-u%7AOIYt`>8q|Pe8=;iK-yMNhGf|2qJk^TS9A#{Q)D2Lh>pbYldyHDmk%y!ofJ2;y65CpI9C1 zF_V*r0aq&hSw1M4Y+o=nLu#HKB3++!Ny^EHp~~T67BcOUlmH@@u(Wl$z-IHWevF$X z`L}6}%RiclP}Mm_IL31is43yd9bVQ^_~x!Hbq-Qa3fpu#3)o4aGBy|}D(-L5%2AY@ zxLIiIzZ;#p%BJ)q(5&;lQ{iN?3Iv0NB}>>WCL2ZLVg_QC-20U6J~--}@h(01ER-WNi= zecX&er(!A%Hk$kkM(@#cd+RuQf>&V~HQoUyQet4MQct`N4%_lt@Fqq2au?)>M5A=`-ABt{FLF>LPxt3o%VxB+`WdpPFCl>n5$p>jJKe#(vF|MkeLE-Lu>wB3mF_TeSa-$fPS@NG4Cxyrou*b@`C@FMV%m+IvH~6w z&-Emw>~)qhn#;IhXw%7$$MH^2EvZ;O3&UIr(x-Gohg^!1$8C4mRlpItEIk6z`e5ucZm2Q%fA9HEww#2*X*9FKEG>&2)%|}-#e33MGQ2eY+2U>RWt!)Mg z)wW9mab5POEh4fkFB^gGB2k?6{UWOl@-3wiZuWc@l5N)@3bf}S@#3^91-q*k(Z4F> z2D_vY4ucN6Ex}lyypW}XPD^OI=Y{;-Ok3iz(xj3W#N8Fy0hFYuLeuwjZodd8{2p*6hXqJxwXbSt62mBi~BI_GAnZxm7UCv?Zb81jii_I`nG4 zT^oStz8xhp-IV;N9rh=3#U5)Bdw6SFz;PM7GMeA}1?{V|iUyUJ&b2D1zKBG5e%rro zplzTi|LZF-bR#r$AkFm3?ENeZkn1aMSS2uwx9X`BzA_9@#qid~Ms()DiY7loTIHEt z!1b}=7N{Lv^R<@b4r`L)YO6S|!mYaI0o#fCR#&NtZ6KGv!fPws2AsK(2RkqKkm)N$ z7RIRnRl~9p>gv0CM;ofEikysD+tBs~LOwl?Mid_#{6g#MxfN)W&ir-{Hn+;`E|?sG z_Ry9A-BW4cgg?2}cV1YPYea7&AuMy)s;1!vRF)- zh3xG%p~^)@SQpous)%OVsrI68$E0^i)>Z>KI@F~@WBjOZV*$tLG2T^e#$eoYTQGq{ zi5TdZGDGLkF8v=i-9vMe8*BWotoIW;t1yWa6w(b^>q(0x$Hq20fNvq+&{i9O8X@1z zR+MAr!Mo0M!T-|I-XEA+^UBZ3;TSVppm?p#d|=7tsjv=bHegbfu{5rsb(F9^3pcV~ z(3_eDdZW3EQFwP@)Ra?`&^1JHB?q@$u1wv+<7H4eGQwtr^?1UQ^HL%<)+JF?Tk6c9 zN15!fB+lJ1Z7fX^w_OH%;6PK+Va@T0=J}uf14DL4MsD*t(5mlhP1E#Ie%1jBJ9B5O zII`C_i~J>;ClvOkxSN7G6%^FPuqJ8y_b(cj20$@16zzW)8szP7tPnx&w?Ixbo3kXE zJ>h8-9^0?2D8K?&C_cxj3!CLCUC?d!5Ih#pJHZcUi+LTjsgCL!&)={D9|mlHDOiyG}R1$4aWZ>V1U&v z8nr8Fn%HwDp*jz~-CFipodGp5tN=g8=4ceXrP29_uwlYZ{qN@>Zs3QOff+t&0qEOk zbnK(D`qMQ6x$n%1yQ6QpN8f#fyB8!WfJyH9ro z^-4t-F#F2>N|p=!bD*@hy9JZ`k7-}32eaoO`i`ad5A2=i9@qCD>?1k)kzA9k-hSk7 zEYm~0I_PfSy6Jf#`p}6nXw@4dqh#wUb@zZ|O4~XJj4YWc zw_F)T3@*iKQ>7*R%o^R{lM1%F!X>P9t?uY)`CAjQ%FQ)uXSB>}-e7N2ptTwQ@$5Qa zD@rTXeQXq3HG^(QwLeDLWgkfvGiz*do8bVurd1H9(K)X#+@DZ$5CnGmRKlD5sz@9y zG70&3%}zgJ&&Ch8L-49;z=RuzDA{?FxC>9S#(XH*cGPFv`FoqH2`0G11>xjzet83= zNVe)^ZHokgYE822BG2ICQ}X!XacWBt!@G-To>ymFAe)KJU0%G?uFR)`%m0Ss{6TgaP^R}7i3hYwk)CCun%4zAat&ytOFAK! zFUkM9s71p5x~S%cLBUR_ppD+?kar$%Lf^m|fyWs=zW1RedkVFT1skkud9#!^e*=8##C$kIbIXum_&`lGoZ8ngN!Oytk9Ki#E=~{M zaH)ru#wclFY~IMOhl?<#cKB6+X;_I^jWO6%d`O3cRIsWKlWl>LSS_Xu9LR`ri?ed9 zB&lbgH61=;LvK-}ic_AXkl>WRUg6YF%x@l0!+|e2O~s+t;jP|kW)>;9uZOnO77XAd z0kPFw1y*qh@MkqqY3Q0BqhDH3A1fSRs%V;;qfd5kE8@;jum++^@l$ET_Vb1XbamnS zK+L+LLXYrV2Y2~XQuwfag+GFl?dOlBJ;b3sVr>UC>(^;-hd{i8G9%(#O4Bk_1WS2gEQ+WnbqvXM_E$07ZFTLvzjopo@!_;@8@ zDvWL|ijj&=3dK=6A?=tk{EG5q)O?s5w_Ug%jKs(lWiiPZ2xv${irv>HL`g{)BNKlD zJaJ$1-w|c;Em9oyP8Oq>?_V=1auHqs8pc4_Xw$??_Z&$_bW^Z+i`I>q6eY;FI)jvn zv-T)V%S{a$u=Fe)Ixa2#o;fR$c~D~WDMS8RMHq@G!-vl1BnCVI=%%9m=KjTo8F#Bx z|7IuINj2k}_K_)`$|;Pv1at@=oUgY?&z8~8t>!acKe|8tu|U~$LHk|^OAo_#M705# zui=0vuIjxAO|)+`EK!ggx-gO zW1p}#130xef3)rY)NuWI!TG}{0$@QMwmoN=_q_Z!Hs0*Z!}zDW58`g9?ghxBJl#Fi z>*S~8H>B-;?LF)_r*C|3|L%$H!|WT~@SpD#@;%$g{!bi+q#sf2{@p?Fb8m*=TeQYk zJQ0$gMD-Cq)aFm5`V?QvnG;_Uy^#|k7cy)xjgrF-oe>uR=`@wLL22EUiQY>UZ~!kT zGK1sRxuCx{Kzkg2%$x*aj-CS4NgpV;M5R+Em3{0rImIs)iq3^!(!Is4F4qJf9hkGv z?3}3rIcFbd?4d1iiJ3Cph=wvr{ZXY-S`?ure`14CdQb~n$&?nxg9{gRX9)=Wnw7AA zK(9XkWNaON%0^yDCS~@-&-91=2o!O~FG}b;FY}@szr9heEAGt5qSiHZO=)8|XsnYL zgdOAEPbVre!>7m5T#PGjCon><#IEToYBmGm(#Rp!aYy@sptlF2|Dk1o7Y+9! zM+w{mHW2Rzu2Y;M=Zp3EF^Q~?a8aNLb(9svKZt4IEfMws*Xh$|sJL@`FeIw4Qx|1E z@hKv?xJXNxah0gNz9ObNBILxd1CgqBt1M5TpEzJzFnD{BPF!@9Rg2PTzuK%uk68Xd zr%d1Ow66ayhKho`bCEi2wvV3j*T#N_Cr1>r&j{&vV!&oO2%xkFu0kcs6Nn1>H%#89 z9u;EB0E&xfWROZ8k~+-pCX+OfSs-m;%WmuiRX9J>>wjQte$9*>rUz>Mj*(9)V zg|k9zD>S{}`o`qBVillqU?oS97+6i&8p7GZ&8kSkt4Lx{bUPHv5wH?l)@LB=XKzTD z6e&TkBpnibAkHo$?awsC%n=2+mu*+n#BVt*3RD{Y2{TD6D_F_T6}n1cUQ-ae+qqB3 zywux?!mylTOXYn*yQZLJY+6D)A`EpPMx6RG%qkU0HAs$RA=W z25FNNm;%gXM`awg(w=nG4@-km8uDUSrS_Aw$6g8-fkz%4JU#$!Q=kq36Gq{tkPYfS zAYKc7tqm(yEF>a0#6Ox`EQnldl`kFu5sO0S@2{M8GD91;kuqAP9hv)a6^xnGCRc$z zU?VMJLZVVAQ>r^**g})Zpo&X>#5~~;rNUaCso+pny9s#7=vQs2E=p=<3|v9Pu}QOE zM|~e@&+k~O3ZtioGI&S++O(#wfnBV&4#KX7fE?nGC!Y!2KkzDpN9(&kFyxqm-V4?n z6xM&l>rz*QX%-c%f0`>I0A?{i-xYk(=;?bs!W_XtIXtJ*LrJ_QpuYBa*)lHLLYRq(=VOf-_)&(JSEU` z>I1KbLmPmi7wQ5Z4NIL9xeYw5t5)oy9AyT!0waI|^Tqst1ueJZqRzJE+8y_;e4oyFZ%wz~wNsier)cZf8qzH7CO>6skpEIhvMHk}c#}0TSKdnhc0-(tQvv1=Nj`vM(;}=Qtt+NC3nnei zdRGr~2A`$58ww*4(3|@kt&1{Kwt>e~my51frDY(Fr)0HEqcSFA`;q}8NNd1mqq!jR zk zni;^Z&$TLHw932Y=OFP~>xn8Swk2B!eyyB&I=KqXqM~@t5<>*zGb(L1ZOc?pY(m17+`vkz z*H?tsnbmfgH4v!mgGwp)pR4z_ssxJ###-)^Xa( z({d-vQ0i9O2=5QmE#GWcqpexZo=Ue3Qmg)gX(!?W!<+0LS3VVrZ32KyIoeNe62GL$ zdY2^|P@*@!Oy7PXzAoz0MEy1^m^gaF+@>H z+=mO}sjZ{YQ|JO6$F>05hh`vP{s38RLJ7J9JfnC0#=^jpaMW-plPUDWXkQ`(ORhcT zdUM84%aF76bAJehu}-;b_x)eyMt4;7H_A)Y|-=ssui_2q8D53Fa}$k@#wP zMZ8?9;0Sf&5#aginRWV7SQ~&-SQz=xkN~#=8`cJ&Unuh@IQa;F;JZWwM`Jzz#Fl4h zOF%^YQxLK#v%V}p${YGtDf%~!NsoZ12H|o17uN71AI$EP&Q=gbT_|P8R~dKdol@G(t|ERqTymbQJ)fZ@q4 zT1Y8XJgpWy@X8}D6gBl2@N51QBECA(0Pz!!>-(~vD^_MTZQv)E?p8k6*lVcVR;QPO<3XeVMY^NVQ3t- zBCO_Ic@ zZpy}I%2B7%D8b$1d5J8eQk1OGsBZXOW%a4B4Qha?1XNPW%km2`3GunqZz}Q1B9bR2 zf%d|>C{l>Go`y*`jqZ0#7&ENXp8r}~trcR5Zs%2aJ=|dxqJ7NRf8bt1Sk*V2jQP_| zH7|Wb9>=lL_BY0d7e7YxU0k1hnQ6K?H7)QiT2mgsR?E%Kg3h~Ay(#sTla{oGM0^^z zJd%Ichq+=Yyv#UxE&!J{O10MSip}%BpswNB#q%N!C`LtKzJh8VV70ttk^8*)nh?_> za4Ghk`DPIB#KV7YKK3yYG%>FK01ls!M!@SE0JL;i*{PfM&=Y#4*tDp3ILvl5g$Y(ds># zgg;<+rvqYCD)f<1=*_43x1mMf0QU(9izWxy$I4&Ys>p@r3l-wcb%GV`_Tb(n@&Wv39>^O(UmyEr zZ9s$nck{sieW_si-=(5hNk#Z*A(IDQ$>|}?-Y-XFu^G91x7l3`FB~}J+*1PNO zz5x=>;Ey0nA0i+db!ge4K^RO`kXwjm7!5Z8_4TzcnbUJdd3Z4Pcv)=_uAFcZCJCrH zn_SXa1vR6Gu@Vt4`Y&Imf$T#B0@&L(ULj%BBMqXkff<8}$e|KxK0`!@?UYopiiM(T znLE*lgX^}j=>m6S)V1kWo^L{0%&~&Qo=x7pG<2hfY{~Yz+eHPTOU_&kK{eB(tmh;! zhH=-JY(I*eTm*b$k+b)&7@P+wP7_(W3ebRL)zv^u$_0Xjk`y9G)Uf%fv`EU`bFV`o z^P<(6@F$ny$(UfKoqCz-cbnkrHXE>S&#=!%&x}i~-B33FXA*yN!pCvDhUDkUeOP0x zd-GuZBye<~9yyy&;X@$N0B0;p&OXIR&%gyXU0XV~PxU?0aUj&|^mzd7-QH&iI(rye z;l&fjKPSqLXSDxBUy!7?IrDd-sQPbtJOB65XZk*4Cu~2Hom7g#p*eVcT!MAnb!Plm zMb+o)?H-Ar??gGOJWc*ya99c@k+MWtx>CH{t=O;x7NBW$A2UZB0m6UJ1sw85>YhFb za|>`^rkuBr4zRk!!$E?ev#OR?V^C1a@ zML~URk2V2%m}+F|+C7xQ*4*jWd{unbW*$gI=F-H4`Ru;x%IK|Xh@K(Hjl(9Q2d~0rZ@9=h)o$=4n93$F5NsZ{B97JKH2@grnNOA6bR(E{{T< zqfE!S?#F~=N5lln6RlN2f1LvijW3V|L?(ldxg zDWAtj5!?p&7q0ybHukmwd2i}<9>y6%CFYy@z|oFdhEQ+QDkolfl_hEAucnB^6?=^S zx+aPcNx>ok@*AbA(5W-c#_6t%z`&HQW>)o~dFNq)k(F4|w5(cIl}>nOG^>RvTWmhX zp42t=&b4p?RR`h-QQDk82Ryak69`Uf$>{Op70+Uz;32ec;0VyFLEKw>xgK&jYVYcq zi9i8$lU<1bHE53JqB!|VMWkodj%*85f0groD+tyZ%5hql+|oX&$chC2W5M5uikh&M zP~3V>e9`QKUeU+s`ytpSw^dlo0}<^X$`bG#2n=MNB;KHVOdXOr)C&;?Fw_@?M(m%M zkQ%}PV>lV8k20N`9T6jh>B&NW+p=8|DJ}fENUV=CEm@~)B65HXt8Ht5b?*%!O9Zya zwx?pNCY1^`Pnco997v?S&(;-69IwpqQWhI zFF#C#68j=B=tq1?jIlHqkcg={PbDFlpp=lcJQuQv`Me($@^!YFS130qP~@yFteRjT zAxg|qdq^5WJbvB=A|!@@=9Cn-%0Q8-)K+7Jx$4B-PcJmN_k=9u%BiG%#A3s_Rh`zT zpx>FyZC%1Ni|%lq`&@E@7L0Q2tAXf7n?1{y5t^ff^BQMffX{T`myvTyPyRelh8ezG5+vTAv;BR`|f# zSa$Mp+tV6?ui%p@idByp)aVo~ai_5aQ5eHo(pNuee}Wc|GDNDgLvDIa;!BZWhI81( zFmfBTZkn-mq+3P?o@Q;o4_t`xfi*I-%HAwbnn!H&p6*Hf00mAvieHx3f~3ib+<_Tj z$Xs?fixh2ICAcS&SqFo5aTmTCX{a;$3UVVlAH@l?9mNT~^2|fZA*51xGfe1Qge;oB z(cmrSq`Zk5^LD-m)SH&8DdMo{tf;myrqD4lcYY#ewJx{Cp_09YyFFy3oz?^;w87cQ zwVo69^x}*_bu=E1y+6gs$(w%6h>wv$%@EjI9zpfnWhPIL14;-(SXJUM{#T@E zfdj-OdkV2ALpff)c%0KjI3AFm1=fgKw!ip)`L1{6#FS9~rlZOK<8=H#%C^Oc0sX5kUsJ}Ouoq03uVLJ6PbLjbb{Y2?wH-&-5Kxd^l^us`Bp*Pjv`V~z^lE5A` zM+&k*V#uPO51>T?T_88j9F?Abg1?A>ypKQkz~eh*0AHe5!iA_v?|%_(UN25;|% z5+0v2$uMCcWh#{;^2*c;))i%^)b&ba*EjPE%6_sf8f=L!5`x9-650 zT#VR5+rTjmfixW^r0-i=or?23N990*%0sd(X~%5z!hrMlq7U7mq5QN|3klmsMzP(o zIeIsn-f|1$?!tt4MevKhf=ne6SJ_@(j5>?Wqh&am!qM44k*18KB4Z zw-aZ)*9UC5Qx{i#@X~{6k^p))Ta*y(!6PDt;#nysV-u+8Wm<{aScnEe%6s`JX+ahv zg6rP@TGu&hw)cDdHvdH+|J|zof8yOPVCd-NU|{6*Un$w$SP*W=$4}kk42_u(q*CmF zfK(1aGWzYn5D}n=%xS>Vge>?M#;%B}tey5|Z1By^)n&~s&kLGM7L_U$sv=ZS2yjg( zRhrGAJXV!0%bM1e%}*_oyO~C@>)Xa`3qF0BzTZDOKOeiEKOa9DxIeEwU;z60d&zbc zL5svrQf^5>izM8d0~m-iNp>kgjU-j^b}>P?5SAocr2Bb6rxI>GL1^Ny<`BJv`)VYg z89`jcU7`b*#9k5usU)9~LABz7*V zVYQL3Az?qr_c91SBnQ1BUQ$D?B3@!ct|DG?LoXtq{6laepRr+h;ji^!p~3*d03rhL z!GsFrsKJN|*OJ1lh7B-DN;=p5Gp!(W5H z82?-j1B$KDJ#)}m`d6O7Q;e>@JrmGc2DiX|UvPbjKt@o;KnGA1=n=*;L;4wr(T0Rk z!(ybA{#x|UjQ&dK?~y$nP&}@D-0y*3A3Zz{1CGy_emsoNK?zjf`2I}UhJQxTJ_CCc zpnPU`V4%LHcWR)%W_NU;whV5W{anCxYYha2{eW(@(5iijCU%5g{C~)j1(3QFK`Zy!pnWFyNI-v#?`|2{F?LdacfQB;aRL`H zfH5AK*wsd6_tA_$xouMKrCvoadi|%NHI2Iv=~C_~L3fQocL$V=yHeV{uv*95cwom~ zakPmJUGEh!Y=^2DcY?4mtP<``wFwVt+Qdh)UnwwbhaHW(U{1%~xI9cg0cex%VYy{T zxa@nPT=(x8Zw7`LccMop+~8=F??aSaf|-2$S7q8#vO7y+qP}n?y_y$wr$(C&93UIy0!LM`+WD@FYbzc@>fPiWMt%go_EeM zHAZT9RsHU8EEV=p%>q3M6eGGV31ezd%0$1_yiRI>Hndm$Zl8^M=}?2Q{?BT`AHYs> zh<0pV;kFGLHzIZ%rF$EQ;7{`tQlh%6xKQQSp&anDfP1kUxU*gogEenk;m5FG9~OaO zofvMKi=Si#P8D;dnD#4y{qilkSMmmZr`W}*NeTI+@N@as*>+Tirh{kf2w)IJE3ve# zmgrW6Wvxj%#P9^L;NOyD0y7G(vP7GrFqu(uN{ps30>V?7$&QHtLs;ORs$l--4uN$l zs&Wud9;zTH(goY)joZ;?fzX0mG!>kvFu+|=5{c}QCDV3=D;19o^j&^_{I(Chcra2k z*tbE16fxD1A^GRcWcW)*eDkWq8}MPE9>}^*)1J62Euy?%Y_Ut;T|0J zFTA=)zM4L$A|a9wMR#R$&=96)h%VuV&F+}*hf2$ZyQtp+yyCOF0@jim!~`UA%H>)$`dX$z6Pav-?%f-c^Cmc`=x8r)3;vvtxHBIcNZC zD8bAjMw&545STZuUjo(>xvQK+Uak%p{q}b$zaAL$S=AQhmJ*okwAKGkjW5w6AX5ZU zx8>=U$QJI&s9bfr+ld(+$CI;adMgLPX}t;df`%>f&PaElS@v~&uJ&?@rAd-<$IY5L zuD=Slg5}FgK4z90CJtl0-@a&`e7hz+;VvR!9R)0yri0n%g@|;Q7^9JMcBvdbN`p`p z0(}8NLUz;|P$`3OtAlrL9h8NnK@^Q^W{-_e5gMcSBOxBt`msh-JALyCS93QhnoN4MkAn?Q2cjg_+sM!}Nj3aLXq_ zC`c#}-QA~#Wi^Ik2(+xrXyUA!jVufwj3pzEo(AVuP1`dbmm%${!ce_d{^F5FAr+okzBs1KM;yDhu!|5iEj=hjbGG^haJ|&qKgV z#6SfC&Y^%GTwZg>M2UUYQe2X{6jflQYo=o&NT{$jIx*p6&k0 zWta<#CA(vczRl-rbX_2S#v>3gd;Re%WEZlHQ|q}tG4@E&M+R2+wS*GgFzCZ;gEB<| z?vo8A_G#i=j=&??)L^(5X&IMx#0U-IU0$)3&T>+ki6ZB>7_}HLpBEbS`$%4u@S$hv zI*z?2i-d=GaZZiaUak6#g3Lf%?Tq0WjouZ$Cl8RY(R6j(VpwV2_m zFnqdyg9C2k6DCZ+ly!;4f)OUirj9Rln5K)6aH@qx*5Q0#iZ-C9UhkbA&OT4^C?JAur1NkFW(!5*!Ha&>wq8SxpePKI8&wD%^ z?AH`4n7}2EQs;kyKqXzj#5BYY&XPJ)|8}d~98Kxc4qdfsa$$ zvC$S$*9^wavii-GS@q`K88oML%q3HYKz8>Wsr!K@mPzA+ZreQn=3fmc{g+%dEbv^v zeYZC+SL<%KMo1DFdZ4qQw{t z0s6&3kkny3lNxM@WGYxF{bIACtm78YOa?KGKTq-DCe~!d(#A*wgm}MlD$QI}Q#EI6 zh)%U^2UdPJ&&P$&^C%080N1d%SWp}gus4T@r!(ZPGib_Yl)trMmhbaVw2$qUEi%MV z)0}H2`M435rDchj$A@RJEhe31Iays?TIKnVdK3U-pF-4fNF~`bl`hs}12$rZ{Fw3q zk1aKIX6xS@ioA^Iry!oes!!HAvQ$Z`Auji#t{ShIuSb2JWL9^;v<-96Y8bb_mQBu9 zs0U8S*RK#dEOxJV5~@lqDI;2+3PZF|5ZQ?=`V88dNT${lN^+xWBo+dlAR94Bi1Z6Y zBw#mmRa1nW#{n89rtjO;*?VMoOQck}t0O)7R^ z$w-zTEPBp_Ah!N`UWaN~$Jhis&@Y+ZeMANo_=L70 z1Z_bISo@7}h~UwIpLZ#uxOUV|g-WU3yX*V7r0CZsKnjsHv7=adBT7v zbXf)fonI7g2qgUzc95MCK3|wRd74UWLO8;B{aOgo0BpcX?fwK+sIjcuF(Vn}w2Y)0 z{2Eo9-~>ZUu5D?^MyY4c`QAX|yVBY}ssu1#c$3spNyV^C8nO;9ehi-4p98RsF^6H< zuiC*-z1+h0!1i?kUIse{4^9VK7h^QDCq>Z@tI@Iq%CG{z;4RSY|6Daon@!SEF*!)@ z2X-Y@$`Rg%y=5u;gq8Al%|qP|2)g~|ToScI^@0uvwL?fgRdnE+3z_`{m~`MPqQiKv z58CC(U@Q>25O{5+-D8`W0zTSL!v+o+VK!&Y9H(W8FaQZvgE(Sat~X<+Uyq@zr;-Y( zqhobgm^J~dO9MA%BX`!%mZ6$-QOs!??st>2yf(3PS*=u0vY2X&s|yRg-vpu-N^86$ z3J32kD;#1f?O&sVkP6-`=-f6(1oYDasso(qx;U3jtU z5~mx`0#qjr9bkR&-;t58i5L~OcSa3I;SjD7w+9LW8&T{Lo?GT{1-}+p1t50rcRIvLp`=(;;&)2d{p2_10h zx=Ulz($LP-k`}B;YM-J2fb09-CPGLKwqN4=V+cw{7M24Y@anT9}DlOcr0j-*N^mzSBwxdXM61G$N>~iwvqMb zKncL(SCSMf6IE5={v>G2mv+dj>>m(#l~eQCz=>M}#K62{h=0BH9!VTG}eStZMuN`kRnx+VixRr?hBu zRT5D1pf>Giqd3@TOE+>zjV_SEoeUYt4DZP08bGwC9?X+GM14^*>toFzz7eoej^9HQ z8!-2#74rnB!*$K@Uj2vN<A-Dc8Z=%7Uhwgi&j!e(J+ z`fIv|6U*HrSmj;{u%EzJ1}jh!Q-c*C?FwajfTKQ4!-Vm0_(k9pN+TNlp(XXC%>U!wK%B=-n9W9sBb1Bk+TBVfe!*{--Sp_ zn?cq;#+L!Kf`kl9W4eJ1bC73?F%kfiEPNbdp!qM!L3kV{cWC7AJ~G!o)f=V%gK4t= zZ@ux~^r8-O`VNl94vNN3PUbeIj(-m#CHAww}kWFqN+1DYH-t4>%}GQrf3XYH^poXw+20vVHzsd^3q|g%4JCg18VX z=An}!dYNe~FHTQaE-YeWYRxQ9gVx-lm%`BJ*gR_w)9)xU9Nl-?;Gl=mE>-VYU<QPILwExzx-f)7d}DjZ+bRtqq6$3$ZwWmxbi_X#D;>Y-SgN4dlns~qI zUUMW}KiPsChwo#gik&q9Hbkd(n142p5o{sS$NSwf#*41}jA9@w)WX8TZyE|QMt=g; z_>c(Bep73zUitzS6tGz7Axy)hJ(d29yztj2F?u(ivhOk_%NQRNEQ zJs#u}-H%zSrnpuiOU9@0Pb_6)-W+3>=*dbP#URiN3zaHOyhE8MqfT(nZiJX8SR7tR zy9q6(g@2d8EE0;Bw?I%I{584T{ndE0lkypS3g=`>Gl$fdLShn@ik5nxW^W6_ry6x; z@vK8^O98iskf;}EZBQB;$k@ei5`$jO$-{V5Q@-;3oe@B>X!vr4JTYH*cTw=A#@i%f ze@af0;BsBFR6o7cm_WHIXgEf6=!YIleXD+d*Z6h+v4QoU$mslE&)nZVtRa;hMJ#3HPn%bJeRYlSq9Q&7Gb(&O zR0Rpm1r_r=4Xj>)s`+Kyj45I&ZI^*-5?J40#_m(z+?uSqymbsyue&~1QB$v3`^P>o z@7pP~yG`OSWJLTd`LwaMiLR5(o6MU{$77$T6Vn`^P{Nf!C~3DU2-uMfY+L)zsXJKF z@PS=1NAPIlXy_5hkg>XP`<#J&wS(G>x#$LkOvTw>{2)=Y$aX@7=-=}kLxq4KhL9R` zm3%|7{whK!jrv-B2$5uNp!Oi5_9EdA)NFweD6Dq!;pF5x@%zT))fH-kk>Q%HR6`LI zIwMdN+r20#l5RRfI7CXDNhU9L;zJxd%HN7xa1Rt-QuK>2Lk9H01#x+Y<=HFDk}Ztu z`8VkiQ$9aXa$_1H3*tm#uUB_Uptv+K=F8;d)};cL3E&=ZG# z0gn*~UgXzcy_h~((E|#zLhrfn-PO@c2+fQOFqWPXFiF?&1pi#$)GoYrI~U;Mq37qp z9P*H9;bPEa(Uwm)Zp=aOnIEHToXuB)G8kw~!4Y8TQs28U-y#iO%xW?*+u#n*SzXUA zhaRbr(x(Wd7GmGG(~`}}$V3JeJj``A4pmX5mXBrP)?G!sdF%tl6wGfo2y?JDpGioollDps1}|Zx7M$JT@^!ug*h4AGWvxI?vLO?mvJw&9T^~bGoUA zS~Mw}JH@19syvb6XMgcXQiGGtW>rACYqb*d9eV6VjpjXoU}#E!7pe+61MNF`ho z)2*#J<1an1m?IOP7JR&l@$ruqMSn#k4X+rHOF49KLz+RgQ)q_(v4IsweuhDQrhZ#> zRm@;pgzMUj-5M?b zCU@x#SDUcKQ>NQ7+u$6ql|04$4Y-YAd+Ib`*0_^Q(p<;HDfNbs`0F;L(uai7M=-#% z=Z`h$<{-ab-hnAT=HLHnS;~M|cbR`{Kv6;e6NC`_UqA>seJ3Yl2OG!l8D?Xn|JlFX zQge4xQbqaNGGeez7F9t+2aoj+(yy121UL(%hLT(-;!`MvXnZt2CU&QjbGFvD zkhjX05>01c=p zc5U7Q0B1DE?x8wHKCIF%C@3TlZ@>?rq`n^k891piSU5yJv;iyME&ADs-5&t~&~F&f z9CAbP6?WV}1UjP%sD?R646yXGS*amg(9ewE^r3X2^yn`6sb}G7)q!Ucc3DV8r;hp9 ztn76^(vc$I6YXiQ_3Tn2We;R9a)vt4y@ZBOZXqyoOgG7Rhz_6=xJJK)jwD2|NsTiH zLX0y<>@grVNe=Wo<%dB!#fQ=E_%UL3tr>m}Xc}`(H_+Z)r(k%2*v8!{d+`mgxVa;= zOuTYz(;PrxC)~kwDh?;G;U8$WDi61;MdBVzF=P*YFk}yO82eR#yf~{3yJL6 ze`5Fyjv0UDobUv=`KD9exB`5*av`=b`v~7D#ZZ72j0$$n;S1ZUhKZ3HOkBUpWBwEi zmDA9bds>PGemQ4}-__aj5yMdFC$V-R6AXNSr$NNIr4S7Fm3xXe)bS-M_YjQZqY}IL z)iRLT1QO~t1s&G0s4u-jpr2rFO|u|J$C4Z5Y^$_H*r(5YekCE@t~`*db~@;Cv}h$X zI^XpkZx~_#55g(Nzhm036RjyJxlN|IY3;?7#B|7+A>m4se6-Zz7<4pl8*SeA%Usf! z$D{r_n(H;iAA@&-9ec{b)dloOyewRcz`<~kJFERy`Fp`Sd{I^lxiWv$TABA*C7roq z8Nx0->XW1RCZpn3)p;x?Y^na2*acfXJ+19G2^tngX=gsP(Ex{rE2aFFl#HYW8`C_1g?}G_CHE(8=i|Q# z)pgdjPVFqqlWdEpZ?-21oXoB}K~@I6W7N<@7Aa$NmU98>a^#c~BlFXlNaD1k>v_^r z<*B&Dv8`SZ@_4csU(t(N2dWCEVIB{&N0z`0tw+q!wn4Ow;)qMs%ZW2q_!pgaI=Kfw zxBh@ufD{}oF?{X|dY=<&aV3d#pcU3n3|-A6{Oebve1|SQISk!r64Rm(lJ+E5*;eW za>p+tFet=R%w7GpE2*g2+Qxy~B2^M_vkTqi<~WxMkdeati+^qj$2D7eT!^VbnETv| zEO3%|;m*oimZ`FfuaLB>r*E;5i77rJh6|8PWaP^m2P$U$%*L>iBtkFzDNr1Lx<95Y zk!=LeiQ-+GG1JKPqG*U{svxZVDGM#}G8s%R11qzhESQkL3tb_)-rvqYCQxCZ0~1ro z7(UKv72K%rg7&MoJ*~TI(rNPc_wlDm#`ZWDx1!z>w5~f~2F+4R@m12}kpsC;{>mSW zH%gQDrev)9w5I8`Tj|c+Vi)qS6ntf0RPXx&@g-;DUzM@>=W=rTo)nMY)m^n23lZYL zRIOQ5?T#Q~41@;6vi>Ns_Fs~Q`VznvTwZH-U1~If#N|Jb^MCo~<*EaG=@~@N?E7F! z;=i___~Vu=$>bw5ExS$cSky@sdz%p7@T3`Becfop@f6K>Gf$O>T#p$ z110Chx#0G{D=MIfHNv@BBDJdIEvQP)8hm6;3NlpqM2Z4GNGa<76f>X72Yyh&{;^wsg0D+tU{z9Mi#f5 zs}6`V{Npez)hjqVjc#u|i`cP`x9IihOm!CN7Os^h+G?s$a@C;oD}kiK3vtL?5bz2R zxiuQFvIV8OWrcWFYHD)NfryW`3~5!@oHxw7bCckft&*ptWci55b+x0y!|PtS(ovj- zJvs`a5oMPsh^T8*{nv%IN=jz0O1kp8j6i*6aL{7r&yE#i>D(lTFCHx!rm-PHwbb5b zzj3llp*Mo^f{(G^2FB4AP6SHXe)I|~C?HbdRR)o;`w9w>ctvD%-7~Ko8tJ}e%qiSdsGlH2p>833#z6Io}t~zba2tE1HSTG_D5Ud zQ?srB3bO1=N5)#G_LZRr$|rSYow0o5O~4w!>*Nd@ZKx``by8M?9Ccygwv6qAsFx_3bCl`uh*N9?8g^2R z`>m@c#g$OWX!4|aue^3K@*#PZ1fjkQ^eNwy_Q{Za@r!=Qbt`a2S;I2^zJ1*6bJ|>I z{$e66S@|0P53JwY!u;o%R32F)mnlVDcBY3e>W3K8G;O}ivyI80stdjWq-!J%=>?~K zUULx?_PtKi{{FwMUPz_OV?N;i%2VHPLLtl`e*B2X_$Oe;`5yo~XD4$j+P{FDvxA|r zw9tQ5g#N1%6ct4e+0O?r{55E{I6lm2cJNEj7^@Ny+0mbw#@=`=c#9~uLf!2L95JRa z2)|wU-iM$2mjibez$88REEGI^y10?ma6bGQe|uZ!Bt>6KBz}1BjKa1*Y#A)g%NB+UN*71zCQU;< z1Oh0)#LBe>bv;B$zvP1k(U@AZg>y-G80h5^%nK#J@A}&bETdntbSeTTg)LPB= z0j|^CLah`2tY9c8N8np8=`vKRJw1mpI<%g=((tO}J#L{2CY<6qwK3YY;{vA?DDvC} zS3eT|4CjXzM+q$X6BX*Ozlu_|dWAEP{gkqHF&%bVzTERE8!~?pR+}^{8~!EhYo=XP zfw8?vSixw7E2&#f3Y})kFH4uWK95!tjLS*jb>YNiFy2r+-?}cP^3=nM*hRjwm<=6t z@cO8AE}(8o2k#T(VHae<8OH(XQBMm(FKkd;wy+>3!f=a`9PenNmchsh>M664T_9BW zs$Xifb5@S#!<$N*Z7&)u>Ns>aCCH;Re=x>A+a8NIj36ijg7#q$@yrPm3{rSnP*emK zH}5HF@Apb^4R14d_Un~tDBe5TzsoZ?bBj&z6G|SMxu2m6TrZ&3pR0)40BNGOj)%Tf z&S-u4GyKoVM5C3|vY5t56~?@lLc3tA@7a2OGgHS0P}<80*?A=WBm>q#I*m|XCIPx3 zy}6O1v_}O}!TMlnE>3se;4OKcE#mdyL)#13Uw5u65D*yZyJ*Duk7~Qz-?z`!!IW0t zPT$bXnAY6Ioz~9E+0@*|k=EhAwtF3D|Mf6R3;mr}{VTuvKew((L0S?}9+`V)uC7?T z!9NsHqg*{EKPCu4Xih@YtP%H#o*Uz2ECcRV7X_I=!iSHSqMgw=f(m?N)3Il|D`mpn z+tUZ2HfD)S!kua+psz8Oe>ymb9g9-Uh^<^HL!x67gS|_$&zS3&y9i{3Ku(9s?H%Zy zdMSo$4z&)t@E!}=H0h=@4y|n-E|f#T4?5{*$)(tfPyxH0L5OGc&Am)%(G5#EEA$+% z>7;{u{R&rHH?%B9{Yg13dbspiM1|QZ%G>&xM;`@WSW$& ztMKasbnt;LZ~U|6&!G8(1y6L?uffb?43E;fZ=tqWEkwzFJX*o-AR%TbgqMcbS zt*6-t*E{%I_}gxn373KRz%6OKp5r{+*%*o}A*FIRJJ^Tdv=@_Y?C2ZMA2Di!Vg_0W z$rntN#-u?>NvQ62#q+X(o;E8oP-~+GC4pxibE_&D2OTV)yONK^`nB2sBNQxK#aDsvl)|n_j%P?bOPBjZ?TPnfFasiAdITD&GyR z_m7zm$9~{I{9=R*eqcHsLzaDzVlMo_Ow!bxZx;#%&RpTpJn?N3gMW0X|5y{Xvvo9g zvUPB$RdUd`aWpY@kTQ34GPW^x_&d5y6Yt zmV=Wh-qh9v(7pEz&oF`GT2RuUJaame=_`BmHF+Ml2x9zXA>L zKU(DYc5gJXe&P-s76xZ6z&o)@K4>QC80%AZcRefx`YL|JJTgPywaiD8BcOzd|& zUp}`#Ubj*>cm6yLss4~L6d!Jlguq~A&`F`EC8RWz@2?D0CF-Qmm+5DQSRw92^-}vC zguovI-wsb2C=7oft zeHcFKrFff3ReFHsf!%Q3x$;~3fpOa79#c@0>o<`}q1BrDH9QlaNk8bpSfSl2GVaET z;jhPr{y&BCr=HJqH!)l&vM8CE`lwTrh^&=M%mrpCjw;Nb7qjKywcaxM&B zvlG-zMn}{y1jP1bu}9F62d)}D%zE!3hCpY7aBRrnj7pK`w0@>|7Jwa=kI#;H6DM{V{Hco9@L#gsNQPk62s z9Vyp{2Lqa=QWhfON{x+q>Oy@m(I}>>@VpEFXQxSv16t;Lb~Meo+$g6&GzRpT)Ut_x zV`o{tp3%@1TF$eqJAIKbX@Az+Ajy9W2K8#a+36ugK~Sf*h78Zl_0aP+;(kgy7c=eD90UE?nYzjM?XNq+g$;Wb#dhPAZgy_uwn}J@Y1j$cq8k>H;U_C)!QhIdo@G=7SJ?pes0OUps0d~A_P+;x>cgLwM5Zu(65_Q4>fmFzaOUwrJ=U! z#3hZns*Ce)5Qi#fum*5=Gu*!zN`AN4mpVg*w9K|g9oJM$MSu&earIwXx3`XAQ zr25#qqhNtkIXE$S3B!35^ne(%5;!BuveL6zAx{Dakx6EI-2#Io&!h<*VcI22L7lq5s`4juvuVHc zTT9AO^|FF;d1@U~MN{SYH{;esI^}oFeA3{lbDe14MPJ-mO35G+u$}K5E;bTqABv|k7x(?e8!BY69}vUyS`cZPJgy=&czd6fW;^}+IAbCE zt^~c02L#>(KSg#-u3eW_o3d89zHB5^%U1YkL{;Uw11Li$uFcWmfXcy9K8Bu}jP{=Rk{jQ5~Bu?+g6qZi|QAgt>f;ke=@_A?CbGMI( z$4@&sCe%fwzYO5+6jO;Zi?<-}$isn(Xz3&`vCkBKe^;>Np&0|+;{k`kN#pw1>Qnh( zu^QXq-J}af$z+mw2tRP#A%k_AW6kkBi(9B4bA~_>yUfuWvAzjS>wdit#*ULgd<(N{ zwu&XXEY}c^Q$u@M^htQ7-RUEETso3zC08|11anT%Xgv}ysgDDqmU%!3KE{peXJu-U zO*U%IS8&F4dmL~u+XbWsy$V0{{0l}GgeriWeCHiw|Cl8*{4a0z-_9d;=C6!nxX0S? zn{ZJ{(;Glo0UoW>?Q|%iB!4#ag&E@@nF%7JP!4x0;G6gA~6J`v^^q(h-g1bjwL*;WJ87KMrtM<9%G_`WA zpc$ek1M-K$aAyrML3fo?21ZHtB7zDju}C&^J}+e_5?d#MgSmj-q#l5$?b1d!0!27c za*T~O-Vb`MMKwPiy`AbcKp+%h-*@13`XoT_=qAcsEsP;xfE39Vi|MGJrWMSqZyf_$ z2ay8TE{MYrnYQ;>6-v9Svs{|9Z(=&~NE_f2Zt!Cp6B{ z+&14~E@^r4$Q+U!GBzOcgOb;a#LBSW0hgN57+-xbadFJ((?2dsm(P$ETaz8;9#i zxN`X}mV9-=!yoUA`tD^5V`;Tb-_5n!f{A{n;M;r0Z{aeiy(ZJkDf*MEYIrONT-l%r zxwdJei5X<@Gd)`gbiY|J;y{dH?-216QL)c|(bvEZ(=xPwTLJ$ceeiz<1pdz$%)fo{ z-}#M-wjz=$x=%8Z6(TAGeQs$eE*?IBO1FGvm56oUk7YS(3ra}`#Fb#8Ep0RVV%HCd zE(=qSwe4m`l;W$%g^SOq&j=l}oCb9RaC0cuo3)4Tn}<%_lgsOz8edNkJ?!6j)#a^4 z1O*1dL!uNsDs|=iap5EQjr*0zXho-R10f6gulD4Tzq}xGRl^+>paak5(L~@)3)yIg zK*&LhLM7=JgW(Y|kLd`8B7-+lXK#6I%+z`-gN;uyd4v=Oydy2#e!Vbp4R(AJr1Z$z zs}Cqfn$yu$>ucA8Pg2|tg`gr2?hBrs3@7KIMJe#luqCTgOtuY!ReKfYQt~{uPMf-a zw2g8+o<)}^NcVldb_%^8KsjK9t^6(w54N6BM#+d)U$nIii%(#&7EKIfCjFotf^%Sj zSy-Bk1NPw3ZiZ}^r>~z0w6U?iNZL2)qgrbxrZC=c8eeYq(Oo@~rliywJR-#3+$Vtp zQm>1Q&q7PqEW|QDCad+fmUjZFTA7SL(^9qDA8x-=6IpK46^t6!sXZ%mkRdx2%OI|6 zY^$TGL^13VlWtUp0@FH5Y5xFuX^%C(&I#2zV|6(+KnY~D>9|g1@bDa_ug{^zM4`<% zkd{rH89g#9u(ATMHkjC(d?+SpDgqEu%4jM{8&&mSuq_PO!c4k7D>zY zZ+L2VcUfW*TjXVCjzddWurjLL-pf{|QR{C`)9OkWR=0T-<7ca%jVwh^?sKsNR9bSC z_mh~4uj@OHxic@iL?3D-L&-E9%y8M_Aw0z~zntMwcJ_y)`Dx$-DIjb+0r-cQHE8S$ z_q30(SnrkY<*=&5XV9=f@6YKmJNCd_JQ#<+E8eYqb_%$%wVJg-Wjw`IB20Y0^R99K8>R< z4ITH?(@g;`-P`0ldp4_2U<6^>jif%Jdd_G#v~$ml&XCoL!C}DDw;A&hGMjxUaO|hU zKh_a@a;Y&TuJPu<&rdk`W=X#Q!dd+HwL;(rw52?A&3!rwi!y$Ls3!Dj59$zP;t9K< zjqL2l#9_Bax`bAfS~^F^@h`8D%YWizzOud|_xLY_>J10Qc;3R9B`iBKv#oUF zWF}s~dcf8@Gn(&GtR0WKz>tnEh)P1AVOsj}*o-4?o!9YHD!BMY9Nd?+Uz{@<)wYvS z+axMtv#~AX+0$DmDV={*e}r1i5tHCnqK6q^B4I)R7Yb_kQ3uXje8GqZGwbzq8u;m-3h^4upGf0F@+!F zg^e-ISoEPiYsPV^rs;+}tbXwc>E7GEGdl%yf_-^g8UErU`%Nj+v}?I@fxGi(X|)9V zH^_|PPwvYPyd2TnP3casZdT~alPQRDGyQRH+f5E*f5}ebB_070Ky+GpAa=qqq&^KP5`6|4|%qcCeyVR*?F482LM#EBpS% z1=yAG18M>g0=0t7c}PK!K-;`38TUiH&)=_^FQRe1ooK-2qCTS`&2G2i72}-!2^%2E z@zIwz(Zf_79GK$IgURug_e+=SiShjlukRm-UC2$9$y2rYyQ*ko99d_sg}bb1G!CEH zy;HS0c?&@-(8RXFNz-vHmE&+ffPcnVU)VkZl1o- zup5+DcAHePgLH_zNs4Q8u@g{Jrpy@_R9*Iq=&PV-C%LjQ5DW-YYpH>@587^|R+cTD z-TACFS1^I~n3D)6?R?5et&K9aqLlvUW!9_oN3Ral-;nk@5aZpU!~2P{2JcD(a@TC{ zcY&^!*}Bn&wmG4;Vw!iB)o4mrVoLqxqyuIP*=S3(s7b)&9y0lQ{6K95I9<|lcZRJC z9o?f>PPLc}TpQ@qi_`}?yJH!c=_LL2v$=N??cq9j#}<~91R72%ULKrSD6FXa*~MH> zO@{m&MYyI}68_Wh4LeW9C}J9r+xtos1Z0-z+VN%NFSBGI}@!SWQe!BYsjEkU->s>d1bSy7AgpZp!M$E~=wp1v}8~*I~*f$C551 zf^%i#YqghE9{x|KkCS!q@pdC#o(N%fi6Y`csjAe$#3L)S*UBd#!aJ5NJw7E1-LzUG zJxFa$%*Q#KWMSct{lAo#_~BG^!s5C1*E2vq(YG0VFln&0dMghU)0pK=yh9LELu^Au zzr-R$#Lixh#RNYu1uOJlo$MIwo>D&-M(*8Ez8E`90cW66fZ(kiG>qBW@P(1tK9Q5= zXDJ4}gBGCs>2SN5PEQI_6=D!@w-P<-_mkjMI#CmxS)N;vX3%1vVP#d%WbLoUZ+5f1 zJR&msQR{nVi}d}Qv7{T>H6q49=fb$^-2yEk{Dzbd*3-XG)~q{Uj`8Y=pWzTbV1^MJ zvCtr)uk)?l(cT>N!A@LnKQoH73s22-u9scxs%xXNtvfpcu6qpPX^g~D!p%9?>fS8J zYM-gPdy!=^%)aIeUt?y0rAb*Tw(p3}zKXCuT zuc$~{dr04Y$Ne9NliB}we&>I}vLe-YRizb_Pgv+o{Z@jQ+-MPE3FE^(GBQYXLIS4K zU&wNqsmofyP+B<0(XQ8ItDS~Fr4x7-z`P5k*Asc>K^I2F%$U8?SiCbu{W)AAe)Rp>~Gc`5IUBHBv) zQQId)v=x_<&`NUC+%G}A5z|UYjTaNwN=Z$2Q{Cqd(-r%pu&;{Pll&SrSjB~WVCcRI zF4z|fxBwOg3sQp2m7lum-HQQ&tD5^R zSLznTmZvuuLV*2}Cv>G*2jxdB{Q-ALBV&rN`Iz z+beM&2@>?74ptvz;P>qTJ`62>nVwQ#s{i-zmh6In@ZnYjKkrxVZ&^!QHJ7-XW~sgBw4@P3q>w$H$`pt_R}W(B>ks zlhrdl&GeCn6M0&dyA}FkC){VEHhp1h#=s)*G)&KOnlz&`BFS_asdXNy&(I1g(ee_@ zWvYFUA_2+f>p;8*jxNh1sud$Kk{7Ud1y=D$oEw{$@@MkF1M*Fxumq&+(n$*=6ldhn zD@~oaq3MYw2*;TwGg%Yl=dKnFj>>hnr$Ub*37J$QFvGH^)MqF$?6V=%C%y`;<63PD zS9INDgxFxbJz*>UR%a~;?&$ESQ@W|O)}DV~QV^-;TkCY2wDTwJ5KI%G)}Rrfyqa*6 z{7}mVQ`L+>!M&)j!ru@hN;DxH_M+6@U_95zP73a&sNdMkv9sddccQJ`?CM*()Gm!& z$M*+p1Di@c!`@%BsRM;>mWW7-gdL>FtS8%|jZmW>-c3{wFuvr|wG>sgeYGm>DpA$5 z9*xAv8jJH8xK?&YCDTe@acr@BRGLYD=YnEi6_?&hFGr9l*noRi_gGG;+4X%xJ>kxnX%{xwmQP4Ox zG0u3pzRqU0E>cr9f*26IWwDX0t+Qj7>)RvWBC0pBKjf0!yNF|$>$TI}&TnYToi+NC z0lPSHl|eNi76D7agh*YxJ^x<32x>ffzcQpQ2A$iU&;T|)j%KSElD(3YBT8N&TYn@B z>aZ-l<#Y^~^(Z5(z={CuJ#erXw(&b zYb@0;8a<*ADuq;8??bz~w6U)!EA!c+I^PFb6YH5I4nNyn>}}8uHY>AfoO8#@EsBM-Mo7R3cJEN5z^43ajIUl zbfxZChVJ<`tvTCv(aNao1g4DYsnuST$BWGaZ&5PxmBDmmi(O7Wt>14P!wNjXtTmWn zo_G)WS$Dvjh&6%B3r4d>L21`<(7@)9#o!n1s00r*?jB)0T%G%n{NXHwp6d~3YmEga z?o|K(!`fQ~*U@cB!WPpJGc)*znPo9EGcz+w79KG(Gcz+Yqs7e3l4V<#etmtTC;Fe5 zx!n)*vZJD&Dk`dS@0Dw1rq5j%@6Ol?t}XmrK9g>WupWFEk8Z?;6<>Nx?}gN=nwb$H z`xkcK+MB`_l2#+m3T@wvE%0zHc}u|uJ2-8B#JOpmcix{;u@%( zw?B`19)Qx8jkeHU`);`y;3}4~T`DzLwTEErun%?a>hc8@Cns<7=~?=Br#q%+UY3JO z0z*GM2?RW@O3#bV+{QWtk&NgYa;sp@JRuAwVq`VYD;>WzVA5M2#)=dZ3GyPTsIUri z1u@jRCRKs&d{Ov8rzDA$zGs(ocmEwxByRxSrNAOboS`SsvJyC(A$-gwzqDK9cYan| z#J%N&5N4r>Vcr`DU#z$*RVkLgaQIWUNbT;qM@-2s=ox4`U2(6n)N4gBA-p?$6~>-~ z{#swTc4+-E1%OXJFl={$Z#f*V%NWd!gcxQ=9=VW3YPZZl?^! zIu?bgiskLPxInY$<_vO_Sp4A{9cLsCo7pFiAv&(vbqTKJI8nv6kTW{vf?p(+Gi)MD ziNUDUMbNTBaEs|!e{NKDe!N^enNtdS*X=7)T`8^iAg!cTmYsf|$z%P+(JC7$Rq70@ zamN?Mq0u|FCLCSw3vn?O-6W){a)JVK0#M2C6AW_2vEq<&&h{a+LuQFNm7lV(>kT6u zbq6YSM=*DXN;nb5?PC$0hK-`X(&l35^HECQHJ6`gM$sA*=b|HeF3|sF)ntw8v1gUU zkn-2wC#K1B+r(-+FBW~bOLn43r)+m|6J2>n$E2`uiZ2tshwWJYGTmt590&y+ir_FL zVybbSt~1zeinX;Vx+inv^*-76A2f{;&aPScXRihl`QMcx|Fh$Oxs|OMqxk3Y|1U&x zlK(0!3F3_PwGDLs82q9ndMqZm4Xx~j4T3FHnfL-B9^B`4h%>UNvk^P~Q5-=9E{^u` z<%8zXg?>oMJm_uy_Br40+Hx*2 zttHPKl;Us#KZ&WkU4gVqv94>t%T)-X}A&`)0OsCfXG=(c)HnY0h& zb%+iUQ*~)CtdPMP&aeGbQJhl{u@yy(1z%eaB$~mGO0BnwzK<)t>`*;Uooh*MZ=jucUG5x>zOL$SQPf&&4kJ(P#mm)j6sAHqRuhYh8vr`aV^c zDd%P_JY2cbP94+~f!bM(m`~X`gX+b8?tqfOnIN8Wp;u5tMw9R@X5RtoNny_IimnZVXv~c)Qm^Ji7v+#6VxjUYs zKfI1J+oV8dJ(zi z^^R6?LmV*h?Vls^x^VGm%_qH!3;pl@iGMr(_n!x1#{cq9{O7%YmFFeuIv(hs628)$ zqvD}2l!_!*K(LkHK#x{C}T z|9pnmg^~cHJa8x{Fg@_!ke?d zM_VZMLX8p1ZYo33{_=q208S`f)dCaU5wmDGuBroghH@rH?GcPbAl<%BzYdT9P~mtF ziY!cjMF|Gl8)=S6j90zlpaXja)ko6C%iE(?)qI0V;hfi62GQ`yua~v3trYZEYOS3_ zSRe15R##?x`#8N;h91$h$*!?4oQ}rxNhT6VjX-2g1ly5$%ZNJ$OHEh4y0n%VQbenD z@?%l8_QP>nq327jDQz8x6mDb3RBeCeqT+4H5x}YF;i-j(v0`IO86TrJKYU*#qB;{w zLO+dLUz>lwj6XVWV4u<&tu7Xin1$0vapkFPF8bC13(-V*mDAK!MuU{5FH6zeyat?I zR~yR?O}0LBpg^k^bqqpoTS^wb4ZZ^xT8YnfZoHp?vWXB@V=XPwyd0cIq0x+E9`gBj zTrC7~1ZF2CZ6sTd-habfRXmWF0tL*?xN`-&kkR4rv#lsiUnH-}KlnH){DM?drC~Bh3B^9x6Fe_@^VI&lE=k9{4bV@_iqP{cH{Q4ExP zQgoR^52!YivlH0*Mz^x?+|1GM{{+9LZ1ZsJJ$S+HU{B~lk8w{%p)bhsMF*Sf_zX!M zCvOPT{05Na?3RQ%x#K&n<+A^9< zsSK1hY$Kz+Yr-YOf1LXUt5J(weVstqCrg>QT?Yrx%_#*uwx6#t84zJja_>h2Qt?&x#J?Y;t>D#6J^0W87NKGY!J zJBrFeYH2~<*eXf&Wjjh*j&*Fm@YFnO_jf9#zR?VLc3E{glrvAjMr2IO=@CPN9YAeO z2Z%6L+>!c=ko0G<^~ZmZtb6xCghroEtHKEX4#`>nJ=x*x%BX2)t8C`z;Owg5Z1t&J z{1<}P@WA;d|F~y0aDVjc`V(rxJn75;MtVeoCZG1jdBSKAlVliTjlv)?bjE&bTa>It z-*a=ND`*8`b5t9-+D#<9P(8+?C9JizRo|{9?731x&Gm!z)^C?+0wnJLJ>}O59d(yTKI27y2^cpO%1)kcCt*LXMc zOyx#VAX3C3yjE+^($A2PBD_&H+ogKFp(eJi3ZpQPg-yH6kb{+HENFM-P8V@*>CP9C zalT$>C>Za>@--fWZ1WlpinD%A2le0ylpL@E1*#5QfC6>EA+?bjAi3%>j@pDqiiz4W zml|#bkVp-;1X!eI7F`*wmf}>&qW@`E%p#-)uWD9UDXW|!td>y;6suIO22xfkR|1z* zOJvpL6;sYDm1}{ls%E8?)5Cl?N&*Uh?HZ9y#@Ry{?1WuW9Hj_pXF* zXO3a*3ApEZOH zE&yx+VojKGKP_X?sBOmxpn<`B&_y`W=1j4Ht8l!UeIy8ojr0FnrVxz5g2|v=vgd=~ zA@GBBKkZ?MaHEZw5(X%slW?>94WWZG0OrgjUr8lV1WogqaV|rcHgMZiLY{>c3 zpqlhK!%T!$<`yD}_Ixlx0Eju?st9t7i7RzL6M6(NsfRLf&qFlG53o0L#1G!YeG3`j z2i*L)PkV)cZew~S4JKwiGeudwhkA>RWju&;eZ!3U&AwB1=x~Qb_&qA^>=n&lVJz*w zi{~B5Vfp^2XH0Az(>}6iQtbEPE;rwlvhRa=7q1p?y|H!s&pf@cY3Hxd`Xz^1-3RpD z+GBl8y9T&#h_|cvcHQb@9(TfoAG35H{k(2()G8mL8W*n&aqltMm#;)S)rWuDb;gi! zev$^qY3_W#gD3npitqXs0_8h-`WjvFG4hwkf3}Fxb3M&7AvVmbsP2x3u+RJil29DX zSP6yk2WDuwG?IcH;0oYuma?n%c9gBP-^B@}SavmT*8jXg7M#M(8 z<5)aF3@CwLt|gL$AJ_7@NEm^* z9GjIGd-2o#eZHerXfFI>0QdmjqQ8|qblXi?^Flr?-&SDUzA5%wcq+mI-?52;3 zc7?vo*Rr+&%cnLdlNE{+WXRA+uN}~xR)OK#t|1#Ne~&l?TI`);`znj~@SVhriVl|( zYXw{m9R}hs_%m8WuQlfa%?`>)($tNv7$=gCVZL+Xu|lqt_C4f;8<^eCWk3ZMNg z;kS83;zbPfELIkG_d@!&6|9ssO+kH!+BSMJ4&mRd&HXa(sLX}?hFzqw*&2H(`j)>x zLx|Z5wEN4@eyYSfAssYihtbp+aRgW3$!%WHA(I&YRxk40(3d_aGOZG%QO|T2(+VeS zmdf8*9#)MLEhWxni*Rd>oNn|(MZ6?l&{&karl`AHE2c+6Ew;fa!98- zPizg;X>HoEG@FTVmW4Kx+jcJ!SV7h!jDi%F3n8*9*fb6_Tu)?LuiL>mnkAv9ltFn| z0~}4Jqu!4VCiriq1kyP0@Ih!DJ6wlVairIUIATbdy{ms)FQS{@QBo(4#W8y}?i`zQaYo;yY;~$q_46fE#tJrayMDX>y7w}%p0`1FSXC6y@T3dzC1@8M{Q6o1@TfV6B&_On~r*vbGqv^&*F z?@$$mDJR;0aAdvj0i1zo?{7~CRc%PvP@4=`FfAG2Mw$XqE`eWD?CnMB6zey z_NZc*dI?*j7;43THs5th`M)&+%rwMFZdt zF2nh~ER=qDCSFzyZVzBPwyI*0nH`jE?u8L0fp&1)1ka5rf$ODML zSQVV@>qWtefpxn=+euQ*2x_RK5sdsd-35-*UF4z-dnK!iF!ay%4h{vm4lXi^`t`2G zpMpIgnHKso+-~=mS-wsjLdW%lCH>mIlq%kqNpTvi^ZeNa$Kuq!6uU(n+b9n7LS_Q1 zdvwaOh;tD*hD!1dJ7$xbZ{h%kQ3~SJp(XRi9*W1}{b~+yBRZ2J-e{0&TtlPLVl}Rt zOLWFNk9Q-AUxR0ll8d}ag}eB;*tvcZMke4;iYIuv>=v&rLdGWSjPMiwv_31hwwaZ# zmy+T}x?idJ#ax8Ovy8GG4Q^g&*fXM&_%YHgtX)czXjbirPoDvEkilSs*ev=2;i(jP zlItn>!qrnpv}(ERX{fv=%28%-@_HELA2mgrF_Tq#LJBJ_reqU7kqe{?rE_RWv#kE% zlWWcyDpvlzxj=F}Oz<`2-|i32J!-epNfs-$Pod{w+*Al0z&ZzZexZpPFVR@y6#Fi! z>olki@0efl@+x_l`uK1v+Lj3?+MDVU{>BUkQ^_6_j2jo@T7(+bL=EOEV4muBj?Wx; z#h@QgOlc3*mu6R>SoNiOd~zYL0J(QV{QYI~@2)KaoX5pV$|CH7Y27Yz0Zv>25skVaru6Hd80x~>nuYJA3FXDGLZ%0LmP9gn6@{3 zgD|SQ43(lfR7|?>td3sw7@~#UzOzu)eJS`T*=Ev~80|304+c*P*niy*gW2Pi&C3(_h$~h= zUS2`_JIl~MShkqog#US>ThQcp%GTpU8?$=gmMsu@<%;FfwYlL*niF}nnf?`Y#4r;5 zF2(tlYRbbeuX3VE1eZZCprO<-cB8~!%i!6|de2jlLM`hk5EGl^&48B2<+{b_D<4)+ zPlT}_>SM$*5E`N*yOw0gMMoB<2X0o6;p@mUlR5t~|a>#ki|L7yimDg2N!Zxc=d;eLF~} zg=puw)LkO3n$!uHu082}n;a_^a zBPqNLLLOua>JsH@2f7C8uE8-BVx>2BQ)%3)6mE|z|g zJFZMfXNMbiMI^!bCKT8UBg;os8=RODKEX_o^x(g<-|U=`g1|FyBc7)YTs{Nser4KJ zB1=6xNz9#=wJfYC4f!#SLGiaR(Es58QeH1`|i{jfF5m3=*d&Jv|{ zGS9Vz9@h06Z{z^i=3$E;MI>Ru@jC&-jRHM$#m|=lv?P;@UC1cGRJIY{tN>JMDH{ z;vk(n)OO6>(9L_7wX&%q~@rpR$CC83mnjtWhTug1e{h3K5Hdan+pXn8Xcc1X5^ElcA#Xx zwfRi%G)LKvsM+gCC8$wZPaA0vKrgOfshw~dPhMZQDVr(2UT*%mJK@>znvFca~DMOPNay&q;%GY)Zd-t zb&xLq?j!wx(w>JTB-}8#{1*6wyUFg;BU|K8{TgueWziSktaj{Ez7wKtV6ROo<(B)H zm~%>X!)HdikQhplb}73eOcs-$hupUKa%_LbnEFRKS$@tSc#uqVaUnmxoleoOeM;( zV*X1;`2)s9>N~dz+KcOu%@K6fQa4FjRLNb?2p>z2U<$9oQH~nc2xFYGdlK6>$=!Tb zr+O~6jU#(biz@q(iUX<+d%S=Wnh|Fob3|HsOfIPpp*%e5hPIc%jmYDDch}iua9KM$vF0WCo(94B=;FoI<%o1&(~7q?eSuj%sN=Om3#nPCiV#6%# z(6o50C5mo}8XZ}hQYlzJ-s&OPkfVfI$lofzX)`mhsEjtAT)wMr@=IYHWV%X9u+D8? z?+CQDb(Q@+oJ;Ei!x5s7h)bfOV$K^TM~uRo#Oqz{XRo#{x2$J_MYO@I#9Lus!{boq ziqqj?1JK|sCxldxhgKsI_V8@{s3!D+`U@|xXhc$Gs47AI8w2pQy~0p)AUvqSJ$s}* zXcJmsj2gZaV;b1*Ud>o{ zdT+T`FI${!i+Vl_j2%vJ;cW8igokh3Y1&-7zh6@DQZ!bk74>$W@H zJ~rOV7^mOTJHpJ%QU`X{c$74=qi#dFjIPA^t%JlooFQBH z5~=>oaU3*sTu`gjX3H@lC>3`O4M6D9N_%ptQ#ELytYMgL|5SFeT-AzC(D`IK6(Mi1 z=TGv6Z`Qj+QrI*remRYI%)T_1pVrf9fC`)`rjyZMr@PnoHTDSp8}FQJ^h$5-baf4E zh*`BBY_UWWC=MvFh)Jqb7x&J{bOxd;m7}<;hGuIc@|7`+fTvwP)hAP&#ByOmz*&SA zV%nSi9G6i(F9t@C?5TDBJ$AhJ&Ll^Rj9z5lO1!Fz_f&E`h5VhXxjoEM()exY5{%H6 z;JYtCPlD3rdl{K^qAgA>kyKPHdF58Yk(86|*soD#lXlm^Kjf>zF&Mmy02jaL)2+)s zDp0|aSswh!az)w4SVd&c{?3OV0iec6NU7$Bv5<`6hoFs|w@UAv2X5kG)B(uIT9v1T z+qJWpec?h(d~9WhmCw~sOwMrEAV^3?D4x_x5Cx0yo8;h=hG4hoCGBq zQ&;XBlBhs_-Ecs}<>Uij&8`pMYa|lU2qgTnIeLLj&$7*c^SmaJpDk?B6&2MQms^XG zY$K{82ME{|3bnBrA-ZdDMkW&@P>L!=-7@WSZ)ZP-+K$)Z&eh$I2r^i>2PdXF8@2oP z7aa>zu)a&QF}iC;s&+&~)|r9I%8nv~GSNYv>=y~qdsML`#qv*+L>tk<#Z=`Lj8)mg z7q7vvX6e1Df6Z_JAOC8;e+DK(e0ur(-|cGt8@c0u?Q;AJUMN(IJpWhY0nz2+o12t?HTyI6pAwys?-5bCY-X?Joax zUj3LLPC?)`ijP3-_KJaG`${P8E}r-2&aWE}i<{}IncF%4cc^}?JAL1hz0x2ZcmbvQ z!u)DOwShAD8{n(#z^R|)p4?Y?>HAcSTS;bykr0e^$j&=)@NG}tK%$C~V#Paq@E$Ho zF{(iS>@x`h6QH@1b|fyQSa;n)CPtJposss)Sh}(kz89uPu><05h2~gsBx8O>JGGy| z0ol;JXzNpegHz4<1xS67kaO;HblKi!(@n(2aTB$*C6GuO$7&WqMhXCv2>roxyf457&i^>0ARn;oQ01p zIx=Iys|N_%3^e;}U26;Yq!kG4mmDDKuVZBPwiKz+=~%i|ZLp2kT2JM+lC`=@v`v=) z7bKw83XRrlTj_N5j~N)(YW?$GdJOs55Ti6Sx~;UwtR;Fu3)SbPkJ&~w_OFJ0o`+_= zgwDt0NEL6HR%u?rpKZCo=SsfPSIX_>?I{5Nqq-VXv2^EGd$vpbLH%QVXs<+=xjfSC zjtSK?QF*vip}lpwF73xKUH#$~!SJhqx<-Zr%%K}QdNrs4CwdvPJE8Z3 z4Qbv1%c7r2Vxw)@pTgj4TipH@`cw7o;T;3CcIAfh5jQ`RCGiAiT?;*&Vg@%J%>@EC-ps)SVkcMRG3Pku zC&<5-9XEc_H~W%Nd{QznQKYj6I7aXZx)KZ|+(JbZ5lZd9|3;z2Wgw!ua-(G;iAcbD zlcVwAfMU^_MZY8ZT7oKpmzfln)(_MKw}W+O2xHMDKKG=vf5TD?Bl9)L3MObQ!A{BZ zD`?JsNUq$y^PTaPLY&#w_w8?apL0@BhpiDI`GslD72QbenAsoDn{m(n8|5uEm_}?%`(#YP__J8$U zH4%KXG~7OjrB;4w{Z3r7&ldG7mbxfzRgv&ocB^cb%Kp5?^4 zOkTvmN`{w)Y4Qt1Nl7y#v@82CQZsd z_mz(wmmBWWT%VhcQ~mSlyxu3ifR?BDNaBj(O4khODK+ha#bcmaWwUY#t!kx`Rf_bb z8hm-PP{}s1rJ`A)#1H6Jxm=>$CSCd&YwoQYS&^)Gj+Anve6F8zqhZ-3{0wiWWLYJQ z2+s~&E}nOTw^J$CD!7K%t5b{;=Ec~kP^=Q>q-i!N$inE!y;{~Cx6ZUSzA=Bd9o1_E1^BoAK1Q-~y3ozaV!Pwl91{ww4 z`qU#4V|lIw(=y)((F@SrX$8)~Wn;Z&_OC+C!upEr=@98(l<}9N$M7taqwn*e*8b<> ztFmVXrmhng2k$GprxX~6z(;l0-cQX(5DtdSv4_eCWIhmM?8FMgAZH@G zvtz97H-PUx5<~30903C0qT#zK?(71Iy;1v@z`s-8Mfc~6kG#SJe#d$x4qSzL9~MM$ zv^pw5V0%aqDMEl^AS)BcmbpcHQ!g4>>{2y^dsizec?}kyx--C2+r!4AFYCZln+hQQ zs9CV?rn;kzS=qZ~(~jy}wIu9d??n5yQjYaeyr72rst|KA-2a2c5s`lJOq-N*GCAw6 z4exqzj(vmthaV=Sg-?UFg(DeNIYr{Gb`_?ya zkw?%#ebiX;5`gb(k{~qm?B~DF5y|TnIs!kY3zL}+8bl{|QFsYrhMydDq!mh%@T;M2 znjF6sbT?j<3SZLI*)p`hTfI$uX;1G{$h=-mRyQ}DPVbwD#=#G1D|9aH(JG}O8LzEn z?ElV6WtUggiq60|JZEATF+v7n=z0}ToLNX-FdJ{J^@Nz1i2sqDw3ph93#S93HBW0} zDHl?}rE9IoU;A|=F<^O}6*`CS;s*BK;W&IE;-Kuo5sMi?=6B-PAiS>&K7!UHSHLwJd!-K_2(hwzGF~&`s!I6i#t`EMClf&ckN#ilr#E zCJSLIuY>~wNq7Jb_HuTYkN1b`j`kk}3*m!m5d8Jp)7E$NlE;BIzVpqb>h5>7P`$6d zl43@4fKX408J&#ji>)>Eb-QQ#d2}gqrG?U;awc*W#PsIM!iz5)St-w`c)LhdP)pZu z*S4r4_&^KZR*SmEjN^9T&nQ%hfL(+eo9Xh5jq&N4hWY_l6+agl6NqnAuei*0Bhh%g zOZW;9zqk-Jo+pyHj|IL2;D^F+4ttpzg9a_PTk0Dy)K2QJvWTcMaSb| zz>JVKkqAwHUYAejQT0iyPm&(7oG*xwl4n$FHhH_nYGx@^Pf^!SQ(Heqbov_ipvdzR zoFJN1$B7oB$KflTly~Zpy&7#NctKn(kz1{Aea7}8x}hi6FI1F~lc92mPKASH$*mBJ zU0DbDkzMe~#p6)TzP35h)F8BtOHvrar5;|x-eWali|0|!r%9i&SFdD*Kbx`yk97iw z9$8itI#nl^m+23xjrEIg#wl3}(lhAAn`uYhE4OxARBoAB^nAFb+j6(87Qf0&KZicn6f;?a_47{E5?@}?k9 z!x2GHsr7B@Q$#FQP+Q(XN$6-l}_ZwvUl+Spy}wz6DYK+WZw zOZW7w{+XVn@=E1@-$Hd9n) zt^$8(RB5o4b1V6M=-gCX1cPh=-@8cLCTT;BU+*ndJ^Ewqi(s&b|KonHh(AW-#<4qo z(rrHCEidTDs(>1-kJ+Hs@#d;N`7T?spVTNJW(X-x)U@BrQtpL8dpFl?)yH$N4uHeQCsZ6OMnl7 zn^2w)WI{kK7p>URyDb81_)Ac_M;~H$SGQmmN zsBFmO14lu);0Vs(QdCoRfu$4gH1@cHU+2`>qH~qDc%skpE$iU42~xB2+>DhiAUUHn zGgy-z%bFI_b)EAqS&|^^Zy07>F>kzC^xOz8gVwiSI{YFPT9V8m+n^%Hl<=Q0?|9aZTlp#=KGmd1C&#XWa@h*u(0M)j20SbA{ruBouZf1Z)H|bRtqwItIiR zgb|4+@5JHwVT7GIJvG9>d4o%NBlrSMR@S$4h+R&-w};X5#;Xf4aKf9@44=i&yx90YXwQ4-2BK<)je_c)D zy7mVB8sa+q&7)rmMQ}*o?imE3Q+($K3xx^4tC%i`^GJt8xABgS#4KxAQDcb6+b)Cd zJJ&(&Wjmg#YA*R(`Xf9R5dj~wI(;w7?)Nn1FL>EL1bfq%6)+hfb-gYQ`kNQ|cG>>S zyw-SQD?FsrGQwQA;19hu=0WaM7MX)XudhFR*j64lV%_1hqWhbqD2 zmm3z3lYq&;gFjDwj(B>aP#h;3x^(O}H;X-xo#ZqpRvX-qxAqSa{-o=QZS5#H$8Wbj z0nfD-TLuDHqVKRBXH;nB&Iq5GsZ9-n(06$R?$7d{gA!K9fS$Mp`%6CwbwRg-akoa~ zy>k{fFzvYCM6vxt{NErYepPRW=E-nKk;(O^MVYg|ep!*Un7Q3guh$nKu=7X8T))(x z=JPskuhNL!BkX94!#C~m3!kKq!+QS@g@mxxURf~WmoIxn|Bi9u_@7sU3U02BZvTXW z{A;u}=TjVkA%^nK<8wY^>byx2&s+``WDh=J2)T?{h$3oIi)N3oL)A3H!o=G&I}IAf z*YCgl_K!5;nP5AB`vJoDWr6xHvGMa2)w(SxeBGth{Nl3m;-ap~`}fc9{yoTs7`w%H z*6?*DObJ10L3x9#1XL3JN++5}?Gp{d4b%5vV_^iuPQKGlQHSWU3fuyRui1z0tesBc zLhwb(e2gP9%Gt{E(H0mqT&4L?)R^U5)%lon(oUk0MatRg^MTmKo=QU0jmiXR2WC+G zi$ySp@b3HEP+j-Z2pdc*LGIa#_f+P^o+6P=%DT!4W87aE%2Ax3fG27gOjQSXRBD>- z^(3r27VzO0^_nnc6Y+lHxYTch>J$sFjj1(^=(QlYLMv7VdO3pp`AC;HS ztW3Y#UefqD4LHPlcbz3~#{u$soLGq4&d;o=^rJYPt0bF_@V|ZcwB!T#=mu&v=3^3# z^wB$8+N-l_sh`L~n?iH3d(X8>`k$Z9QMh}M;vdgmX4QL7T-E8cdyje0y__S>pcz9R zSVR=e@1#}Lb24VmW#axKuBm^sVsA5I-%p+dLxd~hTG`u(cjd0P_1mJSpYyUGK=1u# z_AAga1RF#!yDZ1v<*1iFu%^zSkV4PPNI@H%5xz{;WF6kK&cX6xTI{z>q-qnQeyrO9 zZ#D-T{?Rn(aV@ri#LY%^9!GUA3E8`yX-#Qv?w&3sida3COAmt|GI7+q?VdUlNKQYa zh=@4FlIB#QfFG+w5=o543+Tl1ZKc?LW6C;mnra9_2i!YxGU9BM(Me1vMSuD0#V^rr-@bfNGaok-bsm|= zT$h$AQbm)`B{kZpRRBAn!sOXEj)>eUYbqoOlJgm=uR^VqA7`p}%a6T@0H!SW#+b9o zVH?FrNb-MvL`;st7SV;e{5>j=Q=)Rjof>un{(4URs#hh~Waefzq%Fca+ zctx@pFL>M-eg$x*~)ay?VfSE4ZQ}9G{t=1EH3sp`vS~fL%`4|e-h3skOv}?3Id7Ush z1wnr2rSLCd_h%WgQlVrwRfc;EAdQ4cD{GzxaQaPkl>=p~)eWHM6|ZY?*HQ$0?()Xk zXX^CE>Oec>CZ#9ufWIdbg_aF`#F|(Xw0Jm5&Nx@}xAR}vdZLKJbENM94AD}t_ObHv zt9(fE-TeIyXO@sQ-{e%1v-j-$84TW6QSi62ue$kh~o#}r@hmb}O& ze)WuX7Rhn&*#MOHmM=pPgnZS$&4u?@lE*!m!uMtQ%kChob$KyjBk+*CT#Ta}Jv`;y z&_A<6z4BzMgH{e0Y2i6Kzj;$=+DwWCNB#g8$%=N{{+0Lb1zhFZv`Qc7YV)WaWTpI=XnYUxEuAaJV5uU%kcCh_=aCgd>CL#k zBgSrahMV&n$LVTz=Zsyrw8yNE)MoKl+S0!F+n&>0mrw36+vi43pXc|H{};*wS133r z9}HLETGgHu)E^AKl07S^KbU+)dsHCOm`)jmrZt^3 z;;WTSfzU^XHEvu$C!ab(rj<<=HPT3vG=ip;JXJUtdcSrx2&p?=AG7ZdB4*~BzM~m3 zVUQgT1*Ea?9Sl+s$q!Nj(wI@~SXw)ops<;AkAjeQP1_ekD?G(-zn{*WHPgVi^0 zUjW}k@Zb(1hu>50HJ&0&H~iO)LnKU(_M2w^Ii)tL^n9QH!M*Ze-EQZ z^I8FP#?gHZ1v=js0#)BcF@x`7fzXF)YJh>M%JHE&HD(OP&)}NfDq|ddl@Z6>nK1)3 zCvaqmyJ5-H=RJ)|oY1@qV>V<2&2yYLWlR$fGBZ;PkK7jQC({*1$C z=plVDpV(amIc83)yb?3DA1RnSksIvnKU&N%pL&^HY@Q#D~0$wCz8wf^CsF%rk)Wol%S@N9U|Mvb1(-R z3KZmX=!7t4Ztf$!VMP9lcTWLu);N_xv6}}D_xLUh`<0rXzsHkyPArR4_^r5I%Q>-r z42m;h*{+HZV$GayV?^8K$IfVIifuk%syi%iv>e1^*?+B#6ARu?g#ss6F?E(LZ|6gU zKbN~A%XBW2Q-g`YK@BTKy>u&$q1L9@P_AyVlEZ&GF!YgdQlY5C)@boamKbFI>uU}? z51VkdauVdsEF5Unq|nyIih;^%DFuUtf*7Hl)+Zd9BB`nZr(i1~CS`rUF4baB2$0V% z`3P&8wT3v4ir;(kheYJZBJacN7WZpZxN7>-*cN&~KTt1ZynljnjMuSqQ9VDHoUw4V zQc|1TX_-?H2xKH+3SEAH^6z76Ne6hJy-;RbVw9eGDBum$q{QTr5S}k3gI?NZotgCP^%uRlehIQ75(m7CyQE+3C>MYW9 zA=p?P)Sh@wz>t@912(6po)0DqKTJmVJ{2Q0z9vBN^-=CdxKVR$R@)tB%@j?Hax58iK5OIaI01N)rcb`vYtwW%<)x; zmojJd3R);fC>Y>}8dF2K4eCf_i7dJ6tpdMX%i0`HQpOjF6=_ST6xR%0>1-gHGp&&~ zyD=nyv#=LO+G>moX&qQ%O>^=aEN2tu#%S!Z96k7I0muxPB^~vU% zVhhdTz8T7R^Z8v5Fm8#sL&>I+Pl9byD=bnu{EsK8bnGdqai08zfSZE5z)z2Qc(3rr zWZwikOzIgW0qsrcKDKkP#V~cuJsQ*waho4CBQs*kvD2i3()5*KNwM0vF^c~mYv&ka z+t+USQ?_l}wr$(C%~Q5*+qP}n<|*?OyWacW+evr2|Mx?8vcK(QuVk;4`K&qS7~^-} zQd5U(m$W1-r8BPrK*d^aH3uowT_Zw)qttSmL42v%;@Uu&B|XRA!KZ`8Ow^8DEJweE zoqvePJV8`#L%<_yS2dw*J1$Vz&`cw`o|)>=wJ5&ww?KJJ7wnw)Md@*|*%_UI)k0lv zoBZ&>2q(D ztv%?WvtiXxC~Dz@uci?^O;a@z6%sp-|E+7+KCVI%Ke>Nm>!FF8EZN4hf#hHl@XC#V zOW^KKxMr*m9V^72p+aHa$(y=l&WCJ?1KO?q`ctl#0-b?Ia*NwZ2w=B8M!04ySA8a` z2lnTie#c%zs_F6B{C?W0NA`Os$&VTfTs6Q;ME1mWt>*)8h)ssELU(O1gw#4ytC+QI z7jryPmbPLZ^$G3Ctw1F9WG_#^YA=DEl6o(2B$N!LR zq-{utHA$Smu(3YhvA^`Wk^>2)}f z?-4K;2#fB2uGOZydIl(&xZ2r@@amDL={6;ky@!bs^(JKs#AejYN$2)vCHA%g(+n$G z>pe;97V@i-K(UlA3bat}*Ltd9>)+2pyR)A3b&r)|KzoU5%aB;MO|J)mBYysUVwRFu zk9Yd{EJ`x64w0NrB!t*S9!k5cWsF4rVNA==Qy2*%V)=B6tXxFgY%;Cv0A(}dibDw( zMNhF8gK_mdy}{|E>*ImW5|ZuKncU4u+U3N|K8zF#)82d}lNHSq`>U_VyNjs14Bf*b z8`5sxY#S9+Rx2n|?-|}_(V2Yyt6hlJ&1HzeE91Q!7u{(mvx!X(B<#PkO!FZQr0Rhu zNwkC9yrJAx(hjGH{z<vi>qsR7;tp)vJ&e*Lr1b zOSV@?XjctcRvqk)l$%fYi%%6Fs7bQe;+o1EWW^@df%{hV0agtQS`Uqzj~Z%6FlvXB zD5p@`<3-~QFm}m!-{hm>?K@+OWY^{ELXTh=0;`4tR-vk}D=ifYXvaPs{F*@s%?n?h zBi|89d<6!uKxZBg^t8a9NiNA($q27whC?WawOP<$ms>zc9-uFB9V((x&Tmmz?~JKf zadj5&tkdxPg(e<*D0pt6O^h=%yg*kXJ&=ZG@>%XI!58$-!Bs&I0j z{A8RwKR?X@IA&JC5&b8$sX7vVAVnRo@CuTG+yAFfz8_F8?+<+=N5?IOqqGe^Hk8z+ z!Pa810^58(hiC75RFhelM>*2xfU?SQU0K4=`^CD+` zQ9h}^2#A}Je0(*&zmlb^kuN}UrHFrsVkeRE1^J%m@zjH2H{rb@)-eIf@UKSa1LlV< z_VcYJ>E@Z$CBl(w|9vk{v*0BLYi@BFu9v zQ?}277lfvr(piEdz&m@`R^U$JUVo>wkM;iTVR*hhxWD~LfOzW)Fm3n z|A>Rrx;t54VO!a4irzcjQ?*n9X!sG2NCaA8OGRh0mpO2BhHYJ<2=K};NfHXib0#!Y zy+5(NA6+}9!i}3DyP4rv4`ruk|9sN3aV`!@LtUb-9a6+B7@ucE>9~Uu>9fVg9slUa z*@g0by}nJ~PQ6>)e;jn~-*O0^DIp&ak2)zAm8lyzw?hcN?lS8jcj6D88Fk2<2mk=j zpC3OO;q|L!(+Dd)8>uMj_uO zse4pu^8b51rdWap!o)#DT@u`Uy-1@M(O^j%1@Oj|NZ`rg=`Rc5hwtINblF?HcBvnm z(8Rxqow|hJ3w~Gf%hkXBi8LmFxMb%$b5*r%a!mJO{}+NL8es z~E=zQjxeC-#X0X-1yp}v^2 zn2N9p+`|oHoJ#{X{2%QyJr#Kh+J0DD8Vc$j zcM^3(GVaGD>Bo%aS>ub`B2qeGA2DEf{y6jHo4O^PhRj{-`Hty-O{8S?CHFJglPH`6 z8u0|qA=m=b5O$fhU-8nfH4ya!ParQd)IDj?&LvdJsJE=TSTxl6{5N6SNN*wg|Z)BD~_w$ZM>XZ2?BlH&MJF&Wl7qhc%Eo zu27dH9;Ul_eN{vI!p<_t0)4%;?j>WqL^F#| zRUp#mqBQ(+-1c#_#ORO<$sr-l8%W~sw03f+o6wQU6sv_e-f93IV_hG;J%kDn6zc&* z0D449sIXw?64bLu!Jr5Niid?<9Cv_@P1Z)$fI`U|>It{YAg&W&1X$qoDQ`vp{0*^PJre^p=)3y2^`Lh-Qcb62Ed(Ft)dw#nUMf z?~LFDdOV2!K}PhQ5B|Ym^djMri{4d84||Ut1!w2T%OBF0cY53^?Oi04*sD;ZPeb+j z*KEeb#aQxcC?vj=LAdW?46F;h#X$jQ4`5l)8uN2$bsS6T}q8PHgv#8s7fiRpvM;(WE@fTSI#kO}0sU7WeeUm=2psu;U&Np~M!G3@T( zXS5xCg@lB_(x!;gZ6-LT#;MW_jhLLU@^Bej3>Je(j;wdXOd8qRo7?t|Rx-aSK>h&Y zm+a_#U{_b;%fpLFv0n;+Q|ZGoC$dF7lWQhdyCF9_=DOmaM%fqK=1Ff+xM!7pDK7_; z_%@j~HJn8$*UCOzy)`{jEjt0WVU7vEnd5F3Hloq}#(zifd2f%L+75^ibOh!moYEv- zR@G$mT5wt>ra|@yYc$?<>QA`Pg(vxY9v)QyR76bf$fd=IvNrhHBl=c`E#u3Sz`{74 zOQ@$rOl*9|lPm(ofs?$H?jSNnj}7bfNhbM-Es^73dy%rDf-PfXTH>dCCB1=GN+H49 zImRXsU>fcj2{;#Z=P88B*ok4RhEx$)%43wdy(a z`i^8&;ld}xV-51i4gtlo;FmMs8?j4$2wSN+44T4VFoFVdDpOp_0>TpMJ5F!EHT3ef z#5ZGH6pI!*p@z>59kx|0zHMzd-A&GLvPqg+J= z;~t|W;afO0#D3md4i!?8KPD=c45*HKz1A0wcCf6IPlX`c7YJ2fsn3W_>r;+o-eRaxRR>v= zn4>Q)9s=~hMu2K<4r3$1Ufixfzdq4Gbp~bNo-P2S6YS8(A5tQ@E2hR2^iaT(;DuO-ocidH#a#{H-i}}F6xgE}bI^`R8s&ARx+Nf0t3XO*p}TXB zOPf(xM8(+`F+S0&7dd2IOGdFv_W1J~Iie7IR_(1pXgiq--SURH!{p&FGZ)ASs0xeq z$S(vtCW=S2&wKwFK4%2^jbx8_tpxt7nU4*rqEM!x$P;`IPkNM0H`@YX{3^ZrI$l){ z`+DAzCI-ejEpKpBBU0ctEoCt5ksW}wNUdF)P3vOn(bLLrjcA>%*mSQ8Gw29tjS7{w zNu>2)WM{xsdXlJFKAjnJnCn3bePeqq$%5P*u_nPn9zRfK`Ed0Fxj5a%XoA84G_T91 zllkn{_(r$|kM+JSdKji1p3Dt^aHm>VmY1BzBaAuoC@(k_(n+%xYJK;_2kLSU0saGi z7E{M@rB^9N@zDN?vfHV2mYd4%+agQec@CSo_>WE@nyh#_bpE2I^m@D)g9*Vyd}N9= zv3NtcYbCjMz9mf}D;t<3TJjnT#yL%nL3_C0ra&{{p=R;IkoamjGQl?x$;^bMgc*Yt zgS^r9b|=1C`!78c4X0L-2wAxfK?RCGb=<{W{8vG&4gimh0}`kC9qeJws0Jzf?V! zZ`&^Ityr_H0?ey{n2FEVK-bsz%;^HoJ3TH_ZiB*L7XU>{Ig|<9p@~scWL97Y(4NO> zhP6Ev=TgNCJ)(}5mwOMN{ZjXg}nU#&>9`@v;QzDI7Y=R&^cdoh3F z?$TA%_b^XC^Z+)|riDp2=tlW7*-pqcO|l%xHSMxnHSLDg$iwKhXt}`FPBW}`q(ULN z>Qm-&w1#|nT1pp*uV~1aozzwK^y>VApj%gKf~rLoZ1`SX`EV+k)(gTrjEl~!;-}u- zW3;2#ib1=rIDU;XlS*UXReZF~y*+JSWz7kunP>InS!cULnwAC@(KJAo{SGAtGlrng zd($ZlUuvomA$pKVL0;ez-(NoATnx6+Q*%Dgvn~%#wYEQWLa)p}?rQ`3yrWW)ieK<} zth<0xv=&L(VGy-$@&l`CRHWj-&u6mX(QWgbsZyY!HM?TO zd?GmeYx8(#8JfQmCrKiTXwf5Ns<)Ib{Z3i@H18zOj#1l*T8#E@TR^QlLA7WT&Cm9^ zDx>^k!q=fYWwt+hSG~+yf11oHnP-@^`Ljk9E(+#*OeFA4D+rYY=zUrs(oq1U@~aeq zAAF+OScF*ARbEDD36I^NMd33Z>E11o(BIHuOXZj~NS}=h35#nRr+rgq_lhkhzA|)x z_txLc=Xw4@E}pxgu;qhu-a%H&vq!ea-xbJpBtUpD+PDXK`-0hx93v%~Z1V})tn}IY zU4C?R{y~K`)M<<*xf-2{s|$bo09yOC3Zr>LRT?izCo%E#8}wgijVTa-PNA^BegP={ zf7{?1IXN|}{cLbqkw3A&BO=j(RtDgP!&imBj)tBstDO8cbmn85L?nbM6bsMDujjsd zq%LSSG2YSw@e#(o+-KTT)gEtMz;uDSjJPNfFZ@&Tgdi8w{@l)LzHyR73i+8u(K*7h&^)3FZL`K`fsns(fbrtFC0}pca>HGL+*rO6gWT z0c8J~VliK2fj|mB`GV;+OoTf&eHsFc)EVsnV#_iBU?>9Md^Htd9^E2vnrw;FHFS_!25cw+R~!Wz zDtgfE?8=ho#%#!D39R2DASd0|-?ptTpN~5K*u|Hd(#mPao{-U(+uODb z8n($%6kZzrjyK@n)M|~m@{cfV1+(>xm~rGxIf`^r4hl*j5K8nX9O36Nf2~6=gzLxv zg86wBNTj=mltri+)@9-f%pBMw(^`U)v8Aw#MPa$-)+KL#eLK^7Q$P2}5stuJAB)ak z;UeYl&pw&JQH>G>Jo=Uf@W$^bGYojyQT#5z#JM36CjJbfJdtxu3-ZagMMRh(oBO+Q z?*6BI(gfcDFVQYns^F)bAqHwn-g+ho{4MK^-RXE}wmQ6eNmDesoMznzHi=_`wuoTS z*)WvFXT@hg17DlJKBFRhKMp}(L4U}$SWryco)m<~8my^_U>;0XM=SG;AO!`|ioWZ0 zdX8PpJs%d-^F;f+K5QoY+j4C5=%ov<3)P zdvvzlkC?OoOTuopI)pXLWvGy=+?uBi5K9Lo)GQi2#h9loYRA#}rFf0jRSXYnzbC@K z=8zp_aR6ZnN);G6FC8yUn(0`%H+kCj>$P~c&NbJ;f(xVtF>gGGNeFb-dTP9X*l0H0 zz{>y@5>@9yaEv<^68pftjw$f{4c@4sx(*fh8~`IO+f=Tp#*sC58V^;}yc)2x)vfjA z(8Cv4drk7XA0;}^B@Lg8caEJ!ga=nk<;|dEq+P}6Qih9#1!8bD8?^QO)7h0PZ#ECRTV&x-n;f-4 z2?bthaW^xXBPAi4Gi||q1tHs)tK;7^n?|Bj?&A*_ z#y+nf4}l+#W;JfM3nf;D;zQ3U_L`gU^v9n9{mQB;NgF!H<;snkkF#%{M6 zx@D^1J(F(liI|w;+h$N4#RHaEGXvKZ+)5!2mF7A^IG4PGi$}oWLmt%U2RyH(^%gp_ zcw|JI-FY;I3EsrXS_02zthn&UI^wf(`7XmWD^aQ~(-7}Po}L-AF1r8t-GSnUNM=?1BZ0t)7P&f7J{9;O705B z$e(JZGg}Iu=D}!_=)HT8Ht}B||61Y2WHs}`ehMv-5dLX}{|Ek`y@8{Xi6h;=(^pC+ z&dwILW={V$-6bo^$YC+S`;;Ul-6}vLOSU`k3sl!BdmbuM_$h}YCzbK_S%(apA4dOK zSNUs&{RZ?_STV!tAH=E^&hsbJBZn;qW43npg%7}cz!qo|rc3E{j+1@Xr($}Jn61dh zqcm|V@mkSzE#-0BOb60KHGxm{RU0W=m<<%w+G(}sBgTO=x}gwr9sdRme3zmg4zzhjQbGmEut_qKT8YDN~g>U!OVVVtY=e zx{^F%x7BnR_14jmqUdL*duV8=;dd z&o`(Kcald4nDM7^5;rBS1_ujo{9Phb3MOpTU@B%WkA0+y903C!k}oUe0<3sxzSnx& zc?hnYz<~yKB{QvqnKk9$YPG^by&o#gOBO zJ3rBBRv`zJHOKy@JbJL;3#%Ebu2Cv}d!z>hJtKyLpF_kNBZ>o5UD2(+$S}KlYzMID zFe~-AD9FnD+`)FvZ5rTG}_fNP2VqDw~s4ir1o;u&{9#ZF+EkbSZ!NB5J=(kqZulr1w&llZbPNkd=%+;n$USSaT-yF89z0oRJC>)j?^Y%? z7i&xgC)zmCO4m0h)eW!N5KuO}YGB z^HE$7YV-SR3MD>8!Soar;X`8!#eQ6HG zKD%a!sa1E_yIjUQwt47s4NHB;No3bVvo}WKNzaNk(x)=9a2atqf96N)i{|63j9!f8 zTj)1DG@epzcF#T9D*(*pqe&Ve*1c%wc&KH_fh11y&e`-D>4xFv-a}^FEfb~@U;Z5m zt9%|`hh>Y$zc2@;Q%duhN(K=KF#|UU^V4kQQ^&6?CSvZjIzF-^Rlgo9|4D+(TB$~SUfz_>` zUI*PW{xsSUhOzui?ST_j@G2Szlnt~>JB7+h<9jsvTuTrNw@%ms1%2!)7J0AAsVIk) zz{&!8Br8I9zs2Zp3+_cAcKC|SaJAw8;B81{Q%^wIaS$ z3Rq+B)gTB)v|XP0@xw9d)~Swn4<72CAJ+shA2-$(Xx~7VEFQuNwRRYk(M1YCxnX#X=30A#)BW^=8Q;!K`eh|b7@Jj#kL~;PcA{+AD|Hl)Fu1RWJEl&&+8rkY zp)<0-XC8-Mb@3a@zZCh`*T601pcQm2 zQ&;~j>7W)g8v2frd+t6^2pk5lN!yTp`aV<0>?Fc~(J^^^k#Yi~!~}@~NqJn6VuGav zs=gP;MV%0cP$#jMviTaNL}diWT4e#~rt*?uZbbW8oN;f&->@>`PN@W16sUPZiBic5 zSILG>z=t_ie-U?WAw)TG#AIU9@kLDOA`*-xdq^^tHufrlNHP}ae7QjjXDjp(0hrl? zxE}$1{ub7gr7MyMllFiD29Ka--w1o|79zV*Y!F|~m#A&dSQ|^|arnEhMVRK>2 zfe;dxoISdu#h`>RXUrfLR{7v3S&_%ygQx8_2=j_{1TuUH&E z7wOcZX0+Nl<2l6SB2Xjsr8IcQ>_J+TSkopGZq_*4Rw0p(Ew~cz;yh}MYJFdJQudsC z@DNClEhI#um*!D`DxPFmRPg4$$8#udKW;omcxW}=CAw*6Mn}MRx&WUbtIft(dvZm~ zW>wsgjvMWI`waO@nlqD8TC7!M#1UGNuj&PSbYkP~`)H1B5gU^!Zoh@d`ZKRpIQUZ0 zfjxeJeJ9dM?0SWZ5BTa3?CALX{r=vUx)xTBuBUq-Dnco~Z%2a>iVsC+`=<}JDCo1} z=9r>ZBEwWP(7HM&o~Mnib#{!e8sTPM*M7A*D0WAVDYXT?WdB;euB&<1!KPxh{O?_3 zkLU)ztK2ntbQLR=KwxdhBE5*4Yn|R&w<3>>zn_Ovw%h5C1(8rgj!bHlHl0PsNd8Qr z{c=2`yD6Uil5@_t%*m}AkmW+<8CQt1HmZZ$w;|H(enhalKCsi`7Bq<8-!ZCde_?mq zf`MFm)hYBEU)IDUgZHE;h{BqPR_I_ml3NC%HIa)ETyy~*VnK#XXW$s(`o2De^!uzS z6HXEhw2dh*PnybGennogp*(KK(2oiLE^GzNj z7WrcdJ%du_CFz(8K(A8fE9Nv8>~Si4is3-W!YarKJ2G}sXdZF9!i+qg>AM+(nr1A_ ztvka1)|XtWcRB-G)%+CSd0wm}EMZ_zOR>y7G^MR8w0x@)e*x(BdjF}eG=ELfKgr8 z8ZhLm_|jj9&aYh!*N#Q*a!S(I`RhJnDa6W{51V3-qGlDR=?<`Zhl2YST7UUpNs_pd zLxr;m)i2i_!SdWhVxUq)6_K6F3*;GGLJ1j!B@QsiZREw;QF&nBqGc!&)KP`KOO_6djV)%k8hD_&@ zg6?Tg{wrHGVPKMLXN80!MaV9 z6E~Z@kCILuqDe>}uljx?S^j!XAl}XDJoUJ~^xv%Vh@%uaf*;rq{69jl6#m;i)jtm; z;{W>k-&?JJ&!=V$7;j~@9~YZ}~Ep>dqyV%I0NDspXc*4lJura7|Jfqr1!st4__A!HbT~nvP1XYP`;B z5Q@937hT5jpPR1v`uX+J?R3NOlI1kZ@zOQ!HpA-x$lrLTNME&=7C=Y-S`aXb{81W^ zOZl1}kW2MS2l8FL_l?Y;hVXzgUldk}jG!P~8kK6&MHm^}P?q?UD40uL&L z$aU-wnr)Yj=rMMs{)7;Spz+MygZ3ApV;Q|?qB+Ewx&rs<&~44|DOk7_0;vbNFm{Id zk$kaTjc6Thrw&OT;vEW8axd)R2E{PGR-#4N`|QK^KcU?^>(N{3w}x*CLSh*{a0Yjo zpxYfVaGetwS{b{t_gO=F4cij;bwfhYaZO*b*f8zE22Z!mhrrNzr*08K-nYQoPSJg<4&Yu}BGm4DP)gmO znZMHaJy3oRsbTbt-_nHKFmhKPK=+g!u%LRPdY~K*k^1SC3(~LMCj7kdDYM^Nsj%Mx z{Uj8?RNCydQEa_MP>x^4RFw6lQIcO9C{5#$_m9^pe-aD4QDp@o{j>CNdSxe&DN@FrQQ^-Loa13r>Y@-QCs0h6JgAGXSAIG3O5-uOhMGRKi~5AC zrDRO|{py^B*`13npdQit1#DPtVtuP~ZLLYAs!TqnsLjO*-JW{1IFkvsL!7nwSK6m` zV^7bRnNlz~(KaV@{hMw{++`lcXNimzSe%lL5-?h8O(h`|iJLFGWy6hDlHrR;JR#hA z+sp{(vya>f?m$~y3iXl4A zQ4tDw!su_;k_843O*v9>Q*O=up}ZzEwlgAFfT0u3;? zf%LV0d$&tlqswTp!;L(JC@InBgYVQxVK(MJGzv&kbL>ZwNhy44+&4ajL0AjL{EHpG zT#yMY2{Kj?gv-*&BbSaDn`Cr+7+s`zrW2xPDxZpSiczFAU(6cL)jzV>ktMsB{VXsYhJh)I6EC(ACPv{M(dW*TK0w*>D&w71$BI~}UR9-H`m_f9v5PC< zWs$6wkhM5(%)is4)Q3($HA`tl`OTCz>g<&y6uNTg3WDtUUT zo3lP_&F-MpMZFR~oWI6kM_J3osPpfrax*jP!TidX3rv|*1{21sscJ4I2ca4a$|KwY z7mb3BCTY?Yu{Y&ADFt?@S1I{ve6%;3AM(UyQ1wBNw_n5VqNRJ)lO-4C zH8r8qExa1W+18wG*uXtATMj6BPlt>&SIkU@sR|F1j|z3QmY%pg)H6&T{jUF_4keo3Lny$ zq~4_yn$#6m2MI;Nvw7)X^?Mh8+;4$Oa)!q7sg4NSYe|>2f z%8HqgO6xgN{z%mEQqn|_JVl|Ptz1^GShX7vXY+>~hDyEVnTU~4WQ7ek>m;$=sb@^a z@>DxuOd+TCOP@2U$5Yg(#zbj^b2Fo6;hQ{avE*P&pCzHzNXO_{hQ&2f5M7-~PLz-) z=oZ8`sCJN~kU|;bLVIGg7sM==wu)yrfltE!!XF&zg`Q80{*BEjilxgq;_{l!zb0dpX$`GuL&lwwOtAYENtJSpao*auXG zIk-jMdpd88*Wavnl5GuA9D!4XvB_wg*iM8Xt%!C@ggu58B(VY&7xqp4$c~MZ~oBnU_NVfco@bPBjfRh z_Do;%TXkd4=GFkO1>f|H0k6d&NL>Kq37!!()`-?=J~3!ra9AATJ1F9FQBJD1pJ`>` zxQQZHoI?wdk$KigZJ%5^lvq3+Ac;Vt%j#AR)h??{784CPU(?=#2HJ zQ%{^|O^tra=8rSeH?9?WQxFVgDOhKe31fu`H73}1BI#~<$wO_xN(jzM2upt{J`R*8 zk4IGuJD{&v*@~Ff6`i$;4fgEjcw+1PBA3L|CIi?FV@q?OVe&AqU3hm?O5LQ6vDj4* zHiO79SKi(>=p+~I4{b&J#3v!@x<>Vil;~vM~>*0lE_o;s;GCwVGbwVeH z=UyX^P;!af56as3&YYONP!xGE9dhDuN2Gj9yVt22X&kSBz&Esza}QD_#BIjt-jhza zSEQpntof?q+R#FVQU*H20E-5U%sn9idO1Tx6l(XrV~Hg9yRX%lB&dpcMk5`p#xhoGRT#f6-ulMkgX0V7mn&8ZzF}& z5$W%1vhHJWx7`QuMVB24&R9Eo#3PPXoA%{A^}m{@h~08RQEsC zBjNJ0%Qo)>oDXd$mb}RGZc5BMQwxrW+#z4~Ew*Cu4#0K$NAJYE1>5XvMu$SrKf&km1{@raJ?>bxD0+g)h8oe4W)%z$ z(Z488VvSHKqlC*3gc0b!6&T_ur2HKq-A9}LG9eF`jYAiNsnwscG{oYjbH*%_XEvy! zTR~e)sw={9pH5{^o#;u0Yq~(fYAsjVXYCs*v&013qt&vd=K5=;QJ3zcpE~EXz_tXJ zrs-Ow86NU+ra_o(iep@q1U-P9KdP!+`+&#n+1K5NaMy&@H1b3ZE5-cXVnQ7hC})io zXD0N(@n{m(!XA2n?Nx410cm1CziL=O++h|8(`$IoA`T&p22{J}DE9Ht9=1yg-HG6) z{r$`2kvTFahW}Yr)EIJ_yC$;jBVyNNifiZ=zNL;hlw^E7d4Yi-9MMoQ!6|~+Z0yEZ zqA5|2p^TV9-O8Mv8>14etPOCNM2$zrZS6%q_-1jRCz5I`UQH24M@*p|Vm3dq<|zA> z;dw6EmC9F8<=&$!wPMrf6$5v8_RgcDN$gh2J2~syrQ=p^;rI)v<5n+k^2_7{xAc|~ zXO(IokS~le!aioa(7w_PK2P7W6sYxr4Te6zfkPXKnMt}b-7;5{B?sCQ1?PphGCIOW zAd5sMeddS4Do9NcDV&`{{mvCO(>lcM6?v2xpxp!{kh?T>-uqG~e0-=TlFBGy|3mB3 zaSGn1?|^P$s!N<+HXXa)-Io5_GzPA*#So%-;nX5b+&JbehW(6MI(zOmmy+!pIxC@K zVI@qv^pGr2>AFBc*M#b<2rc2eN{-0-r(nR^a@^(Vd{B0PZmx1fj=qJf1ecPb#=vwM{_|Y+V{=h?8?_x&WI?7-YB;?A^Ra?bSZBY{bB_ zZ|y*oeP)2HFlBPeDs4I(hu6fEX%#E&bjX1{^BdX1$k%|bl$Q! zTex3o8(Twq_dK~Ru~sZfZ5FSVv!E1yWU;zLuxqAyTHCdn;zJ9{x2=U^bn&<%(QbFr z4S?m=&PV};$fiYXPxww%X&F-9i7Uji9YK+VMRgO6RO7@b$dCdA1uEKzVtv5S_$gAU zZc>{H@wFpmrb^O$NgLX@YRugi!xRCS?zYIs=e!MBeOq~g;N66Iq_G#cWuhD-<0z#6)DRU$*xaE*0 zbsk)ZrzL;p*;l8cHGii0C~7^zwjomRR&!V+?BSZ~0I#eKZK-Wx6o)D;m1^x6vF}TQ z50V{nOwKr}d-pQnED=xuS^h1(HEVgqJc?H~h)(o~x;4|Y%Ros^NN7+s-8L~;HR<1J z5t)Xwl8CNE>+T%bCQLbL*3=Th8h%_h`b+!y{HqY+f+igd+*b9AYP*yOhN;*L7Nb*e z&In8o2OtKUzFtk~NE)2%Dx)@b#y1JJ?3LLO^KiQ$`}#BB{TrBA7Q1+#!8G zwj)Er|FwrD9{xDG*>{fF$M0}Q-?8x=y@wn!4xvXiVw|u~Ie1Un;0FfXH3eu|$oJN0 z#&sn;QGgMY;03k)1F|76h!y6G^Ki9D&eh;YSS4~4=E&Wm*9agisD)bt!0Pq-3I8a~ z1zkaA)Jq9KJ(H^k@PbIq7wV@!c0$iqh#Lqe03~229f3%|O58U@C}68Fgrq7P(^nBj zo+@_{h6kdlw4p1;4;rA9-gZUE>6f*UyU-c%51UBT=*thQguhEeme_~o*Za79q%qi@ zl~ms_(9{PTD1@6}q&M-NahQ^J7XzjvmZQ+TDj>d8Rr7!|1h zNW5DP8W3ERRaN%dKCS31jw!9HV?|Ypz$8&=w~uXU^ob!V3Ge0C8?s?%?Bz=ETAQrS zHFl8^(hIT*wk<6%a90|w?KbbMA^K_yj7%kBn;SI;C8nv_h|v4)vtQSPf!m*4psvtQ zF!anr(@|@=SX_iz1nG<+;>{Nn!F-9`Bl3J_7~_ZCqAg_zw>nHsxaf_ZSIRSpoxz#T zQ`9cj1a`8eO%nU)>s4b#;v^R9wB;>Pn8u7KPk+j0!!Z?B?FP)LC;Ao#s5**tdiTSm z@3hHgV`R!7Nyn+P$rqusPtau|tQ6H3jAz_%uP}0>ViGd2B2g(Zr#V>#M$iQrc{-!A z@TAIFTu(&Bf{7GS3di$QXRu)0j_Vyg&E>D7T=iar6<=wT#;cn;$~Jy6GOHP(Wi$^c zia;sdPpVwjQ^&JXS0s>85}H#Jy~SW7NyP5&dz{$8y4x>24P}34a2XVLA=6E?i)p}n zWZiOg#(ApUysYZDnl4G7VhfF^A{eJ}syTNA%z-w;ExZ14pK#U&{nUe{5L)eKIk`~} z@%a|>F>#=Qr60_A@7=^;-NvHE+OX?sSPAj6I>welEvZ_(XUonq)AX#h*CCQwC|)iC z^E~wW)QWmD%fX5R-I_&&si5i-1bUiV3+3tb3TQ}RsN!i6;z4=*BX}4eV)l-6RJ+94 z9DH6}`GaPXHv^U(lN|;1>}Q^13O7~bMKW*obIm0bz!nJAdTb-$xYWuVz27WLl)|+k zVge^!ku@@@3K<5(X`N#X4vD#$PZ&L{?_)6^vdj?-QlIwVP8p5hW*q|5)Q?teq*X;z zGR#-E2Ym|1D1(p*r%n@nXI3RMv?%k8R%{U;P(5nvW7lQmdPBBYptvyiW9gy$9 zY|^9N9hPsY${-xIFh#8q40QnfrT)(;?*Scu#>C;=JDmH^E8UHffh@usv%`!&$c*49 z2e<#j*$7C3XZRmolF8IND4spv;?hmK*8pzmeK_x#fY*dBZDW_VAx!&ZZXMG|`(T$n zrWRbixKWB{_Wgq*rzq|n;Wh)*>at^b_MZ$x7!mp}({nUpBoWk7F)9YQ!hSPEwy=ZI z`JwY}NktU@h9n1SU-J}3ME-On%Z#U4M=q(alLMm0rhCM!84?uTy@Dws55&P>*AYj} zW3&ihTf@&)^X}`H9%<`px(gD^Hzobg|1d`Zry?t$|H!xk(El`t{(BkspXU(qf6k-- zrI&i!%R_%@`R;Y<-P@Hf*P3-T6j&V^oq&IhI7mwyHkg>78A3e3L7Wcnu# zxYOmqWapOq{c%_NOFyIF;x#WOo6}cq^yd6EE(Y%M)dvS}{tk?jx8l%<^Loi4HKx;L ztI#MlW}EZ*Y_0N80Ech!E-oh2v2)%_aX_a8)FPmeFN@NhF1~ z!6m*j63Kagepup1`w~f}t#DDOjO5f=x-=}ORlP7wrd7Q>$n1Dcp{-dMUhZfUMO(cv z?4+$(9DeF}jiI%j8;2McBqq{ty(fLqB>s=ncak&H2`A|UnJwHs= zakeVlPD*N3Ac(|fabPO5RS=Go(WZjbYH{Eyvy~st#o~}kdc88llhLMz^kQ+~E5n@^ z4#qNH9)4qa;FaMnjs$0Q@SfqWh$LrWm`j?oGQ^benosIm6mG_HXC(7ybqGL)yEHu4 z{J=w|D=$3P^1v*^T>*)2bw~ z#>~DF2=i7JjQNMsTY=#{2|#rV3zijf1#3QF0?UpQ>*R-q#u&!f=HK59eeKjIi9MK? z)o%={gf49aZ&H^HaHlowT$#2^`9t?j25`ypcjM4!ajP;&U{N2@hX|B`t}(d90jnB5 zhczED!l{ctXFd2iaz@XZ-V+2xV|Zl+!bIq+ht@>*9t6m=M-3E#w#3-F@@uq@2HHrg ziAGxs(ZYcr`k@R@=yL>$f>L2vJMn|7ap6b7K&#TTXZxr2OM+ISXZ7zb#C1YV-Yv9caYgOV|n8QMbzxeP9VQdZUnf_pc*ZTKdLE+f- zp<U_pPlB?X^g=elC>4$R6FF4(%vkfB$DV{VFN}P85ig;`&{MN3~}yJDErvu8RIjk4zq)6x%*yzc>~q( z2BtTdA%-l^>(mwp3U#%Qb=fT%c}cS*qnTp_OexAo7fI)k<>&D(39#L7uqYgEEg&GaPP;KR2oBO%v=| zIKhO-;^>V6T_81qa0<@k0+;CVH+KR3v;ip)yA$vp%%{h3gzxMjyFB8I(FwOhQr z1AgXJYX31{{PdaPvun8*(boYwQNz{Obmx~+jAv9|lU2ZwXU;z9d%Eg7T);K@*YRcm zj^8v8&EkgI^%GstEh>cWujO-zD*j-3&OVcWKX6XrmfM{w@XMV>N`wZsH}(g#R%ij{ z0#Rs8k-M>BgZDvqBlJ*>k2w`~B;Z$&QA(qZvMW`4p6!r%?abN^A+!Uu{bTr05T>9f zI(p0V+8d8fvGhmG9F+}Ri(B)nJcqDhb`7^V{o<8vn!K+v6M6D%L0xWy5CDLHCj`nTZnIP!#fH8_pMwHyY5w zD05@nb#z3rk3DYam&QB|LnqOZMfdFYnFZlf09EXU(CHR7&uP3yjg|o`wz@18Dc~#u zQirz6Pg#&Sy!@xFm4_kQFzR8c+w#jM)E@3ToeK4yl=3&bA1DzZZgk%ob*!{**toST zhi`yDrBGZd>l9N6H)@rXe`uCXCsW75o zd_&r{S3#bid#ggraVXN3;R#dI7RHmv>>gGv0(i5}@GVr7k^oQ}z)-hmx9+LlP^bQ+ zsrUrG`Aw3)OOuj3*}0Gbp{V5z%_%%q6U=@*AL#@r#;@c7Al{qgW2Z;{Y>Wu++_UC~h_G2031J|9tF8iKlw+G2TMx>PUNFmbRM#?b9_p&D12V zjty^ZxT8#)ug1-!S%&M4I$}d8UiN*jpnn~e6`S*h{wlk54FOARG33Bu73is5(eqCg zT*OCgR@F1bwQFCeIXGsyNg>X8`gYZ)G>VU{@dhNRU;#vG{SBGSu}rx_$G?7i_l|3YW14R^p0D`%U{}SIdwK?F8@@d*Pa*|Pf|~1 z|0_DlEb2BAf;~g_li@%%Y0ku^Ak|N;0bV#o`K~M_eXg7atfoK)LNmjNL7L;K{mx}@ z<|wX%lH}AiTNi9VD8;Jjxb^vuHr~K-prA;lYEe%t%!i8RvT-&ZbRClN4m+m+3pFVz zDDgcl=DrvxDNXt+W0iKd$xHBPR_OzRZ92Vu#UAe9vWy`Ub`<7I8%LW*^K-NxODeqG zDYUGDxGo1|7AGbIiMYRQHpLPwjVQf8>}FL}y84>t_gYn>{EbgA=DWsFZ_r)jF>u!c zhl`iKMyI!+wH*kosMB3N)z{TsnwKI`LC;cG?X&v3dA51hdG;znGG13(S#R)1smBgv zqRWk&yr3nhps%;sK38z-RCjIC6)BM(QPwvl*6mHu+7IHKzhrZ) z!~SZKL|R)l46SWl#EV6h%VmnZ*N!ezt475e3jP{hww|GfNwQWgBgb7z#$)wzs$ovX zi>eQk*!*?rr`3VFM^F~^;vkwWcmoo?HN|7?;HE(^gZInW&{d72$x403l3oi7rX^{t zIC*CaH%h6JJ$!TXolofqEh=G7e2bkSh8b`4l;^(Evho343^UiIDv~Y)<&d$ckr>P% z-pgcArCz~2Ma;qzy*h7ymx3HtVuHS5nqZGMu2ibEkF8ka`G7^DdF9#&K5uK z>RVCos!eirrvYK89F2}Vwb$fBEddG(Jnz`30BV_0h~T)Q0)7!ic4SkK_{`7t`6hCx z6+YGfLI}~EMO%^9(6YB=CF8#5I*7`e{9UWhMhRH~l1?_Ru zbPLCb9wQiN8vBB)^5_g>87Qi$NYSF&1&L&UXL&bN&wmg%x)huCx7 z^rYMB{AqNE$ykrPX9Z(F_;#qYzzW)KW<(TcWF9K&1+k z+Jt8V$KeK2V~l&G=8(C<*^3>|BE-^@$dih>ryRE_YtsT&#4@=32ADVvHycdFRA1-P86ME3^5t zEwGD>D37i}yY{MZ*w02YJq1jRpeVfHs=j=s>YmYpiEOWp*Lu+mGJ`#5B9dTY#wx7& z`siPxzRb$(uzkQmd`oBvDU)*UG7cGdsxVqUYu##_N7K0;rwrXD;KEe~naG!gC3h)W zgz^fuuPN6`o5MG8tRdkcF87crY0Z)@SO*Exz*aX+_jD~55hPhl4AN}6;MG$-@~9~7 zyhF@;Pe&)I!ZN~)1Mo@_Dg_*rxt1+_4kAU}bu)!;m(wyS<@6=B)jYg})DC`%QK1&- zlLh4B5u)=Phe3_S%B=Tg=J;~4$1D!rDyc+DIV#Sp)L^Kai=l$BJjuA-F8}>)Sw|UA zEx9kr!>N&rAOE@xy$xG(E#+$)h=y`EwO5f^bJ|3_l*;!zYyTk^6-!Y!Dk+{j zF2IaNT3tmg&DulTI(~!)6Cv|AqwI!`?=WmJL1LUc3ND4K0zYmP1VXEol)*<+39le2 zt}CF~rl?TlFLYZHz5Ow=u0)%zpD_mmgB+nQ*If{G1I{d1sOugV_K0B>NP$ZcmqHqM zkx&{y9Wng_GT>e$tsXj^E`V}$@{YgyT@0UeN>Jx0yGSZ6KH5b4QzB(zky3VGS0(XM z+{GZI51C}D$0Yb7K>H5mJq%x)0lnDlC1Ry_e&4l;D&+{mB!+IT@rJk7C0*S^_rPYD zOMA9)5~2woi3E1E`%moRr>epoazEvczScb7s6e6q`QAdHN4ls zT^-)_FtmqE33?3h>wWgZUG3ks={wP;_x%mdZhtR;b2zzE)OTv>YKC)gy$-(b0^a2| zqob3;I6!LLMK`y9B!C12+IbNH2Ev(8KNa}D!cd>F%Z7wA5WG;EGvA$~^6x<7N8SK~v zcqr6QXc}$5(;K35kW-@Scql9sS{i}$coZDT^}K|l{?ae=D<0@hP!ynUm<80Fx#Rd9B&-Jppo6AT{>yc_`E zfZ?bTe^@o5srsZ5&ag!Jw5fQ3rx=%B>Vk6EMna>nvMV!DW9&|nS%;yV_h3l-(?K)| zHNQ)6T|9%sBzon)DVEHaJmCuU@8rQ4QG^Kdr`MhS%dZOJi$DmyC6qkCLmsGYJ8%!; z7Z-dX-fN7>{=kgi?@Th=uN{R41Rl7y>p-N~%scpgUq6nRMF*}1u$_dH0Z~2PZU!iV zRKn+ZKDhMu96!Iqtj8hgri&qz6g}n3)^!!j@zTdVDG=u6Mer&-gC{fhU`mD42Q#9; zL9RqfOU9bVP8T1bbQ!DOhJ-$2_ZGsF#}JxXzjixTYl0qwC6WjuO>WgtGC2lQEJnf# z!Y+IIX0+G~LOpFY)XJ|>y>xkoW$EbiAko}O+tCa3Wy{=2*3pzZvgz{N$>PylOy#t$ z9A_xr)ITw3G@W?a9C@ly zZc=$Rz|sOcwZfBAlLx>!)5$4p3*`9p_qyBDnI@y)5U2TF4z0ARVkJFxO7xQF{D z*{&hVr#dB+pB8@J+_7G>Qeap;^03)<3x6rIRk9syY5ioB{m2h*qqyI(sd&q`4LCW= z^eW7Y-bHnQwRjq8_Qyu#hy~@J@2^%)fc&_jgO4^A`YgnBmkvG*n1N>c`nle8|5ixx zfgN2dUN4;RVi|IK)GV}Tdc!0~Zq`7ADeV7BoPhnaBLJ41ZWu`o{WSUJZLB{1m ziOdMaOn3kpys0}i- z*4lJO=p~w2idj*bmd#V&EX3Z^guw4nyn5%AIo(-_Hi{EXCnu3PwgWRVI;ho^^XJ6{ z)j}D&>l4jk4%2hx5rj~I9Le)jA=AzU(SrrMxkgraZ0aXoeK4~ZyWFU)5vBvBqzA$B z!Gjac&X4LF3NAE907o|w$@7n#aHPSun=U6X0kMH44=>ohx$wLsueTGYU~jt{WVs>| z$`jL-4eTIVS#19(eBV84 z`Z-Qr65E?Sqhs0nI169I`(eG%0ehxQh@OM!TM+k7oXdNJlTKYm^d3Wy7ePNC2RqiG z(t&7B+*cvIH`ZR*`9V(=enbIuEdn5R`9nG!`~9JcLJfafvLzq!KS3h@p_QEpMrGfv zl=uih6>pC=c8_|8F%Nb3G%GPw?^G}it(!Y670@P`hLsUMhqBR!gf)dK)HFK3sX|e3 z{SGflO-4s79TqYVUJz&H5z$;U|GM9);kAikS`xWLeU>8mef5->k}n(e#)J_CeXdtH(-BB z7(A1DMZ6LYeMzO71=&=UxQ|jc`wR#cva}cnBy6fxMJK<5`L4@On(Q^!q@?OJUigp4 zt9R|8EcVw%_OIKck8HcUZy7EV{eaqYATGM|`OTWBUP(c6i)_k@l8kyaIy;Bis?gAJ zLD)6r@ncmbZVk@ShmEAiTJW&LtQ2qOGHi|PZdPDA+WeqXwyo(FwQjV$9{zFmb8Y&sV%$`5W`ycKv_6T)0H^Psx*}xcep3gVCS+gJ4a*T}bTQf; zU8Wx5eQX$G9`AE0m1Y9CLA+{as(OOCcAgaj{WyzbwcUZ4W-D7Sr5AZ5ih<&+fBQ6B zKK=`Gk`1YfB?HL51NM2-b@&2BWvujN2;$iaZ$GW3d0d6-Q9Dc5o+gWYtDh4?JX<0) zM@&39Ok!O?mvdB0Xc3vht58#*vVCGK>qHLbkSC-{o|Rge3J=|68(Xa#yVg1krA2b)~rxyu= z3L_va`{CR+zvr9?G8ZZ5rO35cPXdP+Wha&xQZ+6re|R9J9GE=pltV6Il8PN>8MUy^ z5I1r!j$%L&H*`Lt)h!t_1SQTaKtFmgWkTXlMG+~dEE7N(O>PpUMO+rukU=qvu{3gN z0`O9rMt>WjyG`OU=w`5p4uFjZHHlLp!=!R(RMMuSNmUh3-A7xI5u#J!88$iMYZU9y zUZ#4A)+tq8rgn@nO*M=@n#>n3zVmd>a*<-IBn{QfCDW*k9>#qf;X)hrBc;a2((orW zJsDy`G^0!JFSeV5n6aTOcgFWAh!I!uIm9+0*R>Dl!qe7#rG{dV{mDw6+w=)F<40xc zL^KJ{U`Rm+*6D>GUWmWuXgpo+WU@z`_J`Mau_Q#v2YRx@A95_=3RS~ z?&hoVu5y{~3ts24)Cue6F=X@08()MIohJ(8G)F4-e*p|tZj=@Ta6IywQiJi3=`4_= z)MJBYrO;(GV*_^PbaZM_rD87y|3n$23kPH}D+xo3^qg+4^XXBrbZ~Kx1%BvQQ|kAZ z-f6dCiJS1KYJSt*<(i7X3!j!2&0qhL7kN@IvY3{AEe2B`25Q!luiG=CM?x{Sq9i^N4>6vME_G(ILn96l!1s*D(i2YRHM=;3)0O* zWKG3kGR%ZwpQO{O#Yf7n*s1dZ;+rGt6-<@>WV^Y51vR8t;@%<^EDyk zYhY;+l*uMA;vASz%NE`LgukYQ!=?-VIhB-RM)KbEYpSes9CDq@25LR<&$wc1kcu@J zp)R#$NMkL5#gzfhfz-=O$-Aa%sv-^L5hM8#Bk57T%%q{hq+=kA4C%CzMxZ1&0w$Hb zQmL15W0MSxGk$&u3d@AOw2rX$BYvdT+Z124+`TsVGG zLnfJB5Zwq8peYF54U;=UBcrZ4(M7~8^U|rxg(Ig<3@AqqYd>khm2K5Zbs`mp5n|E6 z%UK^|-t5&xgSCz9CP-A=;GXGy0qZxb^QAMjCeJ)V@1EUzWoZKkC&#NLIH#+-4)(>c z4fY4lIyqo{IRC*QJ>d`VcJhVnDa?U1%jD6t7_GF8_YC$*fqP4?yP6qkFNu^7K5MRw#c5^|DVKE8dJ2chez zeA(t=q$=lf*hiOBkA|@5yOY^p$nI&Y7JX%;p7<_%`vyxubhvnaxNm;=E-Ks6nbw(TmcER^u55aYr zO0AlpL2etqdW9aS*(Q?RiNH~PG6ZqPxd;0I+OFJ#e5J$~1hp)?NBkhOUTQ%8paDYD zr$@mLKRNZQB#hYNY_sB7_i`RuN}W2V@2e62Z}@kHMVWcyO@9Pl=?-#Z+c>QQO{ zhv?3GSh+SJ_26Uj0Oz-6vSP&pLgj&Hs%2aX&*gOGnLcp_4qyw%XfYXNS;mtl08}@loz*fa^dQ`!2Yt0#V2c;sk<-dNjf_q83-=_GaeqLcUXgdQ#syvp7wKYZ zq6Schr-t%ECGd-xmHTsVkcvG%F;e=*j4Q^)ec_MftmWN0<0CMq!Da(Dy5C{cs3QYRbK}^mPhf2CYTbGs~Ls{y*`qJgQHI=g$+iweKcZbKzQHrJK zP@8+Q52k85%L8gz-r%yi-2OHK79M)91?)Nk)>Y9cdbM*RyBiM@e`GiVu#lb4t!m;! z7bY`Y_N^x!e>ueMfgikj@2vrbuyjXy5nJ{P=|A$!GZif7jBjbCmg4_P7Nh$A>u&tt zlEsiQ|3CglO=%}|b?ncbDY9)=HnL1)qaWlVp~#@gVeE91G>M@jp+d+bv(wqqqUDyS zrF_^plrD7_td8Jk3pS!#D zyYKI(;Y1*62USr%7zi{v>ceWo>SStU>KDojl_vF3A2f)ST*bilU?hwjB`1{uYKU?S zzY<_ha6CqirW0|5vlfMMOK1z~4!kk^YFI*i2QfOZ1sV3J23eMDIZP?k8&yME3vE!V z8%2cqSXS$&abc)9stq|EqA{qA1aVAhF%x0EtQLcDSZFFPIETzSiE%Z6ZD*kY&(XG_ zQ8XmPlf8YtZeYk4muJ4lmyogZCD?Y7H_rf|!Xo=*}K$6N5=8zcvSJC(}JnKVl7$eVkG>o6GMZn+nak+^V ziyw`(>$2?2S~tHbd12Or_3Siv;fMi7mtT{scdm@Zu)6#~D?0+0z_-|XNftK^P5!)< z^x{+^zzV%iwl2pm)13AquDm1lubn+7o{IAvdUYt;@7U(-CeHGMPTGsb9p_qy5&0@V zNBBARX{(;ScJw`>w~g1qViiUMyuF`uM|SSzv^DJ! z^*5+68$>BY^#!C1oSk&&@QccAp~Q}n#yD3ji*%(S^){sr+SF}gZliLH3^MO!5M|$fCv|n7UpfNxK<$;Y(?mRppn+! zP6&0Qe06Mr%xYDd|N5AdcyKHX)Dh*D>Z9PwHPRIIuA?zMgqkgXRn@L zlCavZ$}3{l$a~_dv|7nrqO$C3MagQ{;HO#dnL_;-S_aY1wT>!rU}#Iun>Kg1lq)GE z7ah2HiZ*^n>$OoUD72&%H4{oGe6_}XBjYxDnL}+pwf@CC)QNJjeDc82tXO#|Ij?Jt zG1PvMud2Lq!e+rb?n6uOf)<-KHQX(C^^KPV6Ord4Z% zmkKI%zB^v>B&~y~%ZvUr!(2yfBq|A~^n?*|T%y>O3H+1N@Y8(i18S@J)(yA|3fcaG zlhY%C+~2{+yTE@=aLKJwr=u}aKl#oGtGGLrS5>m#eiWCIB>joa)CJs%fOU66QQdfZ zZ+lhZ9qBp%)CEDK6TD2Y;E;Y3Y+LGPXQRwU9qtU_$Iaa&fG1xY@gO8JSg8;ox)qyb zK-o+ED}7R4MxB5=*&1oqAurkzw#J$~e733G#1eiWbu<3=>#!{}wae?J9FMO_hK@e-j@Au@QW0{I(YyhF9Q|2z z%rGq6{IB(j#b@?M?8`6y@>hLcr9inMe|d;!0PIa}z8-Q-IQmW3=D*6-|4M-6MgG^i z{0*Y}_)dZSpJT}WueFxqUT)?NX69xh?iLpRZ#b;Gn!X~MGBW?4oy%79LZKI>L?o1E zx^cafXtY^U(=Fy7CQK(oR&o1gbx~=*G;><* zqw%}IEL-$owDJPC27qxohirR*!8r!HxNzWFS%E5}g` zo8pus*I7l%mqoTEd9!%lea5|WSB71;$i!ouVylikKNy!$8cdB!&$KSqw;X8x6sQ8Z-$2y^b&B$@ zip?!l+&Fpq!q5J;1ib_5D(^Xurp`o8m1;ds&b)K)>I`;Q2!2N{h^y1=^ECgvEq+f9 z{XE(Gf6aoWIgGTi811~iR&sl{ar~mBrp1{tp$)d_7)ud&`>mMcI6lV{6lL!uz`0GTcm!TVw1z{<(+Hy=F9ef^e)H4lt_xd3 zkqJu8?V$?!ms5~eUL&7_7s>RE1nwVGxztJWc(84uPdB# zR7peIHl@i~a~k^A-tm2SHq^c1FSTq0%FUSxSQI z8|kCsUm(-{YSf2p(MN3#%kMA4`7$z2TpJ7EoBV>)hPW}YI~wh#Kv zr1(B$|MLST{C_&N{eKt~nlAxp>d0RX*=B81B=%fn;ssPTR&cZx>Z;(rVlind*_gP9 z=N`YCqpdlv9As`ay03L_1%x4xgj5@d>J8rq1Z8qI&cnXY>_GQC~3gjcCehqh9yY^ zFmEFx6vh20_FYj7Bc4@;HA#9goz;dLX_kvpg|lO5k<*o9YvDI>O3Xr?p+XdJqMa#2 z5OHLk(qqiqB}ZNC5>aly)wP{C|CmnA8kqI?!$RIKJhR7I=@`KZzzMn#BFNhCVgAoIWdgJ)u zHRrxyPOm2lLZur7*Bl{B|J4(WKOVZH*YKmgy4|6lF<(9I-`-a zoBkMxy_hPi&NnBzvo({z4ih;~=tQ5jxYf2!c)S|MdLyJNZRsDeD7z$LWv4lwjme=> zcB*@?S@96hBI$(XMVR%xLfd}b3EI9Q7me4Xy^&8;;WxpMhGaOajU$7+!DgbX zG<~ndIl1!#f~Cy%{LwFRnA8P#UWjh&2QXtD88KKO8P;rb!v1Hf?)a z-q~^)=uYLC%oa`tHf~y(LtkwySnhPTjRHL6=AQ8QOm1!77MN|vGjf}*W_&!XBPVE! zrN1YLf2GX?E8c{URucID?9K}~ge2;-F=z|Qr1IGHTH3mXlD9GGYlmK}c8GFiC+AK8 z15KRhnUf_i;_ZG_6KCe}R#;t?DVBt*e%xccWn=aXM-6W*ouxV&QyUH@yEBQVZGl2= zoUAh04>6hS+w`C!+0ofT*{K}hHFoiyBfNhOa_uWWubx|X;?k}@)AI7J#B3cE`J`(i zXU!C4Ep_$!ix63D-HyYd;Jd$^;wqr!d0mX{I`Y4#0Q3zcNUagzlgOX1bM04>j(a@3FtjA$*Zfv8W@2k*_y1bDuY~Q+Bi= zk}0Bo5+0$Jxw#;{t8D;%r&n1Fp{HGDsu+>6Lj*zh)Nn!4_r8yIMIP^pSB#aM6glX> z_eGWBmagG^IqFZJpE>d*e_yTjdd}ST#Q}Q8*kcQ~?zg96g9FT2v0PtLhcD(C z121Ps2&c`N45=E+)EH+Ws1#fBx90KRetmi?pAc~`!>DrYRZ3slX=_+H*RbVeFKsC+ z({+5z^svEM!ZJM4QN#3Kk*Q->PG_;sBtM@)84SP6BeVO~`*X)SV1Qd273$N^(KSa^ z3`Wlr1Ape$6{Q9QsaCv2YJec2z#CRx4!Bnd2_tWVrK=b;Lezphy%SL(%m2c zvJud?u%*=b$`&=2Y-6>=-dmhUgpJhmWNd?2x2f(@P60{&Zhizq=+{)9qGP|6K;FZ(*dm^SOuNvmjdVY+qi#yLO6B-{QO} zo`JvfqI$}|^P+x=Pakpd$Vfl0W{S8or(i0wGpB6IyECVLO4VJva7sp>Vg5)&pJDMx zMW12m$U19$Y51o+{Oa&T7Isl2ru@a?uxXZ;9$FVW%7R!m#iLb`{I@HvNFPnnW}jM~ zuQt+>tx*&0jqSFEB5!H)8N}APZccMczdoR$fM)hwbljNtv{MvUQf5HH&^SfP$56Lo_+l`bM;s6G3O4)w&^? zUmo}b{wW2V1K**zK@56=_7eh%f)Wt}U14g-oG5}?7_3ZqVcv84%fUZm1LH}MorGCE zJB+~I&_D^@1|;%Mg5^Vbe=s@^KwQ9K*;x>weP>fLk}#$9BSGf~1MNUpz*pOW zA|6CRYcTI|{ktei(Qw|ea12G8(Gefw7j57Mq&JYDRXrIr4C;X=sHgHqsc;OYPoxDP z_QsB#K-g9=ko=QiTdV1{I}mV*b|B9qJLuKV`CW)LS7D=0IRD{rWbCtGyoe8k3t~_t zQlK{Yq`njBoaaFN3p&<&DF1$Ne$yCqGwQk`@JCQO%zKs)6lk7;Q45@dMSK^~65PS~ z68sUxE3W?@+~DU8NsuP=ds2Tr^gE!x8vIiPC<|(c!X*Vn2AzdALmj7>5AT--heX4c zHxdYv0gZ;Hqfinzq7E_#PeaoZ?mr3sv(A9EHSoPRxfjZy^x%2qH$+%l;uxO4BjBzI z7x|lSpXOP%r##S}@j&@^Jw5_SeM4@OJ;N$_{ix3 z3O}a6`44PDzbE(iAv=W#K?W^BFLwe_7-0Un6&45z1GPaJQJ%qq`cS>1`*)%7$($nk z+n~L0gABl7VPZ&`^7_F+(O_~!`eltMf;Pa9k-1WZAcDvlykhwO29Iqp>LKqf>CI2> zP~ISc`;i5?Lf5zs5E@7r0pK>DMX;KaYg&FoA>SmqwdY_VXJjF2HhH4ln1Gg}-INch zU$BDv!GjFz&&V$AQ9RNGeU%JxApUL0{Ur_L1+N01@d3PisDn4zOcGw+HU^$|;`h{FUazcY)*97Dk?Pkwu3wEWS6 z@=@Aj`!B%-n1;C$%_Csmokiu)!4RBbzru+rZmSWP)!X5fC1hDb`sF}>i)9fXM-T!s zroJp9VEvj=f zrsSBe8cqA03TRK#`bf~y7jMy2J<+`PMQ}#wF__wA8Fp9e%xiy-kl~yUbU5V1-lyoD zKo&gCMz}@u&m{JrY{TBSFnM78>?C&B^TalxZCRH9YWP5cc^GweoR*KMGBga2aPKt9$n)lg{mV`CMX(#_iZJRl{Y0AL`RyD?OKkb zel`9rGxIl8hkkZWFa=yvhd_367SggK^7D~hWP#9s=@j&T% zh-il4g*@0I=b9IvgY6}m%hDhpwJOW+8QD+J1#kt98^Da;ITb7rIam!xU4%x-e7!2P zR|&0~%+I%%4fpLB_HZbn+U=;R>~zD>LVDI!I9S0eT}}gDos39Z7%qaXqzhJw5ILaI z*jE`~LUC=f!Pv^07%I+jZL(~@$k~IG+)bVMS0!sV`44{KL#I+bHu6KLmpb>$LZBnuIu5xKao&r8>Kf44A*Xq^*Wgt6VNEH-I713aJ`8$OF8W89$g+_%=1<9AY z_x-Kue--*AU(oBL8oZwBkuNIVz@tP|#Gd+cWG3fwn`k5Qp|WSmR%=kJ(GqaBX=EQ; zMX}Rvc7HFQWh5%?{qb7Hlmzkao{WkRkNZ5@xtWv@U^=lWbonY|I=(vR{rQ@ub0{_K za?hL1nbqH*_NIArDu4q zJzbTvR?EOy11=GU$*TKt<4xs#ILeAv(>T%SP;>91pE}?SyS;=Xxua5xtU4~%a3d_C zjLoq}MTrK3QA!ylJhP{fr(n7lSF-9;CH^_ZLAlJqcg4B&5*E$fDej=%z^~ghlJnb2 zC{||!3ngOXUpd^GEu*xGjac`XOdu+-Mj)8a;NHwShQ8m-^3a>>@qW-47o9Rj+W43Y zZJS-*<0ajFLLlh49Jg7P)sHHcPgQ;QDyC6c^OYD%v*)DU+1h9v5`fVt6G^Tp_-RI^ zNr&o;0n14PvldHgF{+&H7BVrNA{V!EG(MpyunEmeN2t4?bg8IQUa{bILW!4fbl6W6 zU#D>4P%UhAJ{2WUJ{N|Hwog$( zndQG)9lPe${|eYTQC=DS62w=c(F}cUKX`uQk|6c2`A4f+1yaYm|D&<+mqy9yK9#d% z6nVZ&^G*?W%`%JIAw93l+tuXX#5TIZcvHRjgEocKpsa#jjUC(1dPuM3=M;(Goxa79 zg0o#`V>~kZ=|363e9f-QX!{CpGj!eWrs7sAO_&}tc-1@GS=@gwcPyAnN2A^+DNKLg zd9s4;oXI6BFS8Epd{ZLEN`dk#Uzs=cHy{ zk*Rq-BBE}lziQ%m*kIvG?5(DEL{hpH8;w?u`IHLPYJq&BGfUxRa+ViX8tCgG5@fcy*)yet zlb}~1on*q_ae&*}-fKYI1>2q_+RsQq)+LfwW+%4az@c2F2Bd<*YMP>=!e}k#cx+!T z$kmVFu+;XhX6-6qn6Q~_AB#5NEM^RtmONLJHeA!yQ|P&??fx#3AF-y<=f;}dui)Rm z=ayj_WUr|aH842dCm|*A1#r!&g?4WOY%m;_jHYnRG=PS0R#QMeA>ZH2wcuGZSP2TZrG;oYbCQ$yrZ&l+zSGC>otrapQ%9- zWLn9Z1cII|Gi2t3U7Zv>wN?bo(aAAc0HF$hFD}Lg6i*T)@6a{KyYbO5jum>u&1t*6}BNT=yH+u5JMeLqL zz`q}{K1J~GT}|Eo?jajo45YD?sUiiR5DPy?eI!suVQrn~-QH{${_%dCTgR|vopvj< zMtd87;illSbPf2tuU*t5tRg4CaEp{kJe=&2+D9=L zmwk6O-ST+6!ntlv$5CX%cJQu|`P4G?(IU^KbW$Y|@asWmOYnCf9KqlO)cKHFxg9fN zpHFT6U?4k}EFH%_6=*CmBw|YHnLE|gS!RQzR(4&34cd+T;*HbEsq=7UIZ7DI*f8kS z0{N+O?sABO;)ad*2r>fHlzaOl*FI#-F>Z((II1%?B>=n|vV+?Ov^vX4LMPUGGOtKiOsy&B2Xj6!b2~D$COdhKV zEWnb$!Q9OIg9~{$STCK38l4?SHn@&vD5t+sl#c}2j!q|0? z7|E@@nv^+<##`joBm<}Ia%NfxT$GQf?A6V)MBN73jM=dbiQu4sA%B@7-iO!n{10hVrj(!2T_Z?3%d6d zu9>u;54Khlk;6?o#ICtTi`NC|xNtboVNTRD#92^!cX5Yew)5ED_>7=UbeSgoxr@oElZKF(W z+LzgKwqiRt9hFvmq`*^u12a3t{6i|(cx~s5uFlGug!s=#Qu`W?L0P)E&b|V^MuWUS zdk&ckQC)K5sfWrPWb=C#IEFYyB7`EYpTEAc5u+H)rndpNdUD2NI1bMS1Q)YtX|jOZ zb(yj$^U}Vk*d@W2zb5`xNgv)0rBn9;XE`&`Y?(ECEs1x^aDttl5^OM`v>(>wTxj77 zEX6XL13kMA0X~elT@gOE$TPX0swYiygv&2P+-D$;822|hz=*YMY>wL(H*_iMCAE5& z{c#!PMcicLX=`f$=U-RjaTa;gmZK;r5AvcPEt6t@)Xhh%D&8)o-eZ!1FW0~< z&p!*=J6bDkBO8o?rP$a-6BMQ?D0|fxg39z?;;HmZpcM(|LSz|T9Y#Fs;Ov!YbK286 z)~#)j73<=)Rd(ZJng$lvrij&OY9JK&*V4FG0G?Ep@JCGwk?h)rNDG;?&}bf_CA6s* zV-{5|^Yh%chG{Reqopg8uvUeZ7E1J4s6!C-LuwcjWl-!70p-)G1Hg12ak%F5L7SdgPkZ1|v7dL<$s&P9N#fuzdFgC@X zLUhpk$MH)zal&T`P&jhD^L3EjJ36D-=yBoV35jfwvCY6lEuaKN1LGt}gx_VNlE zD6M8gPFe0`I_zB}njF!?Wvze*O)36c?mX3v=^3s#6?FHpF1jLfSEM&rtim!cZpKEl zI}jZ0IZO8*>!Gbk0EG0#C-xXqs&qIJ=vdrp-?(b>wB+U;DX~gM$kZ&^fsFjWqrln< zT|$dK$#nM>oyw?FxK+$h#zMjPpcfko``QK#SWI^^po^=j#|sPR5y;Nt9Nr?b!-@V9 zlO=dXph$7DxNM1}5KBju;uEo`iRR4wj>%o)Dpd8vCrL?|C92DHV*D*EF%uVZ^h{(` zs0k5bouZcq|7ooGjK zu>rVPqd!Vw7~XB?9*QGF%Y5hQ3&~8$SSVNKFbIwMFrrZipHJ1U-CpH)msd(28YVpD zty^iSWWv5111n?u8USU<4mnO=igUtsV&Cd3gDAK|{L@0&9Dv4f!VD z3<-X`{{5)F0yq4be`renGAwm}s*&?~6S@qb8-c{3FbcODL>h2%HqJ48)`&2QAFO@B52 ztx32D*_j?lW6=eXP7sC{5f8-MEKj{V>t?h91IQq_gTo zRfsHp#m+_)e}*fUpW8AT>b$pplvip#mDgYqg>h)MiYo8fndOArogB6BHu5b%fyG*LUu z=3SLl{;0_}em8H(+u3czJhbjk)Ew^v#=FY9I$84S7z*bOJ^f%$79@dDVmwRKtO&ga zQ?R|*Bt%CWWDjpdpW9hLxVH}}PA#B|qZjF^y0_VD=ip369sU5o`6 z$9!SN=1oV9n->H6fP+A~oqc^u3mKz3{1%x*ycR;SELjwI)?>#>$+B9MBG zlHl1ndp0fTGxuWN-bjU0)Y;xZymNMGKzjfW_PY>^RR zi(%~Hn8pF(f9kF++=K3P{DEeQJ<&0$2Z$T6-v$kDx^5GXizJk#3}c8L=OEW?QOc#; zy1;lxoUx<6vCFB#M=Z?MPy|@i?eQdxu40N%NH3h6Ae}%CVH2)ul+hm$WuH>+B@Q z309So&T7mh+VH^9PDmFsRp`&Rir#hhI@pB3TRO(GAbyPBzOEdlIcp6$;Rn=Qd`_H= z%|%~M@(A#I-C?>^Mdkeo)LaE7tGuIJBA#uKN+->0%Iyu8#pNPK$TTCFj}kH8o@hQ! zu!HS{%@e){u2s(}ht#eHC?I&DSk~=87SvN*1D%X%57!6*MdJRP zELZ!s%|G3JY2|1oBD5q|RIL@G@y_(Td|QX~gj@x+0PB#~cuW;V(0I)@d93Wqg)H=9sLk*l$M4EyJDaJnAG9UnU<&b|lap zp@nStFryn&tkEz*Y+RV~CL^p_`0&+;dNY!OO!NT=btuec;xmiU8$5PpIAgM+lvt-a zlj2;=2IX@SK#em4?zvBLtb5-qIj4XTYHoO@#meXYeX7j5yuoS)}THdW5 zl;hkKIMR>A@-RE2diHmYNMJ+LDcmDqxqxvi4mlP|$GLnd#NJ60gSU5cI9=sxqx6Ml zCO0)Xl{e?@4_zUsDv$(5Zk6ldQ^${?&pUg7-8Fr1LDGq-AH4}L8kQ0oc?>>#9s>qiC?E8{xW7hMIER<4sdYq~+2 z>PR+><)Q0^QgEYDAmfWcMxaF}8Br zgckjHLW2LrU{w-cz)^|#heIz|uEkEi`ZswN<8LJemfF$tqOPQXA6Wc=e8vh=joEgf zUAlT&;rM8jB z$gy#(&k^PXi!HO&oS zFwG3U!|=mYeOPiPrwb><2g3X0NE37m`5@ApGdo;50V$(vp}$Ys5?Gcu_mVt zY5TlCW!Vb&1Jt!urU{2aH6X<*TOaD5ziW)>TI!S`vZ($X_D%gxP(llQUr65%6Z%!F z9FjWH# zz5(6uvN~pEC{69`AwDdH{=8 zdHN8=ri|qR>dR6#*4Cv%w z!mu@z5*Q4OG^obEuww&DG^)OeIyA?v+Bj+YLfi7|P*wRys-qvRIxUk|b5rF@cUqKF z8mj25Tr5@*5Wjf6XmpNTZ$cgk&iyDAnF^a@cZF;4AQ@ehcpAb~N3dbFV0MOAMO^cd zEH5D$VU!)!5l3a(hiKv6dBGbgW#W&`z_qAFa9C;#ex%~j6%|aRh`9n#6 z%p1Y@V_`f=49pXTuJ(ZAe9&{o3xs92z}6jiA7T&$-u9p)hVd;7Z5s;sgCIPVA87no zeX#Ar-aq(0!22Wg9nZ6H_y?XofYRpoSFpdEF(QZvn9&~d!A;9u5H`;+4-&B>#y%c2 z^}uY?D88$@OuYZ=_m-(?l`j~oP&rc_l!y@yhJ@k+S~8{&j#QO9r%5l)zhW(1dtq|` zzd!YFetB~nS)`*RttjmbUPf_F4t=bgghK6`0!yN$qOCWo2FM|CS3gfu)P=ux{&mU&?XWs$(FJ9fLL4l|*g8Ku*A^#urmgo9IEEgyHZX?+*~VKkGq4;YiX^(gT~oW^H^ODeR76=$hj9EQmoC6A1{@GG{Lm@3XZi z`Nh`<7JR{=KLmvX^PFw zH=1BkQ2}wn?;fvru1nYks$C-1J-*#Fxzg<}pnpTbcGsiY9$fvQ+&flY44;eRVsWhAY{F-2jIu|j?F}=8juBXD z8{-CScCS{7gpG-Y<7-;%ogK!mux?B9@hix6*7Wj`8wOSQnvLGjc(&M7I=@MlSQ-7L zT4sU^sDk>FT$9s0n%1hAx*DwS^+Qc31T5;!zMtmNqTF+~`Cen0kpO{o7rN(?lb)$R z39ZU*zFz=9dlOr|ucF?HFnR{EFg#hVRI{Lvu@_td&cQiNd^+%FM9$Y@}+ z2vV1h*{FZQELn_@UB_bsZ!w+@?f0gYF;F!IMI!`Lf?mkKjO#DAP^_6cOp0b(W6Ewd zIE!sD{%tbx26d%@w~8JMj175 z$5_i>s>Uf7Qq0cO{3DMBv43g1tx*H?=!#dZ7iDVmWwv;+S-qkxT?uzt z*qbH04YQCR50Mg{!ogtecY&sL=Bj>0f6n;>4E609?*_im zP|^~6A3b+n#Ek|kQRso^XIIz_cd2u{oOw7#h$&Lhhc%CoDN@jj zwf>|0-NAemci`|Ntq)loaet`)L`XT3Orvo$CXd8#TGA>YaWr2ZVW^JQ-q1G2vPEyN z2t8t$CV~Evb8HBO1OWRGx9$Tw%1;_$AZ7{91U=2RErGV&J8;6q{ ze|LvtP(MykE5760L1hbJBFxc)@voP0knP{zq@DEF*oU`PvIZ!6?R1us`Y=m%I$?&iD)*n+2O!0P)vhJ zq388dWHdbd*C77w?84I7v4!deUYy;T%16kX1^zacWpU5a)IO)IcX7mnPvhNkitE*~ zlUoaux2XN%Bxg)^7=atel)a-A*J~1QBAu^L@@xoj8HnD*@FVyZ?8OB{pGGnG>hx=e z_W1yq3ratgVwl5;GT8~sdHN6#F=J8c1eQ$(yMdxLu{KHU7LGSbkVpnd#~Xc{TD)P? zn%YY=*}!z7h2)C!KJm~eqIhB{N#~fL`T^mJH6SW~&OU+jtIip9pV;)lSd~)NPA(Kjrf;LWC;o{HIwp-{;RsgHS80muq6(bDGBf0di*(-dWQ8ZE!@{u;-ACJ zBZ*>?E3r$?%W#)Y7>G$6ENW0ju{tFZN)RC;rJld3;+eEI460#z;-EVKrrf`~IA?Gp z%gJk&`+li@8yXw_f?$98h}*FEBGPL{9m)}0+Xtmxn7($<(E67@Mb@lVQ9HRBceToJ zA*yfgS$xXcnNBZlsmr{OgH5JWZors*8OFjp%GQg7cQV$Ed$;tXMLg-=C^)*lutvC3 z;F_0h8F%61N-I(F)xhOSp*#8ns0Y>Aa}y5{xw~xIQGY2 zWX)Qv7e328>d?D=Yka0s%-`NHh|SPA;2aS;JIoEPVTMi6X#LzXOpcH3mMBMrTw0Mh zedCa`yQW$8VD(+)S^FbjweV$WMu^WmlQQXx{2@u_2@MY*^sTaMWombG?N4SW8_DWQ^yZkR%E?ZuCk1HWcmz^ z6={qa^rs1WY$BFX%`QmVlYshMT$7F=;MIwRbrSYa$P=2Em?4zn)a)T>C&*&z^nsjz zKTRM6@kH&RwFhTD-9|I4C+#(Hy;0}`kKW!;>`9zmd@saeHhxq16V}SGK@q58Oha#_vm>#oRv|SkAlmO}YntWD~wS}pfKjEK@6bZW#pkeFXijve^_c`S!ktMFPu4aL%Bt6GZa__6)hjLT%0<-fOJ8 z!oSOImEhxx$%EUIv46CE&zeX6>;F;^&Sc*@35-BM>t6pU1;O@Tr6B%aXQJTXVr6gV z{QuB~Q65O26tyQ7`|0=Fvtm=CDP_`^hHfGxBqFp@7-67F2sF(kInAA$v0Zqv(I|Xx zG8k%VF(pAWq9Q1ansWEN-*eA%b?3Q%oAV?l{m*>&-{2u${NA6(ed=faSxn6LQraI+ zhZSys1C$?oqN-JUWJjmfdW1)5)Ow^xtJQkMM^~x!tB+i%_3Mw|srM?5t2;zSGopCZc1n$lqZBGSbVe!Ee56PDsQGJ; zh|m$MH%ed>!K;KThDu(jfj&Q_k)JIyQI^>bpX^tSob}AyW(HxtJ?UY7pqdMe}+i8vv z#A=j8gNg4{NA#jJt0P>aI&_fVHwMD-0S?G-#)_i_S%b_F)7UkJ4)np#ST&{&M8PsQ zjELoo51WUw0Q>Ofh5>}05^= zx~AbWjS>W^$Gi}1o{GVto()*tOc%3;{K2qK1Mw!er!JD3n;h

    zCXA85vAO@GD7tVva1bnolj4*-_6wFvthNQv&)G0%TXu(WyV@&^qBrXsvSTn{B>IAw2G4(^sY=uX-aDRpl zL?Hal9#YA*BYost#^bU6*)W_T3>ZJ+$-NGM41%7hLr62g@Ud9Ff?a})RB9(u%Q9(P|pz@bTB0pltA&#@* z_SQzEc5s3OER8Aqsw0_yy2-;1tFy4?CP=ViPVOdmxI+^qn6PGF#u%}t4e{pV#?#px zsr%|9p+9QK$&d2c9RIlhht^q{GSgF!X|ghgUdo znWFDd@;YQWSsl5Owd3;{f6eZM|6LmS{Siw}aIgjef%_;S2N<$vYsBtf9tr;FB_|ll zXKM_#AT)n~vbjbkZ%}Jl9bw-y;i36df{2e~&+@<%SQxQelt)!y##MOSSoR6&g?oF9 zvUsEcGioNXWY4zk;J|y;@TMt-^4xi)tA|_B_>9RDuzZnS5wa9%D4EhYhgJU!N~IAe zZdsKePBrq^TOovrOMz91Xe-m7;tk?+MJ>M(jnpq;M5}v*_>Ig^9D7l>4E;glI~Y-~ zcpsYfHDn}EPeL3$v}br~EKW*L<+Hl?CFmmhZrQQ7t~a+HR&@o+pJ#8@4Bp$?Cz;!> z{C0`v`WhYKVoZY~y3xKu$kf%sjq)mfO|rwZDSe@cz-?|usd-ypi8yVB?D>Ia_2J7~ zvXmg8iO+1V@^-lCv;9CzY^%v{#R{W&w^~RWh-41IXG9V}imyV%lBt1}&QrV%lT2)F z(K5c!Ww~*UC>_%?G&Qh)QmJrIo{3 zEElbI_d;f}GIX`Df&QsyXtYq5)-gJsc`Y_vUoYY z_EB|=IsAM?m=reaO$6e)#P7hQ#u6wTUV2*x;}r>UG?-=4e~9GHc6u8?SUd-=oC)a! z3d3&5XdlYoC3MqeBZEl4u@N?eP?@n3ZL9fBXf9;r`NYVNYH4w7an8o51-^~ z&X&-LWq7^`u~9lb(Z8CgpiPh0Ag?a4#AIPaX|m7aQeA^iy)rgmZ2jbi+R|ksIxPkM z&#+fLhY>r$0wo!gl{ud{AJH-s{4(aNYKd&JsTzqIiP&>#4)k1cMSagsTFZh2_L)b= zUBzl5+I`fsx|WxfbOzk)$Z|(I@p7^#rOEN3$~d8ebmfflh%x}m7Ke{T+7$VF&G%d^ z+1>V*Q&@`Y!$geCX!0if6U#Jf@On&>@27rvwjhoaBmyy6O2-j9O z<+kVPi$$J+;EFqro`D|Sy_zHJ;_pD}NP`4ee>aw6XO@q+eCBoZ#}+6ij(rKi_-8(P zia(3{Z$Y{)7eBsEvF9(~TwGib_Y2LGEP|&g*BN-068<+&MJ7(7&@y@AJEAHxp2jkl zmx&~&`W6QDR{eSE^~LzxsQ9 z=RCG*X6Yx4&n2Ok8aaXOn|V&=D&oxIqiXm{j+dfw?uk(rIz*FE9=3L#CT@#)FlYIc zBQDff>o+wiGc#`D8;&eAXnz81Z5VD7kBZ)uZ|Vq~B_b$zN_XcpdJQm*oDPm> zHOGI)GQT1BGaC@P05-ig>nB%rdMv!k_WoWxyHvNwDa^(~8CW*OP6<*9vllJBMtV(- zR9wP}57SI^K+U?#_i`W|ikB?uNO-JWDP~-$b}6y-{Sp9nV9W7=E`-$^hTTTOLx&ns z6GhAUl5G33tdls?RpveIqZa6AK}r)Dmqzw+ViaR$%_v92;fwX2oYi*ZkQVQ&;GbG% zzlu+rS8;K%o~A&pGV92E(++dcUCZcc8RO21xS$}+ekuxEpmH@8BcDB9HcwW7Oavj3Bm$q3pH=dvzY`r>U7bMvO?d^blHfl` z%Fo;cLsafyn{QiRCCa|9KuUHZ9|=)d{Y}k}w9@KQ1d7H-LO>sI@3TU(v~7r7ByY?5 zOcU6h_#7@Ku_`$vqQq;=&J?Xgyr9ValfS_O>)hs8@GP@TnINq(MoS z*timE2AD}Vkd9SZw&qGZ+}<)n6hE3?Zr*0UG&x!0HjPOr{EXS@RvAT^w0h$0E^zRX(8}#QO?vIc1 z`P{Yh$w#q0d1pHAR%=P!w=D|((FgdvV;iLZxPhMtpb=Ln*`q@Ve&ro)LA!T3Kb#0#d9U{%OHuqcI>dz393;;nESP&_hAp( z3dzK9QQfgK_%eWY~5Ty0t z^KVA8C4K1%rXLIXf47VJLM`*9;1{>01Nq5sr@o}*ap#KsE!5HOL$dLc-G=CR4%e8Qmv68zgTr*4r|cb2YN*oPpYYz(2={{%H){+LBAA7P;cf9Fb*_yi#Zf8(LX z-j#c~Q@Wl50A6#B(wV6dTgY!UprcGtP+9K7MKI$bxec3Ev4bKpUkS@7!I1dnN;D9N zs3HXAo|ru}hlHd)3PT(b`;Dx(tm6l5w`Ns8+^gkM1fvhoK4kdn%EBa~z=KMLRzYqj zT9U%kXc>?TV8a!&dS4s{!1W-jKz{=hA&CqEL**C~Q^u%Er=wt0gL40l$YZu-h@?D8 z9@KZ>EXF7*^;zKGIrDHM>y#zx@p`X`P$;A?F*k1qGIb1}vUa-<5^7{Rm@JpmyJxl* z%`8nw*HWrj9!f78whFpZd#{;nSh;Rkg)UQ{vILwKqg9l~KCnc)*u&**gZsz9%0^Me z=_JK|1Drc{nH}EQ!Z|rXA2ZL8qM4EM=fqbm{?3-S-3CeIkbH2TfaVBO+>2S3 z4ZeYNFN>qx9Jg@Wg1;$CUB-cQdlurgp&miuXqr)2^@-#bO3{Cjb$%dXGn}#frVYcV zNX}BP?09^z#=JarZ9n$F*~t5cWP|$*fENzNaY!(^h4OPEkSW0YltX-#Da6PR`}H}8 z)CYGiiHi&0CbFO(xcR~2Vpa67jMBzV2v}F(EvfN-$nI(m`Q_awqr;3W<{PQT1zwUP%5&)v*2gOO+y9U9RsrFZw$aEjF|)S8zUkR%Ot4R za>2FW>gAzpFHf9w;A7yKTH zkv$O!9erOGG z>dj%~_;M5#bIe_6s@a(_w(z@fMoTART76)APFin6&&-uui?NC%1Z0$NJ!cvF&^}lp z!%QF39Z=ROt)h1+m~yO8Y!60XNL(g$hy9=^?N>E|tv5AR5h%tuN{ zO&Keo+54b(4gx;`E0^WMURFNbo8p`c>KOZy8Ie;+ldusNG8ah;C!XyucPlM03Sp8_|3vo}7bTNN7&*0wa2$ znbU$Iw}?mYVO#YaD|>0HdsB+tqqmF}G?#|aDJ~6S(%c?kWcVKpG?$97DK5V%OQ=%( zLEnhT&=Zrsl9F^8(RLev_#Ch?hFv!h*G&93LO>6gXhX{#fAxd}AGluihf*xw;!BTX zg|X8Pv2!x(alM}^&XNDDDayyz;e7<9fac?1e?i)XPpHqWcg`i(W%{#5Cn-+vI~Pnu z*8ADyBB{0KVUdRHt&pf(6iZ#0NM4voT^t)S#)ZT1qR)*(lYT^^g^~~Ma$*yVI7J+y zZA7aW3A`GNUOqs~kq*uW^)G(SKgPHea+E;z_7c5>Qz~A&Ueh~e=*G~O7jsi`y`*SO z&7iBi1@Bu?HDi>oq{FPoH1*{S(G~Zpz7i)sQEL%%s};}qBuvY0{`-ErXoYyX(zH0( z`I69rXonh6(u`7h2cUmt74UpJFcy6Z4?oVc%0D^~N4=L&Csc`hjNM)gX(^N7l|9&I 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%0D_4 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%0Dc+*Iir|$5g)tjq9S^{e4KSx7O-rHkCbrk)FO{-} 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�f#)5F{Hxyrc!4$O&gkOL}qw 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%0A5i%qjRz7Z0tR;E0NETJwv(85V^qp;G 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

    UIA}2|bZ0%5O?g3I* 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�_X?gp`fKL$?P^yoi_GQ`bZueCyh))tx3~6)d-$ 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

  • Bk+KJay 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%0DkSsnTjJ)Prlnk0fJY;WP`j99@U9?)_s{L&4#ek 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≥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 literal 0 HcmV?d00001 diff --git a/routing-in-play/project/build.properties b/routing-in-play/project/build.properties new file mode 100644 index 0000000000..6d22e3f2d1 --- /dev/null +++ b/routing-in-play/project/build.properties @@ -0,0 +1,4 @@ +#Activator-generated Properties +#Fri Sep 30 14:25:10 EAT 2016 +template.uuid=26c759a5-daf0-4e02-bcfa-ac69725267c0 +sbt.version=0.13.11 diff --git a/routing-in-play/project/plugins.sbt b/routing-in-play/project/plugins.sbt new file mode 100644 index 0000000000..e8e7f602f7 --- /dev/null +++ b/routing-in-play/project/plugins.sbt @@ -0,0 +1,21 @@ +// The Play plugin +addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.5.8") + +// Web plugins +addSbtPlugin("com.typesafe.sbt" % "sbt-coffeescript" % "1.0.0") +addSbtPlugin("com.typesafe.sbt" % "sbt-less" % "1.1.0") +addSbtPlugin("com.typesafe.sbt" % "sbt-jshint" % "1.0.4") +addSbtPlugin("com.typesafe.sbt" % "sbt-rjs" % "1.0.8") +addSbtPlugin("com.typesafe.sbt" % "sbt-digest" % "1.1.1") +addSbtPlugin("com.typesafe.sbt" % "sbt-mocha" % "1.1.0") +addSbtPlugin("org.irundaia.sbt" % "sbt-sassify" % "1.4.6") + +// Play enhancer - this automatically generates getters/setters for public fields +// and rewrites accessors of these fields to use the getters/setters. Remove this +// plugin if you prefer not to have this feature, or disable on a per project +// basis using disablePlugins(PlayEnhancer) in your build.sbt +addSbtPlugin("com.typesafe.sbt" % "sbt-play-enhancer" % "1.1.0") + +// Play Ebean support, to enable, uncomment this line, and enable in your build.sbt using +// enablePlugins(PlayEbean). +// addSbtPlugin("com.typesafe.sbt" % "sbt-play-ebean" % "3.0.2") diff --git a/routing-in-play/public/images/favicon.png b/routing-in-play/public/images/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..c7d92d2ae47434d9a61c90bc205e099b673b9dd5 GIT binary patch literal 687 zcmV;g0#N;lP)ezT{T_ZJ?}AL z5NC{NW(ESID=>(O3&Eg8 zmA9J&6c`h4_f6L;=bU>_H8aNG`kfvCj9zomNt)?O;rzWqZs0LEt%1WB218%1fo9uB zsW^yhBR7C(mqN%GEK9&msg0~ zWY?#bf4q8G-~2KttQZ($odJvy&_-~f?9*ThK@fwR$U^1)p*8=_+^3BXx0$i1BC8XC zr21u6D5nVK&^!dOAw&|1E;qC3uFNj3*Jj#&%Oje@0D-nhfmM*o%^5f}-pxQ07(95H z3|LoV>V19w#rLgmRmtVy9!T3M3FUE3><0T8&b3yEsWcLW`0(=1+qsqc(k(ymBLK0h zK!6(6$7MX~M`-QA2$wk7n(7hhkJ}4Rwi-Vd(_ZFX1Yk7TXuB0IJYpo@kLb2G8m)E{ z`9v=!hi}fOytKckfN^C@6+Z*+MVI9-W_p@_3yyR#UYc0FTpD}i#k>c!wYCS)4v@E$ zchZCo=zV@)`v^$;V18ixdjFMY#q^2$wEX%{f(XD8POnsn$bpbClpC@hPxjzyO>pY|*pF3UU2tYcCN?rUk{Sskej70Mmu9vPwMYhO1m{AxAt(zqDT|0jP7FaX=6 V`?~}E4H^Id002ovPDHLkV1hC)G==~G literal 0 HcmV?d00001 diff --git a/routing-in-play/public/javascripts/hello.js b/routing-in-play/public/javascripts/hello.js new file mode 100644 index 0000000000..02ee13c7ca --- /dev/null +++ b/routing-in-play/public/javascripts/hello.js @@ -0,0 +1,3 @@ +if (window.console) { + console.log("Welcome to your Play application's JavaScript!"); +} diff --git a/routing-in-play/public/stylesheets/main.css b/routing-in-play/public/stylesheets/main.css new file mode 100644 index 0000000000..e69de29bb2 diff --git a/routing-in-play/test/ApplicationTest.java b/routing-in-play/test/ApplicationTest.java new file mode 100644 index 0000000000..3d7c4875aa --- /dev/null +++ b/routing-in-play/test/ApplicationTest.java @@ -0,0 +1,45 @@ +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.fasterxml.jackson.databind.JsonNode; +import org.junit.*; + +import play.mvc.*; +import play.test.*; +import play.data.DynamicForm; +import play.data.validation.ValidationError; +import play.data.validation.Constraints.RequiredValidator; +import play.i18n.Lang; +import play.libs.F; +import play.libs.F.*; +import play.twirl.api.Content; + +import static play.test.Helpers.*; +import static org.junit.Assert.*; + + +/** + * + * Simple (JUnit) tests that can call all parts of a play app. + * If you are interested in mocking a whole application, see the wiki for more details. + * + */ +public class ApplicationTest { + + @Test + public void simpleCheck() { + int a = 1 + 1; + assertEquals(2, a); + } + + @Test + public void renderTemplate() { + Content html = views.html.index.render("Your new application is ready."); + assertEquals("text/html", html.contentType()); + assertTrue(html.body().contains("Your new application is ready.")); + } + + +} diff --git a/routing-in-play/test/IntegrationTest.java b/routing-in-play/test/IntegrationTest.java new file mode 100644 index 0000000000..c53c71e124 --- /dev/null +++ b/routing-in-play/test/IntegrationTest.java @@ -0,0 +1,25 @@ +import org.junit.*; + +import play.mvc.*; +import play.test.*; + +import static play.test.Helpers.*; +import static org.junit.Assert.*; + +import static org.fluentlenium.core.filter.FilterConstructor.*; + +public class IntegrationTest { + + /** + * add your integration test here + * in this example we just check if the welcome page is being shown + */ + @Test + public void test() { + running(testServer(3333, fakeApplication(inMemoryDatabase())), HTMLUNIT, browser -> { + browser.goTo("http://localhost:3333"); + assertTrue(browser.pageSource().contains("Your new application is ready.")); + }); + } + +} From ee3db428800813821a5c42a2279018d40c906f49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Tue, 4 Oct 2016 07:53:52 +0200 Subject: [PATCH 184/265] Add more examples (#712) * Add new module for mocks comparison. * Add sources for testing. * Changes on testCase. * Enter some tests for mockito. * More tests for Mockito. * Even more tests. * Add the rest of the mocking libraries. * Javadoc on test. * Test bare bones for EasyMock. * Fist kind of test and setup. * Add tests using EasyMock with a change on LoginService. * Create LoginControllerTest.java * Test setup * [JMockit] No method called test. * [JMockit] Two methods called test. * [JMockit] One method called test. * [JMockit] Exception mock test * [JMockit] Mocked object to pass around test. * [JMockit] Custom matcher test. * [JMockit] Partial mocking test. * [JMockit] Fix with IDE. * Not stubs. Mocks. MOCKS!!! * Remove unnecesary import. * Use correct encoding. Was having problems with buildings. * Remove failing module. * Create new module mocks and move mock-comparisons there. * Add jmockit module. * Add model class. * Add collaborator class. * Add performer class. * Add performer test. * Fix * Add interface for tests. * Test for any. * Test for with. * Test for null. * Test for times. * Test for arg that. * Test for result and returns. * Test for delegate. * Add verifications to any tests. * Add verifications to with test. * Add verification examples to methods using null. * Add verifications to methods using times. * Formatting. * Compress tests and fix one test. * Adding new article to readme. * [BAEL-178] Add collaborator for advanced article. * [BAEL-178] Add link to readme. * [BAEL-178] Add test for mockUp. * [BAEL-178] Add test for invoke method. * [BAEL-178] Add constructors and tests for mockup for constructors. * [BAEL-178] Add private fields and more test for deencapsulation. * [BAEL-178] Add inner class and test for instantiating inner classes. * [BAEL-178] Multimocks. * [BAEL-178] Add test for expectation reusing. * [BAEL-178] Move test class to tests folders. * Add postgresql dependency. * Add test and config with properties. * [BAEL-114] Add new project for JPA with JNDI. * [BAEL-114] Config without xml. * [BAEL-114] Bring part of Foo, FooServie and FooDao. * [BAEL-114] Show all foos. * [BAEL-114] Readme. * [BAEL-114] Undo changes on main jpa project. * [BAEL-114] Remove unnecesary dependencies. * [BAEL-114] Add tomcat config. * [BAEL-114] Fixes. * Add tests for Optional streams. * Add Java 9 version of the test. * Rename and move to new core-java-9 module. * Move contents from spring-jpa-jndi to spring-jpa and make necessary changes. * Do not use try-catch on configuration. * Add example for FileNotFoundException mini-article. * Add more examples. * Change examples to tests. --- .../FileNotFoundExceptionExample.java | 20 ------ .../exceptions/FileNotFoundExceptionTest.java | 64 +++++++++++++++++++ 2 files changed, 64 insertions(+), 20 deletions(-) delete mode 100644 core-java/src/main/java/com/baeldung/core/exceptions/FileNotFoundExceptionExample.java create mode 100644 core-java/src/test/java/org/baeldung/core/exceptions/FileNotFoundExceptionTest.java diff --git a/core-java/src/main/java/com/baeldung/core/exceptions/FileNotFoundExceptionExample.java b/core-java/src/main/java/com/baeldung/core/exceptions/FileNotFoundExceptionExample.java deleted file mode 100644 index 2ac4e49869..0000000000 --- a/core-java/src/main/java/com/baeldung/core/exceptions/FileNotFoundExceptionExample.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.baeldung.core.exceptions; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.IOException; - -public class FileNotFoundExceptionExample { - - public static void main(String[] args) throws IOException { - BufferedReader rd = null; - try { - rd = new BufferedReader(new FileReader(new File("notExisting"))); - rd.readLine(); - } catch (FileNotFoundException ex) { - ex.printStackTrace(); - } - } -} \ No newline at end of file diff --git a/core-java/src/test/java/org/baeldung/core/exceptions/FileNotFoundExceptionTest.java b/core-java/src/test/java/org/baeldung/core/exceptions/FileNotFoundExceptionTest.java new file mode 100644 index 0000000000..9180edfe81 --- /dev/null +++ b/core-java/src/test/java/org/baeldung/core/exceptions/FileNotFoundExceptionTest.java @@ -0,0 +1,64 @@ +package org.baeldung.core.exceptions; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.IOException; + +import org.apache.log4j.Logger; +import org.junit.Test; + +public class FileNotFoundExceptionTest { + + private static final Logger LOG = Logger.getLogger(FileNotFoundExceptionTest.class); + + private String fileName = Double.toString(Math.random()); + + @Test(expected = BusinessException.class) + public void raiseBusinessSpecificException() throws IOException { + try { + readFailingFile(); + } catch (FileNotFoundException ex) { + throw new BusinessException("BusinessException: necessary file was not present.", ex); + } + } + + @Test + public void createFile() throws IOException { + try { + readFailingFile(); + } catch (FileNotFoundException ex) { + try { + new File(fileName).createNewFile(); + readFailingFile(); + System.out.println("File was created and read."); + } catch (IOException ioe) { + throw new RuntimeException("BusinessException: even creation is not possible.", ioe); + } + } + } + + @Test + public void logError() throws IOException { + try { + readFailingFile(); + } catch (FileNotFoundException ex) { + LOG.error("Optional file " + fileName + " was not found.", ex); + System.out.println("File was logged."); + } + } + + protected void readFailingFile() throws IOException { + BufferedReader rd = null; + rd = new BufferedReader(new FileReader(new File(fileName))); + rd.readLine(); + // no need to close file + } + + class BusinessException extends RuntimeException { + public BusinessException(String string, FileNotFoundException ex) { + super(string, ex); + } + } +} From f63ebcf854db7ed42250f20979cf296a288832ca Mon Sep 17 00:00:00 2001 From: Ivan Paolillo Date: Tue, 4 Oct 2016 10:49:07 +0200 Subject: [PATCH 185/265] Improvement to file uploading --- .../java/org/baeldung/okhttp/OkHttpFileUploadingTest.java | 8 ++++---- .../test/java/org/baeldung/okhttp/OkHttpPostingTest.java | 4 ++-- okhttp/src/test/resources/{test.in => test.txt} | 0 3 files changed, 6 insertions(+), 6 deletions(-) rename okhttp/src/test/resources/{test.in => test.txt} (100%) diff --git a/okhttp/src/test/java/org/baeldung/okhttp/OkHttpFileUploadingTest.java b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpFileUploadingTest.java index 6c43af6778..32457fc11b 100644 --- a/okhttp/src/test/java/org/baeldung/okhttp/OkHttpFileUploadingTest.java +++ b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpFileUploadingTest.java @@ -29,8 +29,8 @@ public class OkHttpFileUploadingTest { RequestBody requestBody = new MultipartBody.Builder() .setType(MultipartBody.FORM) - .addFormDataPart("file", "file.ext", - RequestBody.create(MediaType.parse("image/png"), new File("src/test/resources/test.in"))) + .addFormDataPart("file", "file.txt", + RequestBody.create(MediaType.parse("application/octet-stream"), new File("src/test/resources/test.txt"))) .build(); Request request = new Request.Builder() @@ -51,8 +51,8 @@ public class OkHttpFileUploadingTest { RequestBody requestBody = new MultipartBody.Builder() .setType(MultipartBody.FORM) - .addFormDataPart("file", "file.ext", - RequestBody.create(MediaType.parse("image/png"), new File("src/test/resources/test.in"))) + .addFormDataPart("file", "file.txt", + RequestBody.create(MediaType.parse("application/octet-stream"), new File("src/test/resources/test.txt"))) .build(); diff --git a/okhttp/src/test/java/org/baeldung/okhttp/OkHttpPostingTest.java b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpPostingTest.java index cdb7f2ac8d..1ba2d517c5 100644 --- a/okhttp/src/test/java/org/baeldung/okhttp/OkHttpPostingTest.java +++ b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpPostingTest.java @@ -92,8 +92,8 @@ public class OkHttpPostingTest { .setType(MultipartBody.FORM) .addFormDataPart("username", "test") .addFormDataPart("password", "test") - .addFormDataPart("file", "file.ext", - RequestBody.create(MediaType.parse("image/png"), new File("src/test/resources/test.in"))) + .addFormDataPart("file", "file.txt", + RequestBody.create(MediaType.parse("application/octet-stream"), new File("src/test/resources/test.txt"))) .build(); Request request = new Request.Builder() diff --git a/okhttp/src/test/resources/test.in b/okhttp/src/test/resources/test.txt similarity index 100% rename from okhttp/src/test/resources/test.in rename to okhttp/src/test/resources/test.txt From 3be90ef764e92fad6997c5f0e06736bff070889e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Garc=C3=ADa=20Heredero?= Date: Tue, 4 Oct 2016 15:10:18 +0200 Subject: [PATCH 186/265] Update pom.xml From 87314b566eaab321c92b7950e3066b9cfe9d169a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Garc=C3=ADa=20Heredero?= Date: Tue, 4 Oct 2016 15:11:31 +0200 Subject: [PATCH 187/265] Removed new line at end of file From 08c31ec84bfad7b558faffbcfd5775aa71361b3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Garc=C3=ADa=20Heredero?= Date: Tue, 4 Oct 2016 15:16:50 +0200 Subject: [PATCH 188/265] Update pom.xml --- spring-mvc-java/pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-mvc-java/pom.xml b/spring-mvc-java/pom.xml index 4faea93caa..264185f05b 100644 --- a/spring-mvc-java/pom.xml +++ b/spring-mvc-java/pom.xml @@ -253,3 +253,4 @@ + From 4a19a6ba88144cf52bd1ceaf040df1d2633ebc8a Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Tue, 4 Oct 2016 17:24:46 +0200 Subject: [PATCH 189/265] Simplify StudentStore --- play-framework/student-api/app/models/StudentStore.java | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/play-framework/student-api/app/models/StudentStore.java b/play-framework/student-api/app/models/StudentStore.java index 01b565a22e..e665de399a 100644 --- a/play-framework/student-api/app/models/StudentStore.java +++ b/play-framework/student-api/app/models/StudentStore.java @@ -40,11 +40,6 @@ public class StudentStore { } public boolean deleteStudent(int id) { - Student student=students.remove(id); - if (student == null) - return false; - else - return true; - + return students.remove(id) != null; } } \ No newline at end of file From 1ecb726d7e068b520bc47808253cbaea7db7af96 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Tue, 4 Oct 2016 17:29:49 +0200 Subject: [PATCH 190/265] Refactor StudentStore --- play-framework/student-api/app/models/StudentStore.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/play-framework/student-api/app/models/StudentStore.java b/play-framework/student-api/app/models/StudentStore.java index e665de399a..1ebc14ffab 100644 --- a/play-framework/student-api/app/models/StudentStore.java +++ b/play-framework/student-api/app/models/StudentStore.java @@ -1,7 +1,7 @@ package models; import java.util.ArrayList; import java.util.HashMap; -import java.util.List; +import java.util.HashSet; import java.util.Map; import java.util.Set; @@ -27,7 +27,7 @@ public class StudentStore { } public Set getAllStudents() { - return (Set)students.values(); + return new HashSet<>(students.values()); } public Student updateStudent(Student student) { From 0dc8119722702ea8f41f94a68673da0298351f7d Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Tue, 4 Oct 2016 17:54:59 +0200 Subject: [PATCH 191/265] Refactor Play example --- .../app/controllers/AsyncController.java | 26 +++--- .../app/controllers/StudentController.java | 93 ++++++++++--------- .../student-api/app/models/StudentStore.java | 9 +- play-framework/student-api/app/util/Util.java | 24 ++--- 4 files changed, 82 insertions(+), 70 deletions(-) diff --git a/play-framework/student-api/app/controllers/AsyncController.java b/play-framework/student-api/app/controllers/AsyncController.java index 33cd112837..92c84bb755 100644 --- a/play-framework/student-api/app/controllers/AsyncController.java +++ b/play-framework/student-api/app/controllers/AsyncController.java @@ -1,13 +1,17 @@ package controllers; import akka.actor.ActorSystem; + import javax.inject.*; + import play.*; import play.mvc.*; + import java.util.concurrent.Executor; import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletionStage; import java.util.concurrent.TimeUnit; + import scala.concurrent.duration.Duration; import scala.concurrent.ExecutionContextExecutor; @@ -17,11 +21,11 @@ import scala.concurrent.ExecutionContextExecutor; * asynchronously delay sending a response for 1 second. * * @param actorSystem We need the {@link ActorSystem}'s - * {@link Scheduler} to run code after a delay. - * @param exec We need a Java {@link Executor} to apply the result - * of the {@link CompletableFuture} and a Scala - * {@link ExecutionContext} so we can use the Akka {@link Scheduler}. - * An {@link ExecutionContextExecutor} implements both interfaces. + * {@link Scheduler} to run code after a delay. + * @param exec We need a Java {@link Executor} to apply the result + * of the {@link CompletableFuture} and a Scala + * {@link ExecutionContext} so we can use the Akka {@link Scheduler}. + * An {@link ExecutionContextExecutor} implements both interfaces. */ @Singleton public class AsyncController extends Controller { @@ -31,14 +35,14 @@ public class AsyncController extends Controller { @Inject public AsyncController(ActorSystem actorSystem, ExecutionContextExecutor exec) { - this.actorSystem = actorSystem; - this.exec = exec; + this.actorSystem = actorSystem; + this.exec = exec; } /** * An action that returns a plain text message after a delay * of 1 second. - * + *

    * The configuration in the routes file means that this method * will be called when the application receives a GET request with * a path of /message. @@ -50,9 +54,9 @@ public class AsyncController extends Controller { private CompletionStage getFutureMessage(long time, TimeUnit timeUnit) { CompletableFuture future = new CompletableFuture<>(); actorSystem.scheduler().scheduleOnce( - Duration.create(time, timeUnit), - () -> future.complete("Hi!"), - exec + Duration.create(time, timeUnit), + () -> future.complete("Hi!"), + exec ); return future; } diff --git a/play-framework/student-api/app/controllers/StudentController.java b/play-framework/student-api/app/controllers/StudentController.java index 08318733b5..8b759b9598 100644 --- a/play-framework/student-api/app/controllers/StudentController.java +++ b/play-framework/student-api/app/controllers/StudentController.java @@ -1,56 +1,63 @@ package controllers; -import models.*; -import util.*; -import play.mvc.*; -import play.libs.Json; -import play.libs.Json.*; -import com.fasterxml.jackson.databind.JsonNode; + +import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import java.util.List; +import models.Student; +import models.StudentStore; +import play.libs.Json; +import play.mvc.Controller; +import play.mvc.Result; +import util.Util; + +import java.util.Set; public class StudentController extends Controller { public Result create() { - JsonNode json = request().body().asJson(); - if(json == null) - return badRequest(Util.createResponse("Expecting Json data",false)); - Student student=StudentStore.getInstance().addStudent((Student)Json.fromJson(json,Student.class)); - JsonNode jsonObject=Json.toJson(student); - return created(Util.createResponse(jsonObject,true)); - } - public Result update() { JsonNode json = request().body().asJson(); - if(json == null) - return badRequest(Util.createResponse("Expecting Json data",false)); - Student student=StudentStore.getInstance().updateStudent((Student)Json.fromJson(json,Student.class)); - if(student==null){ - return notFound(Util.createResponse("Student not found",false)); - } - - JsonNode jsonObject=Json.toJson(student); - return ok(Util.createResponse(jsonObject,true)); + if (json == null) { + return badRequest(Util.createResponse("Expecting Json data", false)); + } + Student student = StudentStore.getInstance().addStudent(Json.fromJson(json, Student.class)); + JsonNode jsonObject = Json.toJson(student); + return created(Util.createResponse(jsonObject, true)); } - public Result retrieve(int id) { - Student student=StudentStore.getInstance().getStudent(id); - if(student==null){ - return notFound(Util.createResponse("Student with id:"+id+" not found",false)); - } - JsonNode jsonObjects=Json.toJson(student); - return ok(Util.createResponse(jsonObjects,true)); - } - public Result listStudents() { - Set result=StudentStore.getInstance().getAllStudents(); - ObjectMapper mapper = new ObjectMapper(); - JsonNode jsonData=mapper.convertValue(result, JsonNode.class); - return ok(Util.createResponse(jsonData,true)); + public Result update() { + JsonNode json = request().body().asJson(); + if (json == null) { + return badRequest(Util.createResponse("Expecting Json data", false)); + } + Student student = StudentStore.getInstance().updateStudent(Json.fromJson(json, Student.class)); + if (student == null) { + return notFound(Util.createResponse("Student not found", false)); + } + + JsonNode jsonObject = Json.toJson(student); + return ok(Util.createResponse(jsonObject, true)); + } + + public Result retrieve(int id) { + if (StudentStore.getInstance().getStudent(id) == null) { + return notFound(Util.createResponse("Student with id:" + id + " not found", false)); + } + JsonNode jsonObjects = Json.toJson(StudentStore.getInstance().getStudent(id)); + return ok(Util.createResponse(jsonObjects, true)); + } + + public Result listStudents() { + Set result = StudentStore.getInstance().getAllStudents(); + ObjectMapper mapper = new ObjectMapper(); + + JsonNode jsonData = mapper.convertValue(result, JsonNode.class); + return ok(Util.createResponse(jsonData, true)); } - public Result delete(int id) { - boolean status=StudentStore.getInstance().deleteStudent(id); - if(!status){ - return notFound(Util.createResponse("Student with id:"+id+" not found",false)); - } - return ok(Util.createResponse("Student with id:"+id+" deleted",true)); + + public Result delete(int id) { + if (!StudentStore.getInstance().deleteStudent(id)) { + return notFound(Util.createResponse("Student with id:" + id + " not found", false)); + } + return ok(Util.createResponse("Student with id:" + id + " deleted", true)); } } diff --git a/play-framework/student-api/app/models/StudentStore.java b/play-framework/student-api/app/models/StudentStore.java index 1ebc14ffab..add6a5dbd6 100644 --- a/play-framework/student-api/app/models/StudentStore.java +++ b/play-framework/student-api/app/models/StudentStore.java @@ -1,5 +1,5 @@ package models; -import java.util.ArrayList; + import java.util.HashMap; import java.util.HashSet; import java.util.Map; @@ -10,13 +10,14 @@ public class StudentStore { private Map students = new HashMap<>(); public static StudentStore getInstance() { - if (instance == null) + if (instance == null) { instance = new StudentStore(); + } return instance; } public Student addStudent(Student student) { - int id = students.size() + 1; + int id = students.size(); student.setId(id); students.put(id, student); return student; @@ -31,7 +32,7 @@ public class StudentStore { } public Student updateStudent(Student student) { - int id=student.getId(); + int id = student.getId(); if (students.containsKey(id)) { students.put(id, student); return student; diff --git a/play-framework/student-api/app/util/Util.java b/play-framework/student-api/app/util/Util.java index 3718b50677..a853a4cb43 100644 --- a/play-framework/student-api/app/util/Util.java +++ b/play-framework/student-api/app/util/Util.java @@ -1,17 +1,17 @@ package util; -import com.fasterxml.jackson.databind.node.ObjectNode; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.node.ObjectNode; import play.libs.Json; -import play.libs.Json.*; -import com.fasterxml.jackson.databind.JsonNode; -public class Util{ - public static ObjectNode createResponse(Object response,boolean ok){ - ObjectNode result = Json.newObject(); - result.put("isSuccessfull", ok); - if(response instanceof String) - result.put("body",(String)response); - else result.put("body",(JsonNode)response); +public class Util { + public static ObjectNode createResponse(Object response, boolean ok) { + ObjectNode result = Json.newObject(); + result.put("isSuccessfull", ok); + if (response instanceof String) + result.put("body", (String) response); + else result.put("body", (JsonNode) response); - return result; - } + return result; + } } \ No newline at end of file From f12e6ee2d032e939dfbe212121248a5c90856c60 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Tue, 4 Oct 2016 18:11:37 +0200 Subject: [PATCH 192/265] Refactor FileNotFoundException examples --- .../exceptions/FileNotFoundExceptionTest.java | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/core-java/src/test/java/org/baeldung/core/exceptions/FileNotFoundExceptionTest.java b/core-java/src/test/java/org/baeldung/core/exceptions/FileNotFoundExceptionTest.java index 9180edfe81..5675fe274e 100644 --- a/core-java/src/test/java/org/baeldung/core/exceptions/FileNotFoundExceptionTest.java +++ b/core-java/src/test/java/org/baeldung/core/exceptions/FileNotFoundExceptionTest.java @@ -1,14 +1,10 @@ package org.baeldung.core.exceptions; -import java.io.BufferedReader; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.IOException; - import org.apache.log4j.Logger; import org.junit.Test; +import java.io.*; + public class FileNotFoundExceptionTest { private static final Logger LOG = Logger.getLogger(FileNotFoundExceptionTest.class); @@ -49,15 +45,14 @@ public class FileNotFoundExceptionTest { } } - protected void readFailingFile() throws IOException { - BufferedReader rd = null; - rd = new BufferedReader(new FileReader(new File(fileName))); + private void readFailingFile() throws IOException { + BufferedReader rd = new BufferedReader(new FileReader(new File(fileName))); rd.readLine(); // no need to close file } - class BusinessException extends RuntimeException { - public BusinessException(String string, FileNotFoundException ex) { + private class BusinessException extends RuntimeException { + BusinessException(String string, FileNotFoundException ex) { super(string, ex); } } From 2ef8bc2a6812c6f72cc7443aa5919efd615e35ba Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Tue, 4 Oct 2016 18:12:08 +0200 Subject: [PATCH 193/265] Remove souts --- .../org/baeldung/core/exceptions/FileNotFoundExceptionTest.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/core-java/src/test/java/org/baeldung/core/exceptions/FileNotFoundExceptionTest.java b/core-java/src/test/java/org/baeldung/core/exceptions/FileNotFoundExceptionTest.java index 5675fe274e..23be2200d3 100644 --- a/core-java/src/test/java/org/baeldung/core/exceptions/FileNotFoundExceptionTest.java +++ b/core-java/src/test/java/org/baeldung/core/exceptions/FileNotFoundExceptionTest.java @@ -28,7 +28,6 @@ public class FileNotFoundExceptionTest { try { new File(fileName).createNewFile(); readFailingFile(); - System.out.println("File was created and read."); } catch (IOException ioe) { throw new RuntimeException("BusinessException: even creation is not possible.", ioe); } @@ -41,7 +40,6 @@ public class FileNotFoundExceptionTest { readFailingFile(); } catch (FileNotFoundException ex) { LOG.error("Optional file " + fileName + " was not found.", ex); - System.out.println("File was logged."); } } From 36134289938ecb49b4fcd541d2e39a5096a1d25b Mon Sep 17 00:00:00 2001 From: pared Date: Tue, 4 Oct 2016 18:35:37 +0200 Subject: [PATCH 194/265] random element from list guide (#690) * random element from list guide * refactor * with removing * refactor + thread optimized index generation * refactor * final review refactor --- .../com/baeldung/RandomListElementTest.java | 58 ++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) diff --git a/core-java-8/src/test/java/com/baeldung/RandomListElementTest.java b/core-java-8/src/test/java/com/baeldung/RandomListElementTest.java index 8143da5794..85aaddbca8 100644 --- a/core-java-8/src/test/java/com/baeldung/RandomListElementTest.java +++ b/core-java-8/src/test/java/com/baeldung/RandomListElementTest.java @@ -3,15 +3,71 @@ package com.baeldung; import org.junit.Test; import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.Random; +import java.util.concurrent.ThreadLocalRandom; public class RandomListElementTest { @Test - public void givenList_whenRandomNumberChosen_shouldReturnARandomElement() { + public void givenList_whenRandomIndexChosen_shouldReturnARandomElementUsingRandom() { List givenList = Arrays.asList(1, 2, 3); Random rand = new Random(); + givenList.get(rand.nextInt(givenList.size())); } + + @Test + public void givenList_whenRandomIndexChosen_shouldReturnARandomElementUsingMathRandom() { + List givenList = Arrays.asList(1, 2, 3); + + givenList.get((int)(Math.random() * givenList.size())); + } + + @Test + public void givenList_whenNumberElementsChosen_shouldReturnRandomElementsRepeat() { + Random rand = new Random(); + List givenList = Arrays.asList("one", "two", "three", "four"); + + int numberOfElements = 2; + + for (int i = 0; i < numberOfElements; i++) { + int randomIndex = rand.nextInt(givenList.size()); + givenList.get(randomIndex); + } + } + + @Test + public void givenList_whenNumberElementsChosen_shouldReturnRandomElementsNoRepeat() { + Random rand = new Random(); + List givenList = Arrays.asList("one", "two", "three", "four"); + + int numberOfElements = 2; + + for (int i = 0; i < numberOfElements; i++) { + int randomIndex = rand.nextInt(givenList.size()); + givenList.get(randomIndex); + givenList.remove(randomIndex); + } + } + + @Test + public void givenList_whenSeriesLengthChosen_shouldReturnRandomSeries() { + List givenList = Arrays.asList(1, 2, 3, 4, 5, 6); + Collections.shuffle(givenList); + + int randomSeriesLength = 3; + + givenList.subList(0, randomSeriesLength - 1); + } + + @Test + public void givenList_whenRandomIndexChosen_shouldReturnElementThreadSafely() { + List givenList = Arrays.asList(1, 2, 3, 4, 5, 6); + int randomIndex = ThreadLocalRandom.current().nextInt(10); + + givenList.get(randomIndex); + } + } From 1dd86be0ca429f84ca06dc5a0a2ce349d624dfd3 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Tue, 4 Oct 2016 19:16:35 +0200 Subject: [PATCH 195/265] Add module --- .../baeldung/okhttp/ProgressRequestWrapper.java | 14 ++++---------- pom.xml | 1 + 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/okhttp/src/main/java/org/baeldung/okhttp/ProgressRequestWrapper.java b/okhttp/src/main/java/org/baeldung/okhttp/ProgressRequestWrapper.java index 42df4ac1ee..6a98f8d20a 100644 --- a/okhttp/src/main/java/org/baeldung/okhttp/ProgressRequestWrapper.java +++ b/okhttp/src/main/java/org/baeldung/okhttp/ProgressRequestWrapper.java @@ -1,16 +1,11 @@ package org.baeldung.okhttp; -import okhttp3.RequestBody; import okhttp3.MediaType; +import okhttp3.RequestBody; +import okio.*; import java.io.IOException; -import okio.Buffer; -import okio.BufferedSink; -import okio.ForwardingSink; -import okio.Okio; -import okio.Sink; - public class ProgressRequestWrapper extends RequestBody { protected RequestBody delegate; @@ -65,9 +60,8 @@ public class ProgressRequestWrapper extends RequestBody { } - public static interface ProgressListener { - - public void onRequestProgress(long bytesWritten, long contentLength); + public interface ProgressListener { + void onRequestProgress(long bytesWritten, long contentLength); } } diff --git a/pom.xml b/pom.xml index 07d1d2bf65..6a83fe026e 100644 --- a/pom.xml +++ b/pom.xml @@ -69,6 +69,7 @@ rest-assured rest-testing resteasy + okhttp spring-all spring-akka From d0c9040cb9ddfb2289655afb3bb77aa12fc72feb Mon Sep 17 00:00:00 2001 From: Kiran Date: Wed, 5 Oct 2016 00:12:42 -0400 Subject: [PATCH 196/265] spring-jms new project --- spring-jms/pom.xml | 57 +++++++++++++++++++ .../src/com/baeldung/spring/jms/Employee.java | 19 +++++++ .../baeldung/spring/jms/SampleJMSExample.java | 17 ++++++ .../spring/jms/SampleJmsMessageSender.java | 32 +++++++++++ .../baeldung/spring/jms/SampleListener.java | 23 ++++++++ .../spring/jms/SampleMessageConverter.java | 29 ++++++++++ .../src/main/resources/applicationContext.xml | 30 ++++++++++ 7 files changed, 207 insertions(+) create mode 100644 spring-jms/pom.xml create mode 100644 spring-jms/src/com/baeldung/spring/jms/Employee.java create mode 100644 spring-jms/src/com/baeldung/spring/jms/SampleJMSExample.java create mode 100644 spring-jms/src/com/baeldung/spring/jms/SampleJmsMessageSender.java create mode 100644 spring-jms/src/com/baeldung/spring/jms/SampleListener.java create mode 100644 spring-jms/src/com/baeldung/spring/jms/SampleMessageConverter.java create mode 100644 spring-jms/src/main/resources/applicationContext.xml diff --git a/spring-jms/pom.xml b/spring-jms/pom.xml new file mode 100644 index 0000000000..8f78469989 --- /dev/null +++ b/spring-jms/pom.xml @@ -0,0 +1,57 @@ + + 4.0.0 + com.baeldung + spring-jms + 0.0.1-SNAPSHOT + war + spring-jms + Introduction to Spring JMS + + + 4.3.2.RELEASE + 5.12.0 + + + + + + org.springframework + spring-jms + ${springframework.version} + + + + org.apache.activemq + activemq-all + ${activemq.version} + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.2 + + 1.7 + 1.7 + + + + org.apache.maven.plugins + maven-war-plugin + 2.4 + + src/main/webapp + spring-jms + false + + + + + spring-jms + + \ No newline at end of file diff --git a/spring-jms/src/com/baeldung/spring/jms/Employee.java b/spring-jms/src/com/baeldung/spring/jms/Employee.java new file mode 100644 index 0000000000..8b45607b38 --- /dev/null +++ b/spring-jms/src/com/baeldung/spring/jms/Employee.java @@ -0,0 +1,19 @@ +package com.baeldung.spring.jms; + +public class Employee { + private String name; + private Integer age; + public Employee(String name, Integer age) { + this.name = name; + this.age = age; + } + public String getName() { + return name; + } + public Integer getAge() { + return age; + } + public String toString() { + return "Person: name(" + name + "), age(" + age + ")"; + } +} diff --git a/spring-jms/src/com/baeldung/spring/jms/SampleJMSExample.java b/spring-jms/src/com/baeldung/spring/jms/SampleJMSExample.java new file mode 100644 index 0000000000..bdde97b82d --- /dev/null +++ b/spring-jms/src/com/baeldung/spring/jms/SampleJMSExample.java @@ -0,0 +1,17 @@ +package com.baeldung.spring.jms; + +import java.net.URI; +import java.net.URISyntaxException; + +import org.apache.activemq.broker.BrokerFactory; +import org.apache.activemq.broker.BrokerService; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +public class SampleJMSExample { + public static void main(String[] args) throws URISyntaxException, Exception { + BrokerService broker = BrokerFactory.createBroker(new URI("broker:(tcp://localhost:61616)")); + broker.start(); + ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); + + } +} diff --git a/spring-jms/src/com/baeldung/spring/jms/SampleJmsMessageSender.java b/spring-jms/src/com/baeldung/spring/jms/SampleJmsMessageSender.java new file mode 100644 index 0000000000..e3eccea03e --- /dev/null +++ b/spring-jms/src/com/baeldung/spring/jms/SampleJmsMessageSender.java @@ -0,0 +1,32 @@ +package com.baeldung.spring.jms; + +import javax.jms.ConnectionFactory; +import javax.jms.JMSException; +import javax.jms.Message; +import javax.jms.Queue; +import javax.jms.Session; + +import org.springframework.jms.core.JmsTemplate; +import org.springframework.jms.core.MessageCreator; + +public class SampleJmsMessageSender { + + private JmsTemplate jmsTemplate; + private Queue queue; + + public void setConnectionFactory(ConnectionFactory cf) { + this.jmsTemplate = new JmsTemplate(cf); + } + + public void setQueue(Queue queue) { + this.queue = queue; + } + + public void simpleSend() { + this.jmsTemplate.send(this.queue, new MessageCreator() { + public Message createMessage(Session session) throws JMSException { + return session.createTextMessage("hello queue world"); + } + }); + } +} \ No newline at end of file diff --git a/spring-jms/src/com/baeldung/spring/jms/SampleListener.java b/spring-jms/src/com/baeldung/spring/jms/SampleListener.java new file mode 100644 index 0000000000..466cac44a0 --- /dev/null +++ b/spring-jms/src/com/baeldung/spring/jms/SampleListener.java @@ -0,0 +1,23 @@ +package com.baeldung.spring.jms; + +import javax.jms.JMSException; +import javax.jms.Message; +import javax.jms.MessageListener; +import javax.jms.TextMessage; + +public class SampleListener implements MessageListener { + + private String textMessage; + + public void onMessage(Message message) { + if (message instanceof TextMessage) { + try { + textMessage = ((TextMessage) message).getText(); + } catch (JMSException ex) { + throw new RuntimeException(ex); + } + } else { + throw new IllegalArgumentException("Message Error"); + } + } +} \ No newline at end of file diff --git a/spring-jms/src/com/baeldung/spring/jms/SampleMessageConverter.java b/spring-jms/src/com/baeldung/spring/jms/SampleMessageConverter.java new file mode 100644 index 0000000000..ff8767c78d --- /dev/null +++ b/spring-jms/src/com/baeldung/spring/jms/SampleMessageConverter.java @@ -0,0 +1,29 @@ +package com.baeldung.spring.jms; + +import javax.jms.JMSException; +import javax.jms.MapMessage; +import javax.jms.Message; +import javax.jms.Session; + +import org.springframework.jms.support.converter.MessageConversionException; +import org.springframework.jms.support.converter.MessageConverter; + +public class SampleMessageConverter implements MessageConverter{ + + public Message toMessage(Object object, Session session) + throws JMSException, MessageConversionException { + Employee person = (Employee) object; + MapMessage message = session.createMapMessage(); + message.setString("name", person.getName()); + message.setInt("age", person.getAge()); + return message; + } + + public Object fromMessage(Message message) throws JMSException, + MessageConversionException { + MapMessage mapMessage = (MapMessage) message; + Employee person = new Employee(mapMessage.getString("name"), mapMessage.getInt("age")); + return person; + } + +} diff --git a/spring-jms/src/main/resources/applicationContext.xml b/spring-jms/src/main/resources/applicationContext.xml new file mode 100644 index 0000000000..c15289763f --- /dev/null +++ b/spring-jms/src/main/resources/applicationContext.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From ee9f0336b54030124a6937d828755a609dff9314 Mon Sep 17 00:00:00 2001 From: Kiran Date: Wed, 5 Oct 2016 00:14:21 -0400 Subject: [PATCH 197/265] Updated indentation --- .../spring/jms/SampleMessageConverter.java | 28 +++++++++---------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/spring-jms/src/com/baeldung/spring/jms/SampleMessageConverter.java b/spring-jms/src/com/baeldung/spring/jms/SampleMessageConverter.java index ff8767c78d..856e0e9e49 100644 --- a/spring-jms/src/com/baeldung/spring/jms/SampleMessageConverter.java +++ b/spring-jms/src/com/baeldung/spring/jms/SampleMessageConverter.java @@ -8,22 +8,20 @@ import javax.jms.Session; import org.springframework.jms.support.converter.MessageConversionException; import org.springframework.jms.support.converter.MessageConverter; -public class SampleMessageConverter implements MessageConverter{ +public class SampleMessageConverter implements MessageConverter { - public Message toMessage(Object object, Session session) - throws JMSException, MessageConversionException { - Employee person = (Employee) object; - MapMessage message = session.createMapMessage(); - message.setString("name", person.getName()); - message.setInt("age", person.getAge()); - return message; - } + public Message toMessage(Object object, Session session) throws JMSException, MessageConversionException { + Employee person = (Employee) object; + MapMessage message = session.createMapMessage(); + message.setString("name", person.getName()); + message.setInt("age", person.getAge()); + return message; + } - public Object fromMessage(Message message) throws JMSException, - MessageConversionException { - MapMessage mapMessage = (MapMessage) message; - Employee person = new Employee(mapMessage.getString("name"), mapMessage.getInt("age")); - return person; - } + public Object fromMessage(Message message) throws JMSException, MessageConversionException { + MapMessage mapMessage = (MapMessage) message; + Employee person = new Employee(mapMessage.getString("name"), mapMessage.getInt("age")); + return person; + } } From 2010fd9a87c2b71387300b4c94b081a8f9f0371a Mon Sep 17 00:00:00 2001 From: Kiran Date: Wed, 5 Oct 2016 00:14:59 -0400 Subject: [PATCH 198/265] Updated indentation --- .../src/com/baeldung/spring/jms/Employee.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/spring-jms/src/com/baeldung/spring/jms/Employee.java b/spring-jms/src/com/baeldung/spring/jms/Employee.java index 8b45607b38..a0346c4291 100644 --- a/spring-jms/src/com/baeldung/spring/jms/Employee.java +++ b/spring-jms/src/com/baeldung/spring/jms/Employee.java @@ -3,17 +3,21 @@ package com.baeldung.spring.jms; public class Employee { private String name; private Integer age; + public Employee(String name, Integer age) { - this.name = name; - this.age = age; + this.name = name; + this.age = age; } + public String getName() { - return name; + return name; } + public Integer getAge() { - return age; + return age; } + public String toString() { - return "Person: name(" + name + "), age(" + age + ")"; + return "Person: name(" + name + "), age(" + age + ")"; } } From 28a0a5c80e7f240bf674b7a9189dcffc4f688969 Mon Sep 17 00:00:00 2001 From: slavisa-baeldung Date: Wed, 5 Oct 2016 07:08:12 +0200 Subject: [PATCH 199/265] BAEL-39 - removing the commented deps --- log4j/pom.xml | 22 ---------------------- 1 file changed, 22 deletions(-) diff --git a/log4j/pom.xml b/log4j/pom.xml index 586769aa71..1081513dcf 100644 --- a/log4j/pom.xml +++ b/log4j/pom.xml @@ -15,13 +15,6 @@ log4j 1.2.17 - @@ -40,13 +33,6 @@ disruptor 3.3.4 - @@ -54,14 +40,6 @@ logback-classic 1.1.7 - - From db25745f05072df2d75152a7a35f6b684ccb1945 Mon Sep 17 00:00:00 2001 From: Sunil Gulabani Date: Tue, 4 Oct 2016 09:40:43 +0200 Subject: [PATCH 200/265] BAEL-255 - adding additional read file methods --- .../com/baeldung/file/FileOperationsTest.java | 122 ++++++++++++++---- 1 file changed, 94 insertions(+), 28 deletions(-) diff --git a/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java b/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java index b1476b6360..9f0781ca02 100644 --- a/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java +++ b/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java @@ -1,17 +1,24 @@ package com.baeldung.file; -import org.hamcrest.Matchers; -import org.junit.Assert; -import org.junit.Test; - import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.function.Consumer; +import java.util.stream.Stream; -import static org.hamcrest.CoreMatchers.containsString; +import org.apache.commons.io.FileUtils; +import org.hamcrest.CoreMatchers; +import org.hamcrest.Matchers; +import org.junit.Assert; +import org.junit.Test; public class FileOperationsTest { @@ -20,34 +27,22 @@ public class FileOperationsTest { String expectedData = "Hello World from fileTest.txt!!!"; ClassLoader classLoader = getClass().getClassLoader(); - InputStream inputStream = classLoader.getResourceAsStream("fileTest.txt"); + File file = new File(classLoader.getResource("fileTest.txt").getFile()); + InputStream inputStream = new FileInputStream(file); String data = readFromInputStream(inputStream); - - Assert.assertThat(data, containsString(expectedData)); -} - - @Test - public void givenFileNameAsAbsolutePath_whenUsingClasspath_thenFileData() throws IOException { - String expectedData = "Hello World from fileTest.txt!!!"; - - Class clazz = FileOperationsTest.class; - InputStream inputStream = clazz.getResourceAsStream("/fileTest.txt"); - String data = readFromInputStream(inputStream); - - Assert.assertThat(data, containsString(expectedData)); + + Assert.assertEquals(expectedData, data.trim()); } @Test - public void givenURLName_whenUsingURL_thenFileData() throws IOException { - String expectedData = "Baeldung"; - - URL urlObject = new URL("http://www.baeldung.com/"); - URLConnection urlConnection = urlObject.openConnection(); - - InputStream inputStream = urlConnection.getInputStream(); + public void givenFileNameAsAbsolutePath_whenUsingClasspath_thenFileData() throws IOException { + String expectedData = "Hello World from fileTest_2.txt!!!"; + + Class clazz = FileOperationsTest.class; + InputStream inputStream = clazz.getResourceAsStream("/fileTest_2.txt"); String data = readFromInputStream(inputStream); - Assert.assertThat(data, containsString(expectedData)); + Assert.assertEquals(expectedData, data.trim()); } @Test @@ -58,9 +53,80 @@ public class FileOperationsTest { InputStream inputStream = clazz.getResourceAsStream("/LICENSE.txt"); String data = readFromInputStream(inputStream); - Assert.assertThat(data, containsString(expectedData)); + Assert.assertThat(data.trim(), CoreMatchers.containsString(expectedData)); } + /*@Test + public void givenFileName_whenUsingJarFile_thenFileData() throws IOException { + String expectedData = "BSD License"; + + Class clazz = Matchers.class; + ClassLoader classLoader = clazz.getClassLoader(); + InputStream inputStream = classLoader.getResourceAsStream("LICENSE.txt"); + String data = readFromInputStream(inputStream); + + Assert.assertThat(data.trim(), CoreMatchers.containsString(expectedData)); + }*/ + + @Test + public void givenURLName_whenUsingURL_thenFileData() throws IOException { + String expectedData = "Baeldung"; + + URL urlObject = new URL("http://www.baeldung.com/"); + + URLConnection urlConnection = urlObject.openConnection(); + + InputStream inputStream = urlConnection.getInputStream(); + String data = readFromInputStream(inputStream); + + Assert.assertThat(data.trim(), CoreMatchers.containsString(expectedData)); + } + + @Test + public void givenFileName_whenUsingFileUtils_thenFileData() throws IOException { + String expectedData = "Hello World from fileTest.txt!!!"; + + ClassLoader classLoader = getClass().getClassLoader(); + File file = new File(classLoader.getResource("fileTest.txt").getFile()); + String data = FileUtils.readFileToString(file); + + Assert.assertEquals(expectedData, data.trim()); + } + + @Test + public void givenFilePath_whenUsingFilesReadAllBytes_thenFileData() throws IOException { + String expectedData = "Hello World from fileTest.txt!!!"; + + ClassLoader classLoader = getClass().getClassLoader(); + File file = new File(classLoader.getResource("fileTest.txt").getFile()); + Path path = Paths.get(file.getAbsolutePath()); + + byte[] fileBytes = Files.readAllBytes(path); + String data = new String(fileBytes); + + Assert.assertEquals(expectedData, data.trim()); + } + + @Test + public void givenFilePath_whenUsingFilesLines_thenFileData() throws IOException { + String expectedData = "Hello World from fileTest.txt!!!"; + + ClassLoader classLoader = getClass().getClassLoader(); + File file = new File(classLoader.getResource("fileTest.txt").getFile()); + Path path = Paths.get(file.getAbsolutePath()); + + StringBuilder data = new StringBuilder(); + Stream lines = Files.lines(path); + lines.forEach(new Consumer() { + @Override + public void accept(String line) { + data.append(line).append("\n"); + } + }); + + Assert.assertEquals(expectedData, data.toString().trim()); + } + private String readFromInputStream(InputStream inputStream) throws IOException { InputStreamReader inputStreamReader = new InputStreamReader(inputStream); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); From ece6eab71912ba3e3dbee12ce97811dd324deb24 Mon Sep 17 00:00:00 2001 From: slavisa-baeldung Date: Wed, 5 Oct 2016 07:16:32 +0200 Subject: [PATCH 201/265] BAEL-255 - minor changes --- .../java/com/baeldung/file/FileOperationsTest.java | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java b/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java index 9f0781ca02..fc54055be7 100644 --- a/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java +++ b/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java @@ -56,18 +56,6 @@ public class FileOperationsTest { Assert.assertThat(data.trim(), CoreMatchers.containsString(expectedData)); } - /*@Test - public void givenFileName_whenUsingJarFile_thenFileData() throws IOException { - String expectedData = "BSD License"; - - Class clazz = Matchers.class; - ClassLoader classLoader = clazz.getClassLoader(); - InputStream inputStream = classLoader.getResourceAsStream("LICENSE.txt"); - String data = readFromInputStream(inputStream); - - Assert.assertThat(data.trim(), CoreMatchers.containsString(expectedData)); - }*/ - @Test public void givenURLName_whenUsingURL_thenFileData() throws IOException { String expectedData = "Baeldung"; From 7b587286a49d803150380a428e2365a2214160d8 Mon Sep 17 00:00:00 2001 From: slavisa-baeldung Date: Wed, 5 Oct 2016 07:23:26 +0200 Subject: [PATCH 202/265] BAEL-255 - adding test file --- core-java-8/src/main/resources/fileTest_2.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 core-java-8/src/main/resources/fileTest_2.txt diff --git a/core-java-8/src/main/resources/fileTest_2.txt b/core-java-8/src/main/resources/fileTest_2.txt new file mode 100644 index 0000000000..454301d4f3 --- /dev/null +++ b/core-java-8/src/main/resources/fileTest_2.txt @@ -0,0 +1 @@ +Hello World from fileTest_2.txt!!! \ No newline at end of file From ea39b9cacf9a72825a0deb182a1d7abcebba65d0 Mon Sep 17 00:00:00 2001 From: slavisa-baeldung Date: Wed, 5 Oct 2016 07:24:26 +0200 Subject: [PATCH 203/265] BAEL-255 - minor changes --- core-java-8/src/main/resources/fileTest_2.txt | 1 - .../src/test/java/com/baeldung/file/FileOperationsTest.java | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) delete mode 100644 core-java-8/src/main/resources/fileTest_2.txt diff --git a/core-java-8/src/main/resources/fileTest_2.txt b/core-java-8/src/main/resources/fileTest_2.txt deleted file mode 100644 index 454301d4f3..0000000000 --- a/core-java-8/src/main/resources/fileTest_2.txt +++ /dev/null @@ -1 +0,0 @@ -Hello World from fileTest_2.txt!!! \ No newline at end of file diff --git a/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java b/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java index fc54055be7..1dd1be7808 100644 --- a/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java +++ b/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java @@ -36,10 +36,10 @@ public class FileOperationsTest { @Test public void givenFileNameAsAbsolutePath_whenUsingClasspath_thenFileData() throws IOException { - String expectedData = "Hello World from fileTest_2.txt!!!"; + String expectedData = "Hello World from fileTest.txt!!!"; Class clazz = FileOperationsTest.class; - InputStream inputStream = clazz.getResourceAsStream("/fileTest_2.txt"); + InputStream inputStream = clazz.getResourceAsStream("/fileTest.txt"); String data = readFromInputStream(inputStream); Assert.assertEquals(expectedData, data.trim()); From 05c685941257084244ac57b811ba7e6880380703 Mon Sep 17 00:00:00 2001 From: slavisa-baeldung Date: Wed, 5 Oct 2016 07:34:29 +0200 Subject: [PATCH 204/265] BAEL-297 - passed list as a constructor creation. Array.aslist returns a fixed lenght list and throws exception on remove --- .../src/test/java/com/baeldung/RandomListElementTest.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/core-java-8/src/test/java/com/baeldung/RandomListElementTest.java b/core-java-8/src/test/java/com/baeldung/RandomListElementTest.java index 85aaddbca8..540a8c0af9 100644 --- a/core-java-8/src/test/java/com/baeldung/RandomListElementTest.java +++ b/core-java-8/src/test/java/com/baeldung/RandomListElementTest.java @@ -2,10 +2,7 @@ package com.baeldung; import org.junit.Test; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import java.util.Random; +import java.util.*; import java.util.concurrent.ThreadLocalRandom; public class RandomListElementTest { @@ -41,7 +38,7 @@ public class RandomListElementTest { @Test public void givenList_whenNumberElementsChosen_shouldReturnRandomElementsNoRepeat() { Random rand = new Random(); - List givenList = Arrays.asList("one", "two", "three", "four"); + List givenList = new LinkedList<>(Arrays.asList("one", "two", "three", "four")); int numberOfElements = 2; From 8ec4c8c265d7c67a5ea5748de2d916a5e463f39a Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Wed, 5 Oct 2016 07:50:21 +0200 Subject: [PATCH 205/265] Refactor --- .../src/test/java/com/baeldung/RandomListElementTest.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/core-java-8/src/test/java/com/baeldung/RandomListElementTest.java b/core-java-8/src/test/java/com/baeldung/RandomListElementTest.java index 540a8c0af9..c6d4ded104 100644 --- a/core-java-8/src/test/java/com/baeldung/RandomListElementTest.java +++ b/core-java-8/src/test/java/com/baeldung/RandomListElementTest.java @@ -1,5 +1,6 @@ package com.baeldung; +import com.google.common.collect.Lists; import org.junit.Test; import java.util.*; @@ -38,7 +39,7 @@ public class RandomListElementTest { @Test public void givenList_whenNumberElementsChosen_shouldReturnRandomElementsNoRepeat() { Random rand = new Random(); - List givenList = new LinkedList<>(Arrays.asList("one", "two", "three", "four")); + List givenList = Lists.newArrayList("one", "two", "three", "four"); int numberOfElements = 2; @@ -62,7 +63,7 @@ public class RandomListElementTest { @Test public void givenList_whenRandomIndexChosen_shouldReturnElementThreadSafely() { List givenList = Arrays.asList(1, 2, 3, 4, 5, 6); - int randomIndex = ThreadLocalRandom.current().nextInt(10); + int randomIndex = ThreadLocalRandom.current().nextInt(10) % givenList.size(); givenList.get(randomIndex); } From ea6353917dac20a8b99c0cb37e0545932923f6dc Mon Sep 17 00:00:00 2001 From: Zeger Hendrikse Date: Wed, 5 Oct 2016 22:15:30 +0200 Subject: [PATCH 206/265] Fixed compilation errors --- .../com/baeldung/selenium/junit/TestSeleniumWithJUnit.java | 3 ++- .../com/baeldung/selenium/testng/TestSeleniumWithTestNG.java | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/selenium-junit-testng/src/test/java/com/baeldung/selenium/junit/TestSeleniumWithJUnit.java b/selenium-junit-testng/src/test/java/com/baeldung/selenium/junit/TestSeleniumWithJUnit.java index dabb1e1988..f183a613e7 100644 --- a/selenium-junit-testng/src/test/java/com/baeldung/selenium/junit/TestSeleniumWithJUnit.java +++ b/selenium-junit-testng/src/test/java/com/baeldung/selenium/junit/TestSeleniumWithJUnit.java @@ -1,6 +1,7 @@ package test.java.com.baeldung.selenium.junit; import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertNotNull; import main.java.com.baeldung.selenium.SeleniumExample; import org.junit.After; @@ -25,7 +26,7 @@ public class TestSeleniumWithJUnit { @Test public void whenPageIsLoaded_thenTitleIsAsPerExpectation() { String actualTitle = seleniumExample.getTitle(); - assertNotNull(actualTitle); + assertNotNull(actualTitle); assertEquals(actualTitle, expectedTitle); } } diff --git a/selenium-junit-testng/src/test/java/com/baeldung/selenium/testng/TestSeleniumWithTestNG.java b/selenium-junit-testng/src/test/java/com/baeldung/selenium/testng/TestSeleniumWithTestNG.java index 78ef8b8dfb..3c94f3d440 100644 --- a/selenium-junit-testng/src/test/java/com/baeldung/selenium/testng/TestSeleniumWithTestNG.java +++ b/selenium-junit-testng/src/test/java/com/baeldung/selenium/testng/TestSeleniumWithTestNG.java @@ -1,6 +1,7 @@ package test.java.com.baeldung.selenium.testng; import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertNotNull; import main.java.com.baeldung.selenium.SeleniumExample; import org.testng.annotations.AfterSuite; @@ -10,7 +11,7 @@ import org.testng.annotations.Test; public class TestSeleniumWithTestNG { private SeleniumExample seleniumExample; - private String expectedTitle = "Baeldung | Java, Spring and Web Development tutorials"; + private String expectedTitle = "Baeldung | Java, Spring and Web Development tutorials"; @BeforeSuite public void setUp() { @@ -25,7 +26,7 @@ public class TestSeleniumWithTestNG { @Test public void whenPageIsLoaded_thenTitleIsAsPerExpectation() { String actualTitle = seleniumExample.getTitle(); - assertNotNull(actualTitle); + assertNotNull(actualTitle); assertEquals(actualTitle, expectedTitle); } } From 86637c2e64727f99b02c65aec53618edab8c3773 Mon Sep 17 00:00:00 2001 From: Catalin Date: Thu, 6 Oct 2016 10:59:29 +0300 Subject: [PATCH 207/265] Created README.MD --- annotations/readme.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 annotations/readme.md diff --git a/annotations/readme.md b/annotations/readme.md new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/annotations/readme.md @@ -0,0 +1 @@ + From 2a3dc93f63022cb862b3f477588be42a9f0bd86d Mon Sep 17 00:00:00 2001 From: Catalin Date: Thu, 6 Oct 2016 11:11:00 +0300 Subject: [PATCH 208/265] Created Readme.MD --- flyway-migration/README.MD | 1 + 1 file changed, 1 insertion(+) create mode 100644 flyway-migration/README.MD diff --git a/flyway-migration/README.MD b/flyway-migration/README.MD new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/flyway-migration/README.MD @@ -0,0 +1 @@ + From 8a481af385cc0f49e314192fdaf147b64a3aacf2 Mon Sep 17 00:00:00 2001 From: Catalin Date: Thu, 6 Oct 2016 11:28:24 +0300 Subject: [PATCH 209/265] Created README.MD --- spring-cloud/spring-cloud-bootstrap/README.MD | 1 + 1 file changed, 1 insertion(+) create mode 100644 spring-cloud/spring-cloud-bootstrap/README.MD diff --git a/spring-cloud/spring-cloud-bootstrap/README.MD b/spring-cloud/spring-cloud-bootstrap/README.MD new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/spring-cloud/spring-cloud-bootstrap/README.MD @@ -0,0 +1 @@ + From 98a6c937e3e8ad78929bd38ad20958ec682d98df Mon Sep 17 00:00:00 2001 From: Catalin Date: Thu, 6 Oct 2016 11:35:09 +0300 Subject: [PATCH 210/265] Created README.MD --- core-java-9/src/test/java/com/baeldung/java9/README.MD | 1 + 1 file changed, 1 insertion(+) create mode 100644 core-java-9/src/test/java/com/baeldung/java9/README.MD diff --git a/core-java-9/src/test/java/com/baeldung/java9/README.MD b/core-java-9/src/test/java/com/baeldung/java9/README.MD new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/core-java-9/src/test/java/com/baeldung/java9/README.MD @@ -0,0 +1 @@ + From 3eca6e588e876ceaa52303877601a64a2b62fe89 Mon Sep 17 00:00:00 2001 From: Catalin Date: Thu, 6 Oct 2016 11:41:53 +0300 Subject: [PATCH 211/265] Created README.MD --- spring-cloud-data-flow/README.MD | 1 + 1 file changed, 1 insertion(+) create mode 100644 spring-cloud-data-flow/README.MD diff --git a/spring-cloud-data-flow/README.MD b/spring-cloud-data-flow/README.MD new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/spring-cloud-data-flow/README.MD @@ -0,0 +1 @@ + From 454f0e50c596194cfae2ff1f64f2495ce71b3c13 Mon Sep 17 00:00:00 2001 From: maibin Date: Thu, 6 Oct 2016 10:51:23 +0200 Subject: [PATCH 212/265] Expression Utility Objects article (#724) * Expression-Based Access Control PermitAll, hasRole, hasAnyRole etc. I modified classes regards to Security * Added test cases for Spring Security Expressions * Handler Interceptor - logging example * Test for logger interceptor * Removed conflicted part * UserInterceptor (adding user information to model) * Spring Handler Interceptor - session timers * Spring Security CSRF attack protection with Thymeleaf * Fix and(); * Logger update * Changed config for Thymeleaf * Thymeleaf Natural Processing and Inlining * Expression Utility Objects, Thymeleaf --- .../ExpressionUtilityObjectsController.java | 33 +++++++++++ .../main/webapp/WEB-INF/views/objects.html | 47 +++++++++++++++ ...xpressionUtilityObjectsControllerTest.java | 58 +++++++++++++++++++ 3 files changed, 138 insertions(+) create mode 100644 spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/ExpressionUtilityObjectsController.java create mode 100644 spring-thymeleaf/src/main/webapp/WEB-INF/views/objects.html create mode 100644 spring-thymeleaf/src/test/java/com/baeldung/thymeleaf/controller/ExpressionUtilityObjectsControllerTest.java diff --git a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/ExpressionUtilityObjectsController.java b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/ExpressionUtilityObjectsController.java new file mode 100644 index 0000000000..f30b9b2078 --- /dev/null +++ b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/ExpressionUtilityObjectsController.java @@ -0,0 +1,33 @@ +package com.baeldung.thymeleaf.controller; + +import java.util.Arrays; +import java.util.Calendar; +import java.util.Date; +import java.util.HashSet; + +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; + +/** + * Controller to test expression utility objects: dates, + * + */ +@Controller +public class ExpressionUtilityObjectsController { + + @RequestMapping(value = "/objects", method = RequestMethod.GET) + public String getDates(Model model) { + model.addAttribute("date", new Date()); + model.addAttribute("calendar", Calendar.getInstance()); + model.addAttribute("num", Math.random() * 10); + model.addAttribute("string", "new text"); + model.addAttribute("emptyString", ""); + model.addAttribute("nullString", null); + model.addAttribute("array", new int[] { 1, 3, 4, 5 }); + model.addAttribute("set", new HashSet(Arrays.asList(1, 3, 8))); + return "objects.html"; + } + +} diff --git a/spring-thymeleaf/src/main/webapp/WEB-INF/views/objects.html b/spring-thymeleaf/src/main/webapp/WEB-INF/views/objects.html new file mode 100644 index 0000000000..b2a23a7c0f --- /dev/null +++ b/spring-thymeleaf/src/main/webapp/WEB-INF/views/objects.html @@ -0,0 +1,47 @@ + + + + +Expression utility objects + + +

    Date expression utility

    +

    +

    +

    +

    +

    + +

    Calendar expression utility

    +

    +

    +

    +

    +

    + +

    Numbers expression utility

    +

    +

    +

    + +

    +

    + +

    + +

    Calendar expression utility

    +

    +

    +

    +

    +

    +

    + +

    Aggregates expression utility

    +

    +

    +

    +

    + + \ No newline at end of file diff --git a/spring-thymeleaf/src/test/java/com/baeldung/thymeleaf/controller/ExpressionUtilityObjectsControllerTest.java b/spring-thymeleaf/src/test/java/com/baeldung/thymeleaf/controller/ExpressionUtilityObjectsControllerTest.java new file mode 100644 index 0000000000..f6a79b7570 --- /dev/null +++ b/spring-thymeleaf/src/test/java/com/baeldung/thymeleaf/controller/ExpressionUtilityObjectsControllerTest.java @@ -0,0 +1,58 @@ +package com.baeldung.thymeleaf.controller; + +import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.csrf; +import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.user; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.view; + +import javax.servlet.Filter; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.mock.web.MockHttpSession; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.web.WebAppConfiguration; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.request.RequestPostProcessor; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.context.WebApplicationContext; + +import com.baeldung.thymeleaf.config.InitSecurity; +import com.baeldung.thymeleaf.config.WebApp; +import com.baeldung.thymeleaf.config.WebMVCConfig; +import com.baeldung.thymeleaf.config.WebMVCSecurity; + +@RunWith(SpringJUnit4ClassRunner.class) +@WebAppConfiguration +@ContextConfiguration(classes = { WebApp.class, WebMVCConfig.class, WebMVCSecurity.class, InitSecurity.class }) +public class ExpressionUtilityObjectsControllerTest { + + @Autowired + WebApplicationContext wac; + @Autowired + MockHttpSession session; + + private MockMvc mockMvc; + + @Autowired + private Filter springSecurityFilterChain; + + protected RequestPostProcessor testUser() { + return user("user1").password("user1Pass").roles("USER"); + } + + @Before + public void setup() { + mockMvc = MockMvcBuilders.webAppContextSetup(wac).addFilters(springSecurityFilterChain).build(); + } + + @Test + public void testGetDates() throws Exception{ + mockMvc.perform(get("/objects").with(testUser()).with(csrf())).andExpect(status().isOk()).andExpect(view().name("objects.html")); + } + +} From 33d958284c2a6345eeb315eaa22c753b715e568f Mon Sep 17 00:00:00 2001 From: Catalin Date: Thu, 6 Oct 2016 11:58:32 +0300 Subject: [PATCH 213/265] Created README.MD --- spring-mvc-web-vs-initializer/README.MD | 1 + 1 file changed, 1 insertion(+) create mode 100644 spring-mvc-web-vs-initializer/README.MD diff --git a/spring-mvc-web-vs-initializer/README.MD b/spring-mvc-web-vs-initializer/README.MD new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/spring-mvc-web-vs-initializer/README.MD @@ -0,0 +1 @@ + From 5caca8bd71742fa71c395169de20e0e9c178726d Mon Sep 17 00:00:00 2001 From: Catalin Date: Thu, 6 Oct 2016 12:06:50 +0300 Subject: [PATCH 214/265] Created Readme.MD --- spring-cloud/spring-cloud-hystrix/README.MD | 1 + 1 file changed, 1 insertion(+) create mode 100644 spring-cloud/spring-cloud-hystrix/README.MD diff --git a/spring-cloud/spring-cloud-hystrix/README.MD b/spring-cloud/spring-cloud-hystrix/README.MD new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/spring-cloud/spring-cloud-hystrix/README.MD @@ -0,0 +1 @@ + From 64d5a0386305c6bbd47955b5f1e9b770930f7c29 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Fri, 7 Oct 2016 10:39:07 +0200 Subject: [PATCH 215/265] Refactor spring-jms code samples --- pom.xml | 3 +- .../com/baeldung/spring/jms/Employee.java | 46 +++++++-------- .../baeldung/spring/jms/SampleJMSExample.java | 33 +++++------ .../spring/jms/SampleJmsMessageSender.java | 58 +++++++++---------- .../baeldung/spring/jms/SampleListener.java | 44 +++++++------- .../spring/jms/SampleMessageConverter.java | 53 +++++++++-------- 6 files changed, 116 insertions(+), 121 deletions(-) rename spring-jms/src/{ => main/java}/com/baeldung/spring/jms/Employee.java (94%) rename spring-jms/src/{ => main/java}/com/baeldung/spring/jms/SampleJMSExample.java (79%) rename spring-jms/src/{ => main/java}/com/baeldung/spring/jms/SampleJmsMessageSender.java (73%) rename spring-jms/src/{ => main/java}/com/baeldung/spring/jms/SampleListener.java (96%) rename spring-jms/src/{ => main/java}/com/baeldung/spring/jms/SampleMessageConverter.java (85%) diff --git a/pom.xml b/pom.xml index 6a83fe026e..5526c1e2a3 100644 --- a/pom.xml +++ b/pom.xml @@ -90,12 +90,13 @@ spring-hibernate3 spring-hibernate4 spring-jpa + spring-jms spring-katharsis spring-mockito spring-mvc-java spring-mvc-no-xml spring-mvc-xml - spring-mvc-tiles + spring-mvc-tiles spring-openid spring-protobuf spring-quartz diff --git a/spring-jms/src/com/baeldung/spring/jms/Employee.java b/spring-jms/src/main/java/com/baeldung/spring/jms/Employee.java similarity index 94% rename from spring-jms/src/com/baeldung/spring/jms/Employee.java rename to spring-jms/src/main/java/com/baeldung/spring/jms/Employee.java index a0346c4291..4da02907a9 100644 --- a/spring-jms/src/com/baeldung/spring/jms/Employee.java +++ b/spring-jms/src/main/java/com/baeldung/spring/jms/Employee.java @@ -1,23 +1,23 @@ -package com.baeldung.spring.jms; - -public class Employee { - private String name; - private Integer age; - - public Employee(String name, Integer age) { - this.name = name; - this.age = age; - } - - public String getName() { - return name; - } - - public Integer getAge() { - return age; - } - - public String toString() { - return "Person: name(" + name + "), age(" + age + ")"; - } -} +package com.baeldung.spring.jms; + +public class Employee { + private String name; + private Integer age; + + public Employee(String name, Integer age) { + this.name = name; + this.age = age; + } + + public String getName() { + return name; + } + + public Integer getAge() { + return age; + } + + public String toString() { + return "Person: name(" + name + "), age(" + age + ")"; + } +} diff --git a/spring-jms/src/com/baeldung/spring/jms/SampleJMSExample.java b/spring-jms/src/main/java/com/baeldung/spring/jms/SampleJMSExample.java similarity index 79% rename from spring-jms/src/com/baeldung/spring/jms/SampleJMSExample.java rename to spring-jms/src/main/java/com/baeldung/spring/jms/SampleJMSExample.java index bdde97b82d..a243bc1390 100644 --- a/spring-jms/src/com/baeldung/spring/jms/SampleJMSExample.java +++ b/spring-jms/src/main/java/com/baeldung/spring/jms/SampleJMSExample.java @@ -1,17 +1,16 @@ -package com.baeldung.spring.jms; - -import java.net.URI; -import java.net.URISyntaxException; - -import org.apache.activemq.broker.BrokerFactory; -import org.apache.activemq.broker.BrokerService; -import org.springframework.context.support.ClassPathXmlApplicationContext; - -public class SampleJMSExample { - public static void main(String[] args) throws URISyntaxException, Exception { - BrokerService broker = BrokerFactory.createBroker(new URI("broker:(tcp://localhost:61616)")); - broker.start(); - ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); - - } -} +package com.baeldung.spring.jms; + +import org.apache.activemq.broker.BrokerFactory; +import org.apache.activemq.broker.BrokerService; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +import java.net.URI; + +public class SampleJMSExample { + public static void main(String[] args) throws Exception { + BrokerService broker = BrokerFactory.createBroker(new URI("broker:(tcp://localhost:61616)")); + broker.start(); + ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); + + } +} diff --git a/spring-jms/src/com/baeldung/spring/jms/SampleJmsMessageSender.java b/spring-jms/src/main/java/com/baeldung/spring/jms/SampleJmsMessageSender.java similarity index 73% rename from spring-jms/src/com/baeldung/spring/jms/SampleJmsMessageSender.java rename to spring-jms/src/main/java/com/baeldung/spring/jms/SampleJmsMessageSender.java index e3eccea03e..865a1d4747 100644 --- a/spring-jms/src/com/baeldung/spring/jms/SampleJmsMessageSender.java +++ b/spring-jms/src/main/java/com/baeldung/spring/jms/SampleJmsMessageSender.java @@ -1,32 +1,28 @@ -package com.baeldung.spring.jms; - -import javax.jms.ConnectionFactory; -import javax.jms.JMSException; -import javax.jms.Message; -import javax.jms.Queue; -import javax.jms.Session; - -import org.springframework.jms.core.JmsTemplate; -import org.springframework.jms.core.MessageCreator; - -public class SampleJmsMessageSender { - - private JmsTemplate jmsTemplate; - private Queue queue; - - public void setConnectionFactory(ConnectionFactory cf) { - this.jmsTemplate = new JmsTemplate(cf); - } - - public void setQueue(Queue queue) { - this.queue = queue; - } - - public void simpleSend() { - this.jmsTemplate.send(this.queue, new MessageCreator() { - public Message createMessage(Session session) throws JMSException { - return session.createTextMessage("hello queue world"); - } - }); - } +package com.baeldung.spring.jms; + +import org.springframework.jms.core.JmsTemplate; +import org.springframework.jms.core.MessageCreator; + +import javax.jms.*; + +public class SampleJmsMessageSender { + + private JmsTemplate jmsTemplate; + private Queue queue; + + public void createJmsTemplate(ConnectionFactory cf) { + this.jmsTemplate = new JmsTemplate(cf); + } + + public void setQueue(Queue queue) { + this.queue = queue; + } + + public void simpleSend() { + this.jmsTemplate.send(this.queue, new MessageCreator() { + public Message createMessage(Session session) throws JMSException { + return session.createTextMessage("hello queue world"); + } + }); + } } \ No newline at end of file diff --git a/spring-jms/src/com/baeldung/spring/jms/SampleListener.java b/spring-jms/src/main/java/com/baeldung/spring/jms/SampleListener.java similarity index 96% rename from spring-jms/src/com/baeldung/spring/jms/SampleListener.java rename to spring-jms/src/main/java/com/baeldung/spring/jms/SampleListener.java index 466cac44a0..0320870d88 100644 --- a/spring-jms/src/com/baeldung/spring/jms/SampleListener.java +++ b/spring-jms/src/main/java/com/baeldung/spring/jms/SampleListener.java @@ -1,23 +1,23 @@ -package com.baeldung.spring.jms; - -import javax.jms.JMSException; -import javax.jms.Message; -import javax.jms.MessageListener; -import javax.jms.TextMessage; - -public class SampleListener implements MessageListener { - - private String textMessage; - - public void onMessage(Message message) { - if (message instanceof TextMessage) { - try { - textMessage = ((TextMessage) message).getText(); - } catch (JMSException ex) { - throw new RuntimeException(ex); - } - } else { - throw new IllegalArgumentException("Message Error"); - } - } +package com.baeldung.spring.jms; + +import javax.jms.JMSException; +import javax.jms.Message; +import javax.jms.MessageListener; +import javax.jms.TextMessage; + +public class SampleListener implements MessageListener { + + private String textMessage; + + public void onMessage(Message message) { + if (message instanceof TextMessage) { + try { + textMessage = ((TextMessage) message).getText(); + } catch (JMSException ex) { + throw new RuntimeException(ex); + } + } else { + throw new IllegalArgumentException("Message Error"); + } + } } \ No newline at end of file diff --git a/spring-jms/src/com/baeldung/spring/jms/SampleMessageConverter.java b/spring-jms/src/main/java/com/baeldung/spring/jms/SampleMessageConverter.java similarity index 85% rename from spring-jms/src/com/baeldung/spring/jms/SampleMessageConverter.java rename to spring-jms/src/main/java/com/baeldung/spring/jms/SampleMessageConverter.java index 856e0e9e49..6cfc588f13 100644 --- a/spring-jms/src/com/baeldung/spring/jms/SampleMessageConverter.java +++ b/spring-jms/src/main/java/com/baeldung/spring/jms/SampleMessageConverter.java @@ -1,27 +1,26 @@ -package com.baeldung.spring.jms; - -import javax.jms.JMSException; -import javax.jms.MapMessage; -import javax.jms.Message; -import javax.jms.Session; - -import org.springframework.jms.support.converter.MessageConversionException; -import org.springframework.jms.support.converter.MessageConverter; - -public class SampleMessageConverter implements MessageConverter { - - public Message toMessage(Object object, Session session) throws JMSException, MessageConversionException { - Employee person = (Employee) object; - MapMessage message = session.createMapMessage(); - message.setString("name", person.getName()); - message.setInt("age", person.getAge()); - return message; - } - - public Object fromMessage(Message message) throws JMSException, MessageConversionException { - MapMessage mapMessage = (MapMessage) message; - Employee person = new Employee(mapMessage.getString("name"), mapMessage.getInt("age")); - return person; - } - -} +package com.baeldung.spring.jms; + +import org.springframework.jms.support.converter.MessageConversionException; +import org.springframework.jms.support.converter.MessageConverter; + +import javax.jms.JMSException; +import javax.jms.MapMessage; +import javax.jms.Message; +import javax.jms.Session; + +public class SampleMessageConverter implements MessageConverter { + + public Message toMessage(Object object, Session session) throws JMSException, MessageConversionException { + Employee person = (Employee) object; + MapMessage message = session.createMapMessage(); + message.setString("name", person.getName()); + message.setInt("age", person.getAge()); + return message; + } + + public Object fromMessage(Message message) throws JMSException, MessageConversionException { + MapMessage mapMessage = (MapMessage) message; + return new Employee(mapMessage.getString("name"), mapMessage.getInt("age")); + } + +} From e1abedf15e2b82d14795903e5f5c26fbeaea141a Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Fri, 7 Oct 2016 12:03:53 +0200 Subject: [PATCH 216/265] Refactor RandomListElementTest --- .../test/java/com/baeldung/RandomListElementTest.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/core-java-8/src/test/java/com/baeldung/RandomListElementTest.java b/core-java-8/src/test/java/com/baeldung/RandomListElementTest.java index c6d4ded104..1918c801dc 100644 --- a/core-java-8/src/test/java/com/baeldung/RandomListElementTest.java +++ b/core-java-8/src/test/java/com/baeldung/RandomListElementTest.java @@ -10,7 +10,7 @@ public class RandomListElementTest { @Test public void givenList_whenRandomIndexChosen_shouldReturnARandomElementUsingRandom() { - List givenList = Arrays.asList(1, 2, 3); + List givenList = Lists.newArrayList(1, 2, 3); Random rand = new Random(); givenList.get(rand.nextInt(givenList.size())); @@ -18,7 +18,7 @@ public class RandomListElementTest { @Test public void givenList_whenRandomIndexChosen_shouldReturnARandomElementUsingMathRandom() { - List givenList = Arrays.asList(1, 2, 3); + List givenList = Lists.newArrayList(1, 2, 3); givenList.get((int)(Math.random() * givenList.size())); } @@ -26,7 +26,7 @@ public class RandomListElementTest { @Test public void givenList_whenNumberElementsChosen_shouldReturnRandomElementsRepeat() { Random rand = new Random(); - List givenList = Arrays.asList("one", "two", "three", "four"); + List givenList = Lists.newArrayList("one", "two", "three", "four"); int numberOfElements = 2; @@ -52,7 +52,7 @@ public class RandomListElementTest { @Test public void givenList_whenSeriesLengthChosen_shouldReturnRandomSeries() { - List givenList = Arrays.asList(1, 2, 3, 4, 5, 6); + List givenList = Lists.newArrayList(1, 2, 3, 4, 5, 6); Collections.shuffle(givenList); int randomSeriesLength = 3; @@ -62,7 +62,7 @@ public class RandomListElementTest { @Test public void givenList_whenRandomIndexChosen_shouldReturnElementThreadSafely() { - List givenList = Arrays.asList(1, 2, 3, 4, 5, 6); + List givenList = Lists.newArrayList(1, 2, 3, 4, 5, 6); int randomIndex = ThreadLocalRandom.current().nextInt(10) % givenList.size(); givenList.get(randomIndex); From 61ea026ea9077be61114d4185f98a64dbe798a2e Mon Sep 17 00:00:00 2001 From: Slavisa Baeldung Date: Fri, 7 Oct 2016 16:41:49 +0200 Subject: [PATCH 217/265] BAEL-225 - moving to lambda, additional improvements --- .../com/baeldung/file/FileOperationsTest.java | 37 +++++++------------ 1 file changed, 14 insertions(+), 23 deletions(-) diff --git a/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java b/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java index 1dd1be7808..3752fc5b7f 100644 --- a/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java +++ b/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java @@ -1,25 +1,25 @@ package com.baeldung.file; +import org.apache.commons.io.FileUtils; +import org.hamcrest.CoreMatchers; +import org.hamcrest.Matchers; +import org.junit.Assert; +import org.junit.Test; + import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; +import java.net.URISyntaxException; import java.net.URL; import java.net.URLConnection; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; -import java.util.function.Consumer; import java.util.stream.Stream; -import org.apache.commons.io.FileUtils; -import org.hamcrest.CoreMatchers; -import org.hamcrest.Matchers; -import org.junit.Assert; -import org.junit.Test; - public class FileOperationsTest { @Test @@ -82,12 +82,10 @@ public class FileOperationsTest { } @Test - public void givenFilePath_whenUsingFilesReadAllBytes_thenFileData() throws IOException { + public void givenFilePath_whenUsingFilesReadAllBytes_thenFileData() throws IOException, URISyntaxException { String expectedData = "Hello World from fileTest.txt!!!"; - - ClassLoader classLoader = getClass().getClassLoader(); - File file = new File(classLoader.getResource("fileTest.txt").getFile()); - Path path = Paths.get(file.getAbsolutePath()); + + Path path = Paths.get(getClass().getClassLoader().getResource("fileTest.txt").toURI()); byte[] fileBytes = Files.readAllBytes(path); String data = new String(fileBytes); @@ -96,21 +94,14 @@ public class FileOperationsTest { } @Test - public void givenFilePath_whenUsingFilesLines_thenFileData() throws IOException { + public void givenFilePath_whenUsingFilesLines_thenFileData() throws IOException, URISyntaxException { String expectedData = "Hello World from fileTest.txt!!!"; - - ClassLoader classLoader = getClass().getClassLoader(); - File file = new File(classLoader.getResource("fileTest.txt").getFile()); - Path path = Paths.get(file.getAbsolutePath()); + + Path path = Paths.get(getClass().getClassLoader().getResource("fileTest.txt").toURI()); StringBuilder data = new StringBuilder(); Stream lines = Files.lines(path); - lines.forEach(new Consumer() { - @Override - public void accept(String line) { - data.append(line).append("\n"); - } - }); + lines.forEach(line -> data.append(line).append("\n")); Assert.assertEquals(expectedData, data.toString().trim()); } From b66c42d0f613efa540db0cfb67f72068d67e301a Mon Sep 17 00:00:00 2001 From: Thai Nguyen Date: Sun, 9 Oct 2016 10:45:25 +0700 Subject: [PATCH 218/265] Apache CXF support for RESTful web services --- apache-cxf/jaxrs-implementation/pom.xml | 54 +++++++++++ .../cxf/jaxrs/implementation/Baeldung.java | 68 ++++++++++++++ .../cxf/jaxrs/implementation/Course.java | 73 +++++++++++++++ .../jaxrs/implementation/RestfulServer.java | 21 +++++ .../cxf/jaxrs/implementation/Student.java | 25 +++++ .../src/main/resources/course.xml | 4 + .../src/main/resources/student.xml | 5 + .../cxf/jaxrs/implementation/ServiceTest.java | 93 +++++++++++++++++++ apache-cxf/pom.xml | 1 + 9 files changed, 344 insertions(+) create mode 100644 apache-cxf/jaxrs-implementation/pom.xml create mode 100644 apache-cxf/jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Baeldung.java create mode 100644 apache-cxf/jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Course.java create mode 100644 apache-cxf/jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/RestfulServer.java create mode 100644 apache-cxf/jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Student.java create mode 100644 apache-cxf/jaxrs-implementation/src/main/resources/course.xml create mode 100644 apache-cxf/jaxrs-implementation/src/main/resources/student.xml create mode 100644 apache-cxf/jaxrs-implementation/src/test/java/com/baeldung/cxf/jaxrs/implementation/ServiceTest.java diff --git a/apache-cxf/jaxrs-implementation/pom.xml b/apache-cxf/jaxrs-implementation/pom.xml new file mode 100644 index 0000000000..1f83ecf934 --- /dev/null +++ b/apache-cxf/jaxrs-implementation/pom.xml @@ -0,0 +1,54 @@ + + + + 4.0.0 + cxf-jaxrs-implementation + + com.baeldung + apache-cxf + 0.0.1-SNAPSHOT + + + UTF-8 + 3.1.7 + 4.5.2 + + + + + org.codehaus.mojo + exec-maven-plugin + + com.baeldung.cxf.jaxrs.implementation.RestfulServer + + + + maven-surefire-plugin + 2.19.1 + + + **/ServiceTest + + + + + + + + org.apache.cxf + cxf-rt-frontend-jaxrs + ${cxf.version} + + + org.apache.cxf + cxf-rt-transports-http-jetty + ${cxf.version} + + + org.apache.httpcomponents + httpclient + ${httpclient.version} + + + diff --git a/apache-cxf/jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Baeldung.java b/apache-cxf/jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Baeldung.java new file mode 100644 index 0000000000..5617f482f8 --- /dev/null +++ b/apache-cxf/jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Baeldung.java @@ -0,0 +1,68 @@ +package com.baeldung.cxf.jaxrs.implementation; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.ws.rs.GET; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Response; + +@Path("baeldung") +@Produces("text/xml") +public class Baeldung { + private Map courses = new HashMap<>(); + + { + Student student1 = new Student(); + Student student2 = new Student(); + student1.setId(1); + student1.setName("Student A"); + student2.setId(2); + student2.setName("Student B"); + + List course1Students = new ArrayList<>(); + course1Students.add(student1); + course1Students.add(student2); + + Course course1 = new Course(); + Course course2 = new Course(); + course1.setId(1); + course1.setName("REST with Spring"); + course1.setStudents(course1Students); + course2.setId(2); + course2.setName("Learn Spring Security"); + + courses.put(1, course1); + courses.put(2, course2); + } + + @GET + @Path("courses/{courseOrder}") + public Course getCourse(@PathParam("courseOrder") int courseOrder) { + return courses.get(courseOrder); + } + + @PUT + @Path("courses/{courseOrder}") + public Response putCourse(@PathParam("courseOrder") int courseOrder, Course course) { + Course existingCourse = courses.get(courseOrder); + Response response; + if (existingCourse == null || existingCourse.getId() != course.getId() || !(existingCourse.getName().equals(course.getName()))) { + courses.put(courseOrder, course); + response = Response.ok().build(); + } else { + response = Response.notModified().build(); + } + return response; + } + + @Path("courses/{courseOrder}/students") + public Course pathToStudent(@PathParam("courseOrder") int courseOrder) { + return courses.get(courseOrder); + } +} \ No newline at end of file diff --git a/apache-cxf/jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Course.java b/apache-cxf/jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Course.java new file mode 100644 index 0000000000..9ab74bea58 --- /dev/null +++ b/apache-cxf/jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Course.java @@ -0,0 +1,73 @@ +package com.baeldung.cxf.jaxrs.implementation; + +import java.util.ArrayList; +import java.util.List; + +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.core.Response; + +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement(name = "Course") +public class Course { + private int id; + private String name; + private List students; + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public List getStudents() { + return students; + } + + public void setStudents(List students) { + this.students = students; + } + + @GET + @Path("{studentOrder}") + public Student getStudent(@PathParam("studentOrder")int studentOrder) { + return students.get(studentOrder); + } + + @POST + public Response postStudent(Student student) { + if (students == null) { + students = new ArrayList(); + } + students.add(student); + return Response.ok(student).build(); + } + + @DELETE + @Path("{studentOrder}") + public Response deleteStudent(@PathParam("studentOrder") int studentOrder) { + Student student = students.get(studentOrder); + Response response; + if (student != null) { + students.remove(studentOrder); + response = Response.ok().build(); + } else { + response = Response.notModified().build(); + } + return response; + } +} \ No newline at end of file diff --git a/apache-cxf/jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/RestfulServer.java b/apache-cxf/jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/RestfulServer.java new file mode 100644 index 0000000000..bb35bab3f8 --- /dev/null +++ b/apache-cxf/jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/RestfulServer.java @@ -0,0 +1,21 @@ +package com.baeldung.cxf.jaxrs.implementation; + +import org.apache.cxf.endpoint.Server; +import org.apache.cxf.jaxrs.JAXRSServerFactoryBean; +import org.apache.cxf.jaxrs.lifecycle.SingletonResourceProvider; + +public class RestfulServer { + public static void main(String args[]) throws Exception { + JAXRSServerFactoryBean factoryBean = new JAXRSServerFactoryBean(); + factoryBean.setResourceClasses(Baeldung.class); + factoryBean.setResourceProvider(new SingletonResourceProvider(new Baeldung())); + factoryBean.setAddress("http://localhost:8080/"); + Server server = factoryBean.create(); + + System.out.println("Server ready..."); + Thread.sleep(60 * 1000); + System.out.println("Server exiting"); + server.destroy(); + System.exit(0); + } +} \ No newline at end of file diff --git a/apache-cxf/jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Student.java b/apache-cxf/jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Student.java new file mode 100644 index 0000000000..de782e4edb --- /dev/null +++ b/apache-cxf/jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Student.java @@ -0,0 +1,25 @@ +package com.baeldung.cxf.jaxrs.implementation; + +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement(name = "Student") +public class Student { + private int id; + private String name; + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} \ No newline at end of file diff --git a/apache-cxf/jaxrs-implementation/src/main/resources/course.xml b/apache-cxf/jaxrs-implementation/src/main/resources/course.xml new file mode 100644 index 0000000000..465c337745 --- /dev/null +++ b/apache-cxf/jaxrs-implementation/src/main/resources/course.xml @@ -0,0 +1,4 @@ + + 3 + Apache CXF Support for RESTful + \ No newline at end of file diff --git a/apache-cxf/jaxrs-implementation/src/main/resources/student.xml b/apache-cxf/jaxrs-implementation/src/main/resources/student.xml new file mode 100644 index 0000000000..7fb6189815 --- /dev/null +++ b/apache-cxf/jaxrs-implementation/src/main/resources/student.xml @@ -0,0 +1,5 @@ + + + 3 + Student C + \ No newline at end of file diff --git a/apache-cxf/jaxrs-implementation/src/test/java/com/baeldung/cxf/jaxrs/implementation/ServiceTest.java b/apache-cxf/jaxrs-implementation/src/test/java/com/baeldung/cxf/jaxrs/implementation/ServiceTest.java new file mode 100644 index 0000000000..48749a568e --- /dev/null +++ b/apache-cxf/jaxrs-implementation/src/test/java/com/baeldung/cxf/jaxrs/implementation/ServiceTest.java @@ -0,0 +1,93 @@ +package com.baeldung.cxf.jaxrs.implementation; + +import static org.junit.Assert.assertEquals; + +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; + +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.URL; + +import javax.xml.bind.JAXB; + +import org.apache.http.HttpResponse; +import org.apache.http.client.methods.HttpDelete; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.client.methods.HttpPut; +import org.apache.http.entity.InputStreamEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; + +public class ServiceTest { + private static final String BASE_URL = "http://localhost:8080/baeldung/courses/"; + private static CloseableHttpClient client; + + @BeforeClass + public static void createClient() { + client = HttpClients.createDefault(); + } + + @AfterClass + public static void closeClient() throws IOException { + client.close(); + } + + @Test + public void whenPutCourse_thenCorrect() throws IOException { + HttpPut httpPut = new HttpPut(BASE_URL + "3"); + InputStream resourceStream = this.getClass().getClassLoader().getResourceAsStream("course.xml"); + httpPut.setEntity(new InputStreamEntity(resourceStream)); + httpPut.setHeader("Content-Type", "text/xml"); + + HttpResponse response = client.execute(httpPut); + assertEquals(200, response.getStatusLine().getStatusCode()); + + Course course = getCourse(3); + assertEquals(3, course.getId()); + assertEquals("Apache CXF Support for RESTful", course.getName()); + } + + @Test + public void whenPostStudent_thenCorrect() throws IOException { + HttpPost httpPost = new HttpPost(BASE_URL + "2/students"); + InputStream resourceStream = this.getClass().getClassLoader().getResourceAsStream("student.xml"); + httpPost.setEntity(new InputStreamEntity(resourceStream)); + httpPost.setHeader("Content-Type", "text/xml"); + + HttpResponse response = client.execute(httpPost); + assertEquals(200, response.getStatusLine().getStatusCode()); + + Student student = getStudent(2, 0); + assertEquals(3, student.getId()); + assertEquals("Student C", student.getName()); + } + + @Test + public void whenDeleteStudent_thenCorrect() throws IOException { + HttpDelete httpDelete = new HttpDelete(BASE_URL + "1/students/0"); + HttpResponse response = client.execute(httpDelete); + assertEquals(200, response.getStatusLine().getStatusCode()); + + Course course = getCourse(1); + assertEquals(1, course.getStudents().size()); + assertEquals(2, course.getStudents().get(0).getId()); + assertEquals("Student B", course.getStudents().get(0).getName()); + } + + private Course getCourse(int courseOrder) throws IOException { + URL url = new URL(BASE_URL + courseOrder); + InputStream input = url.openStream(); + Course course = JAXB.unmarshal(new InputStreamReader(input), Course.class); + return course; + } + + private Student getStudent(int courseOrder, int studentOrder) throws IOException { + URL url = new URL(BASE_URL + courseOrder + "/students/" + studentOrder); + InputStream input = url.openStream(); + Student student = JAXB.unmarshal(new InputStreamReader(input), Student.class); + return student; + } +} \ No newline at end of file diff --git a/apache-cxf/pom.xml b/apache-cxf/pom.xml index 022fc59f9b..af7949bb6c 100644 --- a/apache-cxf/pom.xml +++ b/apache-cxf/pom.xml @@ -8,6 +8,7 @@ cxf-introduction cxf-spring + cxf-jaxrs-implementation From 4f64784e841d255323d2c76f3be7289615ee9f72 Mon Sep 17 00:00:00 2001 From: sanketmeghani Date: Sun, 9 Oct 2016 11:17:22 +0530 Subject: [PATCH 219/265] Mocking current time for JUnits --- .../baeldung/util/CurrentDateTimeTest.java | 42 ++++++++++++------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/core-java-8/src/test/java/com/baeldung/util/CurrentDateTimeTest.java b/core-java-8/src/test/java/com/baeldung/util/CurrentDateTimeTest.java index 06d9394a5e..599d5a5894 100644 --- a/core-java-8/src/test/java/com/baeldung/util/CurrentDateTimeTest.java +++ b/core-java-8/src/test/java/com/baeldung/util/CurrentDateTimeTest.java @@ -1,47 +1,57 @@ package com.baeldung.util; import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.when; +import java.time.Clock; import java.time.Instant; import java.time.LocalDate; import java.time.LocalTime; +import java.time.ZoneId; import java.time.temporal.ChronoField; -import java.util.Calendar; -import java.util.GregorianCalendar; +import org.junit.BeforeClass; import org.junit.Test; +import org.mockito.Mockito; public class CurrentDateTimeTest { + private static Clock clock; + + @BeforeClass + public static void setup() { + final Instant currentTime = Instant.parse("2016-10-09T15:10:30.00Z"); + + clock = Mockito.mock(Clock.class); + when(clock.instant()).thenAnswer((invocation) -> currentTime); + when(clock.getZone()).thenAnswer((invocation) -> ZoneId.of("UTC")); + } + @Test public void shouldReturnCurrentDate() { - final LocalDate now = LocalDate.now(); - final Calendar calendar = GregorianCalendar.getInstance(); + final LocalDate now = LocalDate.now(clock); - assertEquals("10-10-2010".length(), now.toString().length()); - assertEquals(calendar.get(Calendar.DATE), now.get(ChronoField.DAY_OF_MONTH)); - assertEquals(calendar.get(Calendar.MONTH), now.get(ChronoField.MONTH_OF_YEAR) - 1); - assertEquals(calendar.get(Calendar.YEAR), now.get(ChronoField.YEAR)); + assertEquals(9, now.get(ChronoField.DAY_OF_MONTH)); + assertEquals(10, now.get(ChronoField.MONTH_OF_YEAR)); + assertEquals(2016, now.get(ChronoField.YEAR)); } @Test public void shouldReturnCurrentTime() { - final LocalTime now = LocalTime.now(); - final Calendar calendar = GregorianCalendar.getInstance(); + final LocalTime now = LocalTime.now(clock); - assertEquals(calendar.get(Calendar.HOUR_OF_DAY), now.get(ChronoField.HOUR_OF_DAY)); - assertEquals(calendar.get(Calendar.MINUTE), now.get(ChronoField.MINUTE_OF_HOUR)); - assertEquals(calendar.get(Calendar.SECOND), now.get(ChronoField.SECOND_OF_MINUTE)); + assertEquals(15, now.get(ChronoField.HOUR_OF_DAY)); + assertEquals(10, now.get(ChronoField.MINUTE_OF_HOUR)); + assertEquals(30, now.get(ChronoField.SECOND_OF_MINUTE)); } @Test public void shouldReturnCurrentTimestamp() { - final Instant now = Instant.now(); - final Calendar calendar = GregorianCalendar.getInstance(); + final Instant now = Instant.now(clock); - assertEquals(calendar.getTimeInMillis() / 1000, now.getEpochSecond()); + assertEquals(clock.instant().getEpochSecond(), now.getEpochSecond()); } } From 09b7c6e82240e4bdd9e491d535b248e37418c793 Mon Sep 17 00:00:00 2001 From: slavisa-baeldung Date: Sun, 9 Oct 2016 10:16:34 +0200 Subject: [PATCH 220/265] removing unused module --- spring-cloud-config/README.md | 27 ---------- spring-cloud-config/docker/Dockerfile.client | 6 --- spring-cloud-config/docker/Dockerfile.server | 9 ---- spring-cloud-config/docker/files/.gitignore | 2 - .../docker/files/config-client-entrypoint.sh | 8 --- spring-cloud-config/pom.xml | 52 ------------------- 6 files changed, 104 deletions(-) delete mode 100644 spring-cloud-config/README.md delete mode 100644 spring-cloud-config/docker/Dockerfile.client delete mode 100644 spring-cloud-config/docker/Dockerfile.server delete mode 100644 spring-cloud-config/docker/files/.gitignore delete mode 100644 spring-cloud-config/docker/files/config-client-entrypoint.sh delete mode 100644 spring-cloud-config/pom.xml diff --git a/spring-cloud-config/README.md b/spring-cloud-config/README.md deleted file mode 100644 index b8ebb2bfe9..0000000000 --- a/spring-cloud-config/README.md +++ /dev/null @@ -1,27 +0,0 @@ -## Spring Cloud Config ## - -To get this example working, you have to initialize a new *Git* repository in -the ```client-config``` directory first *and* you have to set the environment variable -```CONFIG_REPO``` to an absolute path of that directory. - -``` -$> cd client-config -$> git init -$> git add . -$> git commit -m 'Initial commit' -$> export CONFIG_REPO=$(pwd) -``` - -Then you're able to run the examples with ```mvn install spring-boot:run```. - -### Docker ### - -To get the *Docker* examples working, you have to repackage the ```spring-cloud-config-server``` -and ```spring-cloud-config-client``` modules first: - -``` -$> mvn install spring-boot:repackage -``` - -Don't forget to download the *Java JCE* package from -(Oracle)[http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html]. diff --git a/spring-cloud-config/docker/Dockerfile.client b/spring-cloud-config/docker/Dockerfile.client deleted file mode 100644 index 0f9293bd22..0000000000 --- a/spring-cloud-config/docker/Dockerfile.client +++ /dev/null @@ -1,6 +0,0 @@ -FROM alpine-java:base -MAINTAINER baeldung.com -RUN apk --no-cache add netcat-openbsd -COPY files/spring-cloud-config-client-1.0.0-SNAPSHOT.jar /opt/spring-cloud/lib/config-client.jar -COPY files/config-client-entrypoint.sh /opt/spring-cloud/bin/ -RUN chmod 755 /opt/spring-cloud/bin/config-client-entrypoint.sh diff --git a/spring-cloud-config/docker/Dockerfile.server b/spring-cloud-config/docker/Dockerfile.server deleted file mode 100644 index 90d7e2a7cf..0000000000 --- a/spring-cloud-config/docker/Dockerfile.server +++ /dev/null @@ -1,9 +0,0 @@ -FROM alpine-java:base -MAINTAINER baeldung.com -COPY files/spring-cloud-config-server-1.0.0-SNAPSHOT.jar /opt/spring-cloud/lib/config-server.jar -ENV SPRING_APPLICATION_JSON='{"spring": {"cloud": {"config": {"server": \ - {"git": {"uri": "/var/lib/spring-cloud/config-repo", "clone-on-start": true}}}}}}' -ENTRYPOINT ["/usr/bin/java"] -CMD ["-jar", "/opt/spring-cloud/lib/config-server.jar"] -VOLUME /var/lib/spring-cloud/config-repo -EXPOSE 8888 diff --git a/spring-cloud-config/docker/files/.gitignore b/spring-cloud-config/docker/files/.gitignore deleted file mode 100644 index 28ffcbffdb..0000000000 --- a/spring-cloud-config/docker/files/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/UnlimitedJCEPolicyJDK8 -/*.jar diff --git a/spring-cloud-config/docker/files/config-client-entrypoint.sh b/spring-cloud-config/docker/files/config-client-entrypoint.sh deleted file mode 100644 index 12352119fa..0000000000 --- a/spring-cloud-config/docker/files/config-client-entrypoint.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh - -while ! nc -z config-server 8888 ; do - echo "Waiting for upcoming Config Server" - sleep 2 -done - -java -jar /opt/spring-cloud/lib/config-client.jar diff --git a/spring-cloud-config/pom.xml b/spring-cloud-config/pom.xml deleted file mode 100644 index 3b1b59b037..0000000000 --- a/spring-cloud-config/pom.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - 4.0.0 - - com.baeldung.spring.cloud - spring-cloud-config - pom - - - spring-cloud-config-server - spring-cloud-config-client - - - - com.baeldung - parent-modules - 1.0.0-SNAPSHOT - .. - - - - - - org.springframework.boot - spring-boot-parent - 1.4.0.RELEASE - pom - import - - - org.springframework.cloud - spring-cloud-dependencies - Brixton.SR4 - pom - import - - - - - - - - - org.springframework.boot - spring-boot-maven-plugin - 1.4.0.RELEASE - - - - - From d98924b39db3405cdf32eb4856f3b3c5b20b5734 Mon Sep 17 00:00:00 2001 From: Kiran Date: Sun, 9 Oct 2016 13:52:52 -0400 Subject: [PATCH 221/265] Updated indentation and refactored code --- spring-jms/src/com/baeldung/spring/jms/Employee.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-jms/src/com/baeldung/spring/jms/Employee.java b/spring-jms/src/com/baeldung/spring/jms/Employee.java index a0346c4291..36783ebf46 100644 --- a/spring-jms/src/com/baeldung/spring/jms/Employee.java +++ b/spring-jms/src/com/baeldung/spring/jms/Employee.java @@ -18,6 +18,6 @@ public class Employee { } public String toString() { - return "Person: name(" + name + "), age(" + age + ")"; + return "Employee: name(" + name + "), age(" + age + ")"; } } From 94f258f90c16c326979cc8efdab1eefb53cae893 Mon Sep 17 00:00:00 2001 From: Kiran Date: Sun, 9 Oct 2016 13:53:20 -0400 Subject: [PATCH 222/265] Updated indentation and refactored code --- .../spring/jms/SampleJmsMessageSender.java | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/spring-jms/src/com/baeldung/spring/jms/SampleJmsMessageSender.java b/spring-jms/src/com/baeldung/spring/jms/SampleJmsMessageSender.java index e3eccea03e..123edccb4d 100644 --- a/spring-jms/src/com/baeldung/spring/jms/SampleJmsMessageSender.java +++ b/spring-jms/src/com/baeldung/spring/jms/SampleJmsMessageSender.java @@ -1,6 +1,8 @@ package com.baeldung.spring.jms; -import javax.jms.ConnectionFactory; +import java.util.HashMap; +import java.util.Map; + import javax.jms.JMSException; import javax.jms.Message; import javax.jms.Queue; @@ -14,8 +16,8 @@ public class SampleJmsMessageSender { private JmsTemplate jmsTemplate; private Queue queue; - public void setConnectionFactory(ConnectionFactory cf) { - this.jmsTemplate = new JmsTemplate(cf); + public void setJmsTemplate(JmsTemplate jmsTemplate) { + this.jmsTemplate = jmsTemplate; } public void setQueue(Queue queue) { @@ -29,4 +31,12 @@ public class SampleJmsMessageSender { } }); } -} \ No newline at end of file + + public void sendMessage(final Employee employee) { + System.out.println("Jms Message Sender : " + employee); + Map map = new HashMap(); + map.put("name", employee.getName()); + map.put("age", employee.getAge()); + this.jmsTemplate.convertAndSend(map); + } +} From 53a353916b1bf91653c8df6907e630b3751582e1 Mon Sep 17 00:00:00 2001 From: Kiran Date: Sun, 9 Oct 2016 13:55:01 -0400 Subject: [PATCH 223/265] Updated indentation and refactored code Added a a new method receiveMessage() to receive custom converted messages --- .../baeldung/spring/jms/SampleListener.java | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/spring-jms/src/com/baeldung/spring/jms/SampleListener.java b/spring-jms/src/com/baeldung/spring/jms/SampleListener.java index 466cac44a0..8c28ab3e35 100644 --- a/spring-jms/src/com/baeldung/spring/jms/SampleListener.java +++ b/spring-jms/src/com/baeldung/spring/jms/SampleListener.java @@ -1,18 +1,26 @@ package com.baeldung.spring.jms; +import java.util.Map; + import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageListener; import javax.jms.TextMessage; +import org.springframework.jms.core.JmsTemplate; + public class SampleListener implements MessageListener { - private String textMessage; + public JmsTemplate getJmsTemplate() { + return getJmsTemplate(); + } public void onMessage(Message message) { if (message instanceof TextMessage) { try { - textMessage = ((TextMessage) message).getText(); + + String msg = ((TextMessage) message).getText(); + System.out.println("Message has been consumed : " + msg); } catch (JMSException ex) { throw new RuntimeException(ex); } @@ -20,4 +28,10 @@ public class SampleListener implements MessageListener { throw new IllegalArgumentException("Message Error"); } } -} \ No newline at end of file + + public Employee receiveMessage() throws JMSException { + Map map = (Map) getJmsTemplate().receiveAndConvert(); + Employee employee = new Employee((String) map.get("name"), (Integer) map.get("age")); + return employee; + } +} From fe9c63560d12e51a9ca7318639d9fa3a79da90f2 Mon Sep 17 00:00:00 2001 From: Kiran Date: Sun, 9 Oct 2016 13:55:26 -0400 Subject: [PATCH 224/265] Updated indentation --- .../baeldung/spring/jms/SampleMessageConverter.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/spring-jms/src/com/baeldung/spring/jms/SampleMessageConverter.java b/spring-jms/src/com/baeldung/spring/jms/SampleMessageConverter.java index 856e0e9e49..2142461a5f 100644 --- a/spring-jms/src/com/baeldung/spring/jms/SampleMessageConverter.java +++ b/spring-jms/src/com/baeldung/spring/jms/SampleMessageConverter.java @@ -11,17 +11,17 @@ import org.springframework.jms.support.converter.MessageConverter; public class SampleMessageConverter implements MessageConverter { public Message toMessage(Object object, Session session) throws JMSException, MessageConversionException { - Employee person = (Employee) object; + Employee employee = (Employee) object; MapMessage message = session.createMapMessage(); - message.setString("name", person.getName()); - message.setInt("age", person.getAge()); + message.setString("name", employee.getName()); + message.setInt("age", employee.getAge()); return message; } public Object fromMessage(Message message) throws JMSException, MessageConversionException { MapMessage mapMessage = (MapMessage) message; - Employee person = new Employee(mapMessage.getString("name"), mapMessage.getInt("age")); - return person; + Employee employee = new Employee(mapMessage.getString("name"), mapMessage.getInt("age")); + return employee; } } From d1bdfb5234c94c4c99fbd1eba6ea7f3adde80387 Mon Sep 17 00:00:00 2001 From: Kiran Date: Sun, 9 Oct 2016 13:56:37 -0400 Subject: [PATCH 225/265] This class is not required Embedded ActiveMq is created from XML now. --- .../baeldung/spring/jms/SampleJMSExample.java | 17 ----------------- 1 file changed, 17 deletions(-) delete mode 100644 spring-jms/src/com/baeldung/spring/jms/SampleJMSExample.java diff --git a/spring-jms/src/com/baeldung/spring/jms/SampleJMSExample.java b/spring-jms/src/com/baeldung/spring/jms/SampleJMSExample.java deleted file mode 100644 index bdde97b82d..0000000000 --- a/spring-jms/src/com/baeldung/spring/jms/SampleJMSExample.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.baeldung.spring.jms; - -import java.net.URI; -import java.net.URISyntaxException; - -import org.apache.activemq.broker.BrokerFactory; -import org.apache.activemq.broker.BrokerService; -import org.springframework.context.support.ClassPathXmlApplicationContext; - -public class SampleJMSExample { - public static void main(String[] args) throws URISyntaxException, Exception { - BrokerService broker = BrokerFactory.createBroker(new URI("broker:(tcp://localhost:61616)")); - broker.start(); - ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); - - } -} From 0af6fbea16c2ed7f1aee6154a06713bee3794c1b Mon Sep 17 00:00:00 2001 From: Kiran Date: Sun, 9 Oct 2016 13:58:30 -0400 Subject: [PATCH 226/265] Updated ApplicationContext.xml --- .../src/main/resources/applicationContext.xml | 34 ++++++++++++------- 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/spring-jms/src/main/resources/applicationContext.xml b/spring-jms/src/main/resources/applicationContext.xml index c15289763f..d94eb4c371 100644 --- a/spring-jms/src/main/resources/applicationContext.xml +++ b/spring-jms/src/main/resources/applicationContext.xml @@ -3,16 +3,27 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> - - - - - - - - + + + + + + + + + + + + + + + + + + - + @@ -23,8 +34,7 @@ - + - - \ No newline at end of file + From 147e1bfe107eed1dcabca36fa7a27847cd4d9d7d Mon Sep 17 00:00:00 2001 From: Kiran Date: Sun, 9 Oct 2016 13:59:25 -0400 Subject: [PATCH 227/265] Embedded activemq is configured in this file --- .../src/main/resources/EmbeddedActiveMQ.xml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 spring-jms/src/main/resources/EmbeddedActiveMQ.xml diff --git a/spring-jms/src/main/resources/EmbeddedActiveMQ.xml b/spring-jms/src/main/resources/EmbeddedActiveMQ.xml new file mode 100644 index 0000000000..5e956144fd --- /dev/null +++ b/spring-jms/src/main/resources/EmbeddedActiveMQ.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + \ No newline at end of file From 4240e34c376b670ad44df0ce19af55d47eda3329 Mon Sep 17 00:00:00 2001 From: Kiran Date: Sun, 9 Oct 2016 14:01:42 -0400 Subject: [PATCH 228/265] Junit tests JUnit tests for testing default text message as well as custom messages --- .../src/DefaultTextMessageSenderTest.java | 26 ++++++++++++++++++ .../src/MapMessageConvertAndSendTest.java | 27 +++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 spring-jms/src/DefaultTextMessageSenderTest.java create mode 100644 spring-jms/src/MapMessageConvertAndSendTest.java diff --git a/spring-jms/src/DefaultTextMessageSenderTest.java b/spring-jms/src/DefaultTextMessageSenderTest.java new file mode 100644 index 0000000000..8806f4d1ba --- /dev/null +++ b/spring-jms/src/DefaultTextMessageSenderTest.java @@ -0,0 +1,26 @@ +package com.baeldung.spring.jms.test; + +import org.junit.Before; +import org.junit.Test; +import org.springframework.context.ApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +import com.baeldung.spring.jms.SampleJmsMessageSender; + +public class DefaultTextMessageSenderTest { + + private SampleJmsMessageSender messageProducer; + + @SuppressWarnings("resource") + @Before + public void setUp() { + ApplicationContext applicationContext = new ClassPathXmlApplicationContext(new String[] { "classpath:EmbeddedActiveMQ.xml", "classpath:applicationContext.xml" }); + messageProducer = (SampleJmsMessageSender) applicationContext.getBean("SampleJmsMessageSender"); + } + + @Test + public void testSimpleSend() { + messageProducer.simpleSend(); + } + +} \ No newline at end of file diff --git a/spring-jms/src/MapMessageConvertAndSendTest.java b/spring-jms/src/MapMessageConvertAndSendTest.java new file mode 100644 index 0000000000..d2a3867679 --- /dev/null +++ b/spring-jms/src/MapMessageConvertAndSendTest.java @@ -0,0 +1,27 @@ +package com.baeldung.spring.jms.test; + +import org.junit.Before; +import org.junit.Test; +import org.springframework.context.ApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +import com.baeldung.spring.jms.Employee; +import com.baeldung.spring.jms.SampleJmsMessageSender; + +public class MapMessageConvertAndSendTest { + + private SampleJmsMessageSender messageProducer; + + @SuppressWarnings("resource") + @Before + public void setUp() { + ApplicationContext applicationContext = new ClassPathXmlApplicationContext(new String[] { "classpath:EmbeddedActiveMQ.xml", "classpath:applicationContext.xml" }); + messageProducer = (SampleJmsMessageSender) applicationContext.getBean("SampleJmsMessageSender"); + } + + @Test + public void testSendMessage() { + messageProducer.sendMessage(new Employee("JavaDeveloper2", 22)); + } + +} From 528e3b1ef59ee883deabbda34f204c01efbda578 Mon Sep 17 00:00:00 2001 From: Kiran Date: Sun, 9 Oct 2016 14:02:38 -0400 Subject: [PATCH 229/265] Uploaded in wrong location --- .../src/DefaultTextMessageSenderTest.java | 26 ------------------- 1 file changed, 26 deletions(-) delete mode 100644 spring-jms/src/DefaultTextMessageSenderTest.java diff --git a/spring-jms/src/DefaultTextMessageSenderTest.java b/spring-jms/src/DefaultTextMessageSenderTest.java deleted file mode 100644 index 8806f4d1ba..0000000000 --- a/spring-jms/src/DefaultTextMessageSenderTest.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.baeldung.spring.jms.test; - -import org.junit.Before; -import org.junit.Test; -import org.springframework.context.ApplicationContext; -import org.springframework.context.support.ClassPathXmlApplicationContext; - -import com.baeldung.spring.jms.SampleJmsMessageSender; - -public class DefaultTextMessageSenderTest { - - private SampleJmsMessageSender messageProducer; - - @SuppressWarnings("resource") - @Before - public void setUp() { - ApplicationContext applicationContext = new ClassPathXmlApplicationContext(new String[] { "classpath:EmbeddedActiveMQ.xml", "classpath:applicationContext.xml" }); - messageProducer = (SampleJmsMessageSender) applicationContext.getBean("SampleJmsMessageSender"); - } - - @Test - public void testSimpleSend() { - messageProducer.simpleSend(); - } - -} \ No newline at end of file From d640b9818d91615e6594f159226b0b4b87bb0920 Mon Sep 17 00:00:00 2001 From: Kiran Date: Sun, 9 Oct 2016 14:02:46 -0400 Subject: [PATCH 230/265] Uploaded in wrong location --- .../src/MapMessageConvertAndSendTest.java | 27 ------------------- 1 file changed, 27 deletions(-) delete mode 100644 spring-jms/src/MapMessageConvertAndSendTest.java diff --git a/spring-jms/src/MapMessageConvertAndSendTest.java b/spring-jms/src/MapMessageConvertAndSendTest.java deleted file mode 100644 index d2a3867679..0000000000 --- a/spring-jms/src/MapMessageConvertAndSendTest.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.baeldung.spring.jms.test; - -import org.junit.Before; -import org.junit.Test; -import org.springframework.context.ApplicationContext; -import org.springframework.context.support.ClassPathXmlApplicationContext; - -import com.baeldung.spring.jms.Employee; -import com.baeldung.spring.jms.SampleJmsMessageSender; - -public class MapMessageConvertAndSendTest { - - private SampleJmsMessageSender messageProducer; - - @SuppressWarnings("resource") - @Before - public void setUp() { - ApplicationContext applicationContext = new ClassPathXmlApplicationContext(new String[] { "classpath:EmbeddedActiveMQ.xml", "classpath:applicationContext.xml" }); - messageProducer = (SampleJmsMessageSender) applicationContext.getBean("SampleJmsMessageSender"); - } - - @Test - public void testSendMessage() { - messageProducer.sendMessage(new Employee("JavaDeveloper2", 22)); - } - -} From b253563e676013443ec0ead0445e28ae6a8552b9 Mon Sep 17 00:00:00 2001 From: Kiran Date: Sun, 9 Oct 2016 14:06:40 -0400 Subject: [PATCH 231/265] Junit tests JUnit Tests for default text messages and custom converted messages --- .../jms/DefaultTextMessageSenderTest.java | 26 ++++++++++++++++++ .../jms/MapMessageConvertAndSendTest.java | 27 +++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 spring-jms/src/test/com/baeldung/spring/jms/DefaultTextMessageSenderTest.java create mode 100644 spring-jms/src/test/com/baeldung/spring/jms/MapMessageConvertAndSendTest.java diff --git a/spring-jms/src/test/com/baeldung/spring/jms/DefaultTextMessageSenderTest.java b/spring-jms/src/test/com/baeldung/spring/jms/DefaultTextMessageSenderTest.java new file mode 100644 index 0000000000..5176d79386 --- /dev/null +++ b/spring-jms/src/test/com/baeldung/spring/jms/DefaultTextMessageSenderTest.java @@ -0,0 +1,26 @@ +package com.baeldung.spring.jms; + +import org.junit.Before; +import org.junit.Test; +import org.springframework.context.ApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +import com.baeldung.spring.jms.SampleJmsMessageSender; + +public class DefaultTextMessageSenderTest { + + private SampleJmsMessageSender messageProducer; + + @SuppressWarnings("resource") + @Before + public void setUp() { + ApplicationContext applicationContext = new ClassPathXmlApplicationContext(new String[] { "classpath:EmbeddedActiveMQ.xml", "classpath:applicationContext.xml" }); + messageProducer = (SampleJmsMessageSender) applicationContext.getBean("SampleJmsMessageSender"); + } + + @Test + public void testSimpleSend() { + messageProducer.simpleSend(); + } + +} \ No newline at end of file diff --git a/spring-jms/src/test/com/baeldung/spring/jms/MapMessageConvertAndSendTest.java b/spring-jms/src/test/com/baeldung/spring/jms/MapMessageConvertAndSendTest.java new file mode 100644 index 0000000000..4bd9827c60 --- /dev/null +++ b/spring-jms/src/test/com/baeldung/spring/jms/MapMessageConvertAndSendTest.java @@ -0,0 +1,27 @@ +package com.baeldung.spring.jms; + +import org.junit.Before; +import org.junit.Test; +import org.springframework.context.ApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +import com.baeldung.spring.jms.Employee; +import com.baeldung.spring.jms.SampleJmsMessageSender; + +public class MapMessageConvertAndSendTest { + + private SampleJmsMessageSender messageProducer; + + @SuppressWarnings("resource") + @Before + public void setUp() { + ApplicationContext applicationContext = new ClassPathXmlApplicationContext(new String[] { "classpath:EmbeddedActiveMQ.xml", "classpath:applicationContext.xml" }); + messageProducer = (SampleJmsMessageSender) applicationContext.getBean("SampleJmsMessageSender"); + } + + @Test + public void testSendMessage() { + messageProducer.sendMessage(new Employee("JavaDeveloper2", 22)); + } + +} From ca3e67fcd8da6a5ce90a34b1819e92159eaa2f3d Mon Sep 17 00:00:00 2001 From: Kiran Date: Sun, 9 Oct 2016 14:21:43 -0400 Subject: [PATCH 232/265] Changed @Before to @BeforeClass accordingly made the necessary methods staic --- .../spring/jms/DefaultTextMessageSenderTest.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/spring-jms/src/test/com/baeldung/spring/jms/DefaultTextMessageSenderTest.java b/spring-jms/src/test/com/baeldung/spring/jms/DefaultTextMessageSenderTest.java index 5176d79386..2016122105 100644 --- a/spring-jms/src/test/com/baeldung/spring/jms/DefaultTextMessageSenderTest.java +++ b/spring-jms/src/test/com/baeldung/spring/jms/DefaultTextMessageSenderTest.java @@ -1,6 +1,6 @@ package com.baeldung.spring.jms; -import org.junit.Before; +import org.junit.BeforeClass; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; @@ -9,11 +9,11 @@ import com.baeldung.spring.jms.SampleJmsMessageSender; public class DefaultTextMessageSenderTest { - private SampleJmsMessageSender messageProducer; + private static SampleJmsMessageSender messageProducer; @SuppressWarnings("resource") - @Before - public void setUp() { + @BeforeClass + public static void setUp() { ApplicationContext applicationContext = new ClassPathXmlApplicationContext(new String[] { "classpath:EmbeddedActiveMQ.xml", "classpath:applicationContext.xml" }); messageProducer = (SampleJmsMessageSender) applicationContext.getBean("SampleJmsMessageSender"); } @@ -23,4 +23,4 @@ public class DefaultTextMessageSenderTest { messageProducer.simpleSend(); } -} \ No newline at end of file +} From 872654d54cbfd0768e7c36dcc8ab2634df5ec8aa Mon Sep 17 00:00:00 2001 From: Kiran Date: Sun, 9 Oct 2016 14:22:20 -0400 Subject: [PATCH 233/265] Changed @Before to @BeforeClass accordingly made the necessary methods staic --- .../baeldung/spring/jms/MapMessageConvertAndSendTest.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/spring-jms/src/test/com/baeldung/spring/jms/MapMessageConvertAndSendTest.java b/spring-jms/src/test/com/baeldung/spring/jms/MapMessageConvertAndSendTest.java index 4bd9827c60..19b9097601 100644 --- a/spring-jms/src/test/com/baeldung/spring/jms/MapMessageConvertAndSendTest.java +++ b/spring-jms/src/test/com/baeldung/spring/jms/MapMessageConvertAndSendTest.java @@ -1,6 +1,6 @@ package com.baeldung.spring.jms; -import org.junit.Before; +import org.junit.BeforeClass; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; @@ -10,11 +10,11 @@ import com.baeldung.spring.jms.SampleJmsMessageSender; public class MapMessageConvertAndSendTest { - private SampleJmsMessageSender messageProducer; + private static SampleJmsMessageSender messageProducer; @SuppressWarnings("resource") - @Before - public void setUp() { + @BeforeClass + public static void setUp() { ApplicationContext applicationContext = new ClassPathXmlApplicationContext(new String[] { "classpath:EmbeddedActiveMQ.xml", "classpath:applicationContext.xml" }); messageProducer = (SampleJmsMessageSender) applicationContext.getBean("SampleJmsMessageSender"); } From 02a1c2d114f43604baaeeb0a52efabd063ea934f Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Sun, 9 Oct 2016 20:36:41 +0200 Subject: [PATCH 234/265] Merge fix --- .../baeldung/spring/jms/DefaultTextMessageSenderTest.java | 3 +-- .../baeldung/spring/jms/MapMessageConvertAndSendTest.java | 5 ++--- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/spring-jms/src/test/com/baeldung/spring/jms/DefaultTextMessageSenderTest.java b/spring-jms/src/test/com/baeldung/spring/jms/DefaultTextMessageSenderTest.java index 2016122105..aceb551563 100644 --- a/spring-jms/src/test/com/baeldung/spring/jms/DefaultTextMessageSenderTest.java +++ b/spring-jms/src/test/com/baeldung/spring/jms/DefaultTextMessageSenderTest.java @@ -1,12 +1,11 @@ package com.baeldung.spring.jms; +import com.baeldung.spring.jms.SampleJmsMessageSender; import org.junit.BeforeClass; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; -import com.baeldung.spring.jms.SampleJmsMessageSender; - public class DefaultTextMessageSenderTest { private static SampleJmsMessageSender messageProducer; diff --git a/spring-jms/src/test/com/baeldung/spring/jms/MapMessageConvertAndSendTest.java b/spring-jms/src/test/com/baeldung/spring/jms/MapMessageConvertAndSendTest.java index 19b9097601..d649938533 100644 --- a/spring-jms/src/test/com/baeldung/spring/jms/MapMessageConvertAndSendTest.java +++ b/spring-jms/src/test/com/baeldung/spring/jms/MapMessageConvertAndSendTest.java @@ -1,13 +1,12 @@ package com.baeldung.spring.jms; +import com.baeldung.spring.jms.Employee; +import com.baeldung.spring.jms.SampleJmsMessageSender; import org.junit.BeforeClass; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; -import com.baeldung.spring.jms.Employee; -import com.baeldung.spring.jms.SampleJmsMessageSender; - public class MapMessageConvertAndSendTest { private static SampleJmsMessageSender messageProducer; From dd360db0605c335f0169817d94bfa59ff7641ddc Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Sun, 9 Oct 2016 21:21:09 +0200 Subject: [PATCH 235/265] Refactor JMS examples --- spring-jms/pom.xml | 22 ++++++-- .../spring/jms/SampleJmsMessageSender.java | 19 ++----- .../baeldung/spring/jms/SampleListener.java | 8 ++- .../spring/jms/SampleMessageConverter.java | 9 ++-- .../jms/DefaultTextMessageSenderTest.java | 50 +++++++++--------- .../jms/MapMessageConvertAndSendTest.java | 51 +++++++++---------- 6 files changed, 81 insertions(+), 78 deletions(-) rename spring-jms/src/test/{ => java}/com/baeldung/spring/jms/DefaultTextMessageSenderTest.java (78%) rename spring-jms/src/test/{ => java}/com/baeldung/spring/jms/MapMessageConvertAndSendTest.java (75%) diff --git a/spring-jms/pom.xml b/spring-jms/pom.xml index 8f78469989..b15c18f991 100644 --- a/spring-jms/pom.xml +++ b/spring-jms/pom.xml @@ -26,6 +26,12 @@ activemq-all ${activemq.version} + + junit + junit + 4.12 + test + @@ -36,8 +42,8 @@ maven-compiler-plugin 3.2 - 1.7 - 1.7 + 1.8 + 1.8 @@ -52,6 +58,16 @@ - spring-jms + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + + spring-jms \ No newline at end of file diff --git a/spring-jms/src/main/java/com/baeldung/spring/jms/SampleJmsMessageSender.java b/spring-jms/src/main/java/com/baeldung/spring/jms/SampleJmsMessageSender.java index 8751b42ff8..1ef3902a31 100644 --- a/spring-jms/src/main/java/com/baeldung/spring/jms/SampleJmsMessageSender.java +++ b/spring-jms/src/main/java/com/baeldung/spring/jms/SampleJmsMessageSender.java @@ -1,16 +1,11 @@ package com.baeldung.spring.jms; +import org.springframework.jms.core.JmsTemplate; + +import javax.jms.Queue; import java.util.HashMap; import java.util.Map; -import javax.jms.JMSException; -import javax.jms.Message; -import javax.jms.Queue; -import javax.jms.Session; - -import org.springframework.jms.core.JmsTemplate; -import org.springframework.jms.core.MessageCreator; - public class SampleJmsMessageSender { private JmsTemplate jmsTemplate; @@ -25,16 +20,12 @@ public class SampleJmsMessageSender { } public void simpleSend() { - this.jmsTemplate.send(this.queue, new MessageCreator() { - public Message createMessage(Session session) throws JMSException { - return session.createTextMessage("hello queue world"); - } - }); + jmsTemplate.send(queue, s -> s.createTextMessage("hello queue world")); } public void sendMessage(final Employee employee) { System.out.println("Jms Message Sender : " + employee); - Map map = new HashMap(); + Map map = new HashMap<>(); map.put("name", employee.getName()); map.put("age", employee.getAge()); this.jmsTemplate.convertAndSend(map); diff --git a/spring-jms/src/main/java/com/baeldung/spring/jms/SampleListener.java b/spring-jms/src/main/java/com/baeldung/spring/jms/SampleListener.java index 3ad4d70829..eb9d51160d 100644 --- a/spring-jms/src/main/java/com/baeldung/spring/jms/SampleListener.java +++ b/spring-jms/src/main/java/com/baeldung/spring/jms/SampleListener.java @@ -1,13 +1,12 @@ package com.baeldung.spring.jms; -import java.util.Map; +import org.springframework.jms.core.JmsTemplate; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageListener; import javax.jms.TextMessage; - -import org.springframework.jms.core.JmsTemplate; +import java.util.Map; public class SampleListener implements MessageListener { @@ -31,7 +30,6 @@ public class SampleListener implements MessageListener { public Employee receiveMessage() throws JMSException { Map map = (Map) getJmsTemplate().receiveAndConvert(); - Employee employee = new Employee((String) map.get("name"), (Integer) map.get("age")); - return employee; + return new Employee((String) map.get("name"), (Integer) map.get("age")); } } diff --git a/spring-jms/src/main/java/com/baeldung/spring/jms/SampleMessageConverter.java b/spring-jms/src/main/java/com/baeldung/spring/jms/SampleMessageConverter.java index c61cd5bc89..368a62841f 100644 --- a/spring-jms/src/main/java/com/baeldung/spring/jms/SampleMessageConverter.java +++ b/spring-jms/src/main/java/com/baeldung/spring/jms/SampleMessageConverter.java @@ -1,13 +1,13 @@ package com.baeldung.spring.jms; +import org.springframework.jms.support.converter.MessageConversionException; +import org.springframework.jms.support.converter.MessageConverter; + import javax.jms.JMSException; import javax.jms.MapMessage; import javax.jms.Message; import javax.jms.Session; -import org.springframework.jms.support.converter.MessageConversionException; -import org.springframework.jms.support.converter.MessageConverter; - public class SampleMessageConverter implements MessageConverter { public Message toMessage(Object object, Session session) throws JMSException, MessageConversionException { @@ -20,8 +20,7 @@ public class SampleMessageConverter implements MessageConverter { public Object fromMessage(Message message) throws JMSException, MessageConversionException { MapMessage mapMessage = (MapMessage) message; - Employee employee = new Employee(mapMessage.getString("name"), mapMessage.getInt("age")); - return employee; + return new Employee(mapMessage.getString("name"), mapMessage.getInt("age")); } } diff --git a/spring-jms/src/test/com/baeldung/spring/jms/DefaultTextMessageSenderTest.java b/spring-jms/src/test/java/com/baeldung/spring/jms/DefaultTextMessageSenderTest.java similarity index 78% rename from spring-jms/src/test/com/baeldung/spring/jms/DefaultTextMessageSenderTest.java rename to spring-jms/src/test/java/com/baeldung/spring/jms/DefaultTextMessageSenderTest.java index aceb551563..439bc6caad 100644 --- a/spring-jms/src/test/com/baeldung/spring/jms/DefaultTextMessageSenderTest.java +++ b/spring-jms/src/test/java/com/baeldung/spring/jms/DefaultTextMessageSenderTest.java @@ -1,25 +1,25 @@ -package com.baeldung.spring.jms; - -import com.baeldung.spring.jms.SampleJmsMessageSender; -import org.junit.BeforeClass; -import org.junit.Test; -import org.springframework.context.ApplicationContext; -import org.springframework.context.support.ClassPathXmlApplicationContext; - -public class DefaultTextMessageSenderTest { - - private static SampleJmsMessageSender messageProducer; - - @SuppressWarnings("resource") - @BeforeClass - public static void setUp() { - ApplicationContext applicationContext = new ClassPathXmlApplicationContext(new String[] { "classpath:EmbeddedActiveMQ.xml", "classpath:applicationContext.xml" }); - messageProducer = (SampleJmsMessageSender) applicationContext.getBean("SampleJmsMessageSender"); - } - - @Test - public void testSimpleSend() { - messageProducer.simpleSend(); - } - -} +package com.baeldung.spring.jms; + +import org.junit.BeforeClass; +import org.junit.Test; +import org.springframework.context.ApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +public class DefaultTextMessageSenderTest { + + private static SampleJmsMessageSender messageProducer; + + @SuppressWarnings("resource") + @BeforeClass + public static void setUp() { + ApplicationContext applicationContext = new ClassPathXmlApplicationContext( + "classpath:EmbeddedActiveMQ.xml", "classpath:applicationContext.xml"); + messageProducer = (SampleJmsMessageSender) applicationContext.getBean("SampleJmsMessageSender"); + } + + @Test + public void testSimpleSend() { + messageProducer.simpleSend(); + } + +} diff --git a/spring-jms/src/test/com/baeldung/spring/jms/MapMessageConvertAndSendTest.java b/spring-jms/src/test/java/com/baeldung/spring/jms/MapMessageConvertAndSendTest.java similarity index 75% rename from spring-jms/src/test/com/baeldung/spring/jms/MapMessageConvertAndSendTest.java rename to spring-jms/src/test/java/com/baeldung/spring/jms/MapMessageConvertAndSendTest.java index d649938533..da9bb0294d 100644 --- a/spring-jms/src/test/com/baeldung/spring/jms/MapMessageConvertAndSendTest.java +++ b/spring-jms/src/test/java/com/baeldung/spring/jms/MapMessageConvertAndSendTest.java @@ -1,26 +1,25 @@ -package com.baeldung.spring.jms; - -import com.baeldung.spring.jms.Employee; -import com.baeldung.spring.jms.SampleJmsMessageSender; -import org.junit.BeforeClass; -import org.junit.Test; -import org.springframework.context.ApplicationContext; -import org.springframework.context.support.ClassPathXmlApplicationContext; - -public class MapMessageConvertAndSendTest { - - private static SampleJmsMessageSender messageProducer; - - @SuppressWarnings("resource") - @BeforeClass - public static void setUp() { - ApplicationContext applicationContext = new ClassPathXmlApplicationContext(new String[] { "classpath:EmbeddedActiveMQ.xml", "classpath:applicationContext.xml" }); - messageProducer = (SampleJmsMessageSender) applicationContext.getBean("SampleJmsMessageSender"); - } - - @Test - public void testSendMessage() { - messageProducer.sendMessage(new Employee("JavaDeveloper2", 22)); - } - -} +package com.baeldung.spring.jms; + +import org.junit.BeforeClass; +import org.junit.Test; +import org.springframework.context.ApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +public class MapMessageConvertAndSendTest { + + private static SampleJmsMessageSender messageProducer; + + @SuppressWarnings("resource") + @BeforeClass + public static void setUp() { + ApplicationContext applicationContext = new ClassPathXmlApplicationContext( + "classpath:EmbeddedActiveMQ.xml", "classpath:applicationContext.xml"); + messageProducer = (SampleJmsMessageSender) applicationContext.getBean("SampleJmsMessageSender"); + } + + @Test + public void testSendMessage() { + messageProducer.sendMessage(new Employee("JavaDeveloper2", 22)); + } + +} From 423dc63cdd0f3f5bb214f04432abf2fda5b2f2d0 Mon Sep 17 00:00:00 2001 From: slavisa-baeldung Date: Mon, 10 Oct 2016 00:34:11 +0200 Subject: [PATCH 236/265] BAEL-226 - Source code for wicket --- .../wicket/examples/{Examples.html => HelloWorld.html} | 0 .../wicket/examples/{Examples.java => HelloWorld.java} | 2 +- ...{ExamplesApplication.java => HelloWorldApplication.java} | 5 ++--- .../java/com/baeldung/wicket/examples/TestHomePage.java | 6 +++--- wicket/src/main/webapp/WEB-INF/web.xml | 2 +- 5 files changed, 7 insertions(+), 8 deletions(-) rename wicket/src/main/java/com/baeldung/wicket/examples/{Examples.html => HelloWorld.html} (100%) rename wicket/src/main/java/com/baeldung/wicket/examples/{Examples.java => HelloWorld.java} (77%) rename wicket/src/main/java/com/baeldung/wicket/examples/{ExamplesApplication.java => HelloWorldApplication.java} (80%) diff --git a/wicket/src/main/java/com/baeldung/wicket/examples/Examples.html b/wicket/src/main/java/com/baeldung/wicket/examples/HelloWorld.html similarity index 100% rename from wicket/src/main/java/com/baeldung/wicket/examples/Examples.html rename to wicket/src/main/java/com/baeldung/wicket/examples/HelloWorld.html diff --git a/wicket/src/main/java/com/baeldung/wicket/examples/Examples.java b/wicket/src/main/java/com/baeldung/wicket/examples/HelloWorld.java similarity index 77% rename from wicket/src/main/java/com/baeldung/wicket/examples/Examples.java rename to wicket/src/main/java/com/baeldung/wicket/examples/HelloWorld.java index 358e4f7b19..ceb0836467 100644 --- a/wicket/src/main/java/com/baeldung/wicket/examples/Examples.java +++ b/wicket/src/main/java/com/baeldung/wicket/examples/HelloWorld.java @@ -2,7 +2,7 @@ package com.baeldung.wicket.examples; import org.apache.wicket.markup.html.WebPage; -public class Examples extends WebPage { +public class HelloWorld extends WebPage { private static final long serialVersionUID = 1L; diff --git a/wicket/src/main/java/com/baeldung/wicket/examples/ExamplesApplication.java b/wicket/src/main/java/com/baeldung/wicket/examples/HelloWorldApplication.java similarity index 80% rename from wicket/src/main/java/com/baeldung/wicket/examples/ExamplesApplication.java rename to wicket/src/main/java/com/baeldung/wicket/examples/HelloWorldApplication.java index 711e8f01fd..079280adce 100644 --- a/wicket/src/main/java/com/baeldung/wicket/examples/ExamplesApplication.java +++ b/wicket/src/main/java/com/baeldung/wicket/examples/HelloWorldApplication.java @@ -4,15 +4,14 @@ import org.apache.wicket.markup.html.WebPage; import org.apache.wicket.protocol.http.WebApplication; import com.baeldung.wicket.examples.cafeaddress.CafeAddress; -import com.baeldung.wicket.examples.helloworld.HelloWorld; -public class ExamplesApplication extends WebApplication { +public class HelloWorldApplication extends WebApplication { /** * @see org.apache.wicket.Application#getHomePage() */ @Override public Class getHomePage() { - return Examples.class; + return HelloWorld.class; } /** diff --git a/wicket/src/main/test/java/com/baeldung/wicket/examples/TestHomePage.java b/wicket/src/main/test/java/com/baeldung/wicket/examples/TestHomePage.java index a393f1d178..7015ffd255 100644 --- a/wicket/src/main/test/java/com/baeldung/wicket/examples/TestHomePage.java +++ b/wicket/src/main/test/java/com/baeldung/wicket/examples/TestHomePage.java @@ -9,15 +9,15 @@ public class TestHomePage { @Before public void setUp() { - tester = new WicketTester(new ExamplesApplication()); + tester = new WicketTester(new HelloWorldApplication()); } @Test public void whenPageInvoked_thanRenderedOK() { //start and render the test page - tester.startPage(Examples.class); + tester.startPage(HelloWorld.class); //assert rendered page class - tester.assertRenderedPage(Examples.class); + tester.assertRenderedPage(HelloWorld.class); } } diff --git a/wicket/src/main/webapp/WEB-INF/web.xml b/wicket/src/main/webapp/WEB-INF/web.xml index 8a4451c80e..8fc1b1aa95 100644 --- a/wicket/src/main/webapp/WEB-INF/web.xml +++ b/wicket/src/main/webapp/WEB-INF/web.xml @@ -21,7 +21,7 @@ org.apache.wicket.protocol.http.WicketFilter applicationClassName - com.baeldung.wicket.examples.ExamplesApplication + com.baeldung.wicket.examples.HelloWorldApplication From b8161aca1a5a9b46931c11b1dabaa5ebb0a009af Mon Sep 17 00:00:00 2001 From: maverick Date: Mon, 10 Oct 2016 08:14:51 +0530 Subject: [PATCH 237/265] Java sorting. Adding required files. This is commit for starting from new fork due to conflicts in PR. --- .../org/baeldung/java/sorting/Employee.java | 58 +++++ .../baeldung/java/sorting/JavaSorting.java | 211 ++++++++++++++++++ 2 files changed, 269 insertions(+) create mode 100644 core-java/src/test/java/org/baeldung/java/sorting/Employee.java create mode 100644 core-java/src/test/java/org/baeldung/java/sorting/JavaSorting.java diff --git a/core-java/src/test/java/org/baeldung/java/sorting/Employee.java b/core-java/src/test/java/org/baeldung/java/sorting/Employee.java new file mode 100644 index 0000000000..c48cdd91a8 --- /dev/null +++ b/core-java/src/test/java/org/baeldung/java/sorting/Employee.java @@ -0,0 +1,58 @@ +package org.baeldung.java.sorting; + +public class Employee implements Comparable { + private String name; + private int age; + private double salary; + + public Employee() { + } + + public Employee(String name, int age, double salary) { + super(); + this.name = name; + this.age = age; + this.salary = salary; + } + + public int getAge() { + return age; + } + + public void setAge(int age) { + this.age = age; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public double getSalary() { + return salary; + } + + public void setSalary(double salary) { + this.salary = salary; + } + + @Override + public String toString() { + return "(" + name + "," + age + "," + salary + ")"; + + } + + @Override + public boolean equals(Object obj) { + return ((Employee) obj).getName().equals(getName()); + } + + @Override + public int compareTo(Object o) { + Employee e = (Employee) o; + return getName().compareTo(e.getName()); + } +} diff --git a/core-java/src/test/java/org/baeldung/java/sorting/JavaSorting.java b/core-java/src/test/java/org/baeldung/java/sorting/JavaSorting.java new file mode 100644 index 0000000000..54d58dc87c --- /dev/null +++ b/core-java/src/test/java/org/baeldung/java/sorting/JavaSorting.java @@ -0,0 +1,211 @@ +package org.baeldung.java.sorting; + +import static org.junit.Assert.assertTrue; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import org.junit.Test; + +public class JavaSorting { + + @Test + public void givenIntArray_whenUsingSort_thenSortedArray() { + int [] numbers = new int[] { 5, 1, 89, 255, 7, 88, 200, 123, 66 }, + sortedInts = {1, 5, 7, 66, 88, 89, 123, 200, 255}; + + Arrays.sort(numbers); + + assertTrue(Arrays.equals(numbers, sortedInts)); + } + + @Test + public void givenIntegerArray_whenUsingSort_thenSortedArray() { + Integer[] integers = new Integer[] + { 5, 1, 89, 255, 7, 88, 200, 123, 66 }, + sortedIntegers = {1, 5, 7, 66, 88, 89, 123, 200, 255}; + + + Arrays.sort(integers, new Comparator() { + @Override + public int compare(Integer a, Integer b) { + return a - b; + } + }); + + assertTrue(Arrays.equals(integers, sortedIntegers)); + } + + @Test + public void givenArray_whenUsingSortWithLambdas_thenSortedArray() { + Integer[] integers = new Integer[] + { 5, 1, 89, 255, 7, 88, 200, 123, 66 }, + sortedIntegers = {1, 5, 7, 66, 88, 89, 123, 200, 255}; + + Arrays.sort(integers, (a, b) -> { + return a - b; + }); + + assertTrue(Arrays.equals(integers, sortedIntegers)); + } + + @Test + public void givenEmpArray_SortEmpArray_thenSortedArrayinNaturalOrder() { + Employee[] employees = new Employee[] { + new Employee("John", 23, 5000), + new Employee("Steve", 26, 6000), + new Employee("Frank", 33, 7000), + new Employee("Earl", 43, 10000), + new Employee("Jessica", 23, 4000), + new Employee("Pearl", 33, 6000)}; + Employee[] employeesSorted = new Employee[] { + new Employee("Earl", 43, 10000), + new Employee("Frank", 33, 70000), + new Employee("Jessica", 23, 4000), + new Employee("John", 23, 5000), + new Employee("Pearl", 33, 4000), + new Employee("Steve", 26, 6000)}; + + Arrays.sort(employees); + + assertTrue(Arrays.equals(employees, employeesSorted)); + } + + + @Test + public void givenIntArray_whenUsingRangeSort_thenRangeSortedArray() { + int [] numbers = new int[] { 5, 1, 89, 255, 7, 88, 200, 123, 66 }, + sortedRangeInts = {5, 1, 89, 7, 88, 200, 255, 123, 66}; + + Arrays.sort(numbers, 3, 7); + + assertTrue(Arrays.equals(numbers, sortedRangeInts)); + } + + @Test + public void givenIntArray_whenUsingParallelSort_thenParallelSortedArray() { + int [] numbers = new int[] { 5, 1, 89, 255, 7, 88, 200, 123, 66 }, + sortedInts = {1, 5, 7, 66, 88, 89, 123, 200, 255}; + + Arrays.parallelSort(numbers); + + assertTrue(Arrays.equals(numbers, sortedInts)); + } + + + + @Test + public void givenArrayObjects_whenUsingComparing_thenSortedArrayObjects() { + List employees = Arrays.asList(new Employee[] { new Employee("John", 23, 5000), + new Employee("Steve", 26, 6000), new Employee("Frank", 33, 7000), + new Employee("Earl", 43, 10000), new Employee("Jessica", 23, 4000), + new Employee("Pearl", 33, 6000) }); + Employee[] employeesSorted = new Employee[] { + new Employee("John", 23, 5000), + new Employee("Jessica", 23, 4000), + new Employee("Steve", 26, 6000), + new Employee("Frank", 33, 70000), + new Employee("Pearl", 33, 4000), + new Employee("Earl", 43, 10000)}; + + employees.sort(Comparator.comparing(Employee::getAge));//.thenComparing(Employee::getName)); + + assertTrue(Arrays.equals(employees.toArray(), employeesSorted)); + } + + @Test + public void givenList_whenUsingSort_thenSortedList() { + List integers = Arrays.asList(new Integer[] { 5, 1, 89, 255, 7, 88, 200, 123, 66 }), + sortedIntegers = Arrays.asList(new Integer[] {1, 5, 7, 66, 88, 89, 123, 200, 255}); + + Collections.sort(integers); + + assertTrue(Arrays.equals(integers.toArray(), sortedIntegers.toArray())); + } + + @Test + public void givenMap_whenSortingByKeys_thenSortedMap() { + HashMap map = new HashMap<>(); + map.put(55, "John"); + map.put(22, "Apple"); + map.put(66, "Earl"); + map.put(77, "Pearl"); + map.put(12, "George"); + map.put(6, "Rocky"); + Integer[] sortedKeys = new Integer[] { 6, 12, 22, 55, 66, 77 }; + + List> entries = new ArrayList<>(map.entrySet()); + Collections.sort(entries, new Comparator>() { + @Override + public int compare(Entry o1, Entry o2) { + return o1.getKey().compareTo(o2.getKey()); + } + }); + HashMap sortedMap = new LinkedHashMap<>(); + for (Map.Entry entry : entries) { + sortedMap.put(entry.getKey(), entry.getValue()); + } + + assertTrue(Arrays.equals(sortedMap.keySet().toArray(), sortedKeys)); + } + + @Test + public void givenMap_whenSortingByValues_thenSortedMap() { + HashMap map = new HashMap<>(); + map.put(55, "John"); + map.put(22, "Apple"); + map.put(66, "Earl"); + map.put(77, "Pearl"); + map.put(12, "George"); + map.put(6, "Rocky"); + String[] sortedValues = new String[] + { "Apple", "Earl", "George", "John", "Pearl", "Rocky" }; + + List> entries = new ArrayList<>(map.entrySet()); + Collections.sort(entries, new Comparator>() { + @Override + public int compare(Entry o1, Entry o2) { + return o1.getValue().compareTo(o2.getValue()); + } + }); + HashMap sortedMap = new LinkedHashMap<>(); + for (Map.Entry entry : entries) { + sortedMap.put(entry.getKey(), entry.getValue()); + } + + assertTrue(Arrays.equals(sortedMap.values().toArray(), sortedValues)); + } + + + + + + + @Test + public void givenSet_whenUsingSort_thenSortedSet() { + HashSet integers = new LinkedHashSet<>(Arrays.asList(new Integer[] + { 5, 1, 89, 255, 7, 88, 200, 123, 66 })), + sortedIntegers = new LinkedHashSet<>(Arrays.asList(new Integer[] + {255, 200, 123, 89, 88, 66, 7, 5, 1})); + + ArrayList list = new ArrayList(integers); + Collections.sort(list, (i1, i2) -> { + return i2 - i1; + }); + integers = new LinkedHashSet<>(list); + + assertTrue(Arrays.equals(integers.toArray(), sortedIntegers.toArray())); + } + + + +} From 9f3c791d99dc3550f8330fc1f5fcbd9f7dfb9883 Mon Sep 17 00:00:00 2001 From: maverick Date: Mon, 10 Oct 2016 08:30:54 +0530 Subject: [PATCH 238/265] Added files missed in earlier PR --- core-java/src/test/resources/test_md5.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 core-java/src/test/resources/test_md5.txt diff --git a/core-java/src/test/resources/test_md5.txt b/core-java/src/test/resources/test_md5.txt new file mode 100644 index 0000000000..95d09f2b10 --- /dev/null +++ b/core-java/src/test/resources/test_md5.txt @@ -0,0 +1 @@ +hello world \ No newline at end of file From 6df151a3f98950940ea4a8de491eb09fb6f976ab Mon Sep 17 00:00:00 2001 From: maverick Date: Mon, 10 Oct 2016 08:32:51 +0530 Subject: [PATCH 239/265] Removes Sorting changes for this PR --- .../org/baeldung/java/sorting/Employee.java | 58 ----- .../baeldung/java/sorting/JavaSorting.java | 211 ------------------ 2 files changed, 269 deletions(-) delete mode 100644 core-java/src/test/java/org/baeldung/java/sorting/Employee.java delete mode 100644 core-java/src/test/java/org/baeldung/java/sorting/JavaSorting.java diff --git a/core-java/src/test/java/org/baeldung/java/sorting/Employee.java b/core-java/src/test/java/org/baeldung/java/sorting/Employee.java deleted file mode 100644 index c48cdd91a8..0000000000 --- a/core-java/src/test/java/org/baeldung/java/sorting/Employee.java +++ /dev/null @@ -1,58 +0,0 @@ -package org.baeldung.java.sorting; - -public class Employee implements Comparable { - private String name; - private int age; - private double salary; - - public Employee() { - } - - public Employee(String name, int age, double salary) { - super(); - this.name = name; - this.age = age; - this.salary = salary; - } - - public int getAge() { - return age; - } - - public void setAge(int age) { - this.age = age; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public double getSalary() { - return salary; - } - - public void setSalary(double salary) { - this.salary = salary; - } - - @Override - public String toString() { - return "(" + name + "," + age + "," + salary + ")"; - - } - - @Override - public boolean equals(Object obj) { - return ((Employee) obj).getName().equals(getName()); - } - - @Override - public int compareTo(Object o) { - Employee e = (Employee) o; - return getName().compareTo(e.getName()); - } -} diff --git a/core-java/src/test/java/org/baeldung/java/sorting/JavaSorting.java b/core-java/src/test/java/org/baeldung/java/sorting/JavaSorting.java deleted file mode 100644 index 54d58dc87c..0000000000 --- a/core-java/src/test/java/org/baeldung/java/sorting/JavaSorting.java +++ /dev/null @@ -1,211 +0,0 @@ -package org.baeldung.java.sorting; - -import static org.junit.Assert.assertTrue; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.HashSet; -import java.util.LinkedHashMap; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - -import org.junit.Test; - -public class JavaSorting { - - @Test - public void givenIntArray_whenUsingSort_thenSortedArray() { - int [] numbers = new int[] { 5, 1, 89, 255, 7, 88, 200, 123, 66 }, - sortedInts = {1, 5, 7, 66, 88, 89, 123, 200, 255}; - - Arrays.sort(numbers); - - assertTrue(Arrays.equals(numbers, sortedInts)); - } - - @Test - public void givenIntegerArray_whenUsingSort_thenSortedArray() { - Integer[] integers = new Integer[] - { 5, 1, 89, 255, 7, 88, 200, 123, 66 }, - sortedIntegers = {1, 5, 7, 66, 88, 89, 123, 200, 255}; - - - Arrays.sort(integers, new Comparator() { - @Override - public int compare(Integer a, Integer b) { - return a - b; - } - }); - - assertTrue(Arrays.equals(integers, sortedIntegers)); - } - - @Test - public void givenArray_whenUsingSortWithLambdas_thenSortedArray() { - Integer[] integers = new Integer[] - { 5, 1, 89, 255, 7, 88, 200, 123, 66 }, - sortedIntegers = {1, 5, 7, 66, 88, 89, 123, 200, 255}; - - Arrays.sort(integers, (a, b) -> { - return a - b; - }); - - assertTrue(Arrays.equals(integers, sortedIntegers)); - } - - @Test - public void givenEmpArray_SortEmpArray_thenSortedArrayinNaturalOrder() { - Employee[] employees = new Employee[] { - new Employee("John", 23, 5000), - new Employee("Steve", 26, 6000), - new Employee("Frank", 33, 7000), - new Employee("Earl", 43, 10000), - new Employee("Jessica", 23, 4000), - new Employee("Pearl", 33, 6000)}; - Employee[] employeesSorted = new Employee[] { - new Employee("Earl", 43, 10000), - new Employee("Frank", 33, 70000), - new Employee("Jessica", 23, 4000), - new Employee("John", 23, 5000), - new Employee("Pearl", 33, 4000), - new Employee("Steve", 26, 6000)}; - - Arrays.sort(employees); - - assertTrue(Arrays.equals(employees, employeesSorted)); - } - - - @Test - public void givenIntArray_whenUsingRangeSort_thenRangeSortedArray() { - int [] numbers = new int[] { 5, 1, 89, 255, 7, 88, 200, 123, 66 }, - sortedRangeInts = {5, 1, 89, 7, 88, 200, 255, 123, 66}; - - Arrays.sort(numbers, 3, 7); - - assertTrue(Arrays.equals(numbers, sortedRangeInts)); - } - - @Test - public void givenIntArray_whenUsingParallelSort_thenParallelSortedArray() { - int [] numbers = new int[] { 5, 1, 89, 255, 7, 88, 200, 123, 66 }, - sortedInts = {1, 5, 7, 66, 88, 89, 123, 200, 255}; - - Arrays.parallelSort(numbers); - - assertTrue(Arrays.equals(numbers, sortedInts)); - } - - - - @Test - public void givenArrayObjects_whenUsingComparing_thenSortedArrayObjects() { - List employees = Arrays.asList(new Employee[] { new Employee("John", 23, 5000), - new Employee("Steve", 26, 6000), new Employee("Frank", 33, 7000), - new Employee("Earl", 43, 10000), new Employee("Jessica", 23, 4000), - new Employee("Pearl", 33, 6000) }); - Employee[] employeesSorted = new Employee[] { - new Employee("John", 23, 5000), - new Employee("Jessica", 23, 4000), - new Employee("Steve", 26, 6000), - new Employee("Frank", 33, 70000), - new Employee("Pearl", 33, 4000), - new Employee("Earl", 43, 10000)}; - - employees.sort(Comparator.comparing(Employee::getAge));//.thenComparing(Employee::getName)); - - assertTrue(Arrays.equals(employees.toArray(), employeesSorted)); - } - - @Test - public void givenList_whenUsingSort_thenSortedList() { - List integers = Arrays.asList(new Integer[] { 5, 1, 89, 255, 7, 88, 200, 123, 66 }), - sortedIntegers = Arrays.asList(new Integer[] {1, 5, 7, 66, 88, 89, 123, 200, 255}); - - Collections.sort(integers); - - assertTrue(Arrays.equals(integers.toArray(), sortedIntegers.toArray())); - } - - @Test - public void givenMap_whenSortingByKeys_thenSortedMap() { - HashMap map = new HashMap<>(); - map.put(55, "John"); - map.put(22, "Apple"); - map.put(66, "Earl"); - map.put(77, "Pearl"); - map.put(12, "George"); - map.put(6, "Rocky"); - Integer[] sortedKeys = new Integer[] { 6, 12, 22, 55, 66, 77 }; - - List> entries = new ArrayList<>(map.entrySet()); - Collections.sort(entries, new Comparator>() { - @Override - public int compare(Entry o1, Entry o2) { - return o1.getKey().compareTo(o2.getKey()); - } - }); - HashMap sortedMap = new LinkedHashMap<>(); - for (Map.Entry entry : entries) { - sortedMap.put(entry.getKey(), entry.getValue()); - } - - assertTrue(Arrays.equals(sortedMap.keySet().toArray(), sortedKeys)); - } - - @Test - public void givenMap_whenSortingByValues_thenSortedMap() { - HashMap map = new HashMap<>(); - map.put(55, "John"); - map.put(22, "Apple"); - map.put(66, "Earl"); - map.put(77, "Pearl"); - map.put(12, "George"); - map.put(6, "Rocky"); - String[] sortedValues = new String[] - { "Apple", "Earl", "George", "John", "Pearl", "Rocky" }; - - List> entries = new ArrayList<>(map.entrySet()); - Collections.sort(entries, new Comparator>() { - @Override - public int compare(Entry o1, Entry o2) { - return o1.getValue().compareTo(o2.getValue()); - } - }); - HashMap sortedMap = new LinkedHashMap<>(); - for (Map.Entry entry : entries) { - sortedMap.put(entry.getKey(), entry.getValue()); - } - - assertTrue(Arrays.equals(sortedMap.values().toArray(), sortedValues)); - } - - - - - - - @Test - public void givenSet_whenUsingSort_thenSortedSet() { - HashSet integers = new LinkedHashSet<>(Arrays.asList(new Integer[] - { 5, 1, 89, 255, 7, 88, 200, 123, 66 })), - sortedIntegers = new LinkedHashSet<>(Arrays.asList(new Integer[] - {255, 200, 123, 89, 88, 66, 7, 5, 1})); - - ArrayList list = new ArrayList(integers); - Collections.sort(list, (i1, i2) -> { - return i2 - i1; - }); - integers = new LinkedHashSet<>(list); - - assertTrue(Arrays.equals(integers.toArray(), sortedIntegers.toArray())); - } - - - -} From 687b7e0044d3ec8ace6921e5ccdac3a84a8e6362 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Mon, 10 Oct 2016 06:46:31 +0200 Subject: [PATCH 240/265] Refactor Wicket examples --- .../examples/cafeaddress/CafeAddress.java | 33 ++++++++----------- .../examples/helloworld/HelloWorld.java | 3 -- 2 files changed, 14 insertions(+), 22 deletions(-) diff --git a/wicket/src/main/java/com/baeldung/wicket/examples/cafeaddress/CafeAddress.java b/wicket/src/main/java/com/baeldung/wicket/examples/cafeaddress/CafeAddress.java index ce26c5a1ad..86820393c7 100644 --- a/wicket/src/main/java/com/baeldung/wicket/examples/cafeaddress/CafeAddress.java +++ b/wicket/src/main/java/com/baeldung/wicket/examples/cafeaddress/CafeAddress.java @@ -1,10 +1,5 @@ package com.baeldung.wicket.examples.cafeaddress; -import java.io.Serializable; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Map; - import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior; import org.apache.wicket.markup.html.WebPage; @@ -13,29 +8,29 @@ import org.apache.wicket.markup.html.form.DropDownChoice; import org.apache.wicket.model.PropertyModel; import org.apache.wicket.request.mapper.parameter.PageParameters; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + public class CafeAddress extends WebPage { - - private static final long serialVersionUID = 1L; - - String selectedCafe; - Address address; - Map cafeNamesAndAddresses = new HashMap<>(); + private String selectedCafe; + private Address address; + private Map cafeNamesAndAddresses = new HashMap<>(); public CafeAddress(final PageParameters parameters) { super(parameters); initCafes(); - ArrayList cafeNames = new ArrayList<>(this.cafeNamesAndAddresses.keySet()); - this.selectedCafe = cafeNames.get(0); - this.address = new Address(this.cafeNamesAndAddresses.get(this.selectedCafe).getAddress()); + ArrayList cafeNames = new ArrayList<>(cafeNamesAndAddresses.keySet()); + selectedCafe = cafeNames.get(0); + address = new Address(cafeNamesAndAddresses.get(selectedCafe).getAddress()); final Label addressLabel = new Label("address", new PropertyModel(this.address, "address")); addressLabel.setOutputMarkupId(true); - final DropDownChoice cafeDropdown = new DropDownChoice<>("cafes", new PropertyModel(this, "selectedCafe"), cafeNames); + final DropDownChoice cafeDropdown = new DropDownChoice<>("cafes", new PropertyModel<>(this, "selectedCafe"), cafeNames); cafeDropdown.add(new AjaxFormComponentUpdatingBehavior("onchange") { - private static final long serialVersionUID = 1L; - @Override protected void onUpdate(AjaxRequestTarget target) { String name = (String) cafeDropdown.getDefaultModel().getObject(); @@ -61,11 +56,11 @@ public class CafeAddress extends WebPage { this.sAddress = address; } - public String getAddress() { + String getAddress() { return this.sAddress; } - public void setAddress(String address) { + void setAddress(String address) { this.sAddress = address; } } diff --git a/wicket/src/main/java/com/baeldung/wicket/examples/helloworld/HelloWorld.java b/wicket/src/main/java/com/baeldung/wicket/examples/helloworld/HelloWorld.java index f819e05be6..6dc7295798 100644 --- a/wicket/src/main/java/com/baeldung/wicket/examples/helloworld/HelloWorld.java +++ b/wicket/src/main/java/com/baeldung/wicket/examples/helloworld/HelloWorld.java @@ -4,9 +4,6 @@ import org.apache.wicket.markup.html.WebPage; import org.apache.wicket.markup.html.basic.Label; public class HelloWorld extends WebPage { - - private static final long serialVersionUID = 1L; - public HelloWorld() { add(new Label("hello", "Hello World!")); } From 9da1680d0f618f1f788d0d8e5fb5006d7b843fab Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Mon, 10 Oct 2016 07:09:47 +0200 Subject: [PATCH 241/265] Refactor readFromInputStream --- .../com/baeldung/file/FileOperationsTest.java | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java b/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java index 3752fc5b7f..1e4f23745c 100644 --- a/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java +++ b/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java @@ -107,17 +107,14 @@ public class FileOperationsTest { } private String readFromInputStream(InputStream inputStream) throws IOException { - InputStreamReader inputStreamReader = new InputStreamReader(inputStream); - BufferedReader bufferedReader = new BufferedReader(inputStreamReader); StringBuilder resultStringBuilder = new StringBuilder(); - String line; - while ((line = bufferedReader.readLine()) != null) { - resultStringBuilder.append(line); - resultStringBuilder.append("\n"); + try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream))) { + String line; + while ((line = bufferedReader.readLine()) != null) { + resultStringBuilder.append(line); + resultStringBuilder.append("\n"); + } } - bufferedReader.close(); - inputStreamReader.close(); - inputStream.close(); return resultStringBuilder.toString(); } } \ No newline at end of file From fa1fc3cbe7b5509a7147ea8d1c210d6eb8c3c187 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Mon, 10 Oct 2016 07:11:06 +0200 Subject: [PATCH 242/265] Refactor readFromInputStream --- .../src/test/java/com/baeldung/file/FileOperationsTest.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java b/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java index 1e4f23745c..30f6fc713f 100644 --- a/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java +++ b/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java @@ -111,8 +111,7 @@ public class FileOperationsTest { try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream))) { String line; while ((line = bufferedReader.readLine()) != null) { - resultStringBuilder.append(line); - resultStringBuilder.append("\n"); + resultStringBuilder.append(line).append("\n"); } } return resultStringBuilder.toString(); From 94fd47d9bb96fe7cb69f5db3b3222a1df049b397 Mon Sep 17 00:00:00 2001 From: Egima profile Date: Mon, 10 Oct 2016 11:14:19 +0300 Subject: [PATCH 243/265] Added test suite, removed bad names (#732) * made changes to java reflection * removed redundant method makeSound in Animal abstract class * added project for play-framework article * added project for regex * changed regex project from own model to core-java * added project for routing in play * made changes to regex project * refactored code for REST API with Play project * refactored student store indexing to zero base * added unit tests, removed bad names --- .../student-api/test/ApplicationTest.java | 203 ++++++++++++++---- .../student-api/test/IntegrationTest.java | 25 --- 2 files changed, 165 insertions(+), 63 deletions(-) delete mode 100644 play-framework/student-api/test/IntegrationTest.java diff --git a/play-framework/student-api/test/ApplicationTest.java b/play-framework/student-api/test/ApplicationTest.java index 3d7c4875aa..1133978e9a 100644 --- a/play-framework/student-api/test/ApplicationTest.java +++ b/play-framework/student-api/test/ApplicationTest.java @@ -1,45 +1,172 @@ -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import com.fasterxml.jackson.databind.JsonNode; -import org.junit.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; -import play.mvc.*; +import java.io.BufferedReader; +import java.io.DataOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.Arrays; + +import org.json.JSONArray; +import org.json.JSONObject; +import org.junit.Before; +import org.junit.Test; +import model.Student; import play.test.*; -import play.data.DynamicForm; -import play.data.validation.ValidationError; -import play.data.validation.Constraints.RequiredValidator; -import play.i18n.Lang; -import play.libs.F; -import play.libs.F.*; -import play.twirl.api.Content; - import static play.test.Helpers.*; -import static org.junit.Assert.*; - - -/** - * - * Simple (JUnit) tests that can call all parts of a play app. - * If you are interested in mocking a whole application, see the wiki for more details. - * - */ -public class ApplicationTest { - - @Test - public void simpleCheck() { - int a = 1 + 1; - assertEquals(2, a); - } - - @Test - public void renderTemplate() { - Content html = views.html.index.render("Your new application is ready."); - assertEquals("text/html", html.contentType()); - assertTrue(html.body().contains("Your new application is ready.")); - } +public class ApplicationTest{ + private static final String BASE_URL = "http://localhost:9000"; + @Test +public void testInServer() throws Exception { + TestServer server = testServer(3333); + running(server, () -> { + try { + WSClient ws = play.libs.ws.WS.newClient(3333); + CompletionStage completionStage = ws.url("/").get(); + WSResponse response = completionStage.toCompletableFuture().get(); + ws.close(); + assertEquals(OK, response.getStatus()); + } catch (Exception e) { + logger.error(e.getMessage(), e); + } + }); +} + @Test + public void whenCreatesRecord_thenCorrect() { + Student student = new Student("jody", "west", 50); + JSONObject obj = new JSONObject(makeRequest(BASE_URL, "POST", new JSONObject(student))); + assertTrue(obj.getBoolean("isSuccessfull")); + JSONObject body = obj.getJSONObject("body"); + assertEquals(student.getAge(), body.getInt("age")); + assertEquals(student.getFirstName(), body.getString("firstName")); + assertEquals(student.getLastName(), body.getString("lastName")); + } + + @Test + public void whenDeletesCreatedRecord_thenCorrect() { + Student student = new Student("Usain", "Bolt", 25); + JSONObject ob1 = new JSONObject(makeRequest(BASE_URL, "POST", new JSONObject(student))).getJSONObject("body"); + int id = ob1.getInt("id"); + JSONObject obj1 = new JSONObject(makeRequest(BASE_URL + "/" + id, "POST", new JSONObject())); + assertTrue(obj1.getBoolean("isSuccessfull")); + makeRequest(BASE_URL + "/" + id, "DELETE", null); + JSONObject obj2 = new JSONObject(makeRequest(BASE_URL + "/" + id, "POST", new JSONObject())); + assertFalse(obj2.getBoolean("isSuccessfull")); + } + + @Test + public void whenUpdatesCreatedRecord_thenCorrect() { + Student student = new Student("john", "doe", 50); + JSONObject body1 = new JSONObject(makeRequest(BASE_URL, "POST", new JSONObject(student))).getJSONObject("body"); + assertEquals(student.getAge(), body1.getInt("age")); + int newAge = 60; + body1.put("age", newAge); + JSONObject body2 = new JSONObject(makeRequest(BASE_URL, "PUT", body1)).getJSONObject("body"); + assertFalse(student.getAge() == body2.getInt("age")); + assertTrue(newAge == body2.getInt("age")); + } + + @Test + public void whenGetsAllRecords_thenCorrect() { + Student student1 = new Student("jane", "daisy", 50); + Student student2 = new Student("john", "daniel", 60); + Student student3 = new Student("don", "mason", 55); + Student student4 = new Student("scarlet", "ohara", 90); + + makeRequest(BASE_URL, "POST", new JSONObject(student1)); + makeRequest(BASE_URL, "POST", new JSONObject(student2)); + makeRequest(BASE_URL, "POST", new JSONObject(student3)); + makeRequest(BASE_URL, "POST", new JSONObject(student4)); + + JSONObject objects = new JSONObject(makeRequest(BASE_URL, "GET", null)); + assertTrue(objects.getBoolean("isSuccessfull")); + JSONArray array = objects.getJSONArray("body"); + assertTrue(array.length() >= 4); + } + + public static String makeRequest(String myUrl, String httpMethod, JSONObject parameters) { + + URL url = null; + try { + url = new URL(myUrl); + } catch (MalformedURLException e) { + e.printStackTrace(); + } + HttpURLConnection conn = null; + try { + + conn = (HttpURLConnection) url.openConnection(); + } catch (IOException e) { + e.printStackTrace(); + } + conn.setDoInput(true); + + conn.setReadTimeout(10000); + + conn.setRequestProperty("Content-Type", "application/json"); + DataOutputStream dos = null; + int respCode = 0; + String inputString = null; + try { + conn.setRequestMethod(httpMethod); + + if (Arrays.asList("POST", "PUT").contains(httpMethod)) { + String params = parameters.toString(); + + conn.setDoOutput(true); + + dos = new DataOutputStream(conn.getOutputStream()); + dos.writeBytes(params); + dos.flush(); + dos.close(); + } + respCode = conn.getResponseCode(); + if (respCode != 200 && respCode != 201) { + String error = inputStreamToString(conn.getErrorStream()); + return error; + } + inputString = inputStreamToString(conn.getInputStream()); + + } catch (IOException e) { + + e.printStackTrace(); + } + return inputString; + } + + public static String inputStreamToString(InputStream is) { + BufferedReader br = null; + StringBuilder sb = new StringBuilder(); + + String line; + try { + + br = new BufferedReader(new InputStreamReader(is)); + while ((line = br.readLine()) != null) { + sb.append(line); + } + + } catch (IOException e) { + e.printStackTrace(); + } finally { + if (br != null) { + try { + br.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + return sb.toString(); + + } } diff --git a/play-framework/student-api/test/IntegrationTest.java b/play-framework/student-api/test/IntegrationTest.java deleted file mode 100644 index c53c71e124..0000000000 --- a/play-framework/student-api/test/IntegrationTest.java +++ /dev/null @@ -1,25 +0,0 @@ -import org.junit.*; - -import play.mvc.*; -import play.test.*; - -import static play.test.Helpers.*; -import static org.junit.Assert.*; - -import static org.fluentlenium.core.filter.FilterConstructor.*; - -public class IntegrationTest { - - /** - * add your integration test here - * in this example we just check if the welcome page is being shown - */ - @Test - public void test() { - running(testServer(3333, fakeApplication(inMemoryDatabase())), HTMLUNIT, browser -> { - browser.goTo("http://localhost:3333"); - assertTrue(browser.pageSource().contains("Your new application is ready.")); - }); - } - -} From 24e560a1dda6c2a89a67238628c7e5cad0456dbb Mon Sep 17 00:00:00 2001 From: slavisa-baeldung Date: Mon, 10 Oct 2016 11:58:44 +0200 Subject: [PATCH 244/265] BAEL-39 - upgrading versions --- log4j/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/log4j/pom.xml b/log4j/pom.xml index 1081513dcf..ab384d4dd1 100644 --- a/log4j/pom.xml +++ b/log4j/pom.xml @@ -20,12 +20,12 @@ org.apache.logging.log4j log4j-api - 2.6 + 2.7 org.apache.logging.log4j log4j-core - 2.6 + 2.7 From 798b624a90caaac73819d075cfc9f7067a97bc02 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Mon, 10 Oct 2016 18:54:01 +0200 Subject: [PATCH 245/265] Refactor CurrentDateTimeTest --- .../com/baeldung/file/FileOperationsTest.java | 1 + .../baeldung/util/CurrentDateTimeTest.java | 24 ++++--------------- 2 files changed, 5 insertions(+), 20 deletions(-) diff --git a/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java b/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java index 30f6fc713f..12143c3c19 100644 --- a/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java +++ b/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java @@ -114,6 +114,7 @@ public class FileOperationsTest { resultStringBuilder.append(line).append("\n"); } } + return resultStringBuilder.toString(); } } \ No newline at end of file diff --git a/core-java-8/src/test/java/com/baeldung/util/CurrentDateTimeTest.java b/core-java-8/src/test/java/com/baeldung/util/CurrentDateTimeTest.java index 599d5a5894..da9027060e 100644 --- a/core-java-8/src/test/java/com/baeldung/util/CurrentDateTimeTest.java +++ b/core-java-8/src/test/java/com/baeldung/util/CurrentDateTimeTest.java @@ -1,31 +1,15 @@ package com.baeldung.util; -import static org.junit.Assert.assertEquals; -import static org.mockito.Mockito.when; +import org.junit.Test; -import java.time.Clock; -import java.time.Instant; -import java.time.LocalDate; -import java.time.LocalTime; -import java.time.ZoneId; +import java.time.*; import java.time.temporal.ChronoField; -import org.junit.BeforeClass; -import org.junit.Test; -import org.mockito.Mockito; +import static org.junit.Assert.assertEquals; public class CurrentDateTimeTest { - private static Clock clock; - - @BeforeClass - public static void setup() { - final Instant currentTime = Instant.parse("2016-10-09T15:10:30.00Z"); - - clock = Mockito.mock(Clock.class); - when(clock.instant()).thenAnswer((invocation) -> currentTime); - when(clock.getZone()).thenAnswer((invocation) -> ZoneId.of("UTC")); - } + private static final Clock clock = Clock.fixed(Instant.parse("2016-10-09T15:10:30.00Z"), ZoneId.of("UTC")); @Test public void shouldReturnCurrentDate() { From f2bbe6341f5aa40eff70f987534377eb7649a1a7 Mon Sep 17 00:00:00 2001 From: Thai Nguyen Date: Tue, 11 Oct 2016 00:00:28 +0700 Subject: [PATCH 246/265] Renames a sub-directory of Apache CXF --- .../{jaxrs-implementation => cxf-jaxrs-implementation}/pom.xml | 0 .../main/java/com/baeldung/cxf/jaxrs/implementation/Baeldung.java | 0 .../main/java/com/baeldung/cxf/jaxrs/implementation/Course.java | 0 .../java/com/baeldung/cxf/jaxrs/implementation/RestfulServer.java | 0 .../main/java/com/baeldung/cxf/jaxrs/implementation/Student.java | 0 .../src/main/resources/course.xml | 0 .../src/main/resources/student.xml | 0 .../java/com/baeldung/cxf/jaxrs/implementation/ServiceTest.java | 0 8 files changed, 0 insertions(+), 0 deletions(-) rename apache-cxf/{jaxrs-implementation => cxf-jaxrs-implementation}/pom.xml (100%) rename apache-cxf/{jaxrs-implementation => cxf-jaxrs-implementation}/src/main/java/com/baeldung/cxf/jaxrs/implementation/Baeldung.java (100%) rename apache-cxf/{jaxrs-implementation => cxf-jaxrs-implementation}/src/main/java/com/baeldung/cxf/jaxrs/implementation/Course.java (100%) rename apache-cxf/{jaxrs-implementation => cxf-jaxrs-implementation}/src/main/java/com/baeldung/cxf/jaxrs/implementation/RestfulServer.java (100%) rename apache-cxf/{jaxrs-implementation => cxf-jaxrs-implementation}/src/main/java/com/baeldung/cxf/jaxrs/implementation/Student.java (100%) rename apache-cxf/{jaxrs-implementation => cxf-jaxrs-implementation}/src/main/resources/course.xml (100%) rename apache-cxf/{jaxrs-implementation => cxf-jaxrs-implementation}/src/main/resources/student.xml (100%) rename apache-cxf/{jaxrs-implementation => cxf-jaxrs-implementation}/src/test/java/com/baeldung/cxf/jaxrs/implementation/ServiceTest.java (100%) diff --git a/apache-cxf/jaxrs-implementation/pom.xml b/apache-cxf/cxf-jaxrs-implementation/pom.xml similarity index 100% rename from apache-cxf/jaxrs-implementation/pom.xml rename to apache-cxf/cxf-jaxrs-implementation/pom.xml diff --git a/apache-cxf/jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Baeldung.java b/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Baeldung.java similarity index 100% rename from apache-cxf/jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Baeldung.java rename to apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Baeldung.java diff --git a/apache-cxf/jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Course.java b/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Course.java similarity index 100% rename from apache-cxf/jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Course.java rename to apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Course.java diff --git a/apache-cxf/jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/RestfulServer.java b/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/RestfulServer.java similarity index 100% rename from apache-cxf/jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/RestfulServer.java rename to apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/RestfulServer.java diff --git a/apache-cxf/jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Student.java b/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Student.java similarity index 100% rename from apache-cxf/jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Student.java rename to apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Student.java diff --git a/apache-cxf/jaxrs-implementation/src/main/resources/course.xml b/apache-cxf/cxf-jaxrs-implementation/src/main/resources/course.xml similarity index 100% rename from apache-cxf/jaxrs-implementation/src/main/resources/course.xml rename to apache-cxf/cxf-jaxrs-implementation/src/main/resources/course.xml diff --git a/apache-cxf/jaxrs-implementation/src/main/resources/student.xml b/apache-cxf/cxf-jaxrs-implementation/src/main/resources/student.xml similarity index 100% rename from apache-cxf/jaxrs-implementation/src/main/resources/student.xml rename to apache-cxf/cxf-jaxrs-implementation/src/main/resources/student.xml diff --git a/apache-cxf/jaxrs-implementation/src/test/java/com/baeldung/cxf/jaxrs/implementation/ServiceTest.java b/apache-cxf/cxf-jaxrs-implementation/src/test/java/com/baeldung/cxf/jaxrs/implementation/ServiceTest.java similarity index 100% rename from apache-cxf/jaxrs-implementation/src/test/java/com/baeldung/cxf/jaxrs/implementation/ServiceTest.java rename to apache-cxf/cxf-jaxrs-implementation/src/test/java/com/baeldung/cxf/jaxrs/implementation/ServiceTest.java From 9c5a0ff10f913b466216d9e938b31561846b81e6 Mon Sep 17 00:00:00 2001 From: Kiran Date: Tue, 11 Oct 2016 03:30:54 -0400 Subject: [PATCH 247/265] Removed unnecessary code and SOP statements (#736) --- .../java/com/baeldung/spring/jms/SampleJmsMessageSender.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/spring-jms/src/main/java/com/baeldung/spring/jms/SampleJmsMessageSender.java b/spring-jms/src/main/java/com/baeldung/spring/jms/SampleJmsMessageSender.java index 1ef3902a31..cfbfc77a75 100644 --- a/spring-jms/src/main/java/com/baeldung/spring/jms/SampleJmsMessageSender.java +++ b/spring-jms/src/main/java/com/baeldung/spring/jms/SampleJmsMessageSender.java @@ -24,10 +24,6 @@ public class SampleJmsMessageSender { } public void sendMessage(final Employee employee) { - System.out.println("Jms Message Sender : " + employee); - Map map = new HashMap<>(); - map.put("name", employee.getName()); - map.put("age", employee.getAge()); this.jmsTemplate.convertAndSend(map); } } From 805c472ed6e57cfe18769e0db71f41b85534601a Mon Sep 17 00:00:00 2001 From: Kiran Date: Tue, 11 Oct 2016 03:31:10 -0400 Subject: [PATCH 248/265] Added useShutdownHook="false" (#735) Set the property useShutdownHook to false --- spring-jms/src/main/resources/EmbeddedActiveMQ.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-jms/src/main/resources/EmbeddedActiveMQ.xml b/spring-jms/src/main/resources/EmbeddedActiveMQ.xml index 5e956144fd..1db20b8f0f 100644 --- a/spring-jms/src/main/resources/EmbeddedActiveMQ.xml +++ b/spring-jms/src/main/resources/EmbeddedActiveMQ.xml @@ -9,10 +9,10 @@ http://activemq.apache.org/schema/core/activemq-core-5.2.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"> - + - \ No newline at end of file + From ea37b3e51af32964312cb10b30bf4ddf1eba647f Mon Sep 17 00:00:00 2001 From: Egima profile Date: Tue, 11 Oct 2016 10:33:14 +0300 Subject: [PATCH 249/265] Added NIO Selector project under core-java (#738) * made changes to java reflection * removed redundant method makeSound in Animal abstract class * added project for play-framework article * added project for regex * changed regex project from own model to core-java * added project for routing in play * made changes to regex project * refactored code for REST API with Play project * refactored student store indexing to zero base * added unit tests, removed bad names * added NIO Selector project under core-java module --- .../java/nio/selector/EchoClient.java | 46 +++++++++++++++++ .../java/nio/selector/EchoServer.java | 50 +++++++++++++++++++ .../baeldung/java/nio/selector/EchoTest.java | 18 +++++++ 3 files changed, 114 insertions(+) create mode 100644 core-java/src/main/java/com/baeldung/java/nio/selector/EchoClient.java create mode 100644 core-java/src/main/java/com/baeldung/java/nio/selector/EchoServer.java create mode 100644 core-java/src/test/java/com/baeldung/java/nio/selector/EchoTest.java diff --git a/core-java/src/main/java/com/baeldung/java/nio/selector/EchoClient.java b/core-java/src/main/java/com/baeldung/java/nio/selector/EchoClient.java new file mode 100644 index 0000000000..188db21641 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/java/nio/selector/EchoClient.java @@ -0,0 +1,46 @@ +package com.baeldung.java.nio.selector; + +import java.io.IOException; +import java.net.InetSocketAddress; +import java.nio.ByteBuffer; +import java.nio.channels.SocketChannel; + +public class EchoClient { + private static SocketChannel client = null; + private static ByteBuffer buffer; + private static EchoClient instance = null; + + public static EchoClient start() { + if (instance == null) + instance = new EchoClient(); + + return instance; + } + + private EchoClient() { + try { + client = SocketChannel.open(new InetSocketAddress("localhost", 5454)); + buffer = ByteBuffer.allocate(256); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public String sendMessage(String msg) { + buffer = ByteBuffer.wrap(msg.getBytes()); + String response = null; + try { + client.write(buffer); + buffer.clear(); + client.read(buffer); + response = new String(buffer.array()).trim(); + System.out.println("response=" + response); + buffer.clear(); + } catch (IOException e) { + e.printStackTrace(); + } + return response; + + } + +} diff --git a/core-java/src/main/java/com/baeldung/java/nio/selector/EchoServer.java b/core-java/src/main/java/com/baeldung/java/nio/selector/EchoServer.java new file mode 100644 index 0000000000..aedcbb319b --- /dev/null +++ b/core-java/src/main/java/com/baeldung/java/nio/selector/EchoServer.java @@ -0,0 +1,50 @@ +package com.baeldung.java.nio.selector; + +import java.nio.channels.ServerSocketChannel; +import java.nio.channels.SocketChannel; +import java.nio.channels.Selector; +import java.nio.channels.SelectionKey; +import java.nio.ByteBuffer; +import java.io.IOException; +import java.util.Set; +import java.util.Iterator; +import java.net.InetSocketAddress; + +public class EchoServer { + + public static void main(String[] args) + + throws IOException { + Selector selector = Selector.open(); + ServerSocketChannel serverSocket = ServerSocketChannel.open(); + serverSocket.bind(new InetSocketAddress("localhost", 5454)); + serverSocket.configureBlocking(false); + serverSocket.register(selector, SelectionKey.OP_ACCEPT); + ByteBuffer buffer = ByteBuffer.allocate(256); + + while (true) { + selector.select(); + Set selectedKeys = selector.selectedKeys(); + Iterator iter = selectedKeys.iterator(); + while (iter.hasNext()) { + + SelectionKey key = iter.next(); + + if (key.isAcceptable()) { + SocketChannel client = serverSocket.accept(); + client.configureBlocking(false); + client.register(selector, SelectionKey.OP_READ); + } + + if (key.isReadable()) { + SocketChannel client = (SocketChannel) key.channel(); + client.read(buffer); + buffer.flip(); + client.write(buffer); + buffer.clear(); + } + iter.remove(); + } + } + } +} diff --git a/core-java/src/test/java/com/baeldung/java/nio/selector/EchoTest.java b/core-java/src/test/java/com/baeldung/java/nio/selector/EchoTest.java new file mode 100644 index 0000000000..63da2fe2bf --- /dev/null +++ b/core-java/src/test/java/com/baeldung/java/nio/selector/EchoTest.java @@ -0,0 +1,18 @@ +package com.baeldung.java.nio.selector; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +public class EchoTest { + + @Test + public void givenClient_whenServerEchosMessage_thenCorrect() { + EchoClient client = EchoClient.start(); + String resp1 = client.sendMessage("hello"); + String resp2 = client.sendMessage("world"); + assertEquals("hello", resp1); + assertEquals("world", resp2); + } + +} From e7ea2e1d2b0a81c15c2d7adf3164b4490bf839f5 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Tue, 11 Oct 2016 09:54:18 +0200 Subject: [PATCH 250/265] Fix spring-jms --- .../baeldung/spring/jms/SampleJmsMessageSender.java | 4 ++++ spring-jms/src/main/resources/EmbeddedActiveMQ.xml | 13 +++++-------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/spring-jms/src/main/java/com/baeldung/spring/jms/SampleJmsMessageSender.java b/spring-jms/src/main/java/com/baeldung/spring/jms/SampleJmsMessageSender.java index cfbfc77a75..1ef3902a31 100644 --- a/spring-jms/src/main/java/com/baeldung/spring/jms/SampleJmsMessageSender.java +++ b/spring-jms/src/main/java/com/baeldung/spring/jms/SampleJmsMessageSender.java @@ -24,6 +24,10 @@ public class SampleJmsMessageSender { } public void sendMessage(final Employee employee) { + System.out.println("Jms Message Sender : " + employee); + Map map = new HashMap<>(); + map.put("name", employee.getName()); + map.put("age", employee.getAge()); this.jmsTemplate.convertAndSend(map); } } diff --git a/spring-jms/src/main/resources/EmbeddedActiveMQ.xml b/spring-jms/src/main/resources/EmbeddedActiveMQ.xml index 1db20b8f0f..6b419c3270 100644 --- a/spring-jms/src/main/resources/EmbeddedActiveMQ.xml +++ b/spring-jms/src/main/resources/EmbeddedActiveMQ.xml @@ -1,15 +1,12 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" + xmlns:amq="http://activemq.apache.org/schema/core" + xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://activemq.apache.org/schema/core + http://activemq.apache.org/schema/core/activemq-core-5.2.0.xsd"> - + From 5b09ae527551228177ea62fa2b8b75859b2de262 Mon Sep 17 00:00:00 2001 From: Sunil Gulabani Date: Tue, 11 Oct 2016 14:14:11 +0530 Subject: [PATCH 251/265] Added stream close snippet --- .../src/test/java/com/baeldung/file/FileOperationsTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java b/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java index 3752fc5b7f..90f5ded1cb 100644 --- a/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java +++ b/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java @@ -102,6 +102,7 @@ public class FileOperationsTest { StringBuilder data = new StringBuilder(); Stream lines = Files.lines(path); lines.forEach(line -> data.append(line).append("\n")); + lines.close(); Assert.assertEquals(expectedData, data.toString().trim()); } From 7279e62e448547684e973ac8e19dae847fd1989f Mon Sep 17 00:00:00 2001 From: DOHA Date: Tue, 11 Oct 2016 13:10:56 +0200 Subject: [PATCH 252/265] add live profile --- spring-security-rest-digest-auth/pom.xml | 55 +++++++++++++++++++ .../client/ClientNoSpringLiveTest.java | 8 +-- .../client/ClientWithSpringLiveTest.java | 2 +- .../baeldung/client/RawClientLiveTest.java | 2 +- 4 files changed, 61 insertions(+), 6 deletions(-) diff --git a/spring-security-rest-digest-auth/pom.xml b/spring-security-rest-digest-auth/pom.xml index bfb4a7223a..1eddbc17f8 100644 --- a/spring-security-rest-digest-auth/pom.xml +++ b/spring-security-rest-digest-auth/pom.xml @@ -278,6 +278,61 @@ + + + live + + + + org.codehaus.cargo + cargo-maven2-plugin + + + start-server + pre-integration-test + + start + + + + stop-server + post-integration-test + + stop + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + + + integration-test + + test + + + + none + + + **/*LiveTest.java + + + cargo + + + + + + + + + + + 4.2.5.RELEASE diff --git a/spring-security-rest-digest-auth/src/test/java/org/baeldung/client/ClientNoSpringLiveTest.java b/spring-security-rest-digest-auth/src/test/java/org/baeldung/client/ClientNoSpringLiveTest.java index 245d5d0a41..cbf6a12ff7 100644 --- a/spring-security-rest-digest-auth/src/test/java/org/baeldung/client/ClientNoSpringLiveTest.java +++ b/spring-security-rest-digest-auth/src/test/java/org/baeldung/client/ClientNoSpringLiveTest.java @@ -22,16 +22,16 @@ public class ClientNoSpringLiveTest { @Test public final void givenUsingCustomHttpRequestFactory_whenSecuredRestApiIsConsumed_then200OK() { - final HttpHost host = new HttpHost("localhost", 8080, "http"); + final HttpHost host = new HttpHost("localhost", 8082, "http"); final CredentialsProvider credentialsProvider = provider(); final CloseableHttpClient client = HttpClientBuilder.create().setDefaultCredentialsProvider(credentialsProvider).useSystemProperties().build(); final HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactoryDigestAuth(host, client); final RestTemplate restTemplate = new RestTemplate(requestFactory); - // credentialsProvider.setCredentials(new AuthScope("localhost", 8080, AuthScope.ANY_REALM), new UsernamePasswordCredentials("user1", "user1Pass")); + // credentialsProvider.setCredentials(new AuthScope("localhost", 8082, AuthScope.ANY_REALM), new UsernamePasswordCredentials("user1", "user1Pass")); - final String uri = "http://localhost:8080/spring-security-rest-digest-auth/api/foos/1"; + final String uri = "http://localhost:8082/spring-security-rest-digest-auth/api/foos/1"; final ResponseEntity responseEntity = restTemplate.exchange(uri, HttpMethod.GET, null, Foo.class); System.out.println(responseEntity.getStatusCode()); @@ -46,7 +46,7 @@ public class ClientNoSpringLiveTest { // credentialsProvider.setCredentials(new AuthScope("localhost", 8080, AuthScope.ANY_REALM), new UsernamePasswordCredentials("user1", "user1Pass")); - final String uri = "http://localhost:8080/spring-security-rest-digest-auth/api/foos/1"; + final String uri = "http://localhost:8082/spring-security-rest-digest-auth/api/foos/1"; final ResponseEntity responseEntity = restTemplate.exchange(uri, HttpMethod.GET, null, Foo.class); System.out.println(responseEntity.getStatusCode()); diff --git a/spring-security-rest-digest-auth/src/test/java/org/baeldung/client/ClientWithSpringLiveTest.java b/spring-security-rest-digest-auth/src/test/java/org/baeldung/client/ClientWithSpringLiveTest.java index b40f9ef472..d673b2633b 100644 --- a/spring-security-rest-digest-auth/src/test/java/org/baeldung/client/ClientWithSpringLiveTest.java +++ b/spring-security-rest-digest-auth/src/test/java/org/baeldung/client/ClientWithSpringLiveTest.java @@ -23,7 +23,7 @@ public class ClientWithSpringLiveTest { @Test public final void whenSecuredRestApiIsConsumed_then200OK() { - final String uri = "http://localhost:8080/spring-security-rest-digest-auth/api/foos/1"; + final String uri = "http://localhost:8082/spring-security-rest-digest-auth/api/foos/1"; final ResponseEntity responseEntity = restTemplate.exchange(uri, HttpMethod.GET, null, Foo.class); System.out.println(responseEntity.getStatusCode()); diff --git a/spring-security-rest-digest-auth/src/test/java/org/baeldung/client/RawClientLiveTest.java b/spring-security-rest-digest-auth/src/test/java/org/baeldung/client/RawClientLiveTest.java index 93c3af3876..83e888e793 100644 --- a/spring-security-rest-digest-auth/src/test/java/org/baeldung/client/RawClientLiveTest.java +++ b/spring-security-rest-digest-auth/src/test/java/org/baeldung/client/RawClientLiveTest.java @@ -29,7 +29,7 @@ public class RawClientLiveTest { final int timeout = 20; // seconds final RequestConfig requestConfig = RequestConfig.custom().setConnectionRequestTimeout(timeout).setConnectTimeout(timeout).setSocketTimeout(timeout).build(); - final HttpGet getMethod = new HttpGet("http://localhost:8080/spring-security-rest-basic-auth/api/bars/1"); + final HttpGet getMethod = new HttpGet("http://localhost:8082/spring-security-rest-basic-auth/api/bars/1"); getMethod.setConfig(requestConfig); final int hardTimeout = 5; // seconds From a063b93de01b6bc9533b23ab99947a9860cd6231 Mon Sep 17 00:00:00 2001 From: DOHA Date: Tue, 11 Oct 2016 13:24:45 +0200 Subject: [PATCH 253/265] add live profile --- spring-security-rest-basic-auth/pom.xml | 55 +++++++++++++++++++ .../baeldung/client/RestTemplateFactory.java | 2 +- .../org/baeldung/client/ClientLiveTest.java | 2 +- .../client/RestClientLiveManualTest.java | 2 +- 4 files changed, 58 insertions(+), 3 deletions(-) diff --git a/spring-security-rest-basic-auth/pom.xml b/spring-security-rest-basic-auth/pom.xml index 854bbb70be..d3f4de9914 100644 --- a/spring-security-rest-basic-auth/pom.xml +++ b/spring-security-rest-basic-auth/pom.xml @@ -285,6 +285,61 @@ + + + live + + + + org.codehaus.cargo + cargo-maven2-plugin + + + start-server + pre-integration-test + + start + + + + stop-server + post-integration-test + + stop + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + + + integration-test + + test + + + + none + + + **/*LiveTest.java + + + cargo + + + + + + + + + + + 4.2.5.RELEASE diff --git a/spring-security-rest-basic-auth/src/main/java/org/baeldung/client/RestTemplateFactory.java b/spring-security-rest-basic-auth/src/main/java/org/baeldung/client/RestTemplateFactory.java index f369e96ca9..0cec0dc5c3 100644 --- a/spring-security-rest-basic-auth/src/main/java/org/baeldung/client/RestTemplateFactory.java +++ b/spring-security-rest-basic-auth/src/main/java/org/baeldung/client/RestTemplateFactory.java @@ -45,7 +45,7 @@ public class RestTemplateFactory implements FactoryBean, Initializ final RequestConfig config = RequestConfig.custom().setConnectTimeout(timeout * 1000).setConnectionRequestTimeout(timeout * 1000).setSocketTimeout(timeout * 1000).build(); final BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider(); - credentialsProvider.setCredentials(new AuthScope("localhost", 8080, AuthScope.ANY_REALM), new UsernamePasswordCredentials("user1", "user1Pass")); + credentialsProvider.setCredentials(new AuthScope("localhost", 8082, AuthScope.ANY_REALM), new UsernamePasswordCredentials("user1", "user1Pass")); final CloseableHttpClient client = HttpClientBuilder.create().setDefaultRequestConfig(config).setDefaultCredentialsProvider(credentialsProvider).build(); final ClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(client); diff --git a/spring-security-rest-basic-auth/src/test/java/org/baeldung/client/ClientLiveTest.java b/spring-security-rest-basic-auth/src/test/java/org/baeldung/client/ClientLiveTest.java index 817e818b58..2a668f827a 100644 --- a/spring-security-rest-basic-auth/src/test/java/org/baeldung/client/ClientLiveTest.java +++ b/spring-security-rest-basic-auth/src/test/java/org/baeldung/client/ClientLiveTest.java @@ -33,7 +33,7 @@ public class ClientLiveTest { @Test public final void whenSecuredRestApiIsConsumed_then200OK() { - final ResponseEntity responseEntity = secureRestTemplate.exchange("http://localhost:8080/spring-security-rest-basic-auth/api/foos/1", HttpMethod.GET, null, Foo.class); + final ResponseEntity responseEntity = secureRestTemplate.exchange("http://localhost:8082/spring-security-rest-basic-auth/api/foos/1", HttpMethod.GET, null, Foo.class); assertThat(responseEntity.getStatusCode().value(), is(200)); } diff --git a/spring-security-rest-basic-auth/src/test/java/org/baeldung/client/RestClientLiveManualTest.java b/spring-security-rest-basic-auth/src/test/java/org/baeldung/client/RestClientLiveManualTest.java index 44c5c0cbb1..c27e306c08 100644 --- a/spring-security-rest-basic-auth/src/test/java/org/baeldung/client/RestClientLiveManualTest.java +++ b/spring-security-rest-basic-auth/src/test/java/org/baeldung/client/RestClientLiveManualTest.java @@ -30,7 +30,7 @@ import org.springframework.web.client.RestTemplate; * */ public class RestClientLiveManualTest { - final String urlOverHttps = "http://localhost:8080/spring-security-rest-basic-auth/api/bars/1"; + final String urlOverHttps = "http://localhost:8082/spring-security-rest-basic-auth/api/bars/1"; // tests From 0d22ab4a44dd1db96e46a2bfa02c47f9654de15e Mon Sep 17 00:00:00 2001 From: DOHA Date: Tue, 11 Oct 2016 13:32:28 +0200 Subject: [PATCH 254/265] add live profile --- spring-security-rest/pom.xml | 58 ++++++++++++++++++- .../java/org/baeldung/web/FooLiveTest.java | 6 +- .../org/baeldung/web/SwaggerLiveTest.java | 2 +- 3 files changed, 62 insertions(+), 4 deletions(-) diff --git a/spring-security-rest/pom.xml b/spring-security-rest/pom.xml index 6d492863b4..255cf25308 100644 --- a/spring-security-rest/pom.xml +++ b/spring-security-rest/pom.xml @@ -257,7 +257,7 @@ ${maven-surefire-plugin.version} - + **/*LiveTest.java @@ -289,6 +289,62 @@ + + + live + + + + org.codehaus.cargo + cargo-maven2-plugin + + + start-server + pre-integration-test + + start + + + + stop-server + post-integration-test + + stop + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + + + integration-test + + test + + + + none + + + **/*LiveTest.java + + + cargo + + + + + + + + + + + + 4.2.5.RELEASE diff --git a/spring-security-rest/src/test/java/org/baeldung/web/FooLiveTest.java b/spring-security-rest/src/test/java/org/baeldung/web/FooLiveTest.java index dc3a576b7b..0ef50f745a 100644 --- a/spring-security-rest/src/test/java/org/baeldung/web/FooLiveTest.java +++ b/spring-security-rest/src/test/java/org/baeldung/web/FooLiveTest.java @@ -17,14 +17,16 @@ import com.jayway.restassured.specification.RequestSpecification; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { TestConfig.class }, loader = AnnotationConfigContextLoader.class) public class FooLiveTest { - private static final String URL_PREFIX = "http://localhost:8080/spring-security-rest"; + private static final String URL_PREFIX = "http://localhost:8082/spring-security-rest"; // private FormAuthConfig formConfig = new FormAuthConfig(URL_PREFIX + "/login", "temporary", "temporary"); private String cookie; + private RequestSpecification givenAuth() { // return RestAssured.given().auth().form("user", "userPass", formConfig); - if (cookie == null) + if (cookie == null) { cookie = RestAssured.given().contentType("application/x-www-form-urlencoded").formParam("password", "userPass").formParam("username", "user").post(URL_PREFIX + "/login").getCookie("JSESSIONID"); + } return RestAssured.given().cookie("JSESSIONID", cookie); } diff --git a/spring-security-rest/src/test/java/org/baeldung/web/SwaggerLiveTest.java b/spring-security-rest/src/test/java/org/baeldung/web/SwaggerLiveTest.java index 792b3e28ce..cf1516f8e1 100644 --- a/spring-security-rest/src/test/java/org/baeldung/web/SwaggerLiveTest.java +++ b/spring-security-rest/src/test/java/org/baeldung/web/SwaggerLiveTest.java @@ -8,7 +8,7 @@ import com.jayway.restassured.RestAssured; import com.jayway.restassured.response.Response; public class SwaggerLiveTest { - private static final String URL_PREFIX = "http://localhost:8080/spring-security-rest/api"; + private static final String URL_PREFIX = "http://localhost:8082/spring-security-rest/api"; @Test public void whenVerifySpringFoxIsWorking_thenOK() { From 9c252d8cc8d09185ca4eb62930352636dc77ce8b Mon Sep 17 00:00:00 2001 From: Anil Bhaskar Date: Tue, 11 Oct 2016 19:03:40 +0530 Subject: [PATCH 255/265] updating latest versions for webjars (#740) --- spring-boot/src/main/resources/templates/index.html | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/spring-boot/src/main/resources/templates/index.html b/spring-boot/src/main/resources/templates/index.html index 046d21600a..2c4387ed10 100644 --- a/spring-boot/src/main/resources/templates/index.html +++ b/spring-boot/src/main/resources/templates/index.html @@ -1,19 +1,19 @@ WebJars Demo - +

    - × + × Success! It is working as we expected.
    - - + + - \ No newline at end of file + From 9c8ef99ed3bb532f4d88961b583107cd9d4faf3c Mon Sep 17 00:00:00 2001 From: Anil Bhaskar Date: Tue, 11 Oct 2016 19:03:49 +0530 Subject: [PATCH 256/265] updating latest versions for webjars (#741) --- spring-boot/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-boot/pom.xml b/spring-boot/pom.xml index 5a20ff5602..5281b9b2c0 100644 --- a/spring-boot/pom.xml +++ b/spring-boot/pom.xml @@ -88,12 +88,12 @@ org.webjars bootstrap - 3.3.4 + 3.3.7-1 org.webjars jquery - 2.1.4 + 3.1.1 From b36a7e00cc954ecf862796915a14e7ee8dd32b4f Mon Sep 17 00:00:00 2001 From: Ante Pocedulic Date: Tue, 11 Oct 2016 17:15:13 +0200 Subject: [PATCH 257/265] Ehcache code (#734) * - created packages for each logical part of application - created validator for WebsiteUser rest API - created ValidatorEventRegister class which fixes known bug for not detecting generated events - created custom Exception Handler which creates better response messages * Code formatting * formated pom.xml replaced for loops with streams fixed bug while getting all beans * removed unnecessary code changed repository type * - added test for Spring Data REST APIs - changed bad request return code - formated code * - added source code for ehcache article - added ehcache dependency to pom.xml --- spring-all/pom.xml | 496 +++++++++--------- .../java/org/baeldung/ehcache/app/App.java | 24 + .../ehcache/calculator/SquaredCalculator.java | 24 + .../baeldung/ehcache/config/CacheHelper.java | 25 + 4 files changed, 324 insertions(+), 245 deletions(-) create mode 100755 spring-all/src/main/java/org/baeldung/ehcache/app/App.java create mode 100755 spring-all/src/main/java/org/baeldung/ehcache/calculator/SquaredCalculator.java create mode 100755 spring-all/src/main/java/org/baeldung/ehcache/config/CacheHelper.java diff --git a/spring-all/pom.xml b/spring-all/pom.xml index c70d9d75fc..003cdacc2c 100644 --- a/spring-all/pom.xml +++ b/spring-all/pom.xml @@ -1,295 +1,301 @@ - - 4.0.0 - com.baeldung - spring-all - 0.1-SNAPSHOT + + 4.0.0 + com.baeldung + spring-all + 0.1-SNAPSHOT - spring-all - war + spring-all + war - - org.springframework.boot - spring-boot-starter-parent - 1.3.6.RELEASE - + + org.springframework.boot + spring-boot-starter-parent + 1.3.6.RELEASE + - - - com.fasterxml.jackson.core - jackson-databind - + + + com.fasterxml.jackson.core + jackson-databind + - + - - org.springframework - spring-web - - - org.springframework - spring-webmvc - - - org.springframework - spring-orm - - - org.springframework - spring-context - + + org.springframework + spring-web + + + org.springframework + spring-webmvc + + + org.springframework + spring-orm + + + org.springframework + spring-context + - + - - org.springframework - spring-aspects - + + org.springframework + spring-aspects + - + - - org.hibernate - hibernate-core - ${hibernate.version} - - - org.javassist - javassist - - - mysql - mysql-connector-java - runtime - - - org.hsqldb - hsqldb - - - + + org.hibernate + hibernate-core + ${hibernate.version} + + + org.javassist + javassist + + + mysql + mysql-connector-java + runtime + + + org.hsqldb + hsqldb + - - org.hibernate - hibernate-validator - + - + + org.hibernate + hibernate-validator + - - javax.servlet - javax.servlet-api - provided - + - - javax.servlet - jstl - runtime - + + javax.servlet + javax.servlet-api + provided + - + + javax.servlet + jstl + runtime + - - com.google.guava - guava - ${guava.version} - - - + - - org.slf4j - slf4j-api - - - ch.qos.logback - logback-classic - - - - org.slf4j - jcl-over-slf4j - - - - org.slf4j - log4j-over-slf4j - + + com.google.guava + guava + ${guava.version} + - + - - org.springframework - spring-test - test - + + org.slf4j + slf4j-api + + + ch.qos.logback + logback-classic + + + + org.slf4j + jcl-over-slf4j + + + + org.slf4j + log4j-over-slf4j + - - junit - junit - test - + - - org.assertj - assertj-core - 3.5.1 - test - + + org.springframework + spring-test + test + - - org.hamcrest - hamcrest-core - test - - - org.hamcrest - hamcrest-library - test - + + junit + junit + test + - - org.mockito - mockito-core - test - + + org.assertj + assertj-core + 3.5.1 + test + - - org.easymock - easymock - 3.4 - test - + + org.hamcrest + hamcrest-core + test + + + org.hamcrest + hamcrest-library + test + - + + org.mockito + mockito-core + test + - + + org.easymock + easymock + 3.4 + test + + + org.ehcache + ehcache + 3.1.3 + - + - - org.springframework - spring-framework-bom - ${org.springframework.version} - pom - import - + - - org.springframework - spring-core - ${org.springframework.version} - + - + + org.springframework + spring-framework-bom + ${org.springframework.version} + pom + import + - + + org.springframework + spring-core + ${org.springframework.version} + - - spring-all - - - src/main/resources - true - - + - + - - org.apache.maven.plugins - maven-compiler-plugin - - 1.8 - 1.8 - - + + spring-all + + + src/main/resources + true + + - - org.apache.maven.plugins - maven-war-plugin - - false - - + - - org.apache.maven.plugins - maven-surefire-plugin - - - - - - - - - + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + - - org.codehaus.cargo - cargo-maven2-plugin - ${cargo-maven2-plugin.version} - - true - - jetty8x - embedded - - - - - - - 8082 - - - - + + org.apache.maven.plugins + maven-war-plugin + + false + + - + + org.apache.maven.plugins + maven-surefire-plugin + + + + + + + + + - + + org.codehaus.cargo + cargo-maven2-plugin + ${cargo-maven2-plugin.version} + + true + + jetty8x + embedded + + + + + + + 8082 + + + + - - - 4.3.1.RELEASE - 4.0.4.RELEASE - 3.20.0-GA - 1.2 + - - 4.3.11.Final - 5.1.38 + - - 1.7.13 - 1.1.3 + + + 4.3.1.RELEASE + 4.0.4.RELEASE + 3.20.0-GA + 1.2 - - 5.2.2.Final + + 4.3.11.Final + 5.1.38 - - 19.0 - 3.4 + + 1.7.13 + 1.1.3 - - 1.3 - 4.12 - 1.10.19 + + 5.2.2.Final - 4.4.1 - 4.5 + + 19.0 + 3.4 - 2.9.0 + + 1.3 + 4.12 + 1.10.19 - - 3.5.1 - 2.6 - 2.19.1 - 2.7 - 1.4.18 + 4.4.1 + 4.5 - + 2.9.0 + + + 3.5.1 + 2.6 + 2.19.1 + 2.7 + 1.4.18 + + \ No newline at end of file diff --git a/spring-all/src/main/java/org/baeldung/ehcache/app/App.java b/spring-all/src/main/java/org/baeldung/ehcache/app/App.java new file mode 100755 index 0000000000..99370186a3 --- /dev/null +++ b/spring-all/src/main/java/org/baeldung/ehcache/app/App.java @@ -0,0 +1,24 @@ +package org.baeldung.ehcache.app; + +import org.baeldung.ehcache.calculator.SquaredCalculator; +import org.baeldung.ehcache.config.CacheHelper; + +public class App { + + public static void main(String[] args) { + + SquaredCalculator squaredCalculator = new SquaredCalculator(); + CacheHelper cacheHelper = new CacheHelper(); + + squaredCalculator.setCache(cacheHelper); + + calculate(squaredCalculator); + calculate(squaredCalculator); + } + + private static void calculate(SquaredCalculator squaredCalculator) { + for (int i = 10; i < 15; i++) { + System.out.println("Square value of " + i + " is: " + squaredCalculator.getSquareValueOfNumber(i) + "\n"); + } + } +} diff --git a/spring-all/src/main/java/org/baeldung/ehcache/calculator/SquaredCalculator.java b/spring-all/src/main/java/org/baeldung/ehcache/calculator/SquaredCalculator.java new file mode 100755 index 0000000000..25957539df --- /dev/null +++ b/spring-all/src/main/java/org/baeldung/ehcache/calculator/SquaredCalculator.java @@ -0,0 +1,24 @@ +package org.baeldung.ehcache.calculator; + +import org.baeldung.ehcache.config.CacheHelper; + +public class SquaredCalculator { + private CacheHelper cache; + + public int getSquareValueOfNumber(int input) { + if (cache.getSquareNumberCache().containsKey(input)) { + return cache.getSquareNumberCache().get(input); + } + + System.out.println("Calculating square value of " + input + " and caching result."); + + int squaredValue = (int) Math.pow(input, 2); + cache.getSquareNumberCache().put(input, squaredValue); + + return squaredValue; + } + + public void setCache(CacheHelper cache) { + this.cache = cache; + } +} diff --git a/spring-all/src/main/java/org/baeldung/ehcache/config/CacheHelper.java b/spring-all/src/main/java/org/baeldung/ehcache/config/CacheHelper.java new file mode 100755 index 0000000000..387a57880b --- /dev/null +++ b/spring-all/src/main/java/org/baeldung/ehcache/config/CacheHelper.java @@ -0,0 +1,25 @@ +package org.baeldung.ehcache.config; + +import org.ehcache.Cache; +import org.ehcache.CacheManager; +import org.ehcache.config.builders.CacheConfigurationBuilder; +import org.ehcache.config.builders.CacheManagerBuilder; +import org.ehcache.config.builders.ResourcePoolsBuilder; + +public class CacheHelper { + + private CacheManager cacheManager; + private Cache squareNumberCache; + + public CacheHelper() { + cacheManager = CacheManagerBuilder.newCacheManagerBuilder().withCache("squaredNumber", CacheConfigurationBuilder.newCacheConfigurationBuilder(Integer.class, Integer.class, ResourcePoolsBuilder.heap(10))).build(); + cacheManager.init(); + + squareNumberCache = cacheManager.getCache("squaredNumber", Integer.class, Integer.class); + } + + public Cache getSquareNumberCache() { + return squareNumberCache; + } + +} From 9e5d795bd4af5e02860223f82618c7f67379fe1a Mon Sep 17 00:00:00 2001 From: slavisa-baeldung Date: Tue, 11 Oct 2016 17:51:49 +0200 Subject: [PATCH 258/265] BAEL-225 - Upgrading version --- core-java-8/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core-java-8/pom.xml b/core-java-8/pom.xml index 566eb4e43a..22e3bab595 100644 --- a/core-java-8/pom.xml +++ b/core-java-8/pom.xml @@ -15,7 +15,7 @@ commons-io commons-io - 2.4 + 2.5 From 2aa2f43c6e9da11f4d862da40a1aed8f52c74492 Mon Sep 17 00:00:00 2001 From: eugenp Date: Wed, 12 Oct 2016 07:44:40 +0300 Subject: [PATCH 259/265] maven cleanup --- assertj/pom.xml | 25 +- core-java/pom.xml | 2 +- gson-jackson-performance/README.md | 3 - gson-jackson-performance/pom.xml | 72 --- .../data/complex/ComplexDataGeneration.java | 63 --- .../data/complex/ComplexDataGson.java | 91 ---- .../data/complex/ComplexDataJackson.java | 95 ---- .../data/simple/SimpleDataGeneration.java | 35 -- .../baeldung/data/simple/SimpleDataGson.java | 91 ---- .../data/simple/SimpleDataJackson.java | 95 ---- .../com/baeldung/data/utility/Utility.java | 90 ---- .../baeldung/pojo/complex/AddressDetails.java | 37 -- .../baeldung/pojo/complex/ContactDetails.java | 25 - .../pojo/complex/CustomerAddressDetails.java | 18 - .../complex/CustomerPortfolioComplex.java | 17 - .../com/baeldung/pojo/simple/Customer.java | 36 -- .../pojo/simple/CustomerPortfolioSimple.java | 16 - .../src/main/resources/log4j.properties | 16 - gson/pom.xml | 2 +- guava18/pom.xml | 10 +- guava19/pom.xml | 14 +- handling-spring-static-resources/pom.xml | 4 +- jackson/pom.xml | 2 +- java-cassandra/pom.xml | 85 ++-- rest-assured/pom.xml | 435 ++++++++---------- rest-testing/pom.xml | 2 +- spring-mvc-java/pom.xml | 27 +- spring-mvc-xml/pom.xml | 19 +- spring-rest-angular/pom.xml | 187 ++++---- spring-security-rest-digest-auth/pom.xml | 2 +- spring-security-rest-full/pom.xml | 2 +- spring-security-rest/pom.xml | 6 +- 32 files changed, 403 insertions(+), 1221 deletions(-) delete mode 100644 gson-jackson-performance/README.md delete mode 100644 gson-jackson-performance/pom.xml delete mode 100644 gson-jackson-performance/src/main/java/com/baeldung/data/complex/ComplexDataGeneration.java delete mode 100644 gson-jackson-performance/src/main/java/com/baeldung/data/complex/ComplexDataGson.java delete mode 100644 gson-jackson-performance/src/main/java/com/baeldung/data/complex/ComplexDataJackson.java delete mode 100644 gson-jackson-performance/src/main/java/com/baeldung/data/simple/SimpleDataGeneration.java delete mode 100644 gson-jackson-performance/src/main/java/com/baeldung/data/simple/SimpleDataGson.java delete mode 100644 gson-jackson-performance/src/main/java/com/baeldung/data/simple/SimpleDataJackson.java delete mode 100644 gson-jackson-performance/src/main/java/com/baeldung/data/utility/Utility.java delete mode 100644 gson-jackson-performance/src/main/java/com/baeldung/pojo/complex/AddressDetails.java delete mode 100644 gson-jackson-performance/src/main/java/com/baeldung/pojo/complex/ContactDetails.java delete mode 100644 gson-jackson-performance/src/main/java/com/baeldung/pojo/complex/CustomerAddressDetails.java delete mode 100644 gson-jackson-performance/src/main/java/com/baeldung/pojo/complex/CustomerPortfolioComplex.java delete mode 100644 gson-jackson-performance/src/main/java/com/baeldung/pojo/simple/Customer.java delete mode 100644 gson-jackson-performance/src/main/java/com/baeldung/pojo/simple/CustomerPortfolioSimple.java delete mode 100644 gson-jackson-performance/src/main/resources/log4j.properties diff --git a/assertj/pom.xml b/assertj/pom.xml index 421afd40a5..df55ebba4b 100644 --- a/assertj/pom.xml +++ b/assertj/pom.xml @@ -1,7 +1,6 @@ - + 4.0.0 com.baeldung @@ -9,11 +8,18 @@ 1.0.0-SNAPSHOT + com.google.guava guava - 19.0 + ${guava.version} + + org.assertj + assertj-guava + 3.0.0 + + junit junit @@ -26,11 +32,7 @@ 3.5.1 test - - org.assertj - assertj-guava - 3.0.0 - + @@ -46,4 +48,9 @@ + + + 19.0 + + \ No newline at end of file diff --git a/core-java/pom.xml b/core-java/pom.xml index bce97d1148..a5e89d2a76 100644 --- a/core-java/pom.xml +++ b/core-java/pom.xml @@ -174,7 +174,7 @@ 5.1.38 - 2.7.2 + 2.7.8 1.7.13 diff --git a/gson-jackson-performance/README.md b/gson-jackson-performance/README.md deleted file mode 100644 index 5b08f6cdec..0000000000 --- a/gson-jackson-performance/README.md +++ /dev/null @@ -1,3 +0,0 @@ -## Performance of Gson and Jackson - -Standalone java programs to measure the performance of both JSON APIs based on file size and object graph complexity. diff --git a/gson-jackson-performance/pom.xml b/gson-jackson-performance/pom.xml deleted file mode 100644 index 1ea43bd7fa..0000000000 --- a/gson-jackson-performance/pom.xml +++ /dev/null @@ -1,72 +0,0 @@ - - 4.0.0 - - com.baeldung - gson-jackson-performance - 0.0.1-SNAPSHOT - jar - - gson-jackson-performance - http://maven.apache.org - - - UTF-8 - - - - gson-jackson-performance - - - src/main/resources - true - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - - 1.8 - 1.8 - - - - - - - - - - - com.google.code.gson - gson - 2.5 - - - - com.fasterxml.jackson.core - jackson-databind - 2.7.1-1 - - - - junit - junit - 3.8.1 - test - - - - log4j - log4j - 1.2.17 - - - - - - - diff --git a/gson-jackson-performance/src/main/java/com/baeldung/data/complex/ComplexDataGeneration.java b/gson-jackson-performance/src/main/java/com/baeldung/data/complex/ComplexDataGeneration.java deleted file mode 100644 index b69d306edf..0000000000 --- a/gson-jackson-performance/src/main/java/com/baeldung/data/complex/ComplexDataGeneration.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.baeldung.data.complex; - -import java.util.ArrayList; -import java.util.List; - -import com.baeldung.data.utility.Utility; -import com.baeldung.pojo.complex.AddressDetails; -import com.baeldung.pojo.complex.ContactDetails; -import com.baeldung.pojo.complex.CustomerAddressDetails; -import com.baeldung.pojo.complex.CustomerPortfolioComplex; - -/** - * - * This class is responsible for generating data for complex type object - */ - -public class ComplexDataGeneration { - - public static CustomerPortfolioComplex generateData() { - List customerAddressDetailsList = new ArrayList(); - for (int i = 0; i < 600000; i++) { - CustomerAddressDetails customerAddressDetails = new CustomerAddressDetails(); - customerAddressDetails.setAge(20); - customerAddressDetails.setFirstName(Utility.generateRandomName()); - customerAddressDetails.setLastName(Utility.generateRandomName()); - - List addressDetailsList = new ArrayList(); - customerAddressDetails.setAddressDetails(addressDetailsList); - - for (int j = 0; j < 2; j++) { - AddressDetails addressDetails = new AddressDetails(); - addressDetails.setZipcode(Utility.generateRandomZip()); - addressDetails.setAddress(Utility.generateRandomAddress()); - - List contactDetailsList = new ArrayList(); - addressDetails.setContactDetails(contactDetailsList); - - for (int k = 0; k < 2; k++) { - ContactDetails contactDetails = new ContactDetails(); - contactDetails.setLandline(Utility.generateRandomPhone()); - contactDetails.setMobile(Utility.generateRandomPhone()); - contactDetailsList.add(contactDetails); - contactDetails = null; - } - - addressDetailsList.add(addressDetails); - addressDetails = null; - contactDetailsList = null; - } - customerAddressDetailsList.add(customerAddressDetails); - customerAddressDetails = null; - - if (i % 6000 == 0) { - Runtime.getRuntime().gc(); - } - } - - CustomerPortfolioComplex customerPortfolioComplex = new CustomerPortfolioComplex(); - customerPortfolioComplex.setCustomerAddressDetailsList(customerAddressDetailsList); - customerAddressDetailsList = null; - return customerPortfolioComplex; - } -} diff --git a/gson-jackson-performance/src/main/java/com/baeldung/data/complex/ComplexDataGson.java b/gson-jackson-performance/src/main/java/com/baeldung/data/complex/ComplexDataGson.java deleted file mode 100644 index b97893e8f1..0000000000 --- a/gson-jackson-performance/src/main/java/com/baeldung/data/complex/ComplexDataGson.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.baeldung.data.complex; - -import java.util.Map; - -import org.apache.log4j.Logger; -import com.baeldung.data.utility.Utility; -import com.baeldung.pojo.complex.CustomerPortfolioComplex; - -import com.google.gson.Gson; - -/** - * - * This class is responsible for performing functions for Complex type - * GSON like - * Java to Json - * Json to Map - * Json to Java Object - */ - -public class ComplexDataGson { - - private static final Logger logger = Logger.getLogger(ComplexDataGson.class); - - static Gson gson = new Gson(); - - static long generateJsonAvgTime = 0L; - - static long parseJsonToMapAvgTime = 0L; - - static long parseJsonToActualObjectAvgTime = 0L; - - public static void main(String[] args) { - CustomerPortfolioComplex customerPortfolioComplex = ComplexDataGeneration.generateData(); - int j = 50; - for (int i = 0; i < j; i++) { - logger.info("-------Round " + (i + 1)); - String jsonStr = generateJson(customerPortfolioComplex); - logger.info("Size of Complex content Jackson :: " + Utility.bytesIntoMB(jsonStr.getBytes().length)); - logger.info("--------------------------------------------------------------------------"); - parseJsonToMap(jsonStr); - parseJsonToActualObject(jsonStr); - jsonStr = null; - } - - generateJsonAvgTime = generateJsonAvgTime / j; - parseJsonToMapAvgTime = parseJsonToMapAvgTime / j; - parseJsonToActualObjectAvgTime = parseJsonToActualObjectAvgTime / j; - - logger.info("--------------------------------------------------------------------------"); - logger.info("Average Time to Generate JSON : " + generateJsonAvgTime); - logger.info("Average Time to Parse JSON To Map : " + parseJsonToMapAvgTime); - logger.info("Average Time to Parse JSON To Actual Object : " + parseJsonToActualObjectAvgTime); - logger.info("--------------------------------------------------------------------------"); - } - - private static String generateJson(CustomerPortfolioComplex customerPortfolioComplex) { - Runtime.getRuntime().gc(); - long startParsTime = System.nanoTime(); - String json = gson.toJson(customerPortfolioComplex); - long endParsTime = System.nanoTime(); - long elapsedTime = endParsTime - startParsTime; - generateJsonAvgTime = generateJsonAvgTime + elapsedTime; - logger.info("Json Generation Time(ms):: " + elapsedTime); - return json; - } - - private static void parseJsonToMap(String jsonStr) { - long startParsTime = System.nanoTime(); - Map parsedMap = gson.fromJson(jsonStr , Map.class); - long endParsTime = System.nanoTime(); - long elapsedTime = endParsTime - startParsTime; - parseJsonToMapAvgTime = parseJsonToMapAvgTime + elapsedTime; - logger.info("Generating Map from json Time(ms):: " + elapsedTime); - logger.info("--------------------------------------------------------------------------"); - parsedMap = null; - Runtime.getRuntime().gc(); - } - - private static void parseJsonToActualObject(String jsonStr) { - long startParsTime = System.nanoTime(); - CustomerPortfolioComplex customerPortfolioComplex = gson.fromJson(jsonStr , CustomerPortfolioComplex.class); - long endParsTime = System.nanoTime(); - long elapsedTime = endParsTime - startParsTime; - parseJsonToActualObjectAvgTime = parseJsonToActualObjectAvgTime + elapsedTime; - logger.info("Generating Actual Object from json Time(ms):: " + elapsedTime); - logger.info("--------------------------------------------------------------------------"); - customerPortfolioComplex = null; - Runtime.getRuntime().gc(); - - } -} diff --git a/gson-jackson-performance/src/main/java/com/baeldung/data/complex/ComplexDataJackson.java b/gson-jackson-performance/src/main/java/com/baeldung/data/complex/ComplexDataJackson.java deleted file mode 100644 index 07a210fb37..0000000000 --- a/gson-jackson-performance/src/main/java/com/baeldung/data/complex/ComplexDataJackson.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.baeldung.data.complex; - -import java.io.IOException; -import java.util.Map; - -import com.baeldung.data.utility.Utility; -import org.apache.log4j.Logger; -import com.baeldung.pojo.complex.CustomerPortfolioComplex; - -import com.fasterxml.jackson.core.JsonParseException; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonMappingException; -import com.fasterxml.jackson.databind.ObjectMapper; - -/** - * - * This class is responsible for performing functions for Complex type - * Jackson like - * Java to Json - * Json to Map - * Json to Java Object - */ - -public class ComplexDataJackson { - - private static final Logger logger = Logger.getLogger(ComplexDataJackson.class); - - static ObjectMapper mapper = new ObjectMapper(); - - static long generateJsonAvgTime = 0L; - - static long parseJsonToMapAvgTime = 0L; - - static long parseJsonToActualObjectAvgTime = 0L; - - public static void main(String[] args) throws IOException { - CustomerPortfolioComplex customerPortfolioComplex = ComplexDataGeneration.generateData(); - int j = 50; - for (int i = 0; i < j; i++) { - logger.info("-------Round " + (i + 1)); - String jsonStr = generateJson(customerPortfolioComplex); - logger.info("Size of Complex content Jackson :: " + Utility.bytesIntoMB(jsonStr.getBytes().length)); - logger.info("--------------------------------------------------------------------------"); - parseJsonToMap(jsonStr); - parseJsonToActualObject(jsonStr); - jsonStr = null; - } - - generateJsonAvgTime = generateJsonAvgTime / j; - parseJsonToMapAvgTime = parseJsonToMapAvgTime / j; - parseJsonToActualObjectAvgTime = parseJsonToActualObjectAvgTime / j; - - logger.info("--------------------------------------------------------------------------"); - logger.info("Average Time to Generate JSON : " + generateJsonAvgTime); - logger.info("Average Time to Parse JSON To Map : " + parseJsonToMapAvgTime); - logger.info("Average Time to Parse JSON To Actual Object : " + parseJsonToActualObjectAvgTime); - logger.info("--------------------------------------------------------------------------"); - } - - private static String generateJson(CustomerPortfolioComplex customerPortfolioComplex) - throws JsonProcessingException { - Runtime.getRuntime().gc(); - long startParsTime = System.nanoTime(); - String json = mapper.writeValueAsString(customerPortfolioComplex); - long endParsTime = System.nanoTime(); - long elapsedTime = endParsTime - startParsTime; - generateJsonAvgTime = generateJsonAvgTime + elapsedTime; - logger.info("Json Generation Time(ms):: " + elapsedTime); - return json; - } - - private static void parseJsonToMap(String jsonStr) throws JsonParseException , JsonMappingException , IOException { - long startParsTime = System.nanoTime(); - Map parsedMap = mapper.readValue(jsonStr , Map.class); - long endParsTime = System.nanoTime(); - long elapsedTime = endParsTime - startParsTime; - parseJsonToMapAvgTime = parseJsonToMapAvgTime + elapsedTime; - logger.info("Generating Map from json Time(ms):: " + elapsedTime); - parsedMap = null; - Runtime.getRuntime().gc(); - - } - - private static void parseJsonToActualObject(String jsonStr) throws JsonParseException , JsonMappingException , - IOException { - long startParsTime = System.nanoTime(); - CustomerPortfolioComplex customerPortfolioComplex = mapper.readValue(jsonStr , CustomerPortfolioComplex.class); - long endParsTime = System.nanoTime(); - long elapsedTime = endParsTime - startParsTime; - parseJsonToActualObjectAvgTime = parseJsonToActualObjectAvgTime + elapsedTime; - logger.info("Generating Actual Object from json Time(ms):: " + elapsedTime); - customerPortfolioComplex = null; - Runtime.getRuntime().gc(); - } -} diff --git a/gson-jackson-performance/src/main/java/com/baeldung/data/simple/SimpleDataGeneration.java b/gson-jackson-performance/src/main/java/com/baeldung/data/simple/SimpleDataGeneration.java deleted file mode 100644 index 1e186adc72..0000000000 --- a/gson-jackson-performance/src/main/java/com/baeldung/data/simple/SimpleDataGeneration.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.baeldung.data.simple; - -import java.util.ArrayList; -import java.util.List; - -import com.baeldung.data.utility.Utility; -import com.baeldung.pojo.simple.Customer; -import com.baeldung.pojo.simple.CustomerPortfolioSimple; - -/** - * - * This class is responsible for generating data for simple type object - */ - -public class SimpleDataGeneration { - - public static CustomerPortfolioSimple generateData() { - List customerList = new ArrayList(); - for (int i = 0; i < 1; i++) { - Customer customer = new Customer(); - customer.setAge(20); - customer.setFirstName(Utility.generateRandomName()); - customer.setLastName(Utility.generateRandomName()); - - customerList.add(customer); - customer = null; - - } - - CustomerPortfolioSimple customerPortfolioSimple = new CustomerPortfolioSimple(); - customerPortfolioSimple.setCustomerLists(customerList); - customerList = null; - return customerPortfolioSimple; - } -} diff --git a/gson-jackson-performance/src/main/java/com/baeldung/data/simple/SimpleDataGson.java b/gson-jackson-performance/src/main/java/com/baeldung/data/simple/SimpleDataGson.java deleted file mode 100644 index b190313462..0000000000 --- a/gson-jackson-performance/src/main/java/com/baeldung/data/simple/SimpleDataGson.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.baeldung.data.simple; - -import java.util.Map; - -import org.apache.log4j.Logger; -import com.baeldung.data.utility.Utility; -import com.baeldung.pojo.simple.CustomerPortfolioSimple; - -import com.google.gson.Gson; - -/** - * - * This class is responsible for performing functions for Simple type - * GSON like - * Java to Json - * Json to Map - * Json to Java Object - */ - -public class SimpleDataGson { - - private static final Logger logger = Logger.getLogger(SimpleDataGson.class); - - static Gson gson = new Gson(); - - static long generateJsonAvgTime = 0L; - - static long parseJsonToMapAvgTime = 0L; - - static long parseJsonToActualObjectAvgTime = 0L; - - public static void main(String[] args) { - CustomerPortfolioSimple customerPortfolioSimple = SimpleDataGeneration.generateData(); - String jsonStr = null; - int j = 5; - for (int i = 0; i < j; i++) { - logger.info("-------Round " + (i + 1)); - jsonStr = generateJson(customerPortfolioSimple); - logger.info("Size of Simple content Gson :: " + Utility.bytesIntoMB(jsonStr.getBytes().length)); - logger.info("--------------------------------------------------------------------------"); - parseJsonToMap(jsonStr); - parseJsonToActualObject(jsonStr); - jsonStr = null; - } - generateJsonAvgTime = generateJsonAvgTime / j; - parseJsonToMapAvgTime = parseJsonToMapAvgTime / j; - parseJsonToActualObjectAvgTime = parseJsonToActualObjectAvgTime / j; - - logger.info("--------------------------------------------------------------------------"); - logger.info("Average Time to Generate JSON : " + generateJsonAvgTime); - logger.info("Average Time to Parse JSON To Map : " + parseJsonToMapAvgTime); - logger.info("Average Time to Parse JSON To Actual Object : " + parseJsonToActualObjectAvgTime); - logger.info("--------------------------------------------------------------------------"); - } - - private static String generateJson(CustomerPortfolioSimple customerPortfolioSimple) { - Runtime.getRuntime().gc(); - long startParsTime = System.nanoTime(); - String json = gson.toJson(customerPortfolioSimple); - long endParsTime = System.nanoTime(); - long elapsedTime = endParsTime - startParsTime; - generateJsonAvgTime = generateJsonAvgTime + elapsedTime; - logger.info("Json Generation Time(ms):: " + elapsedTime); - return json; - } - - private static void parseJsonToMap(String jsonStr) { - long startParsTime = System.nanoTime(); - Map parsedMap = gson.fromJson(jsonStr , Map.class); - long endParsTime = System.nanoTime(); - long elapsedTime = endParsTime - startParsTime; - parseJsonToMapAvgTime = parseJsonToMapAvgTime + elapsedTime; - logger.info("Generating Map from json Time(ms):: " + elapsedTime); - logger.info("--------------------------------------------------------------------------"); - parsedMap = null; - Runtime.getRuntime().gc(); - - } - - private static void parseJsonToActualObject(String jsonStr) { - long startParsTime = System.nanoTime(); - CustomerPortfolioSimple customerPortfolioSimple = gson.fromJson(jsonStr , CustomerPortfolioSimple.class); - long endParsTime = System.nanoTime(); - long elapsedTime = endParsTime - startParsTime; - parseJsonToActualObjectAvgTime = parseJsonToActualObjectAvgTime + elapsedTime; - logger.info("Generating Actual Object from json Time(ms):: " + elapsedTime); - logger.info("--------------------------------------------------------------------------"); - customerPortfolioSimple = null; - Runtime.getRuntime().gc(); - } -} diff --git a/gson-jackson-performance/src/main/java/com/baeldung/data/simple/SimpleDataJackson.java b/gson-jackson-performance/src/main/java/com/baeldung/data/simple/SimpleDataJackson.java deleted file mode 100644 index 9330333604..0000000000 --- a/gson-jackson-performance/src/main/java/com/baeldung/data/simple/SimpleDataJackson.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.baeldung.data.simple; - -import java.io.IOException; -import java.util.Map; - -import com.baeldung.data.utility.Utility; -import org.apache.log4j.Logger; -import com.baeldung.pojo.simple.CustomerPortfolioSimple; - -import com.fasterxml.jackson.core.JsonParseException; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonMappingException; -import com.fasterxml.jackson.databind.ObjectMapper; - -/** - * - * This class is responsible for performing functions for Simple type - * Jackson like - * Java to Json - * Json to Map - * Json to Java Object - */ - -public class SimpleDataJackson { - - private static final Logger logger = Logger.getLogger(SimpleDataJackson.class); - - static ObjectMapper mapper = new ObjectMapper(); - - static long generateJsonAvgTime = 0L; - - static long parseJsonToMapAvgTime = 0L; - - static long parseJsonToActualObjectAvgTime = 0L; - - public static void main(String[] args) throws IOException { - CustomerPortfolioSimple customerPortfolioSimple = SimpleDataGeneration.generateData(); - int j = 50; - for (int i = 0; i < j; i++) { - logger.info("-------Round " + (i + 1)); - String jsonStr = generateJson(customerPortfolioSimple); - logger.info("Size of Simple content Jackson :: " + Utility.bytesIntoMB(jsonStr.getBytes().length)); - logger.info("--------------------------------------------------------------------------"); - - parseJsonToMap(jsonStr); - parseJsonToActualObject(jsonStr); - jsonStr = null; - } - - generateJsonAvgTime = generateJsonAvgTime / j; - parseJsonToMapAvgTime = parseJsonToMapAvgTime / j; - parseJsonToActualObjectAvgTime = parseJsonToActualObjectAvgTime / j; - - logger.info("--------------------------------------------------------------------------"); - logger.info("Average Time to Generate JSON : " + generateJsonAvgTime); - logger.info("Average Time to Parse JSON To Map : " + parseJsonToMapAvgTime); - logger.info("Average Time to Parse JSON To Actual Object : " + parseJsonToActualObjectAvgTime); - logger.info("--------------------------------------------------------------------------"); - } - - private static String generateJson(CustomerPortfolioSimple customerPortfolioSimple) throws JsonProcessingException { - Runtime.getRuntime().gc(); - long startParsTime = System.nanoTime(); - String json = mapper.writeValueAsString(customerPortfolioSimple); - long endParsTime = System.nanoTime(); - long elapsedTime = endParsTime - startParsTime; - generateJsonAvgTime = generateJsonAvgTime + elapsedTime; - logger.info("Json Generation Time(ms):: " + elapsedTime); - return json; - } - - private static void parseJsonToMap(String jsonStr) throws JsonParseException , JsonMappingException , IOException { - long startParsTime = System.nanoTime(); - Map parsedMap = mapper.readValue(jsonStr , Map.class); - long endParsTime = System.nanoTime(); - long elapsedTime = endParsTime - startParsTime; - parseJsonToMapAvgTime = parseJsonToMapAvgTime + elapsedTime; - logger.info("Generating Map from json Time(ms):: " + elapsedTime); - logger.info("--------------------------------------------------------------------------"); - parsedMap = null; - Runtime.getRuntime().gc(); - } - - private static void parseJsonToActualObject(String jsonStr) throws JsonParseException , JsonMappingException , - IOException { - long startParsTime = System.nanoTime(); - CustomerPortfolioSimple customerPortfolioSimple = mapper.readValue(jsonStr , CustomerPortfolioSimple.class); - long endParsTime = System.nanoTime(); - long elapsedTime = endParsTime - startParsTime; - parseJsonToActualObjectAvgTime = parseJsonToActualObjectAvgTime + elapsedTime; - logger.info("Generating Actual Object from json Time(ms):: " + elapsedTime); - customerPortfolioSimple = null; - Runtime.getRuntime().gc(); - } -} diff --git a/gson-jackson-performance/src/main/java/com/baeldung/data/utility/Utility.java b/gson-jackson-performance/src/main/java/com/baeldung/data/utility/Utility.java deleted file mode 100644 index 8b0c402e47..0000000000 --- a/gson-jackson-performance/src/main/java/com/baeldung/data/utility/Utility.java +++ /dev/null @@ -1,90 +0,0 @@ -package com.baeldung.data.utility; - -import java.io.BufferedReader; -import java.io.FileReader; -import java.io.IOException; -import java.util.Random; - -public class Utility { - - public static String generateRandomName() { - char[] chars = "abcdefghijklmnopqrstuvwxyz ".toCharArray(); - StringBuilder sb = new StringBuilder(); - Random random = new Random(); - for (int i = 0; i < 8; i++) { - char c = chars[random.nextInt(chars.length)]; - sb.append(c); - } - return sb.toString(); - } - - public static String generateRandomAddress() { - char[] chars = "abcdefghijklmnopqrstuvwxyz ".toCharArray(); - StringBuilder sb = new StringBuilder(); - Random random = new Random(); - for (int i = 0; i < 30; i++) { - char c = chars[random.nextInt(chars.length)]; - sb.append(c); - } - return sb.toString(); - } - - public static String generateRandomZip() { - char[] chars = "1234567890".toCharArray(); - StringBuilder sb = new StringBuilder(); - Random random = new Random(); - for (int i = 0; i < 8; i++) { - char c = chars[random.nextInt(chars.length)]; - sb.append(c); - } - return sb.toString(); - } - - public static String generateRandomPhone() { - char[] chars = "1234567890".toCharArray(); - StringBuilder sb = new StringBuilder(); - Random random = new Random(); - for (int i = 0; i < 10; i++) { - char c = chars[random.nextInt(chars.length)]; - sb.append(c); - } - return sb.toString(); - } - - public static String readFile(String fileName , Class clazz) throws IOException { - String dir = clazz.getResource("/").getFile(); - dir = dir + "/" + fileName; - - BufferedReader br = new BufferedReader(new FileReader(dir)); - try { - StringBuilder sb = new StringBuilder(); - String line = br.readLine(); - - while (line != null) { - sb.append(line); - sb.append(System.lineSeparator()); - line = br.readLine(); - } - return sb.toString(); - } finally { - br.close(); - } - } - - public static String bytesIntoMB(long bytes) { - long kilobyte = 1024; - long megabyte = kilobyte * 1024; - - if ((bytes >= 0) && (bytes < kilobyte)) { - return bytes + " B"; - - } else if ((bytes >= kilobyte) && (bytes < megabyte)) { - return (bytes / kilobyte) + " KB"; - - } else if ((bytes >= megabyte)) { - return (bytes / megabyte) + " MB"; - } - - return null; - } -} diff --git a/gson-jackson-performance/src/main/java/com/baeldung/pojo/complex/AddressDetails.java b/gson-jackson-performance/src/main/java/com/baeldung/pojo/complex/AddressDetails.java deleted file mode 100644 index 79725a97bd..0000000000 --- a/gson-jackson-performance/src/main/java/com/baeldung/pojo/complex/AddressDetails.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.baeldung.pojo.complex; - -import java.util.List; - -public class AddressDetails { - - private String address; - - private String zipcode; - - private List contactDetails; - - public String getZipcode() { - return zipcode; - } - - public void setZipcode(String zipcode) { - this.zipcode = zipcode; - } - - public List getContactDetails() { - return contactDetails; - } - - public void setContactDetails(List contactDetails) { - this.contactDetails = contactDetails; - } - - public String getAddress() { - return address; - } - - public void setAddress(String address) { - this.address = address; - } - -} diff --git a/gson-jackson-performance/src/main/java/com/baeldung/pojo/complex/ContactDetails.java b/gson-jackson-performance/src/main/java/com/baeldung/pojo/complex/ContactDetails.java deleted file mode 100644 index 164fe3f470..0000000000 --- a/gson-jackson-performance/src/main/java/com/baeldung/pojo/complex/ContactDetails.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.baeldung.pojo.complex; - -public class ContactDetails { - - private String mobile; - - private String landline; - - public String getMobile() { - return mobile; - } - - public void setMobile(String mobile) { - this.mobile = mobile; - } - - public String getLandline() { - return landline; - } - - public void setLandline(String landline) { - this.landline = landline; - } - -} diff --git a/gson-jackson-performance/src/main/java/com/baeldung/pojo/complex/CustomerAddressDetails.java b/gson-jackson-performance/src/main/java/com/baeldung/pojo/complex/CustomerAddressDetails.java deleted file mode 100644 index 9bc5951716..0000000000 --- a/gson-jackson-performance/src/main/java/com/baeldung/pojo/complex/CustomerAddressDetails.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.baeldung.pojo.complex; - -import java.util.List; - -import com.baeldung.pojo.simple.Customer; - -public class CustomerAddressDetails extends Customer { - - private List addressDetails; - - public List getAddressDetails() { - return addressDetails; - } - - public void setAddressDetails(List addressDetails) { - this.addressDetails = addressDetails; - } -} diff --git a/gson-jackson-performance/src/main/java/com/baeldung/pojo/complex/CustomerPortfolioComplex.java b/gson-jackson-performance/src/main/java/com/baeldung/pojo/complex/CustomerPortfolioComplex.java deleted file mode 100644 index 13f9d240b8..0000000000 --- a/gson-jackson-performance/src/main/java/com/baeldung/pojo/complex/CustomerPortfolioComplex.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.baeldung.pojo.complex; - -import java.util.List; - -public class CustomerPortfolioComplex { - - private List customerAddressDetailsList; - - public List getCustomerAddressDetailsList() { - return customerAddressDetailsList; - } - - public void setCustomerAddressDetailsList(List customerAddressDetailsList) { - this.customerAddressDetailsList = customerAddressDetailsList; - } - -} diff --git a/gson-jackson-performance/src/main/java/com/baeldung/pojo/simple/Customer.java b/gson-jackson-performance/src/main/java/com/baeldung/pojo/simple/Customer.java deleted file mode 100644 index 3d5668f85a..0000000000 --- a/gson-jackson-performance/src/main/java/com/baeldung/pojo/simple/Customer.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.baeldung.pojo.simple; - - -public class Customer { - - private String firstName; - - private String lastName; - - private int age; - - public String getFirstName() { - return firstName; - } - - public void setFirstName(String firstName) { - this.firstName = firstName; - } - - public String getLastName() { - return lastName; - } - - public void setLastName(String lastName) { - this.lastName = lastName; - } - - public int getAge() { - return age; - } - - public void setAge(int age) { - this.age = age; - } - -} diff --git a/gson-jackson-performance/src/main/java/com/baeldung/pojo/simple/CustomerPortfolioSimple.java b/gson-jackson-performance/src/main/java/com/baeldung/pojo/simple/CustomerPortfolioSimple.java deleted file mode 100644 index 7cb684813c..0000000000 --- a/gson-jackson-performance/src/main/java/com/baeldung/pojo/simple/CustomerPortfolioSimple.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.baeldung.pojo.simple; - -import java.util.List; - -public class CustomerPortfolioSimple { - - private List customerLists; - - public List getCustomerLists() { - return customerLists; - } - - public void setCustomerLists(List customerLists) { - this.customerLists = customerLists; - } -} diff --git a/gson-jackson-performance/src/main/resources/log4j.properties b/gson-jackson-performance/src/main/resources/log4j.properties deleted file mode 100644 index 371cbc9048..0000000000 --- a/gson-jackson-performance/src/main/resources/log4j.properties +++ /dev/null @@ -1,16 +0,0 @@ -# Root logger option -log4j.rootLogger=DEBUG, file - -# Redirect log messages to console -# log4j.appender.stdout=org.apache.log4j.ConsoleAppender -# log4j.appender.stdout.Target=System.out -# log4j.appender.stdout.layout=org.apache.log4j.PatternLayout -# log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n - -# Redirect log messages to a log file, support file rolling. -log4j.appender.file=org.apache.log4j.RollingFileAppender -log4j.appender.file.File=log4j-application.log -log4j.appender.file.MaxFileSize=5MB -log4j.appender.file.MaxBackupIndex=10 -log4j.appender.file.layout=org.apache.log4j.PatternLayout -log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n \ No newline at end of file diff --git a/gson/pom.xml b/gson/pom.xml index 4f331f6fd9..d864c289c2 100644 --- a/gson/pom.xml +++ b/gson/pom.xml @@ -19,7 +19,7 @@ com.google.guava guava - 18.0 + ${guava.version} commons-io diff --git a/guava18/pom.xml b/guava18/pom.xml index 6002b37d74..e26eb7313e 100644 --- a/guava18/pom.xml +++ b/guava18/pom.xml @@ -1,7 +1,6 @@ - + 4.0.0 com.baeldung @@ -14,12 +13,15 @@ guava 18.0 + junit junit - 4.12 + 4.13 + test + diff --git a/guava19/pom.xml b/guava19/pom.xml index 13f3b471f1..61fbf38575 100644 --- a/guava19/pom.xml +++ b/guava19/pom.xml @@ -1,5 +1,6 @@ - + 4.0.0 com.baeldung @@ -10,20 +11,23 @@ com.google.guava guava - 19.0 + ${guava.version} + junit junit 4.12 + test org.hamcrest hamcrest-all 1.3 + test - + @@ -42,4 +46,8 @@ + + 19.0 + + \ No newline at end of file diff --git a/handling-spring-static-resources/pom.xml b/handling-spring-static-resources/pom.xml index aca069e300..6dd0c95026 100644 --- a/handling-spring-static-resources/pom.xml +++ b/handling-spring-static-resources/pom.xml @@ -115,6 +115,7 @@ jackson-databind ${jackson.version} + org.hibernate hibernate-validator @@ -221,8 +222,7 @@ 1.9.2.RELEASE - - 2.7.2 + 2.7.8 1.7.13 diff --git a/jackson/pom.xml b/jackson/pom.xml index 17b0ac507e..e795ad11a2 100644 --- a/jackson/pom.xml +++ b/jackson/pom.xml @@ -174,7 +174,7 @@ 5.1.38 - 2.7.2 + 2.7.8 1.7.13 diff --git a/java-cassandra/pom.xml b/java-cassandra/pom.xml index 265a230eb4..a91c3b9b62 100644 --- a/java-cassandra/pom.xml +++ b/java-cassandra/pom.xml @@ -1,56 +1,36 @@ - + 4.0.0 com.baeldung cassandra-java-client 1.0.0-SNAPSHOT - - cassandra-java-client - - - UTF-8 - - - 1.7.21 - 1.1.7 - - - 1.3 - 4.12 - 1.10.19 - 6.8 - 3.5.1 - - - 3.5.1 - + + cassandra-java-client + + - 3.1.0 - - - - - + com.datastax.cassandra cassandra-driver-core ${cassandra-driver-core.version} true - + org.cassandraunit cassandra-unit 3.0.0.1 - + com.google.guava guava - 19.0 + ${guava.version} - - + + org.slf4j @@ -74,16 +54,16 @@ log4j-over-slf4j ${org.slf4j.version} - + - junit - junit - ${junit.version} - test + junit + junit + ${junit.version} + test - - - + + + java-cassandra @@ -97,6 +77,29 @@ - + + + UTF-8 + + 19.0 + + + 1.7.21 + 1.1.7 + + + 1.3 + 4.12 + 1.10.19 + 6.8 + 3.5.1 + + + 3.5.1 + + + 3.1.0 + + diff --git a/rest-assured/pom.xml b/rest-assured/pom.xml index 47241b18bd..e2a2af9cd9 100644 --- a/rest-assured/pom.xml +++ b/rest-assured/pom.xml @@ -1,257 +1,226 @@ - 4.0.0 - com.baeldung - rest-assured - 1.0 - rest-assured - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.3 - - 8 - 8 - - - - - - - - javax.servlet - javax.servlet-api - 3.1-b06 - + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + 4.0.0 + com.baeldung + rest-assured + 1.0 + rest-assured - - - javax.servlet - servlet-api - 2.5 - + + + javax.servlet + javax.servlet-api + 3.1-b06 + + + javax.servlet + servlet-api + 2.5 + + + org.eclipse.jetty + jetty-security + 9.2.0.M1 + + + org.eclipse.jetty + jetty-servlet + 9.2.0.M1 + + + org.eclipse.jetty + jetty-servlets + 9.2.0.M1 + + + org.eclipse.jetty + jetty-io + 9.2.0.M1 + + + org.eclipse.jetty + jetty-http + 9.2.0.M1 + + + org.eclipse.jetty + jetty-server + 9.2.0.M1 + + + org.eclipse.jetty + jetty-util + 9.2.0.M1 + - - - org.eclipse.jetty - jetty-security - 9.2.0.M1 - + + org.slf4j + slf4j-api + 1.7.21 + - - - org.eclipse.jetty - jetty-servlet - 9.2.0.M1 - + + log4j + log4j + 1.2.17 + + + org.slf4j + slf4j-log4j12 + 1.7.21 + - - - org.eclipse.jetty - jetty-servlets - 9.2.0.M1 - + + commons-logging + commons-logging + 1.2 + - - - org.eclipse.jetty - jetty-io - 9.2.0.M1 - + + org.apache.httpcomponents + httpcore + 4.4.5 + - - - org.eclipse.jetty - jetty-http - 9.2.0.M1 - + + org.apache.commons + commons-lang3 + 3.4 + + + com.github.fge + uri-template + 0.9 + + + com.googlecode.libphonenumber + libphonenumber + 7.4.5 + - - - org.eclipse.jetty - jetty-server - 9.2.0.M1 - + + javax.mail + mail + 1.4.7 + - - - org.eclipse.jetty - jetty-util - 9.2.0.M1 - + + joda-time + joda-time + 2.9.4 + + + com.fasterxml.jackson.core + jackson-annotations + ${jackson.version} + + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + - - - org.slf4j - slf4j-api - 1.7.21 - + + com.github.fge + msg-simple + 1.1 + - - - log4j - log4j - 1.2.17 - - - - org.slf4j - slf4j-log4j12 - 1.7.21 - + + com.github.fge + jackson-coreutils + 1.8 + - - - - commons-logging - commons-logging - 1.2 - + + com.google.guava + guava + ${guava.version} + + + com.github.fge + btf + 1.2 + - - org.apache.httpcomponents - httpcore - 4.4.5 - + + org.apache.httpcomponents + httpclient + 4.5.2 + - - - org.apache.commons - commons-lang3 - 3.4 - + + org.codehaus.groovy + groovy-all + 2.4.7 + - - - - com.github.fge - uri-template - 0.9 - + + com.github.tomakehurst + wiremock + 2.1.7 + + + io.rest-assured + rest-assured + 3.0.0 + test + + + io.rest-assured + json-schema-validator + 3.0.0 + + + com.github.fge + json-schema-validator + 2.2.6 + + + com.github.fge + json-schema-core + 1.2.5 + + + junit + junit + 4.3 + test + - - - com.googlecode.libphonenumber - libphonenumber - 7.4.5 - + + org.hamcrest + hamcrest-all + 1.3 + + + commons-collections + commons-collections + 3.2.2 + - - javax.mail - mail - 1.4.7 - + - - joda-time - joda-time - 2.9.4 - + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.3 + + 8 + 8 + + + + - - com.fasterxml.jackson.core - jackson-annotations - 2.8.0 - + + 2.8.3 + 19.0 + - - com.fasterxml.jackson.core - jackson-databind - 2.8.0 - - - - com.fasterxml.jackson.core - jackson-core - 2.8.0 - - - - com.github.fge - msg-simple - 1.1 - - - - com.github.fge - jackson-coreutils - 1.8 - - - - - - com.google.guava - guava - 18.0 - - - com.github.fge - btf - 1.2 - - - - org.apache.httpcomponents - httpclient - 4.5.2 - - - - org.codehaus.groovy - groovy-all - 2.4.7 - - - - com.github.tomakehurst - wiremock - 2.1.7 - - - io.rest-assured - rest-assured - 3.0.0 - test - - - io.rest-assured - json-schema-validator - 3.0.0 - - - com.github.fge - json-schema-validator - 2.2.6 - - - com.github.fge - json-schema-core - 1.2.5 - - - junit - junit - 4.3 - test - - - - org.hamcrest - hamcrest-all - 1.3 - - - - commons-collections - commons-collections - 3.2.2 - - - diff --git a/rest-testing/pom.xml b/rest-testing/pom.xml index 652f2ab601..819e8de8a5 100644 --- a/rest-testing/pom.xml +++ b/rest-testing/pom.xml @@ -156,7 +156,7 @@ - 2.7.2 + 2.7.8 1.7.13 diff --git a/spring-mvc-java/pom.xml b/spring-mvc-java/pom.xml index 7361d16b33..54d6eee01a 100644 --- a/spring-mvc-java/pom.xml +++ b/spring-mvc-java/pom.xml @@ -6,6 +6,7 @@ 0.1-SNAPSHOT spring-mvc-java war + @@ -34,16 +35,12 @@ spring-messaging ${org.springframework.version} + - - com.fasterxml.jackson.core - jackson-core - 2.7.3 - com.fasterxml.jackson.core jackson-databind - 2.7.3 + ${jackson.version} @@ -59,6 +56,7 @@ 1.2 runtime + org.springframework @@ -95,18 +93,6 @@ ${thymeleaf.version} - - - com.fasterxml.jackson.core - jackson-core - 2.1.2 - - - com.fasterxml.jackson.core - jackson-databind - 2.1.2 - - org.slf4j @@ -244,18 +230,23 @@ 4.2.5.RELEASE 4.0.4.RELEASE 2.1.4.RELEASE + 2.7.8 + 4.3.11.Final 5.1.38 + 1.7.21 1.1.5 5.2.2.Final + 19.0 3.4 + 1.3 4.12 diff --git a/spring-mvc-xml/pom.xml b/spring-mvc-xml/pom.xml index 9c65ccdadd..849699cfae 100644 --- a/spring-mvc-xml/pom.xml +++ b/spring-mvc-xml/pom.xml @@ -1,4 +1,5 @@ - + 4.0.0 com.baeldung 0.1-SNAPSHOT @@ -99,16 +100,11 @@ - - com.fasterxml.jackson.core - jackson-core - 2.7.2 - - - com.fasterxml.jackson.core - jackson-databind - 2.7.2 - + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + @@ -165,6 +161,7 @@ 4.2.5.RELEASE + 2.7.8 1.7.13 diff --git a/spring-rest-angular/pom.xml b/spring-rest-angular/pom.xml index 331c9a644c..981ee9dabc 100644 --- a/spring-rest-angular/pom.xml +++ b/spring-rest-angular/pom.xml @@ -1,95 +1,102 @@ - - 4.0.0 - spring-rest-angular - spring-rest-angular - com.baeldung - 1.0 - war - - org.springframework.boot - spring-boot-starter-parent - 1.3.3.RELEASE - - - - org.springframework.boot - spring-boot-starter-tomcat - provided - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.data - spring-data-commons - - - org.springframework.boot - spring-boot-starter-data-jpa - - - org.hsqldb - hsqldb - runtime - - - org.springframework - spring-test - test - - - org.apache.commons - commons-lang3 - 3.3 - - - com.google.guava - guava - 19.0 - - - junit - junit - test - - - io.rest-assured - rest-assured - 3.0.0 - test - - - io.rest-assured - spring-mock-mvc - 3.0.0 - test - - - - angular-spring-rest-sample - + + 4.0.0 + spring-rest-angular + spring-rest-angular + com.baeldung + 1.0 + war - - org.apache.maven.plugins - maven-compiler-plugin - - 1.8 - 1.8 - - + + org.springframework.boot + spring-boot-starter-parent + 1.3.3.RELEASE + - - org.apache.maven.plugins - maven-war-plugin - - false - - + + + org.springframework.boot + spring-boot-starter-tomcat + provided + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.data + spring-data-commons + + + org.springframework.boot + spring-boot-starter-data-jpa + + + org.hsqldb + hsqldb + runtime + + + org.springframework + spring-test + test + + + org.apache.commons + commons-lang3 + 3.3 + + + com.google.guava + guava + ${guava.version} + + + junit + junit + test + + + io.rest-assured + rest-assured + 3.0.0 + test + + + io.rest-assured + spring-mock-mvc + 3.0.0 + test + + + + + angular-spring-rest-sample + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + + + org.apache.maven.plugins + maven-war-plugin + + false + + + + + + + + 19.0 + - - diff --git a/spring-security-rest-digest-auth/pom.xml b/spring-security-rest-digest-auth/pom.xml index 1eddbc17f8..1880e12a74 100644 --- a/spring-security-rest-digest-auth/pom.xml +++ b/spring-security-rest-digest-auth/pom.xml @@ -351,7 +351,7 @@ 1.1.3 - 2.7.2 + 2.7.8 5.2.2.Final diff --git a/spring-security-rest-full/pom.xml b/spring-security-rest-full/pom.xml index 77b11f1cb1..dff9f7ed4f 100644 --- a/spring-security-rest-full/pom.xml +++ b/spring-security-rest-full/pom.xml @@ -439,7 +439,7 @@ 3.6.2 - 2.7.2 + 2.7.8 1.4.01 diff --git a/spring-security-rest/pom.xml b/spring-security-rest/pom.xml index 255cf25308..60f3ed41d1 100644 --- a/spring-security-rest/pom.xml +++ b/spring-security-rest/pom.xml @@ -109,7 +109,6 @@ - com.fasterxml.jackson.core jackson-databind @@ -117,7 +116,6 @@ - com.google.guava guava @@ -128,8 +126,8 @@ commons-lang3 ${commons-lang3.version} + - org.slf4j slf4j-api @@ -364,7 +362,7 @@ 3.0.1 1.1.0.Final 1.2 - 2.2.2 + 2.7.8 19.0 From eb7650eeadfa45961d9699f8620d78ab9c3e6ce0 Mon Sep 17 00:00:00 2001 From: eugenp Date: Wed, 12 Oct 2016 08:00:02 +0300 Subject: [PATCH 260/265] cleanup and testing work --- guava18/pom.xml | 2 +- pom.xml | 1 - spring-mvc-java/pom.xml | 22 +++-- .../main/java/com/baeldung/model/Message.java | 16 ++-- .../com/baeldung/model/OutputMessage.java | 34 +++---- .../spring/web/config/WebSocketConfig.java | 18 ++-- .../web/controller/CompanyController.java | 88 +++++++++---------- .../web/controller/EmployeeController.java | 6 +- .../web/controller/MessageController.java | 18 ++-- .../advice/JsonpControllerAdvice.java | 6 +- ...st.java => AopLoggingIntegrationTest.java} | 2 +- ...ava => AopPerformanceIntegrationTest.java} | 2 +- ...java => AopPublishingIntegrationTest.java} | 2 +- ...pXmlConfigPerformanceIntegrationTest.java} | 2 +- .../htmlunit/HtmlUnitAndJUnitTest.java | 22 ----- .../HtmlUnitAndSpringIntegrationTest.java | 70 +++++++++++++++ .../htmlunit/HtmlUnitAndSpringTest.java | 79 ----------------- .../com/baeldung/htmlunit/HtmlUnitTest.java | 21 +++++ .../htmlunit/HtmlUnitWebScraping.java | 36 ++++---- .../com/baeldung/htmlunit/TestConfig.java | 42 ++++----- ...t.java => EmployeeMvcIntegrationTest.java} | 2 +- ...java => EmployeeNoMvcIntegrationTest.java} | 7 +- .../GreetControllerIntegrationTest.java | 8 +- ...Test.java => GreetControllerUnitTest.java} | 24 ++--- 24 files changed, 259 insertions(+), 271 deletions(-) rename spring-mvc-java/src/test/java/com/baeldung/aop/{AopLoggingTest.java => AopLoggingIntegrationTest.java} (98%) rename spring-mvc-java/src/test/java/com/baeldung/aop/{AopPerformanceTest.java => AopPerformanceIntegrationTest.java} (97%) rename spring-mvc-java/src/test/java/com/baeldung/aop/{AopPublishingTest.java => AopPublishingIntegrationTest.java} (97%) rename spring-mvc-java/src/test/java/com/baeldung/aop/{AopXmlConfigPerformanceTest.java => AopXmlConfigPerformanceIntegrationTest.java} (97%) delete mode 100644 spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitAndJUnitTest.java create mode 100644 spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitAndSpringIntegrationTest.java delete mode 100644 spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitAndSpringTest.java create mode 100644 spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitTest.java rename spring-mvc-java/src/test/java/com/baeldung/web/controller/{EmployeeTest.java => EmployeeMvcIntegrationTest.java} (97%) rename spring-mvc-java/src/test/java/com/baeldung/web/controller/{EmployeeTestWithoutMockMvc.java => EmployeeNoMvcIntegrationTest.java} (97%) rename spring-mvc-java/src/test/java/com/baeldung/web/controller/{GreetControllerTest.java => GreetControllerUnitTest.java} (77%) diff --git a/guava18/pom.xml b/guava18/pom.xml index e26eb7313e..413e9c35b8 100644 --- a/guava18/pom.xml +++ b/guava18/pom.xml @@ -17,7 +17,7 @@ junit junit - 4.13 + 4.12 test diff --git a/pom.xml b/pom.xml index 5526c1e2a3..709c3e4e00 100644 --- a/pom.xml +++ b/pom.xml @@ -34,7 +34,6 @@ gson - gson-jackson-performance guava guava18 guava19 diff --git a/spring-mvc-java/pom.xml b/spring-mvc-java/pom.xml index 54d6eee01a..8248343105 100644 --- a/spring-mvc-java/pom.xml +++ b/spring-mvc-java/pom.xml @@ -6,7 +6,7 @@ 0.1-SNAPSHOT spring-mvc-java war - + @@ -35,7 +35,7 @@ spring-messaging ${org.springframework.version} - + com.fasterxml.jackson.core @@ -56,7 +56,7 @@ 1.2 runtime - + org.springframework @@ -80,6 +80,11 @@ commons-fileupload 1.3.1 + + net.sourceforge.htmlunit + htmlunit + ${net.sourceforge.htmlunit} + @@ -196,7 +201,7 @@ ${maven-surefire-plugin.version} - + **/*IntegrationTest.java @@ -231,22 +236,22 @@ 4.0.4.RELEASE 2.1.4.RELEASE 2.7.8 - + 4.3.11.Final 5.1.38 - + 1.7.21 1.1.5 5.2.2.Final - + 19.0 3.4 - + 1.3 4.12 @@ -255,6 +260,7 @@ 4.5 2.9.0 2.23 + 3.5.1 2.6 diff --git a/spring-mvc-java/src/main/java/com/baeldung/model/Message.java b/spring-mvc-java/src/main/java/com/baeldung/model/Message.java index c1f7f52215..76d53e132a 100644 --- a/spring-mvc-java/src/main/java/com/baeldung/model/Message.java +++ b/spring-mvc-java/src/main/java/com/baeldung/model/Message.java @@ -2,14 +2,14 @@ package com.baeldung.model; public class Message { - private String from; - private String text; + private String from; + private String text; - public String getText() { - return text; - } + public String getText() { + return text; + } - public String getFrom() { - return from; - } + public String getFrom() { + return from; + } } diff --git a/spring-mvc-java/src/main/java/com/baeldung/model/OutputMessage.java b/spring-mvc-java/src/main/java/com/baeldung/model/OutputMessage.java index fc201ed016..9aad564b1e 100644 --- a/spring-mvc-java/src/main/java/com/baeldung/model/OutputMessage.java +++ b/spring-mvc-java/src/main/java/com/baeldung/model/OutputMessage.java @@ -2,26 +2,26 @@ package com.baeldung.model; public class OutputMessage { - private String from; - private String text; - private String time; + private String from; + private String text; + private String time; - public OutputMessage(final String from, final String text, final String time) { + public OutputMessage(final String from, final String text, final String time) { - this.from = from; - this.text = text; - this.time = time; - } + this.from = from; + this.text = text; + this.time = time; + } - public String getText() { - return text; - } + public String getText() { + return text; + } - public String getTime() { - return time; - } + public String getTime() { + return time; + } - public String getFrom() { - return from; - } + public String getFrom() { + return from; + } } diff --git a/spring-mvc-java/src/main/java/com/baeldung/spring/web/config/WebSocketConfig.java b/spring-mvc-java/src/main/java/com/baeldung/spring/web/config/WebSocketConfig.java index 6330041c60..5f3eb1312d 100644 --- a/spring-mvc-java/src/main/java/com/baeldung/spring/web/config/WebSocketConfig.java +++ b/spring-mvc-java/src/main/java/com/baeldung/spring/web/config/WebSocketConfig.java @@ -10,15 +10,15 @@ import org.springframework.web.socket.config.annotation.StompEndpointRegistry; @EnableWebSocketMessageBroker public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer { - @Override - public void configureMessageBroker(final MessageBrokerRegistry config) { - config.enableSimpleBroker("/topic"); - config.setApplicationDestinationPrefixes("/app"); - } + @Override + public void configureMessageBroker(final MessageBrokerRegistry config) { + config.enableSimpleBroker("/topic"); + config.setApplicationDestinationPrefixes("/app"); + } - @Override - public void registerStompEndpoints(final StompEndpointRegistry registry) { - registry.addEndpoint("/chat").withSockJS(); - } + @Override + public void registerStompEndpoints(final StompEndpointRegistry registry) { + registry.addEndpoint("/chat").withSockJS(); + } } \ No newline at end of file diff --git a/spring-mvc-java/src/main/java/com/baeldung/web/controller/CompanyController.java b/spring-mvc-java/src/main/java/com/baeldung/web/controller/CompanyController.java index 8dcfe68a84..e92abfdc47 100644 --- a/spring-mvc-java/src/main/java/com/baeldung/web/controller/CompanyController.java +++ b/spring-mvc-java/src/main/java/com/baeldung/web/controller/CompanyController.java @@ -22,59 +22,55 @@ import com.baeldung.model.Company; @Controller public class CompanyController { - Map companyMap = new HashMap<>(); + Map companyMap = new HashMap<>(); - @RequestMapping(value = "/company", method = RequestMethod.GET) - public ModelAndView showForm() { - return new ModelAndView("companyHome", "company", new Company()); - } + @RequestMapping(value = "/company", method = RequestMethod.GET) + public ModelAndView showForm() { + return new ModelAndView("companyHome", "company", new Company()); + } - @RequestMapping(value = "/company/{Id}", produces = { "application/json", - "application/xml" }, method = RequestMethod.GET) - public @ResponseBody Company getCompanyById(@PathVariable final long Id) { - return companyMap.get(Id); - } + @RequestMapping(value = "/company/{Id}", produces = { "application/json", "application/xml" }, method = RequestMethod.GET) + public @ResponseBody Company getCompanyById(@PathVariable final long Id) { + return companyMap.get(Id); + } - @RequestMapping(value = "/addCompany", method = RequestMethod.POST) - public String submit(@ModelAttribute("company") final Company company, - final BindingResult result, final ModelMap model) { - if (result.hasErrors()) { - return "error"; - } - model.addAttribute("name", company.getName()); - model.addAttribute("id", company.getId()); + @RequestMapping(value = "/addCompany", method = RequestMethod.POST) + public String submit(@ModelAttribute("company") final Company company, final BindingResult result, final ModelMap model) { + if (result.hasErrors()) { + return "error"; + } + model.addAttribute("name", company.getName()); + model.addAttribute("id", company.getId()); - companyMap.put(company.getId(), company); + companyMap.put(company.getId(), company); - return "companyView"; - } + return "companyView"; + } - @RequestMapping(value = "/companyEmployee/{company}/employeeData/{employee}", method = RequestMethod.GET) - @ResponseBody - public ResponseEntity> getEmployeeDataFromCompany( - @MatrixVariable(pathVar = "employee") final Map matrixVars) { - return new ResponseEntity<>(matrixVars, HttpStatus.OK); - } + @RequestMapping(value = "/companyEmployee/{company}/employeeData/{employee}", method = RequestMethod.GET) + @ResponseBody + public ResponseEntity> getEmployeeDataFromCompany(@MatrixVariable(pathVar = "employee") final Map matrixVars) { + return new ResponseEntity<>(matrixVars, HttpStatus.OK); + } - @RequestMapping(value = "/companyData/{company}/employeeData/{employee}", method = RequestMethod.GET) - @ResponseBody - public ResponseEntity> getCompanyName( - @MatrixVariable(value = "name", pathVar = "company") final String name) { - final Map result = new HashMap(); - result.put("name", name); - return new ResponseEntity<>(result, HttpStatus.OK); - } + @RequestMapping(value = "/companyData/{company}/employeeData/{employee}", method = RequestMethod.GET) + @ResponseBody + public ResponseEntity> getCompanyName(@MatrixVariable(value = "name", pathVar = "company") final String name) { + final Map result = new HashMap(); + result.put("name", name); + return new ResponseEntity<>(result, HttpStatus.OK); + } - @RequestMapping(value = "/companyResponseBody", produces = MediaType.APPLICATION_JSON_VALUE) - @ResponseBody - public Company getCompanyResponseBody() { - final Company company = new Company(2, "ABC"); - return company; - } + @RequestMapping(value = "/companyResponseBody", produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + public Company getCompanyResponseBody() { + final Company company = new Company(2, "ABC"); + return company; + } - @RequestMapping(value = "/companyResponseEntity", produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity getCompanyResponseEntity() { - final Company company = new Company(3, "123"); - return new ResponseEntity(company, HttpStatus.OK); - } + @RequestMapping(value = "/companyResponseEntity", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity getCompanyResponseEntity() { + final Company company = new Company(3, "123"); + return new ResponseEntity(company, HttpStatus.OK); + } } diff --git a/spring-mvc-java/src/main/java/com/baeldung/web/controller/EmployeeController.java b/spring-mvc-java/src/main/java/com/baeldung/web/controller/EmployeeController.java index fd5fa6bc27..ef76059567 100644 --- a/spring-mvc-java/src/main/java/com/baeldung/web/controller/EmployeeController.java +++ b/spring-mvc-java/src/main/java/com/baeldung/web/controller/EmployeeController.java @@ -31,10 +31,8 @@ public class EmployeeController { return new ModelAndView("employeeHome", "employee", new Employee()); } - @RequestMapping(value = "/employee/{Id}", produces = {"application/json", "application/xml"}, method = RequestMethod.GET) - public - @ResponseBody - Employee getEmployeeById(@PathVariable final long Id) { + @RequestMapping(value = "/employee/{Id}", produces = { "application/json", "application/xml" }, method = RequestMethod.GET) + public @ResponseBody Employee getEmployeeById(@PathVariable final long Id) { return employeeMap.get(Id); } diff --git a/spring-mvc-java/src/main/java/com/baeldung/web/controller/MessageController.java b/spring-mvc-java/src/main/java/com/baeldung/web/controller/MessageController.java index cfc73aeabe..111bf023f7 100644 --- a/spring-mvc-java/src/main/java/com/baeldung/web/controller/MessageController.java +++ b/spring-mvc-java/src/main/java/com/baeldung/web/controller/MessageController.java @@ -10,15 +10,15 @@ import org.springframework.web.bind.annotation.RequestParam; @RequestMapping("/message") public class MessageController { - @RequestMapping(value = "/showForm", method = RequestMethod.GET) - public String showForm() { - return "message"; - } + @RequestMapping(value = "/showForm", method = RequestMethod.GET) + public String showForm() { + return "message"; + } - @RequestMapping(value = "/processForm", method = RequestMethod.POST) - public String processForm(@RequestParam("message") final String message, final Model model) { - model.addAttribute("message", message); - return "message"; - } + @RequestMapping(value = "/processForm", method = RequestMethod.POST) + public String processForm(@RequestParam("message") final String message, final Model model) { + model.addAttribute("message", message); + return "message"; + } } diff --git a/spring-mvc-java/src/main/java/com/baeldung/web/controller/advice/JsonpControllerAdvice.java b/spring-mvc-java/src/main/java/com/baeldung/web/controller/advice/JsonpControllerAdvice.java index 8557b15492..7b2c6870df 100644 --- a/spring-mvc-java/src/main/java/com/baeldung/web/controller/advice/JsonpControllerAdvice.java +++ b/spring-mvc-java/src/main/java/com/baeldung/web/controller/advice/JsonpControllerAdvice.java @@ -6,8 +6,8 @@ import org.springframework.web.servlet.mvc.method.annotation.AbstractJsonpRespon @ControllerAdvice public class JsonpControllerAdvice extends AbstractJsonpResponseBodyAdvice { - public JsonpControllerAdvice() { - super("callback"); - } + public JsonpControllerAdvice() { + super("callback"); + } } diff --git a/spring-mvc-java/src/test/java/com/baeldung/aop/AopLoggingTest.java b/spring-mvc-java/src/test/java/com/baeldung/aop/AopLoggingIntegrationTest.java similarity index 98% rename from spring-mvc-java/src/test/java/com/baeldung/aop/AopLoggingTest.java rename to spring-mvc-java/src/test/java/com/baeldung/aop/AopLoggingIntegrationTest.java index 19bf4d0fac..0837100bfa 100644 --- a/spring-mvc-java/src/test/java/com/baeldung/aop/AopLoggingTest.java +++ b/spring-mvc-java/src/test/java/com/baeldung/aop/AopLoggingIntegrationTest.java @@ -25,7 +25,7 @@ import static org.junit.Assert.assertTrue; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { TestConfig.class }, loader = AnnotationConfigContextLoader.class) -public class AopLoggingTest { +public class AopLoggingIntegrationTest { @Before public void setUp() { diff --git a/spring-mvc-java/src/test/java/com/baeldung/aop/AopPerformanceTest.java b/spring-mvc-java/src/test/java/com/baeldung/aop/AopPerformanceIntegrationTest.java similarity index 97% rename from spring-mvc-java/src/test/java/com/baeldung/aop/AopPerformanceTest.java rename to spring-mvc-java/src/test/java/com/baeldung/aop/AopPerformanceIntegrationTest.java index 4ad5a3e1a6..c9ab2fb4bb 100644 --- a/spring-mvc-java/src/test/java/com/baeldung/aop/AopPerformanceTest.java +++ b/spring-mvc-java/src/test/java/com/baeldung/aop/AopPerformanceIntegrationTest.java @@ -24,7 +24,7 @@ import static org.junit.Assert.assertTrue; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { TestConfig.class }, loader = AnnotationConfigContextLoader.class) -public class AopPerformanceTest { +public class AopPerformanceIntegrationTest { @Before public void setUp() { diff --git a/spring-mvc-java/src/test/java/com/baeldung/aop/AopPublishingTest.java b/spring-mvc-java/src/test/java/com/baeldung/aop/AopPublishingIntegrationTest.java similarity index 97% rename from spring-mvc-java/src/test/java/com/baeldung/aop/AopPublishingTest.java rename to spring-mvc-java/src/test/java/com/baeldung/aop/AopPublishingIntegrationTest.java index c075db9fc6..cf9c83a93d 100644 --- a/spring-mvc-java/src/test/java/com/baeldung/aop/AopPublishingTest.java +++ b/spring-mvc-java/src/test/java/com/baeldung/aop/AopPublishingIntegrationTest.java @@ -23,7 +23,7 @@ import static org.junit.Assert.assertTrue; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { TestConfig.class }, loader = AnnotationConfigContextLoader.class) -public class AopPublishingTest { +public class AopPublishingIntegrationTest { @Before public void setUp() { diff --git a/spring-mvc-java/src/test/java/com/baeldung/aop/AopXmlConfigPerformanceTest.java b/spring-mvc-java/src/test/java/com/baeldung/aop/AopXmlConfigPerformanceIntegrationTest.java similarity index 97% rename from spring-mvc-java/src/test/java/com/baeldung/aop/AopXmlConfigPerformanceTest.java rename to spring-mvc-java/src/test/java/com/baeldung/aop/AopXmlConfigPerformanceIntegrationTest.java index 4d2df50d18..3b380315e8 100644 --- a/spring-mvc-java/src/test/java/com/baeldung/aop/AopXmlConfigPerformanceTest.java +++ b/spring-mvc-java/src/test/java/com/baeldung/aop/AopXmlConfigPerformanceIntegrationTest.java @@ -22,7 +22,7 @@ import static org.junit.Assert.assertTrue; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("/com/baeldung/aop/beans.xml") -public class AopXmlConfigPerformanceTest { +public class AopXmlConfigPerformanceIntegrationTest { @Before public void setUp() { diff --git a/spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitAndJUnitTest.java b/spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitAndJUnitTest.java deleted file mode 100644 index 58e5f9829b..0000000000 --- a/spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitAndJUnitTest.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.baeldung.htmlunit; - -import org.junit.Assert; -import org.junit.Test; - -import com.gargoylesoftware.htmlunit.WebClient; -import com.gargoylesoftware.htmlunit.html.HtmlPage; - -public class HtmlUnitAndJUnitTest { - - @Test - public void givenAClient_whenEnteringBaeldung_thenPageTitleIsCorrect() throws Exception { - try (final WebClient webClient = new WebClient()) { - - webClient.getOptions().setThrowExceptionOnScriptError(false); - - final HtmlPage page = webClient.getPage("http://www.baeldung.com/"); - Assert.assertEquals("Baeldung | Java, Spring and Web Development tutorials", page.getTitleText()); - } - } - -} diff --git a/spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitAndSpringIntegrationTest.java b/spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitAndSpringIntegrationTest.java new file mode 100644 index 0000000000..7a23908fe5 --- /dev/null +++ b/spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitAndSpringIntegrationTest.java @@ -0,0 +1,70 @@ +package com.baeldung.htmlunit; + +import java.io.IOException; +import java.net.MalformedURLException; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.web.WebAppConfiguration; +import org.springframework.test.web.servlet.htmlunit.MockMvcWebClientBuilder; +import org.springframework.web.context.WebApplicationContext; + +import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException; +import com.gargoylesoftware.htmlunit.WebClient; +import com.gargoylesoftware.htmlunit.html.HtmlForm; +import com.gargoylesoftware.htmlunit.html.HtmlPage; +import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput; +import com.gargoylesoftware.htmlunit.html.HtmlTextInput; + +@RunWith(SpringJUnit4ClassRunner.class) +@WebAppConfiguration +@ContextConfiguration(classes = { TestConfig.class }) +public class HtmlUnitAndSpringIntegrationTest { + + @Autowired + private WebApplicationContext wac; + + private WebClient webClient; + + @Before + public void setup() { + webClient = MockMvcWebClientBuilder.webAppContextSetup(wac).build(); + } + + // + + @Test + public void givenAMessage_whenSent_thenItShows() throws FailingHttpStatusCodeException, MalformedURLException, IOException { + final String text = "Hello world!"; + HtmlPage page = webClient.getPage("http://localhost/message/showForm"); + System.out.println(page.asXml()); + + final HtmlTextInput messageText = page.getHtmlElementById("message"); + messageText.setValueAttribute(text); + + final HtmlForm form = page.getForms().get(0); + final HtmlSubmitInput submit = form.getOneHtmlElementByAttribute("input", "type", "submit"); + final HtmlPage newPage = submit.click(); + + final String receivedText = newPage.getHtmlElementById("received").getTextContent(); + + Assert.assertEquals(receivedText, text); + System.out.println(newPage.asXml()); + } + + @Test + public void givenAClient_whenEnteringBaeldung_thenPageTitleIsCorrect() throws Exception { + try (final WebClient client = new WebClient()) { + webClient.getOptions().setThrowExceptionOnScriptError(false); + + final HtmlPage page = webClient.getPage("http://www.baeldung.com/"); + Assert.assertEquals("Baeldung | Java, Spring and Web Development tutorials", page.getTitleText()); + } + } + +} diff --git a/spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitAndSpringTest.java b/spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitAndSpringTest.java deleted file mode 100644 index dcc7555ae2..0000000000 --- a/spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitAndSpringTest.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.baeldung.htmlunit; - -import java.io.IOException; - -import org.junit.Assert; -import org.junit.Before; -import org.junit.Ignore; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.web.WebAppConfiguration; -import org.springframework.test.web.servlet.htmlunit.MockMvcWebClientBuilder; -import org.springframework.web.context.WebApplicationContext; - -import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException; -import com.gargoylesoftware.htmlunit.WebClient; -import com.gargoylesoftware.htmlunit.html.HtmlForm; -import com.gargoylesoftware.htmlunit.html.HtmlPage; -import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput; -import com.gargoylesoftware.htmlunit.html.HtmlTextInput; - -@RunWith(SpringJUnit4ClassRunner.class) -@WebAppConfiguration -@ContextConfiguration(classes = { TestConfig.class }) -public class HtmlUnitAndSpringTest { - - @Autowired - private WebApplicationContext wac; - - private WebClient webClient; - - @Before - public void setup() { - webClient = MockMvcWebClientBuilder.webAppContextSetup(wac).build(); - } - - @Test - @Ignore - public void givenAMessage_whenSent_thenItShows() { - final String text = "Hello world!"; - HtmlPage page; - - try { - - page = webClient.getPage("http://localhost/message/showForm"); - System.out.println(page.asXml()); - - final HtmlTextInput messageText = page.getHtmlElementById("message"); - messageText.setValueAttribute(text); - - final HtmlForm form = page.getForms().get(0); - final HtmlSubmitInput submit = form.getOneHtmlElementByAttribute("input", "type", "submit"); - final HtmlPage newPage = submit.click(); - - final String receivedText = newPage.getHtmlElementById("received").getTextContent(); - - Assert.assertEquals(receivedText, text); - System.out.println(newPage.asXml()); - - } catch (FailingHttpStatusCodeException | IOException e) { - e.printStackTrace(); - } - - } - - @Test - public void givenAClient_whenEnteringBaeldung_thenPageTitleIsCorrect() throws Exception { - try (final WebClient client = new WebClient()) { - - webClient.getOptions().setThrowExceptionOnScriptError(false); - - final HtmlPage page = webClient.getPage("http://www.baeldung.com/"); - Assert.assertEquals("Baeldung | Java, Spring and Web Development tutorials", page.getTitleText()); - } - } - -} diff --git a/spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitTest.java b/spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitTest.java new file mode 100644 index 0000000000..6a7e961eb1 --- /dev/null +++ b/spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitTest.java @@ -0,0 +1,21 @@ +package com.baeldung.htmlunit; + +import org.junit.Assert; +import org.junit.Test; + +import com.gargoylesoftware.htmlunit.WebClient; +import com.gargoylesoftware.htmlunit.html.HtmlPage; + +public class HtmlUnitTest { + + @Test + public void givenAClient_whenEnteringBaeldung_thenPageTitleIsCorrect() throws Exception { + try (final WebClient webClient = new WebClient()) { + webClient.getOptions().setThrowExceptionOnScriptError(false); + + final HtmlPage page = webClient.getPage("http://www.baeldung.com/"); + Assert.assertEquals("Baeldung | Java, Spring and Web Development tutorials", page.getTitleText()); + } + } + +} diff --git a/spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitWebScraping.java b/spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitWebScraping.java index 16d18717e6..9919d7571d 100644 --- a/spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitWebScraping.java +++ b/spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitWebScraping.java @@ -10,31 +10,31 @@ import com.gargoylesoftware.htmlunit.html.HtmlPage; public class HtmlUnitWebScraping { - public static void main(final String[] args) throws Exception { - try (final WebClient webClient = new WebClient()) { + public static void main(final String[] args) throws Exception { + try (final WebClient webClient = new WebClient()) { - webClient.getOptions().setCssEnabled(false); - webClient.getOptions().setJavaScriptEnabled(false); + webClient.getOptions().setCssEnabled(false); + webClient.getOptions().setJavaScriptEnabled(false); - final HtmlPage page = webClient.getPage("http://www.baeldung.com/full_archive"); - final HtmlAnchor latestPostLink = (HtmlAnchor) page.getByXPath("(//ul[@class='car-monthlisting']/li)[1]/a").get(0); + final HtmlPage page = webClient.getPage("http://www.baeldung.com/full_archive"); + final HtmlAnchor latestPostLink = (HtmlAnchor) page.getByXPath("(//ul[@class='car-monthlisting']/li)[1]/a").get(0); - System.out.println("Entering: " + latestPostLink.getHrefAttribute()); + System.out.println("Entering: " + latestPostLink.getHrefAttribute()); - final HtmlPage postPage = latestPostLink.click(); + final HtmlPage postPage = latestPostLink.click(); - final HtmlHeading1 heading1 = (HtmlHeading1) postPage.getByXPath("//h1").get(0); - System.out.println("Title: " + heading1.getTextContent()); + final HtmlHeading1 heading1 = (HtmlHeading1) postPage.getByXPath("//h1").get(0); + System.out.println("Title: " + heading1.getTextContent()); - final List headings2 = (List) postPage.getByXPath("//h2"); + final List headings2 = (List) postPage.getByXPath("//h2"); - final StringBuilder sb = new StringBuilder(heading1.getTextContent()); - for (final HtmlHeading2 h2 : headings2) { - sb.append("\n").append(h2.getTextContent()); - } + final StringBuilder sb = new StringBuilder(heading1.getTextContent()); + for (final HtmlHeading2 h2 : headings2) { + sb.append("\n").append(h2.getTextContent()); + } - System.out.println(sb.toString()); - } - } + System.out.println(sb.toString()); + } + } } diff --git a/spring-mvc-java/src/test/java/com/baeldung/htmlunit/TestConfig.java b/spring-mvc-java/src/test/java/com/baeldung/htmlunit/TestConfig.java index 1357310b1f..17a68d67a5 100644 --- a/spring-mvc-java/src/test/java/com/baeldung/htmlunit/TestConfig.java +++ b/spring-mvc-java/src/test/java/com/baeldung/htmlunit/TestConfig.java @@ -15,28 +15,28 @@ import org.thymeleaf.templateresolver.ServletContextTemplateResolver; @ComponentScan(basePackages = { "com.baeldung.web.controller" }) public class TestConfig extends WebMvcConfigurerAdapter { - @Bean - public ViewResolver thymeleafViewResolver() { - final ThymeleafViewResolver viewResolver = new ThymeleafViewResolver(); - viewResolver.setTemplateEngine(templateEngine()); - viewResolver.setOrder(1); - return viewResolver; - } + @Bean + public ViewResolver thymeleafViewResolver() { + final ThymeleafViewResolver viewResolver = new ThymeleafViewResolver(); + viewResolver.setTemplateEngine(templateEngine()); + viewResolver.setOrder(1); + return viewResolver; + } - @Bean - public ServletContextTemplateResolver templateResolver() { - final ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver(); - templateResolver.setPrefix("/WEB-INF/templates/"); - templateResolver.setSuffix(".html"); - templateResolver.setTemplateMode("HTML5"); - return templateResolver; - } + @Bean + public ServletContextTemplateResolver templateResolver() { + final ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver(); + templateResolver.setPrefix("/WEB-INF/templates/"); + templateResolver.setSuffix(".html"); + templateResolver.setTemplateMode("HTML5"); + return templateResolver; + } - @Bean - public SpringTemplateEngine templateEngine() { - final SpringTemplateEngine templateEngine = new SpringTemplateEngine(); - templateEngine.setTemplateResolver(templateResolver()); - return templateEngine; - } + @Bean + public SpringTemplateEngine templateEngine() { + final SpringTemplateEngine templateEngine = new SpringTemplateEngine(); + templateEngine.setTemplateResolver(templateResolver()); + return templateEngine; + } } diff --git a/spring-mvc-java/src/test/java/com/baeldung/web/controller/EmployeeTest.java b/spring-mvc-java/src/test/java/com/baeldung/web/controller/EmployeeMvcIntegrationTest.java similarity index 97% rename from spring-mvc-java/src/test/java/com/baeldung/web/controller/EmployeeTest.java rename to spring-mvc-java/src/test/java/com/baeldung/web/controller/EmployeeMvcIntegrationTest.java index c1e79a2a63..86420a5fbd 100644 --- a/spring-mvc-java/src/test/java/com/baeldung/web/controller/EmployeeTest.java +++ b/spring-mvc-java/src/test/java/com/baeldung/web/controller/EmployeeMvcIntegrationTest.java @@ -23,7 +23,7 @@ import com.baeldung.spring.web.config.WebConfig; @RunWith(SpringJUnit4ClassRunner.class) @WebAppConfiguration @ContextConfiguration(classes = WebConfig.class) -public class EmployeeTest { +public class EmployeeMvcIntegrationTest { @Autowired private WebApplicationContext webAppContext; diff --git a/spring-mvc-java/src/test/java/com/baeldung/web/controller/EmployeeTestWithoutMockMvc.java b/spring-mvc-java/src/test/java/com/baeldung/web/controller/EmployeeNoMvcIntegrationTest.java similarity index 97% rename from spring-mvc-java/src/test/java/com/baeldung/web/controller/EmployeeTestWithoutMockMvc.java rename to spring-mvc-java/src/test/java/com/baeldung/web/controller/EmployeeNoMvcIntegrationTest.java index 19806e0559..e84c20c973 100644 --- a/spring-mvc-java/src/test/java/com/baeldung/web/controller/EmployeeTestWithoutMockMvc.java +++ b/spring-mvc-java/src/test/java/com/baeldung/web/controller/EmployeeNoMvcIntegrationTest.java @@ -1,7 +1,7 @@ package com.baeldung.web.controller; -import org.junit.Before; import org.junit.Assert; +import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; @@ -15,7 +15,7 @@ import com.baeldung.spring.web.config.WebConfig; @RunWith(SpringJUnit4ClassRunner.class) @WebAppConfiguration @ContextConfiguration(classes = WebConfig.class) -public class EmployeeTestWithoutMockMvc { +public class EmployeeNoMvcIntegrationTest { @Autowired private EmployeeController employeeController; @@ -25,9 +25,10 @@ public class EmployeeTestWithoutMockMvc { employeeController.initEmployees(); } + // + @Test public void whenInitEmployees_thenVerifyValuesInitiation() { - Employee employee1 = employeeController.employeeMap.get(1L); Employee employee2 = employeeController.employeeMap.get(2L); Employee employee3 = employeeController.employeeMap.get(3L); diff --git a/spring-mvc-java/src/test/java/com/baeldung/web/controller/GreetControllerIntegrationTest.java b/spring-mvc-java/src/test/java/com/baeldung/web/controller/GreetControllerIntegrationTest.java index d1d1167369..db984eadfb 100644 --- a/spring-mvc-java/src/test/java/com/baeldung/web/controller/GreetControllerIntegrationTest.java +++ b/spring-mvc-java/src/test/java/com/baeldung/web/controller/GreetControllerIntegrationTest.java @@ -1,6 +1,5 @@ package com.baeldung.web.controller; - import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; import javax.servlet.ServletContext; @@ -25,7 +24,7 @@ import com.baeldung.spring.web.config.ApplicationConfig; @RunWith(SpringJUnit4ClassRunner.class) @WebAppConfiguration -@ContextConfiguration(classes = {ApplicationConfig.class}) +@ContextConfiguration(classes = { ApplicationConfig.class }) public class GreetControllerIntegrationTest { @Autowired @@ -35,7 +34,6 @@ public class GreetControllerIntegrationTest { private static final String CONTENT_TYPE = "application/json"; - @Before public void setup() throws Exception { this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build(); @@ -74,8 +72,8 @@ public class GreetControllerIntegrationTest { @Test public void givenGreetURIWithQueryParameter_whenMockMVC_thenVerifyResponse() throws Exception { - this.mockMvc.perform(MockMvcRequestBuilders.get("/greetWithQueryVariable").param("name", "John Doe")).andDo(print()).andExpect(MockMvcResultMatchers.status().isOk()) - .andExpect(MockMvcResultMatchers.content().contentType(CONTENT_TYPE)).andExpect(MockMvcResultMatchers.jsonPath("$.message").value("Hello World John Doe!!!")); + this.mockMvc.perform(MockMvcRequestBuilders.get("/greetWithQueryVariable").param("name", "John Doe")).andDo(print()).andExpect(MockMvcResultMatchers.status().isOk()).andExpect(MockMvcResultMatchers.content().contentType(CONTENT_TYPE)) + .andExpect(MockMvcResultMatchers.jsonPath("$.message").value("Hello World John Doe!!!")); } @Test diff --git a/spring-mvc-java/src/test/java/com/baeldung/web/controller/GreetControllerTest.java b/spring-mvc-java/src/test/java/com/baeldung/web/controller/GreetControllerUnitTest.java similarity index 77% rename from spring-mvc-java/src/test/java/com/baeldung/web/controller/GreetControllerTest.java rename to spring-mvc-java/src/test/java/com/baeldung/web/controller/GreetControllerUnitTest.java index 0fd71a46dd..eacd256438 100644 --- a/spring-mvc-java/src/test/java/com/baeldung/web/controller/GreetControllerTest.java +++ b/spring-mvc-java/src/test/java/com/baeldung/web/controller/GreetControllerUnitTest.java @@ -1,17 +1,19 @@ package com.baeldung.web.controller; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.view; + import org.junit.Before; import org.junit.Test; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; -import org.springframework.test.web.servlet.result.MockMvcResultMatchers; import org.springframework.test.web.servlet.setup.MockMvcBuilders; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -public class GreetControllerTest { +public class GreetControllerUnitTest { private MockMvc mockMvc; private static final String CONTENT_TYPE = "application/json"; @@ -43,19 +45,17 @@ public class GreetControllerTest { @Test public void givenGreetURIWithQueryParameter_whenMockMVC_thenVerifyResponse() throws Exception { - this.mockMvc.perform(get("/greetWithQueryVariable").param("name", "John Doe")).andDo(print()).andExpect(status().isOk()) - .andExpect(content().contentType(CONTENT_TYPE)).andExpect(jsonPath("$.message").value("Hello World John Doe!!!")); + this.mockMvc.perform(get("/greetWithQueryVariable").param("name", "John Doe")).andDo(print()).andExpect(status().isOk()).andExpect(content().contentType(CONTENT_TYPE)).andExpect(jsonPath("$.message").value("Hello World John Doe!!!")); } @Test public void givenGreetURIWithPost_whenMockMVC_thenVerifyResponse() throws Exception { - this.mockMvc.perform(MockMvcRequestBuilders.post("/greetWithPost")).andDo(print()).andExpect(status().isOk()).andExpect(content().contentType(CONTENT_TYPE)) - .andExpect(jsonPath("$.message").value("Hello World!!!")); + this.mockMvc.perform(MockMvcRequestBuilders.post("/greetWithPost")).andDo(print()).andExpect(status().isOk()).andExpect(content().contentType(CONTENT_TYPE)).andExpect(jsonPath("$.message").value("Hello World!!!")); } @Test public void givenGreetURIWithPostAndFormData_whenMockMVC_thenVerifyResponse() throws Exception { - this.mockMvc.perform(MockMvcRequestBuilders.post("/greetWithPostAndFormData").param("id", "1").param("name", "John Doe")).andDo(print()).andExpect(status().isOk()) - .andExpect(content().contentType(CONTENT_TYPE)).andExpect(jsonPath("$.message").value("Hello World John Doe!!!")).andExpect(jsonPath("$.id").value(1)); + this.mockMvc.perform(MockMvcRequestBuilders.post("/greetWithPostAndFormData").param("id", "1").param("name", "John Doe")).andDo(print()).andExpect(status().isOk()).andExpect(content().contentType(CONTENT_TYPE)) + .andExpect(jsonPath("$.message").value("Hello World John Doe!!!")).andExpect(jsonPath("$.id").value(1)); } } From 856be0a08a5ab123c82ead8a7a4db0dbd49bf0c7 Mon Sep 17 00:00:00 2001 From: eugenp Date: Wed, 12 Oct 2016 08:02:05 +0300 Subject: [PATCH 261/265] formatting work --- .../org/baeldung/akka/SpringExtension.java | 1 - .../org/baeldung/akka/SpringAkkaTest.java | 4 +- .../caching/example/AbstractService.java | 2 +- .../config/StudentControllerConfig.java | 26 +- .../baeldung/controller/config/WebConfig.java | 4 +- .../controller/controller/RestController.java | 16 +- .../baeldung/controller/student/Student.java | 50 +- .../PropertiesWithPlaceHolderConfigurer.java | 1 - .../scopes/HelloMessageGenerator.java | 14 +- .../main/java/org/baeldung/scopes/Person.java | 34 +- .../org/baeldung/scopes/ScopesController.java | 30 +- .../baeldung/spring/config/ScopesConfig.java | 66 +- .../java/org/baeldung/spring43/cache/Foo.java | 1 - .../controller/ControllerAnnotationTest.java | 21 +- .../baeldung/controller/ControllerTest.java | 14 +- .../java/org/baeldung/scopes/ScopesTest.java | 44 +- .../AttributeAnnotationTest.java | 10 +- .../composedmapping/ComposedMappingTest.java | 7 +- ...ConfigurationConstructorInjectionTest.java | 2 +- .../TransactionalTestConfiguration.java | 1 - .../ScopeAnnotationsTest.java | 52 +- .../com/baeldung/autowire/sample/App.java | 10 +- .../autowire/sample/BarFormatter.java | 2 +- .../autowire/sample/FooFormatter.java | 2 +- .../baeldung/autowire/sample/FooService.java | 8 +- .../baeldung/autowire/sample/Formatter.java | 2 +- .../autowire/sample/FormatterType.java | 4 +- .../autowire/sample/FooServiceTest.java | 8 +- .../java/com/baeldung/TestController.java | 10 +- .../com/baeldung/WebjarsdemoApplication.java | 6 +- .../com/baeldung/git/CommitIdApplication.java | 5 +- .../baeldung/git/CommitInfoController.java | 2 +- .../baeldung/WebjarsdemoApplicationTests.java | 6 +- .../java/com/baeldung/git/CommitIdTest.java | 9 +- .../baeldung/SpringBootApplicationTest.java | 13 +- .../java/org/baeldung/SpringBootMailTest.java | 1 - .../client/DetailsServiceClientTest.java | 3 +- .../com/baeldung/SpringDemoApplication.java | 6 +- .../spring/data/couchbase/model/Campus.java | 34 +- .../spring/data/couchbase/model/Person.java | 25 +- .../spring/data/couchbase/model/Student.java | 38 +- .../repos/CustomStudentRepositoryImpl.java | 5 +- .../couchbase/repos/PersonRepository.java | 1 + .../couchbase/repos/StudentRepository.java | 1 + .../service/PersonRepositoryService.java | 5 +- .../service/PersonTemplateService.java | 7 +- .../service/StudentRepositoryService.java | 5 +- .../service/StudentTemplateService.java | 7 +- .../couchbase2b/repos/CampusRepository.java | 4 +- .../couchbase2b/repos/PersonRepository.java | 1 + .../couchbase2b/repos/StudentRepository.java | 1 + .../couchbase2b/service/CampusService.java | 6 +- .../service/CampusServiceImpl.java | 9 +- .../service/PersonServiceImpl.java | 3 +- .../service/StudentServiceImpl.java | 3 +- .../data/couchbase/MyCouchbaseConfig.java | 4 +- .../couchbase/service/StudentServiceTest.java | 38 +- .../MultiBucketCouchbaseConfig.java | 14 +- .../service/CampusServiceImplTest.java | 70 +- .../service/StudentServiceImplTest.java | 38 +- .../elasticsearch/ElasticSearchUnitTests.java | 40 +- .../gridfs/GridFSIntegrationTest.java | 2 +- .../MovieDatabaseNeo4jConfiguration.java | 8 +- .../MovieDatabaseNeo4jTestConfiguration.java | 9 +- .../spring/data/neo4j/domain/Movie.java | 11 +- .../spring/data/neo4j/domain/Person.java | 8 +- .../spring/data/neo4j/domain/Role.java | 3 +- .../data/neo4j/repostory/MovieRepository.java | 4 +- .../neo4j/repostory/PersonRepository.java | 3 +- .../data/neo4j/services/MovieService.java | 20 +- .../data/neo4j/MovieRepositoryTest.java | 9 +- .../data/redis/queue/MessagePublisher.java | 1 - .../redis/queue/RedisMessagePublisher.java | 3 +- .../InvalidResourceUsageExceptionTest.java | 26 +- .../hibernate/criteria/model/Item.java | 122 +- .../criteria/util/HibernateUtil.java | 11 +- .../criteria/view/ApplicationView.java | 406 +++--- .../hibernate/fetching/model/OrderDetail.java | 96 +- .../hibernate/fetching/model/UserEager.java | 104 +- .../hibernate/fetching/model/UserLazy.java | 105 +- .../fetching/util/HibernateUtil.java | 35 +- .../com/baeldung/persistence/model/Foo.java | 134 +- .../criteria/HibernateCriteriaTest.java | 306 +++-- .../criteria/HibernateCriteriaTestRunner.java | 12 +- .../criteria/HibernateCriteriaTestSuite.java | 2 +- .../fetching/HibernateFetchingTest.java | 51 +- .../persistence/save/SaveMethodsTest.java | 16 +- .../FooStoredProceduresIntegrationTest.java | 17 +- .../jms/DefaultTextMessageSenderTest.java | 3 +- .../jms/MapMessageConvertAndSendTest.java | 3 +- .../SecondLevelCacheIntegrationTest.java | 13 +- .../org/baeldung/persistence/model/User.java | 2 +- .../java/com/baeldung/MocksApplication.java | 6 +- .../velocity/controller/MainController.java | 12 +- .../velocity/service/ITutorialsService.java | 2 +- .../velocity/service/TutorialsService.java | 5 +- .../mvc/velocity/spring/config/WebConfig.java | 2 +- .../test/DataContentControllerTest.java | 5 +- .../mvc/velocity/test/config/TestConfig.java | 5 +- .../com/baeldung/spring/ClientWebConfig.java | 8 +- .../baeldung/spring/ClientWebConfigJava.java | 54 +- .../spring/controller/EmployeeController.java | 40 +- .../spring/controller/HelloController.java | 3 +- .../controller/HelloGuestController.java | 3 +- .../controller/HelloWorldController.java | 3 +- .../spring/controller/PersonController.java | 89 +- .../spring/controller/WelcomeController.java | 3 +- .../java/com/baeldung/spring/form/Person.java | 218 ++-- .../spring/validator/PersonValidator.java | 16 +- .../springquartz/SpringQuartzApp.java | 3 +- .../basics/scheduler/QrtzScheduler.java | 13 +- .../basics/scheduler/SampleJob.java | 3 +- .../AutoWiringSpringBeanJobFactory.java | 10 +- .../web/controller/CompanyController.java | 10 +- .../web/controller/ItemController.java | 36 +- .../advice/JsonpControllerAdvice.java | 6 +- .../controller/status/ForbiddenException.java | 4 +- .../java/org/baeldung/web/dto/Company.java | 50 +- .../java/org/baeldung/web/dto/FooProtos.java | 1153 ++++++++--------- .../status/ExampleControllerTest.java | 6 +- .../service/MyUserDetailsService.java | 4 +- .../config/parent/SecurityConfig.java | 1 - .../org/baeldung/spring/ListenerConfig.java | 10 +- .../java/org/baeldung/spring/WebConfig.java | 14 +- .../interceptor/SessionTimerInterceptor.java | 69 +- .../web/interceptor/UserInterceptor.java | 3 +- .../SessionTimerInterceptorTest.java | 37 +- .../web/interceptor/UserInterceptorTest.java | 7 +- 128 files changed, 2039 insertions(+), 2275 deletions(-) diff --git a/spring-akka/src/main/java/org/baeldung/akka/SpringExtension.java b/spring-akka/src/main/java/org/baeldung/akka/SpringExtension.java index 624e289812..aa5941c763 100644 --- a/spring-akka/src/main/java/org/baeldung/akka/SpringExtension.java +++ b/spring-akka/src/main/java/org/baeldung/akka/SpringExtension.java @@ -29,5 +29,4 @@ public class SpringExtension extends AbstractExtensionId getCommitId() { Map result = new HashMap<>(); - result.put("Commit message",commitMessage); + result.put("Commit message", commitMessage); result.put("Commit branch", branch); result.put("Commit id", commitId); return result; diff --git a/spring-boot/src/test/java/com/baeldung/WebjarsdemoApplicationTests.java b/spring-boot/src/test/java/com/baeldung/WebjarsdemoApplicationTests.java index 284cda5d31..c43b13ea0b 100644 --- a/spring-boot/src/test/java/com/baeldung/WebjarsdemoApplicationTests.java +++ b/spring-boot/src/test/java/com/baeldung/WebjarsdemoApplicationTests.java @@ -11,8 +11,8 @@ import org.springframework.test.context.web.WebAppConfiguration; @WebAppConfiguration public class WebjarsdemoApplicationTests { - @Test - public void contextLoads() { - } + @Test + public void contextLoads() { + } } diff --git a/spring-boot/src/test/java/com/baeldung/git/CommitIdTest.java b/spring-boot/src/test/java/com/baeldung/git/CommitIdTest.java index e16791881e..c0fc1befd3 100644 --- a/spring-boot/src/test/java/com/baeldung/git/CommitIdTest.java +++ b/spring-boot/src/test/java/com/baeldung/git/CommitIdTest.java @@ -32,13 +32,10 @@ public class CommitIdTest { LOG.info(commitMessage); LOG.info(branch); - assertThat(commitMessage) - .isNotEqualTo("UNKNOWN"); + assertThat(commitMessage).isNotEqualTo("UNKNOWN"); - assertThat(branch) - .isNotEqualTo("UNKNOWN"); + assertThat(branch).isNotEqualTo("UNKNOWN"); - assertThat(commitId) - .isNotEqualTo("UNKNOWN"); + assertThat(commitId).isNotEqualTo("UNKNOWN"); } } \ No newline at end of file diff --git a/spring-boot/src/test/java/org/baeldung/SpringBootApplicationTest.java b/spring-boot/src/test/java/org/baeldung/SpringBootApplicationTest.java index ac7bcd62a9..1255180e44 100644 --- a/spring-boot/src/test/java/org/baeldung/SpringBootApplicationTest.java +++ b/spring-boot/src/test/java/org/baeldung/SpringBootApplicationTest.java @@ -31,22 +31,15 @@ public class SpringBootApplicationTest { private WebApplicationContext webApplicationContext; private MockMvc mockMvc; - @Before public void setupMockMvc() { - mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext) - .build(); + mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build(); } @Test public void givenRequestHasBeenMade_whenMeetsAllOfGivenConditions_thenCorrect() throws Exception { - MediaType contentType = new MediaType(MediaType.APPLICATION_JSON.getType(), - MediaType.APPLICATION_JSON.getSubtype(), - Charset.forName("utf8")); + MediaType contentType = new MediaType(MediaType.APPLICATION_JSON.getType(), MediaType.APPLICATION_JSON.getSubtype(), Charset.forName("utf8")); - mockMvc.perform(MockMvcRequestBuilders.get("/entity/all")). - andExpect(MockMvcResultMatchers.status().isOk()). - andExpect(MockMvcResultMatchers.content().contentType(contentType)). - andExpect(jsonPath("$", hasSize(4))); + mockMvc.perform(MockMvcRequestBuilders.get("/entity/all")).andExpect(MockMvcResultMatchers.status().isOk()).andExpect(MockMvcResultMatchers.content().contentType(contentType)).andExpect(jsonPath("$", hasSize(4))); } } diff --git a/spring-boot/src/test/java/org/baeldung/SpringBootMailTest.java b/spring-boot/src/test/java/org/baeldung/SpringBootMailTest.java index d36a7906a3..f4ce158661 100644 --- a/spring-boot/src/test/java/org/baeldung/SpringBootMailTest.java +++ b/spring-boot/src/test/java/org/baeldung/SpringBootMailTest.java @@ -69,7 +69,6 @@ public class SpringBootMailTest { return wiserMessage.getMimeMessage().getSubject(); } - private SimpleMailMessage composeEmailMessage() { SimpleMailMessage mailMessage = new SimpleMailMessage(); mailMessage.setTo(userTo); diff --git a/spring-boot/src/test/java/org/baeldung/client/DetailsServiceClientTest.java b/spring-boot/src/test/java/org/baeldung/client/DetailsServiceClientTest.java index c594610be2..ba0da968ad 100644 --- a/spring-boot/src/test/java/org/baeldung/client/DetailsServiceClientTest.java +++ b/spring-boot/src/test/java/org/baeldung/client/DetailsServiceClientTest.java @@ -30,8 +30,7 @@ public class DetailsServiceClientTest { @Before public void setUp() throws Exception { String detailsString = objectMapper.writeValueAsString(new Details("John Smith", "john")); - this.server.expect(requestTo("/john/details")) - .andRespond(withSuccess(detailsString, MediaType.APPLICATION_JSON)); + this.server.expect(requestTo("/john/details")).andRespond(withSuccess(detailsString, MediaType.APPLICATION_JSON)); } @Test diff --git a/spring-cucumber/src/main/java/com/baeldung/SpringDemoApplication.java b/spring-cucumber/src/main/java/com/baeldung/SpringDemoApplication.java index 60548dd6e3..820e7e8004 100644 --- a/spring-cucumber/src/main/java/com/baeldung/SpringDemoApplication.java +++ b/spring-cucumber/src/main/java/com/baeldung/SpringDemoApplication.java @@ -18,9 +18,9 @@ public class SpringDemoApplication extends SpringBootServletInitializer { protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(SpringDemoApplication.class); } - + @Bean - public RestTemplate getRestTemplate(){ - return new RestTemplate(); + public RestTemplate getRestTemplate() { + return new RestTemplate(); } } diff --git a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/model/Campus.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/model/Campus.java index 201b14cf0b..c357ab8596 100644 --- a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/model/Campus.java +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/model/Campus.java @@ -19,22 +19,27 @@ public class Campus { @Field @NotNull private Point location; - + public String getId() { return id; } + public void setId(String id) { this.id = id; } + public String getName() { return name; } + public void setName(String name) { this.name = name; } + public Point getLocation() { return location; } + public void setLocation(Point location) { this.location = location; } @@ -42,13 +47,13 @@ public class Campus { @Override public int hashCode() { int hash = 1; - if(id != null) { + if (id != null) { hash = hash * 31 + id.hashCode(); } - if(name != null) { + if (name != null) { hash = hash * 31 + name.hashCode(); } - if(location != null) { + if (location != null) { hash = hash * 31 + location.hashCode(); } return hash; @@ -56,30 +61,33 @@ public class Campus { @Override public boolean equals(Object obj) { - if((obj == null) || (obj.getClass() != this.getClass())) return false; - if(obj == this) return true; + if ((obj == null) || (obj.getClass() != this.getClass())) + return false; + if (obj == this) + return true; Campus other = (Campus) obj; return this.hashCode() == other.hashCode(); } - + @SuppressWarnings("unused") - private Campus() {} - + private Campus() { + } + public Campus(Builder b) { this.id = b.id; this.name = b.name; this.location = b.location; } - + public static class Builder { private String id; private String name; private Point location; - + public static Builder newInstance() { return new Builder(); } - + public Campus build() { return new Campus(this); } @@ -93,7 +101,7 @@ public class Campus { this.name = name; return this; } - + public Builder location(Point location) { this.location = location; return this; diff --git a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/model/Person.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/model/Person.java index 9220e157ed..fd41427d20 100644 --- a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/model/Person.java +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/model/Person.java @@ -24,7 +24,7 @@ public class Person { private DateTime created; @Field private DateTime updated; - + public Person(String id, String firstName, String lastName) { this.id = id; this.firstName = firstName; @@ -34,44 +34,53 @@ public class Person { public String getId() { return id; } + public void setId(String id) { this.id = id; } + public String getFirstName() { return firstName; } + public void setFirstName(String firstName) { this.firstName = firstName; } + public String getLastName() { return lastName; } + public void setLastName(String lastName) { this.lastName = lastName; } + public DateTime getCreated() { return created; } + public void setCreated(DateTime created) { this.created = created; } + public DateTime getUpdated() { return updated; } + public void setUpdated(DateTime updated) { this.updated = updated; } - + @Override public int hashCode() { int hash = 1; - if(id != null) { + if (id != null) { hash = hash * 31 + id.hashCode(); } - if(firstName != null) { + if (firstName != null) { hash = hash * 31 + firstName.hashCode(); } - if(lastName != null) { + if (lastName != null) { hash = hash * 31 + lastName.hashCode(); } return hash; @@ -79,8 +88,10 @@ public class Person { @Override public boolean equals(Object obj) { - if((obj == null) || (obj.getClass() != this.getClass())) return false; - if(obj == this) return true; + if ((obj == null) || (obj.getClass() != this.getClass())) + return false; + if (obj == this) + return true; Person other = (Person) obj; return this.hashCode() == other.hashCode(); } diff --git a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/model/Student.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/model/Student.java index 9c266c2c62..726ed2347e 100644 --- a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/model/Student.java +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/model/Student.java @@ -20,13 +20,13 @@ public class Student { private String id; @Field @NotNull - @Size(min=1, max=20) - @Pattern(regexp=NAME_REGEX) + @Size(min = 1, max = 20) + @Pattern(regexp = NAME_REGEX) private String firstName; @Field @NotNull - @Size(min=1, max=20) - @Pattern(regexp=NAME_REGEX) + @Size(min = 1, max = 20) + @Pattern(regexp = NAME_REGEX) private String lastName; @Field @Past @@ -38,8 +38,9 @@ public class Student { private DateTime updated; @Version private long version; - - public Student() {} + + public Student() { + } public Student(String id, String firstName, String lastName, DateTime dateOfBirth) { this.id = id; @@ -51,36 +52,47 @@ public class Student { public String getId() { return id; } + public void setId(String id) { this.id = id; } + public String getFirstName() { return firstName; } + public void setFirstName(String firstName) { this.firstName = firstName; } + public String getLastName() { return lastName; } + public void setLastName(String lastName) { this.lastName = lastName; } + public DateTime getDateOfBirth() { return dateOfBirth; } + public void setDateOfBirth(DateTime dateOfBirth) { this.dateOfBirth = dateOfBirth; } + public DateTime getCreated() { return created; } + public void setCreated(DateTime created) { this.created = created; } + public DateTime getUpdated() { return updated; } + public void setUpdated(DateTime updated) { this.updated = updated; } @@ -88,16 +100,16 @@ public class Student { @Override public int hashCode() { int hash = 1; - if(id != null) { + if (id != null) { hash = hash * 31 + id.hashCode(); } - if(firstName != null) { + if (firstName != null) { hash = hash * 31 + firstName.hashCode(); } - if(lastName != null) { + if (lastName != null) { hash = hash * 31 + lastName.hashCode(); } - if(dateOfBirth != null) { + if (dateOfBirth != null) { hash = hash * 31 + dateOfBirth.hashCode(); } return hash; @@ -105,8 +117,10 @@ public class Student { @Override public boolean equals(Object obj) { - if((obj == null) || (obj.getClass() != this.getClass())) return false; - if(obj == this) return true; + if ((obj == null) || (obj.getClass() != this.getClass())) + return false; + if (obj == this) + return true; Student other = (Student) obj; return this.hashCode() == other.hashCode(); } diff --git a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/CustomStudentRepositoryImpl.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/CustomStudentRepositoryImpl.java index 66b672a4fd..751895502c 100644 --- a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/CustomStudentRepositoryImpl.java +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/CustomStudentRepositoryImpl.java @@ -17,9 +17,6 @@ public class CustomStudentRepositoryImpl implements CustomStudentRepository { private CouchbaseTemplate template; public List findByFirstNameStartsWith(String s) { - return template.findByView(ViewQuery.from(DESIGN_DOC, "byFirstName") - .startKey(s) - .stale(Stale.FALSE), - Student.class); + return template.findByView(ViewQuery.from(DESIGN_DOC, "byFirstName").startKey(s).stale(Stale.FALSE), Student.class); } } diff --git a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/PersonRepository.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/PersonRepository.java index 14b77759e3..717feb858f 100644 --- a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/PersonRepository.java +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/PersonRepository.java @@ -7,5 +7,6 @@ import org.springframework.data.repository.CrudRepository; public interface PersonRepository extends CrudRepository { List findByFirstName(String firstName); + List findByLastName(String lastName); } diff --git a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/StudentRepository.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/StudentRepository.java index 331ddc553d..9bbdeec642 100644 --- a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/StudentRepository.java +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/StudentRepository.java @@ -7,5 +7,6 @@ import org.springframework.data.repository.CrudRepository; public interface StudentRepository extends CrudRepository, CustomStudentRepository { List findByFirstName(String firstName); + List findByLastName(String lastName); } diff --git a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/PersonRepositoryService.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/PersonRepositoryService.java index 90cc36780a..49548bdbfb 100644 --- a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/PersonRepositoryService.java +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/PersonRepositoryService.java @@ -14,8 +14,9 @@ import org.springframework.stereotype.Service; @Service @Qualifier("PersonRepositoryService") public class PersonRepositoryService implements PersonService { - + private PersonRepository repo; + @Autowired public void setPersonRepository(PersonRepository repo) { this.repo = repo; @@ -28,7 +29,7 @@ public class PersonRepositoryService implements PersonService { public List findAll() { List people = new ArrayList(); Iterator it = repo.findAll().iterator(); - while(it.hasNext()) { + while (it.hasNext()) { people.add(it.next()); } return people; diff --git a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/PersonTemplateService.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/PersonTemplateService.java index 45e9b90a19..8398847f65 100644 --- a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/PersonTemplateService.java +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/PersonTemplateService.java @@ -14,17 +14,18 @@ import com.couchbase.client.java.view.ViewQuery; @Service @Qualifier("PersonTemplateService") public class PersonTemplateService implements PersonService { - + private static final String DESIGN_DOC = "person"; private CouchbaseTemplate template; + @Autowired public void setCouchbaseTemplate(CouchbaseTemplate template) { this.template = template; } - public Person findOne(String id) { - return template.findById(id, Person.class); + public Person findOne(String id) { + return template.findById(id, Person.class); } public List findAll() { diff --git a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryService.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryService.java index 58304afc1c..65f5a6e78e 100644 --- a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryService.java +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryService.java @@ -14,8 +14,9 @@ import org.springframework.stereotype.Service; @Service @Qualifier("StudentRepositoryService") public class StudentRepositoryService implements StudentService { - + private StudentRepository repo; + @Autowired public void setStudentRepository(StudentRepository repo) { this.repo = repo; @@ -28,7 +29,7 @@ public class StudentRepositoryService implements StudentService { public List findAll() { List people = new ArrayList(); Iterator it = repo.findAll().iterator(); - while(it.hasNext()) { + while (it.hasNext()) { people.add(it.next()); } return people; diff --git a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/StudentTemplateService.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/StudentTemplateService.java index c3808e0015..8d1292b5e4 100644 --- a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/StudentTemplateService.java +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/StudentTemplateService.java @@ -14,17 +14,18 @@ import com.couchbase.client.java.view.ViewQuery; @Service @Qualifier("StudentTemplateService") public class StudentTemplateService implements StudentService { - + private static final String DESIGN_DOC = "student"; private CouchbaseTemplate template; + @Autowired public void setCouchbaseTemplate(CouchbaseTemplate template) { this.template = template; } - public Student findOne(String id) { - return template.findById(id, Student.class); + public Student findOne(String id) { + return template.findById(id, Student.class); } public List findAll() { diff --git a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/CampusRepository.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/CampusRepository.java index 2cf388f518..b1857222c5 100644 --- a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/CampusRepository.java +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/CampusRepository.java @@ -11,9 +11,9 @@ import org.springframework.data.repository.CrudRepository; public interface CampusRepository extends CrudRepository { - @View(designDocument="campus", viewName="byName") + @View(designDocument = "campus", viewName = "byName") Set findByName(String name); - @Dimensional(dimensions=2, designDocument="campus_spatial", spatialViewName="byLocation") + @Dimensional(dimensions = 2, designDocument = "campus_spatial", spatialViewName = "byLocation") Set findByLocationNear(Point point, Distance distance); } diff --git a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/PersonRepository.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/PersonRepository.java index e441bec6e4..ef37106c6d 100644 --- a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/PersonRepository.java +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/PersonRepository.java @@ -7,5 +7,6 @@ import org.springframework.data.repository.CrudRepository; public interface PersonRepository extends CrudRepository { List findByFirstName(String firstName); + List findByLastName(String lastName); } diff --git a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/StudentRepository.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/StudentRepository.java index 2a960d37de..0d790d2f39 100644 --- a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/StudentRepository.java +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/StudentRepository.java @@ -7,5 +7,6 @@ import org.springframework.data.repository.CrudRepository; public interface StudentRepository extends CrudRepository { List findByFirstName(String firstName); + List findByLastName(String lastName); } diff --git a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/CampusService.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/CampusService.java index d098c39011..58f00dda25 100644 --- a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/CampusService.java +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/CampusService.java @@ -7,14 +7,14 @@ import org.springframework.data.geo.Distance; import org.springframework.data.geo.Point; public interface CampusService { - + Campus find(String id); Set findByName(String name); Set findByLocationNear(Point point, Distance distance); - + Set findAll(); - + void save(Campus campus); } diff --git a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/CampusServiceImpl.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/CampusServiceImpl.java index 612774fec9..586f5f0dc1 100644 --- a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/CampusServiceImpl.java +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/CampusServiceImpl.java @@ -15,21 +15,22 @@ import org.springframework.stereotype.Service; public class CampusServiceImpl implements CampusService { private CampusRepository repo; + @Autowired public void setCampusRepository(CampusRepository repo) { this.repo = repo; } - + @Override public Campus find(String id) { return repo.findOne(id); } - + @Override public Set findByName(String name) { return repo.findByName(name); } - + @Override public Set findByLocationNear(Point point, Distance distance) { return repo.findByLocationNear(point, distance); @@ -39,7 +40,7 @@ public class CampusServiceImpl implements CampusService { public Set findAll() { Set campuses = new HashSet<>(); Iterator it = repo.findAll().iterator(); - while(it.hasNext()) { + while (it.hasNext()) { campuses.add(it.next()); } return campuses; diff --git a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/PersonServiceImpl.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/PersonServiceImpl.java index f1ff513bff..fe0a9e48cd 100644 --- a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/PersonServiceImpl.java +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/PersonServiceImpl.java @@ -14,6 +14,7 @@ import org.springframework.stereotype.Service; public class PersonServiceImpl implements PersonService { private PersonRepository repo; + @Autowired public void setPersonRepository(PersonRepository repo) { this.repo = repo; @@ -26,7 +27,7 @@ public class PersonServiceImpl implements PersonService { public List findAll() { List people = new ArrayList(); Iterator it = repo.findAll().iterator(); - while(it.hasNext()) { + while (it.hasNext()) { people.add(it.next()); } return people; diff --git a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/StudentServiceImpl.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/StudentServiceImpl.java index 65400636cf..248d824081 100644 --- a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/StudentServiceImpl.java +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/StudentServiceImpl.java @@ -14,6 +14,7 @@ import org.springframework.stereotype.Service; public class StudentServiceImpl implements StudentService { private StudentRepository repo; + @Autowired public void setStudentRepository(StudentRepository repo) { this.repo = repo; @@ -26,7 +27,7 @@ public class StudentServiceImpl implements StudentService { public List findAll() { List people = new ArrayList(); Iterator it = repo.findAll().iterator(); - while(it.hasNext()) { + while (it.hasNext()) { people.add(it.next()); } return people; diff --git a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/MyCouchbaseConfig.java b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/MyCouchbaseConfig.java index 8e6b971dbf..a37e918101 100644 --- a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/MyCouchbaseConfig.java +++ b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/MyCouchbaseConfig.java @@ -12,9 +12,9 @@ import org.springframework.data.couchbase.repository.config.EnableCouchbaseRepos import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean; @Configuration -@EnableCouchbaseRepositories(basePackages={"org.baeldung.spring.data.couchbase"}) +@EnableCouchbaseRepositories(basePackages = { "org.baeldung.spring.data.couchbase" }) public class MyCouchbaseConfig extends AbstractCouchbaseConfiguration { - + public static final List NODE_LIST = Arrays.asList("localhost"); public static final String BUCKET_NAME = "baeldung"; public static final String BUCKET_PASSWORD = ""; diff --git a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/StudentServiceTest.java b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/StudentServiceTest.java index 79948cbedf..0bf2c5d673 100644 --- a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/StudentServiceTest.java +++ b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/StudentServiceTest.java @@ -30,27 +30,17 @@ public abstract class StudentServiceTest extends IntegrationTest { static final String joeCollegeId = "student:" + joe + ":" + college; static final DateTime joeCollegeDob = DateTime.now().minusYears(21); static final Student joeCollege = new Student(joeCollegeId, joe, college, joeCollegeDob); - static final JsonObject jsonJoeCollege = JsonObject.empty() - .put(typeField, Student.class.getName()) - .put("firstName", joe) - .put("lastName", college) - .put("created", DateTime.now().getMillis()) - .put("version", 1); + static final JsonObject jsonJoeCollege = JsonObject.empty().put(typeField, Student.class.getName()).put("firstName", joe).put("lastName", college).put("created", DateTime.now().getMillis()).put("version", 1); static final String judy = "Judy"; static final String jetson = "Jetson"; static final String judyJetsonId = "student:" + judy + ":" + jetson; static final DateTime judyJetsonDob = DateTime.now().minusYears(19).minusMonths(5).minusDays(3); static final Student judyJetson = new Student(judyJetsonId, judy, jetson, judyJetsonDob); - static final JsonObject jsonJudyJetson = JsonObject.empty() - .put(typeField, Student.class.getName()) - .put("firstName", judy) - .put("lastName", jetson) - .put("created", DateTime.now().getMillis()) - .put("version", 1); - + static final JsonObject jsonJudyJetson = JsonObject.empty().put(typeField, Student.class.getName()).put("firstName", judy).put("lastName", jetson).put("created", DateTime.now().getMillis()).put("version", 1); + StudentService studentService; - + @BeforeClass public static void setupBeforeClass() { Cluster cluster = CouchbaseCluster.create(MyCouchbaseConfig.NODE_LIST); @@ -60,7 +50,7 @@ public abstract class StudentServiceTest extends IntegrationTest { bucket.close(); cluster.disconnect(); } - + @Test public void whenCreatingStudent_thenDocumentIsPersisted() { String firstName = "Eric"; @@ -75,7 +65,7 @@ public abstract class StudentServiceTest extends IntegrationTest { assertEquals(expectedStudent.getId(), actualStudent.getId()); } - @Test(expected=ConstraintViolationException.class) + @Test(expected = ConstraintViolationException.class) public void whenCreatingStudentWithInvalidFirstName_thenConstraintViolationException() { String firstName = "Er+ic"; String lastName = "Stratton"; @@ -85,7 +75,7 @@ public abstract class StudentServiceTest extends IntegrationTest { studentService.create(student); } - @Test(expected=ConstraintViolationException.class) + @Test(expected = ConstraintViolationException.class) public void whenCreatingStudentWithFutureDob_thenConstraintViolationException() { String firstName = "Jane"; String lastName = "Doe"; @@ -130,11 +120,11 @@ public abstract class StudentServiceTest extends IntegrationTest { assertFalse(resultList.isEmpty()); assertTrue(allResultsContainExpectedLastName(resultList, expectedLastName)); } - + private boolean resultContains(List resultList, Student student) { boolean found = false; - for(Student p : resultList) { - if(p.getId().equals(student.getId())) { + for (Student p : resultList) { + if (p.getId().equals(student.getId())) { found = true; break; } @@ -144,8 +134,8 @@ public abstract class StudentServiceTest extends IntegrationTest { private boolean allResultsContainExpectedFirstName(List resultList, String firstName) { boolean found = false; - for(Student p : resultList) { - if(p.getFirstName().equals(firstName)) { + for (Student p : resultList) { + if (p.getFirstName().equals(firstName)) { found = true; break; } @@ -155,8 +145,8 @@ public abstract class StudentServiceTest extends IntegrationTest { private boolean allResultsContainExpectedLastName(List resultList, String lastName) { boolean found = false; - for(Student p : resultList) { - if(p.getLastName().equals(lastName)) { + for (Student p : resultList) { + if (p.getLastName().equals(lastName)) { found = true; break; } diff --git a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/MultiBucketCouchbaseConfig.java b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/MultiBucketCouchbaseConfig.java index f419ba3499..fe32305feb 100644 --- a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/MultiBucketCouchbaseConfig.java +++ b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/MultiBucketCouchbaseConfig.java @@ -38,29 +38,25 @@ public class MultiBucketCouchbaseConfig extends AbstractCouchbaseConfiguration { protected String getBucketPassword() { return DEFAULT_BUCKET_PASSWORD; } - + @Bean public Bucket campusBucket() throws Exception { return couchbaseCluster().openBucket("baeldung2", ""); } - + @Bean(name = "campusTemplate") public CouchbaseTemplate campusTemplate() throws Exception { - CouchbaseTemplate template = new CouchbaseTemplate( - couchbaseClusterInfo(), - campusBucket(), - mappingCouchbaseConverter(), - translationService()); + CouchbaseTemplate template = new CouchbaseTemplate(couchbaseClusterInfo(), campusBucket(), mappingCouchbaseConverter(), translationService()); template.setDefaultConsistency(getDefaultConsistency()); return template; } - + @Override public void configureRepositoryOperationsMapping(RepositoryOperationsMapping baseMapping) { try { baseMapping.mapEntity(Campus.class, campusTemplate()); } catch (Exception e) { - //custom Exception handling + // custom Exception handling } } diff --git a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/CampusServiceImplTest.java b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/CampusServiceImplTest.java index 7e24952e32..d3982e1ecc 100644 --- a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/CampusServiceImplTest.java +++ b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/CampusServiceImplTest.java @@ -19,61 +19,29 @@ import org.springframework.data.geo.Metrics; import org.springframework.data.geo.Point; public class CampusServiceImplTest extends MultiBucketIntegationTest { - + @Autowired private CampusServiceImpl campusService; - + @Autowired private CampusRepository campusRepo; - - private final Campus Brown = Campus.Builder.newInstance() - .id("campus:Brown") - .name("Brown") - .location(new Point(71.4025, 51.8268)) - .build(); - private final Campus Cornell = Campus.Builder.newInstance() - .id("campus:Cornell") - .name("Cornell") - .location(new Point(76.4833, 42.4459)) - .build(); - - private final Campus Columbia = Campus.Builder.newInstance() - .id("campus:Columbia") - .name("Columbia") - .location(new Point(73.9626, 40.8075)) - .build(); - - private final Campus Dartmouth = Campus.Builder.newInstance() - .id("campus:Dartmouth") - .name("Dartmouth") - .location(new Point(72.2887, 43.7044)) - .build(); + private final Campus Brown = Campus.Builder.newInstance().id("campus:Brown").name("Brown").location(new Point(71.4025, 51.8268)).build(); - private final Campus Harvard = Campus.Builder.newInstance() - .id("campus:Harvard") - .name("Harvard") - .location(new Point(71.1167, 42.3770)) - .build(); + private final Campus Cornell = Campus.Builder.newInstance().id("campus:Cornell").name("Cornell").location(new Point(76.4833, 42.4459)).build(); - private final Campus Penn = Campus.Builder.newInstance() - .id("campus:Penn") - .name("Penn") - .location(new Point(75.1932, 39.9522)) - .build(); + private final Campus Columbia = Campus.Builder.newInstance().id("campus:Columbia").name("Columbia").location(new Point(73.9626, 40.8075)).build(); + + private final Campus Dartmouth = Campus.Builder.newInstance().id("campus:Dartmouth").name("Dartmouth").location(new Point(72.2887, 43.7044)).build(); + + private final Campus Harvard = Campus.Builder.newInstance().id("campus:Harvard").name("Harvard").location(new Point(71.1167, 42.3770)).build(); + + private final Campus Penn = Campus.Builder.newInstance().id("campus:Penn").name("Penn").location(new Point(75.1932, 39.9522)).build(); + + private final Campus Princeton = Campus.Builder.newInstance().id("campus:Princeton").name("Princeton").location(new Point(74.6514, 40.3340)).build(); + + private final Campus Yale = Campus.Builder.newInstance().id("campus:Yale").name("Yale").location(new Point(72.9223, 41.3163)).build(); - private final Campus Princeton = Campus.Builder.newInstance() - .id("campus:Princeton") - .name("Princeton") - .location(new Point(74.6514, 40.3340)) - .build(); - - private final Campus Yale = Campus.Builder.newInstance() - .id("campus:Yale") - .name("Yale") - .location(new Point(72.9223, 41.3163)) - .build(); - private final Point Boston = new Point(71.0589, 42.3601); private final Point NewYorkCity = new Point(74.0059, 40.7128); @@ -88,7 +56,7 @@ public class CampusServiceImplTest extends MultiBucketIntegationTest { campusRepo.save(Princeton); campusRepo.save(Yale); } - + @Test public final void givenNameHarvard_whenFindByName_thenReturnsHarvard() throws Exception { Set campuses = campusService.findByName(Harvard.getName()); @@ -97,14 +65,14 @@ public class CampusServiceImplTest extends MultiBucketIntegationTest { assertTrue(campuses.size() == 1); assertTrue(campuses.contains(Harvard)); } - + @Test public final void givenHarvardId_whenFind_thenReturnsHarvard() throws Exception { Campus actual = campusService.find(Harvard.getId()); assertNotNull(actual); assertEquals(Harvard, actual); } - + @Test public final void whenFindAll_thenReturnsAll() throws Exception { Set campuses = campusService.findAll(); @@ -125,7 +93,7 @@ public class CampusServiceImplTest extends MultiBucketIntegationTest { assertTrue(campuses.contains(Harvard)); assertFalse(campuses.contains(Columbia)); } - + @Test public final void whenFindByLocationNearNewYorkCity_thenResultContainsColumbia() throws Exception { Set campuses = campusService.findByLocationNear(NewYorkCity, new Distance(1, Metrics.NEUTRAL)); diff --git a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/StudentServiceImplTest.java b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/StudentServiceImplTest.java index 220c2c3b00..c503726377 100644 --- a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/StudentServiceImplTest.java +++ b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/StudentServiceImplTest.java @@ -31,28 +31,18 @@ public class StudentServiceImplTest extends MultiBucketIntegationTest { static final String joeCollegeId = "student:" + joe + ":" + college; static final DateTime joeCollegeDob = DateTime.now().minusYears(21); static final Student joeCollege = new Student(joeCollegeId, joe, college, joeCollegeDob); - static final JsonObject jsonJoeCollege = JsonObject.empty() - .put(typeField, Student.class.getName()) - .put("firstName", joe) - .put("lastName", college) - .put("created", DateTime.now().getMillis()) - .put("version", 1); + static final JsonObject jsonJoeCollege = JsonObject.empty().put(typeField, Student.class.getName()).put("firstName", joe).put("lastName", college).put("created", DateTime.now().getMillis()).put("version", 1); static final String judy = "Judy"; static final String jetson = "Jetson"; static final String judyJetsonId = "student:" + judy + ":" + jetson; static final DateTime judyJetsonDob = DateTime.now().minusYears(19).minusMonths(5).minusDays(3); static final Student judyJetson = new Student(judyJetsonId, judy, jetson, judyJetsonDob); - static final JsonObject jsonJudyJetson = JsonObject.empty() - .put(typeField, Student.class.getName()) - .put("firstName", judy) - .put("lastName", jetson) - .put("created", DateTime.now().getMillis()) - .put("version", 1); - + static final JsonObject jsonJudyJetson = JsonObject.empty().put(typeField, Student.class.getName()).put("firstName", judy).put("lastName", jetson).put("created", DateTime.now().getMillis()).put("version", 1); + @Autowired StudentServiceImpl studentService; - + @BeforeClass public static void setupBeforeClass() { Cluster cluster = CouchbaseCluster.create(MultiBucketCouchbaseConfig.NODE_LIST); @@ -62,7 +52,7 @@ public class StudentServiceImplTest extends MultiBucketIntegationTest { bucket.close(); cluster.disconnect(); } - + @Test public void whenCreatingStudent_thenDocumentIsPersisted() { String firstName = "Eric"; @@ -77,7 +67,7 @@ public class StudentServiceImplTest extends MultiBucketIntegationTest { assertEquals(expectedStudent.getId(), actualStudent.getId()); } - @Test(expected=ConstraintViolationException.class) + @Test(expected = ConstraintViolationException.class) public void whenCreatingStudentWithInvalidFirstName_thenConstraintViolationException() { String firstName = "Er+ic"; String lastName = "Stratton"; @@ -87,7 +77,7 @@ public class StudentServiceImplTest extends MultiBucketIntegationTest { studentService.create(student); } - @Test(expected=ConstraintViolationException.class) + @Test(expected = ConstraintViolationException.class) public void whenCreatingStudentWithFutureDob_thenConstraintViolationException() { String firstName = "Jane"; String lastName = "Doe"; @@ -132,11 +122,11 @@ public class StudentServiceImplTest extends MultiBucketIntegationTest { assertFalse(resultList.isEmpty()); assertTrue(allResultsContainExpectedLastName(resultList, expectedLastName)); } - + private boolean resultContains(List resultList, Student student) { boolean found = false; - for(Student p : resultList) { - if(p.getId().equals(student.getId())) { + for (Student p : resultList) { + if (p.getId().equals(student.getId())) { found = true; break; } @@ -146,8 +136,8 @@ public class StudentServiceImplTest extends MultiBucketIntegationTest { private boolean allResultsContainExpectedFirstName(List resultList, String firstName) { boolean found = false; - for(Student p : resultList) { - if(p.getFirstName().equals(firstName)) { + for (Student p : resultList) { + if (p.getFirstName().equals(firstName)) { found = true; break; } @@ -157,8 +147,8 @@ public class StudentServiceImplTest extends MultiBucketIntegationTest { private boolean allResultsContainExpectedLastName(List resultList, String lastName) { boolean found = false; - for(Student p : resultList) { - if(p.getLastName().equals(lastName)) { + for (Student p : resultList) { + if (p.getLastName().equals(lastName)) { found = true; break; } diff --git a/spring-data-elasticsearch/src/test/java/com/baeldung/elasticsearch/ElasticSearchUnitTests.java b/spring-data-elasticsearch/src/test/java/com/baeldung/elasticsearch/ElasticSearchUnitTests.java index db304ee78d..4ab5d40788 100644 --- a/spring-data-elasticsearch/src/test/java/com/baeldung/elasticsearch/ElasticSearchUnitTests.java +++ b/spring-data-elasticsearch/src/test/java/com/baeldung/elasticsearch/ElasticSearchUnitTests.java @@ -43,8 +43,7 @@ public class ElasticSearchUnitTests { @Test public void givenJsonString_whenJavaObject_thenIndexDocument() { String jsonObject = "{\"age\":20,\"dateOfBirth\":1471466076564,\"fullName\":\"John Doe\"}"; - IndexResponse response = client.prepareIndex("people", "Doe") - .setSource(jsonObject).get(); + IndexResponse response = client.prepareIndex("people", "Doe").setSource(jsonObject).get(); String index = response.getIndex(); String type = response.getType(); assertTrue(response.isCreated()); @@ -55,8 +54,7 @@ public class ElasticSearchUnitTests { @Test public void givenDocumentId_whenJavaObject_thenDeleteDocument() { String jsonObject = "{\"age\":10,\"dateOfBirth\":1471455886564,\"fullName\":\"Johan Doe\"}"; - IndexResponse response = client.prepareIndex("people", "Doe") - .setSource(jsonObject).get(); + IndexResponse response = client.prepareIndex("people", "Doe").setSource(jsonObject).get(); String id = response.getId(); DeleteResponse deleteResponse = client.prepareDelete("people", "Doe", id).get(); assertTrue(deleteResponse.isFound()); @@ -77,29 +75,11 @@ public class ElasticSearchUnitTests { @Test public void givenSearchParamters_thenReturnResults() { boolean isExecutedSuccessfully = true; - SearchResponse response = client.prepareSearch() - .setTypes() - .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) - .setPostFilter(QueryBuilders.rangeQuery("age").from(5).to(15)) - .setFrom(0).setSize(60).setExplain(true) - .execute() - .actionGet(); + SearchResponse response = client.prepareSearch().setTypes().setSearchType(SearchType.DFS_QUERY_THEN_FETCH).setPostFilter(QueryBuilders.rangeQuery("age").from(5).to(15)).setFrom(0).setSize(60).setExplain(true).execute().actionGet(); - SearchResponse response2 = client.prepareSearch() - .setTypes() - .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) - .setPostFilter(QueryBuilders.simpleQueryStringQuery("+John -Doe OR Janette")) - .setFrom(0).setSize(60).setExplain(true) - .execute() - .actionGet(); + SearchResponse response2 = client.prepareSearch().setTypes().setSearchType(SearchType.DFS_QUERY_THEN_FETCH).setPostFilter(QueryBuilders.simpleQueryStringQuery("+John -Doe OR Janette")).setFrom(0).setSize(60).setExplain(true).execute().actionGet(); - SearchResponse response3 = client.prepareSearch() - .setTypes() - .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) - .setPostFilter(QueryBuilders.matchQuery("John", "Name*")) - .setFrom(0).setSize(60).setExplain(true) - .execute() - .actionGet(); + SearchResponse response3 = client.prepareSearch().setTypes().setSearchType(SearchType.DFS_QUERY_THEN_FETCH).setPostFilter(QueryBuilders.matchQuery("John", "Name*")).setFrom(0).setSize(60).setExplain(true).execute().actionGet(); try { response2.getHits(); response3.getHits(); @@ -114,14 +94,8 @@ public class ElasticSearchUnitTests { @Test public void givenContentBuilder_whenHelpers_thanIndexJson() throws IOException { - XContentBuilder builder = XContentFactory.jsonBuilder() - .startObject() - .field("fullName", "Test") - .field("salary", "11500") - .field("age", "10") - .endObject(); - IndexResponse response = client.prepareIndex("people", "Doe") - .setSource(builder).get(); + XContentBuilder builder = XContentFactory.jsonBuilder().startObject().field("fullName", "Test").field("salary", "11500").field("age", "10").endObject(); + IndexResponse response = client.prepareIndex("people", "Doe").setSource(builder).get(); assertTrue(response.isCreated()); } } diff --git a/spring-data-mongodb/src/test/java/org/baeldung/gridfs/GridFSIntegrationTest.java b/spring-data-mongodb/src/test/java/org/baeldung/gridfs/GridFSIntegrationTest.java index 06ad21647b..bb4b268ca7 100644 --- a/spring-data-mongodb/src/test/java/org/baeldung/gridfs/GridFSIntegrationTest.java +++ b/spring-data-mongodb/src/test/java/org/baeldung/gridfs/GridFSIntegrationTest.java @@ -140,7 +140,7 @@ public class GridFSIntegrationTest { assertNotNull(gridFSDBFiles); assertThat(gridFSDBFiles.size(), is(2)); } - + @Test public void givenMetadataAndFilesExist_whenFindingAllFilesOnQuery_thenFilesWithMetadataAreFoundOnQuery() { DBObject metaDataUser1 = new BasicDBObject(); diff --git a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/config/MovieDatabaseNeo4jConfiguration.java b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/config/MovieDatabaseNeo4jConfiguration.java index ac9a7260be..fb4fda1497 100644 --- a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/config/MovieDatabaseNeo4jConfiguration.java +++ b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/config/MovieDatabaseNeo4jConfiguration.java @@ -9,8 +9,7 @@ import org.springframework.data.neo4j.repository.config.EnableNeo4jRepositories; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.transaction.annotation.EnableTransactionManagement; - -@ComponentScan(basePackages = {"com.baeldung.spring.data.neo4j.services"}) +@ComponentScan(basePackages = { "com.baeldung.spring.data.neo4j.services" }) @Configuration @EnableNeo4jRepositories(basePackages = "com.baeldung.spring.data.neo4j.repostory") public class MovieDatabaseNeo4jConfiguration extends Neo4jConfiguration { @@ -20,10 +19,7 @@ public class MovieDatabaseNeo4jConfiguration extends Neo4jConfiguration { @Bean public org.neo4j.ogm.config.Configuration getConfiguration() { org.neo4j.ogm.config.Configuration config = new org.neo4j.ogm.config.Configuration(); - config - .driverConfiguration() - .setDriverClassName("org.neo4j.ogm.drivers.http.driver.HttpDriver") - .setURI(URL); + config.driverConfiguration().setDriverClassName("org.neo4j.ogm.drivers.http.driver.HttpDriver").setURI(URL); return config; } diff --git a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/config/MovieDatabaseNeo4jTestConfiguration.java b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/config/MovieDatabaseNeo4jTestConfiguration.java index 2b6394184d..81935b2293 100644 --- a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/config/MovieDatabaseNeo4jTestConfiguration.java +++ b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/config/MovieDatabaseNeo4jTestConfiguration.java @@ -10,20 +10,17 @@ import org.springframework.data.neo4j.repository.config.EnableNeo4jRepositories; import org.springframework.data.neo4j.server.Neo4jServer; import org.springframework.transaction.annotation.EnableTransactionManagement; - @EnableTransactionManagement -@ComponentScan(basePackages = {"com.baeldung.spring.data.neo4j.services"}) +@ComponentScan(basePackages = { "com.baeldung.spring.data.neo4j.services" }) @Configuration @EnableNeo4jRepositories(basePackages = "com.baeldung.spring.data.neo4j.repostory") -@Profile({"embedded", "test"}) +@Profile({ "embedded", "test" }) public class MovieDatabaseNeo4jTestConfiguration extends Neo4jConfiguration { @Bean public org.neo4j.ogm.config.Configuration getConfiguration() { org.neo4j.ogm.config.Configuration config = new org.neo4j.ogm.config.Configuration(); - config - .driverConfiguration() - .setDriverClassName("org.neo4j.ogm.drivers.embedded.driver.EmbeddedDriver"); + config.driverConfiguration().setDriverClassName("org.neo4j.ogm.drivers.embedded.driver.EmbeddedDriver"); return config; } diff --git a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/domain/Movie.java b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/domain/Movie.java index e48dfaf276..029754c0fc 100644 --- a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/domain/Movie.java +++ b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/domain/Movie.java @@ -9,7 +9,7 @@ import org.neo4j.ogm.annotation.Relationship; import java.util.Collection; import java.util.List; -@JsonIdentityInfo(generator=JSOGGenerator.class) +@JsonIdentityInfo(generator = JSOGGenerator.class) @NodeEntity public class Movie { @@ -21,9 +21,11 @@ public class Movie { private int released; private String tagline; - @Relationship(type="ACTED_IN", direction = Relationship.INCOMING) private List roles; + @Relationship(type = "ACTED_IN", direction = Relationship.INCOMING) + private List roles; - public Movie() { } + public Movie() { + } public String getTitle() { return title; @@ -56,6 +58,5 @@ public class Movie { public void setRoles(List roles) { this.roles = roles; } - - + } diff --git a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/domain/Person.java b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/domain/Person.java index d96dc07530..dc5a850f29 100644 --- a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/domain/Person.java +++ b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/domain/Person.java @@ -1,6 +1,5 @@ package com.baeldung.spring.data.neo4j.domain; - import com.fasterxml.jackson.annotation.JsonIdentityInfo; import com.voodoodyne.jackson.jsog.JSOGGenerator; import org.neo4j.ogm.annotation.GraphId; @@ -9,7 +8,7 @@ import org.neo4j.ogm.annotation.Relationship; import java.util.List; -@JsonIdentityInfo(generator=JSOGGenerator.class) +@JsonIdentityInfo(generator = JSOGGenerator.class) @NodeEntity public class Person { @GraphId @@ -21,7 +20,8 @@ public class Person { @Relationship(type = "ACTED_IN") private List movies; - public Person() { } + public Person() { + } public String getName() { return name; @@ -46,5 +46,5 @@ public class Person { public void setMovies(List movies) { this.movies = movies; } - + } diff --git a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/domain/Role.java b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/domain/Role.java index 20512a10ad..40dabb054b 100644 --- a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/domain/Role.java +++ b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/domain/Role.java @@ -1,6 +1,5 @@ package com.baeldung.spring.data.neo4j.domain; - import com.fasterxml.jackson.annotation.JsonIdentityInfo; import com.voodoodyne.jackson.jsog.JSOGGenerator; import org.neo4j.ogm.annotation.EndNode; @@ -10,7 +9,7 @@ import org.neo4j.ogm.annotation.StartNode; import java.util.Collection; -@JsonIdentityInfo(generator=JSOGGenerator.class) +@JsonIdentityInfo(generator = JSOGGenerator.class) @RelationshipEntity(type = "ACTED_IN") public class Role { @GraphId diff --git a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/repostory/MovieRepository.java b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/repostory/MovieRepository.java index 850d2336ba..1bd605a7bc 100644 --- a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/repostory/MovieRepository.java +++ b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/repostory/MovieRepository.java @@ -18,7 +18,5 @@ public interface MovieRepository extends GraphRepository { Collection findByTitleContaining(@Param("title") String title); @Query("MATCH (m:Movie)<-[:ACTED_IN]-(a:Person) RETURN m.title as movie, collect(a.name) as cast LIMIT {limit}") - List> graph(@Param("limit") int limit); + List> graph(@Param("limit") int limit); } - - diff --git a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/repostory/PersonRepository.java b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/repostory/PersonRepository.java index 4c287f99a4..f7f694c07f 100644 --- a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/repostory/PersonRepository.java +++ b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/repostory/PersonRepository.java @@ -4,8 +4,7 @@ import com.baeldung.spring.data.neo4j.domain.Person; import org.springframework.data.neo4j.repository.GraphRepository; import org.springframework.stereotype.Repository; - @Repository public interface PersonRepository extends GraphRepository { - + } diff --git a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/services/MovieService.java b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/services/MovieService.java index 532cc79091..d760d19066 100644 --- a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/services/MovieService.java +++ b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/services/MovieService.java @@ -15,31 +15,31 @@ public class MovieService { MovieRepository movieRepository; private Map toD3Format(Iterator> result) { - List> nodes = new ArrayList>(); - List> rels= new ArrayList>(); - int i=0; + List> nodes = new ArrayList>(); + List> rels = new ArrayList>(); + int i = 0; while (result.hasNext()) { Map row = result.next(); - nodes.add(map("title",row.get("movie"),"label","movie")); - int target=i; + nodes.add(map("title", row.get("movie"), "label", "movie")); + int target = i; i++; for (Object name : (Collection) row.get("cast")) { - Map actor = map("title", name,"label","actor"); + Map actor = map("title", name, "label", "actor"); int source = nodes.indexOf(actor); if (source == -1) { nodes.add(actor); source = i++; } - rels.add(map("source",source,"target",target)); + rels.add(map("source", source, "target", target)); } } return map("nodes", nodes, "links", rels); } private Map map(String key1, Object value1, String key2, Object value2) { - Map result = new HashMap(2); - result.put(key1,value1); - result.put(key2,value2); + Map result = new HashMap(2); + result.put(key1, value1); + result.put(key2, value2); return result; } diff --git a/spring-data-neo4j/src/test/java/com/baeldung/spring/data/neo4j/MovieRepositoryTest.java b/spring-data-neo4j/src/test/java/com/baeldung/spring/data/neo4j/MovieRepositoryTest.java index 8061b3c2a7..0e54208c31 100644 --- a/spring-data-neo4j/src/test/java/com/baeldung/spring/data/neo4j/MovieRepositoryTest.java +++ b/spring-data-neo4j/src/test/java/com/baeldung/spring/data/neo4j/MovieRepositoryTest.java @@ -82,8 +82,7 @@ public class MovieRepositoryTest { @DirtiesContext public void testFindAll() { System.out.println("findAll"); - Collection result = - (Collection) movieRepository.findAll(); + Collection result = (Collection) movieRepository.findAll(); assertNotNull(result); assertEquals(1, result.size()); } @@ -93,8 +92,7 @@ public class MovieRepositoryTest { public void testFindByTitleContaining() { System.out.println("findByTitleContaining"); String title = "Italian"; - Collection result = - movieRepository.findByTitleContaining(title); + Collection result = movieRepository.findByTitleContaining(title); assertNotNull(result); assertEquals(1, result.size()); } @@ -126,8 +124,7 @@ public class MovieRepositoryTest { public void testDeleteAll() { System.out.println("deleteAll"); movieRepository.deleteAll(); - Collection result = - (Collection) movieRepository.findAll(); + Collection result = (Collection) movieRepository.findAll(); assertEquals(0, result.size()); } } diff --git a/spring-data-redis/src/main/java/com/baeldung/spring/data/redis/queue/MessagePublisher.java b/spring-data-redis/src/main/java/com/baeldung/spring/data/redis/queue/MessagePublisher.java index 9a42545d6c..4c55fc3179 100644 --- a/spring-data-redis/src/main/java/com/baeldung/spring/data/redis/queue/MessagePublisher.java +++ b/spring-data-redis/src/main/java/com/baeldung/spring/data/redis/queue/MessagePublisher.java @@ -1,6 +1,5 @@ package com.baeldung.spring.data.redis.queue; - public interface MessagePublisher { void publish(final String message); diff --git a/spring-data-redis/src/main/java/com/baeldung/spring/data/redis/queue/RedisMessagePublisher.java b/spring-data-redis/src/main/java/com/baeldung/spring/data/redis/queue/RedisMessagePublisher.java index f4b3180a37..2a595305bd 100644 --- a/spring-data-redis/src/main/java/com/baeldung/spring/data/redis/queue/RedisMessagePublisher.java +++ b/spring-data-redis/src/main/java/com/baeldung/spring/data/redis/queue/RedisMessagePublisher.java @@ -16,8 +16,7 @@ public class RedisMessagePublisher implements MessagePublisher { public RedisMessagePublisher() { } - public RedisMessagePublisher(final RedisTemplate redisTemplate, - final ChannelTopic topic) { + public RedisMessagePublisher(final RedisTemplate redisTemplate, final ChannelTopic topic) { this.redisTemplate = redisTemplate; this.topic = topic; } diff --git a/spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/InvalidResourceUsageExceptionTest.java b/spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/InvalidResourceUsageExceptionTest.java index 9c4fd55fa4..64f12e82e9 100644 --- a/spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/InvalidResourceUsageExceptionTest.java +++ b/spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/InvalidResourceUsageExceptionTest.java @@ -18,16 +18,16 @@ import javax.sql.DataSource; @ContextConfiguration(classes = { Cause1NonTransientConfig.class }, loader = AnnotationConfigContextLoader.class) public class InvalidResourceUsageExceptionTest { - @Autowired - private IFooService fooService; + @Autowired + private IFooService fooService; - @Autowired - private DataSource restDataSource; + @Autowired + private DataSource restDataSource; - @Test(expected = InvalidDataAccessResourceUsageException.class) - public void whenRetrievingDataUserNoSelectRights_thenInvalidResourceUsageException() { - final JdbcTemplate jdbcTemplate = new JdbcTemplate(restDataSource); - jdbcTemplate.execute("revoke select from tutorialuser"); + @Test(expected = InvalidDataAccessResourceUsageException.class) + public void whenRetrievingDataUserNoSelectRights_thenInvalidResourceUsageException() { + final JdbcTemplate jdbcTemplate = new JdbcTemplate(restDataSource); + jdbcTemplate.execute("revoke select from tutorialuser"); try { fooService.findAll(); @@ -36,11 +36,11 @@ public class InvalidResourceUsageExceptionTest { } } - @Test(expected = BadSqlGrammarException.class) - public void whenIncorrectSql_thenBadSqlGrammarException() { - final JdbcTemplate jdbcTemplate = new JdbcTemplate(restDataSource); + @Test(expected = BadSqlGrammarException.class) + public void whenIncorrectSql_thenBadSqlGrammarException() { + final JdbcTemplate jdbcTemplate = new JdbcTemplate(restDataSource); - jdbcTemplate.queryForObject("select * fro foo where id=3", Integer.class); - } + jdbcTemplate.queryForObject("select * fro foo where id=3", Integer.class); + } } diff --git a/spring-hibernate4/src/main/java/com/baeldung/hibernate/criteria/model/Item.java b/spring-hibernate4/src/main/java/com/baeldung/hibernate/criteria/model/Item.java index b8b012c061..957207b7e6 100644 --- a/spring-hibernate4/src/main/java/com/baeldung/hibernate/criteria/model/Item.java +++ b/spring-hibernate4/src/main/java/com/baeldung/hibernate/criteria/model/Item.java @@ -4,78 +4,78 @@ import java.io.Serializable; public class Item implements Serializable { - private static final long serialVersionUID = 1L; - private Integer itemId; - private String itemName; - private String itemDescription; - private Integer itemPrice; + private static final long serialVersionUID = 1L; + private Integer itemId; + private String itemName; + private String itemDescription; + private Integer itemPrice; - // constructors - public Item() { + // constructors + public Item() { - } + } - public Item(final Integer itemId, final String itemName, final String itemDescription) { - super(); - this.itemId = itemId; - this.itemName = itemName; - this.itemDescription = itemDescription; - } + public Item(final Integer itemId, final String itemName, final String itemDescription) { + super(); + this.itemId = itemId; + this.itemName = itemName; + this.itemDescription = itemDescription; + } - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((itemId == null) ? 0 : itemId.hashCode()); - return result; - } + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((itemId == null) ? 0 : itemId.hashCode()); + return result; + } - @Override - public boolean equals(final Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - final Item other = (Item) obj; - if (itemId == null) { - if (other.itemId != null) - return false; - } else if (!itemId.equals(other.itemId)) - return false; - return true; - } + @Override + public boolean equals(final Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + final Item other = (Item) obj; + if (itemId == null) { + if (other.itemId != null) + return false; + } else if (!itemId.equals(other.itemId)) + return false; + return true; + } - public Integer getItemId() { - return itemId; - } + public Integer getItemId() { + return itemId; + } - public void setItemId(final Integer itemId) { - this.itemId = itemId; - } + public void setItemId(final Integer itemId) { + this.itemId = itemId; + } - public String getItemName() { - return itemName; - } + public String getItemName() { + return itemName; + } - public void setItemName(final String itemName) { - this.itemName = itemName; - } + public void setItemName(final String itemName) { + this.itemName = itemName; + } - public String getItemDescription() { - return itemDescription; - } + public String getItemDescription() { + return itemDescription; + } - public Integer getItemPrice() { - return itemPrice; - } + public Integer getItemPrice() { + return itemPrice; + } - public void setItemPrice(final Integer itemPrice) { - this.itemPrice = itemPrice; - } + public void setItemPrice(final Integer itemPrice) { + this.itemPrice = itemPrice; + } - public void setItemDescription(final String itemDescription) { - this.itemDescription = itemDescription; - } + public void setItemDescription(final String itemDescription) { + this.itemDescription = itemDescription; + } } diff --git a/spring-hibernate4/src/main/java/com/baeldung/hibernate/criteria/util/HibernateUtil.java b/spring-hibernate4/src/main/java/com/baeldung/hibernate/criteria/util/HibernateUtil.java index 57f32cfe50..ff9ccb017b 100644 --- a/spring-hibernate4/src/main/java/com/baeldung/hibernate/criteria/util/HibernateUtil.java +++ b/spring-hibernate4/src/main/java/com/baeldung/hibernate/criteria/util/HibernateUtil.java @@ -5,16 +5,15 @@ import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class HibernateUtil { - + @SuppressWarnings("deprecation") public static Session getHibernateSession() { - final SessionFactory sf = new Configuration() - .configure("criteria.cfg.xml").buildSessionFactory(); + final SessionFactory sf = new Configuration().configure("criteria.cfg.xml").buildSessionFactory(); - // factory = new Configuration().configure().buildSessionFactory(); - final Session session = sf.openSession(); - return session; + // factory = new Configuration().configure().buildSessionFactory(); + final Session session = sf.openSession(); + return session; } } diff --git a/spring-hibernate4/src/main/java/com/baeldung/hibernate/criteria/view/ApplicationView.java b/spring-hibernate4/src/main/java/com/baeldung/hibernate/criteria/view/ApplicationView.java index 4db94f2ad7..83e3c2f9a5 100644 --- a/spring-hibernate4/src/main/java/com/baeldung/hibernate/criteria/view/ApplicationView.java +++ b/spring-hibernate4/src/main/java/com/baeldung/hibernate/criteria/view/ApplicationView.java @@ -26,228 +26,226 @@ import com.baeldung.hibernate.criteria.util.HibernateUtil; public class ApplicationView { - // default Constructor - public ApplicationView() { + // default Constructor + public ApplicationView() { - } + } - public boolean checkIfCriteriaTimeLower() { - final Session session = HibernateUtil.getHibernateSession(); - final Criteria cr = session.createCriteria(Item.class); - Transaction tx = null; - - // calculate the time taken by criteria - final long startTimeCriteria = System.nanoTime(); - cr.add(Restrictions.like("itemName", "%item One%")); - final List results = cr.list(); - final long endTimeCriteria = System.nanoTime(); - final long durationCriteria = (endTimeCriteria - startTimeCriteria) / 1000; + public boolean checkIfCriteriaTimeLower() { + final Session session = HibernateUtil.getHibernateSession(); + final Criteria cr = session.createCriteria(Item.class); + Transaction tx = null; - // calculate the time taken by HQL - final long startTimeHQL = System.nanoTime(); - tx = session.beginTransaction(); - final List items = session.createQuery("FROM Item where itemName like '%item One%'").list(); - final long endTimeHQL = System.nanoTime(); - final long durationHQL = (endTimeHQL - startTimeHQL) / 1000; + // calculate the time taken by criteria + final long startTimeCriteria = System.nanoTime(); + cr.add(Restrictions.like("itemName", "%item One%")); + final List results = cr.list(); + final long endTimeCriteria = System.nanoTime(); + final long durationCriteria = (endTimeCriteria - startTimeCriteria) / 1000; - if (durationCriteria > durationHQL) { - return false; - } else { - return true; - } - } + // calculate the time taken by HQL + final long startTimeHQL = System.nanoTime(); + tx = session.beginTransaction(); + final List items = session.createQuery("FROM Item where itemName like '%item One%'").list(); + final long endTimeHQL = System.nanoTime(); + final long durationHQL = (endTimeHQL - startTimeHQL) / 1000; - // To get items having price more than 1000 - public String[] greaterThanCriteria() { - final Session session = HibernateUtil.getHibernateSession(); - final Criteria cr = session.createCriteria(Item.class); - cr.add(Restrictions.gt("itemPrice", 1000)); - final List greaterThanItemsList = cr.list(); - final String greaterThanItems[] = new String[greaterThanItemsList.size()]; - for (int i = 0; i < greaterThanItemsList.size(); i++) { - greaterThanItems[i] = greaterThanItemsList.get(i).getItemName(); - } - session.close(); - return greaterThanItems; - } + if (durationCriteria > durationHQL) { + return false; + } else { + return true; + } + } - // To get items having price less than 1000 - public String[] lessThanCriteria() { - final Session session = HibernateUtil.getHibernateSession(); - final Criteria cr = session.createCriteria(Item.class); - cr.add(Restrictions.lt("itemPrice", 1000)); - final List lessThanItemsList = cr.list(); - final String lessThanItems[] = new String[lessThanItemsList.size()]; - for (int i = 0; i < lessThanItemsList.size(); i++) { - lessThanItems[i] = lessThanItemsList.get(i).getItemName(); - } - session.close(); - return lessThanItems; - } + // To get items having price more than 1000 + public String[] greaterThanCriteria() { + final Session session = HibernateUtil.getHibernateSession(); + final Criteria cr = session.createCriteria(Item.class); + cr.add(Restrictions.gt("itemPrice", 1000)); + final List greaterThanItemsList = cr.list(); + final String greaterThanItems[] = new String[greaterThanItemsList.size()]; + for (int i = 0; i < greaterThanItemsList.size(); i++) { + greaterThanItems[i] = greaterThanItemsList.get(i).getItemName(); + } + session.close(); + return greaterThanItems; + } - // To get items whose Name start with Chair - public String[] likeCriteria() { - final Session session = HibernateUtil.getHibernateSession(); + // To get items having price less than 1000 + public String[] lessThanCriteria() { + final Session session = HibernateUtil.getHibernateSession(); + final Criteria cr = session.createCriteria(Item.class); + cr.add(Restrictions.lt("itemPrice", 1000)); + final List lessThanItemsList = cr.list(); + final String lessThanItems[] = new String[lessThanItemsList.size()]; + for (int i = 0; i < lessThanItemsList.size(); i++) { + lessThanItems[i] = lessThanItemsList.get(i).getItemName(); + } + session.close(); + return lessThanItems; + } - final Criteria cr = session.createCriteria(Item.class); - cr.add(Restrictions.like("itemName", "%chair%")); - final List likeItemsList = cr.list(); - final String likeItems[] = new String[likeItemsList.size()]; - for (int i = 0; i < likeItemsList.size(); i++) { - likeItems[i] = likeItemsList.get(i).getItemName(); - } - session.close(); - return likeItems; - } + // To get items whose Name start with Chair + public String[] likeCriteria() { + final Session session = HibernateUtil.getHibernateSession(); - // Case sensitive search - public String[] likeCaseCriteria() { - final Session session = HibernateUtil.getHibernateSession(); - final Criteria cr = session.createCriteria(Item.class); - cr.add(Restrictions.ilike("itemName", "%Chair%")); - final List ilikeItemsList = cr.list(); - final String ilikeItems[] = new String[ilikeItemsList.size()]; - for (int i = 0; i < ilikeItemsList.size(); i++) { - ilikeItems[i] = ilikeItemsList.get(i).getItemName(); - } - session.close(); - return ilikeItems; - } + final Criteria cr = session.createCriteria(Item.class); + cr.add(Restrictions.like("itemName", "%chair%")); + final List likeItemsList = cr.list(); + final String likeItems[] = new String[likeItemsList.size()]; + for (int i = 0; i < likeItemsList.size(); i++) { + likeItems[i] = likeItemsList.get(i).getItemName(); + } + session.close(); + return likeItems; + } - // To get records having itemPrice in between 100 and 200 - public String[] betweenCriteria() { - final Session session = HibernateUtil.getHibernateSession(); - final Criteria cr = session.createCriteria(Item.class); - // To get items having price more than 1000 - cr.add(Restrictions.between("itemPrice", 100, 200)); - final List betweenItemsList = cr.list(); - final String betweenItems[] = new String[betweenItemsList.size()]; - for (int i = 0; i < betweenItemsList.size(); i++) { - betweenItems[i] = betweenItemsList.get(i).getItemName(); - } - session.close(); - return betweenItems; - } + // Case sensitive search + public String[] likeCaseCriteria() { + final Session session = HibernateUtil.getHibernateSession(); + final Criteria cr = session.createCriteria(Item.class); + cr.add(Restrictions.ilike("itemName", "%Chair%")); + final List ilikeItemsList = cr.list(); + final String ilikeItems[] = new String[ilikeItemsList.size()]; + for (int i = 0; i < ilikeItemsList.size(); i++) { + ilikeItems[i] = ilikeItemsList.get(i).getItemName(); + } + session.close(); + return ilikeItems; + } - // To check if the given property is null - public String[] nullCriteria() { - final Session session = HibernateUtil.getHibernateSession(); - final Criteria cr = session.createCriteria(Item.class); - cr.add(Restrictions.isNull("itemDescription")); - final List nullItemsList = cr.list(); - final String nullDescItems[] = new String[nullItemsList.size()]; - for (int i = 0; i < nullItemsList.size(); i++) { - nullDescItems[i] = nullItemsList.get(i).getItemName(); - } - session.close(); - return nullDescItems; - } + // To get records having itemPrice in between 100 and 200 + public String[] betweenCriteria() { + final Session session = HibernateUtil.getHibernateSession(); + final Criteria cr = session.createCriteria(Item.class); + // To get items having price more than 1000 + cr.add(Restrictions.between("itemPrice", 100, 200)); + final List betweenItemsList = cr.list(); + final String betweenItems[] = new String[betweenItemsList.size()]; + for (int i = 0; i < betweenItemsList.size(); i++) { + betweenItems[i] = betweenItemsList.get(i).getItemName(); + } + session.close(); + return betweenItems; + } - // To check if the given property is not null - public String[] notNullCriteria() { - final Session session = HibernateUtil.getHibernateSession(); - final Criteria cr = session.createCriteria(Item.class); - cr.add(Restrictions.isNotNull("itemDescription")); - final List notNullItemsList = cr.list(); - final String notNullDescItems[] = new String[notNullItemsList.size()]; - for (int i = 0; i < notNullItemsList.size(); i++) { - notNullDescItems[i] = notNullItemsList.get(i).getItemName(); - } - session.close(); - return notNullDescItems; - } + // To check if the given property is null + public String[] nullCriteria() { + final Session session = HibernateUtil.getHibernateSession(); + final Criteria cr = session.createCriteria(Item.class); + cr.add(Restrictions.isNull("itemDescription")); + final List nullItemsList = cr.list(); + final String nullDescItems[] = new String[nullItemsList.size()]; + for (int i = 0; i < nullItemsList.size(); i++) { + nullDescItems[i] = nullItemsList.get(i).getItemName(); + } + session.close(); + return nullDescItems; + } - // Adding more than one expression in one cr - public String[] twoCriteria() { - final Session session = HibernateUtil.getHibernateSession(); - final Criteria cr = session.createCriteria(Item.class); - cr.add(Restrictions.isNull("itemDescription")); - cr.add(Restrictions.like("itemName", "chair%")); - final List notNullItemsList = cr.list(); - final String notNullDescItems[] = new String[notNullItemsList.size()]; - for (int i = 0; i < notNullItemsList.size(); i++) { - notNullDescItems[i] = notNullItemsList.get(i).getItemName(); - } - session.close(); - return notNullDescItems; - } + // To check if the given property is not null + public String[] notNullCriteria() { + final Session session = HibernateUtil.getHibernateSession(); + final Criteria cr = session.createCriteria(Item.class); + cr.add(Restrictions.isNotNull("itemDescription")); + final List notNullItemsList = cr.list(); + final String notNullDescItems[] = new String[notNullItemsList.size()]; + for (int i = 0; i < notNullItemsList.size(); i++) { + notNullDescItems[i] = notNullItemsList.get(i).getItemName(); + } + session.close(); + return notNullDescItems; + } - // To get items matching with the above defined conditions joined - // with Logical AND - public String[] andLogicalCriteria() { - final Session session = HibernateUtil.getHibernateSession(); - final Criteria cr = session.createCriteria(Item.class); - final Criterion greaterThanPrice = Restrictions.gt("itemPrice", 1000); - final Criterion chairItems = Restrictions.like("itemName", "Chair%"); - final LogicalExpression andExample = Restrictions.and(greaterThanPrice, chairItems); - cr.add(andExample); - final List andItemsList = cr.list(); - final String andItems[] = new String[andItemsList.size()]; - for (int i = 0; i < andItemsList.size(); i++) { - andItems[i] = andItemsList.get(i).getItemName(); - } - session.close(); - return andItems; - } + // Adding more than one expression in one cr + public String[] twoCriteria() { + final Session session = HibernateUtil.getHibernateSession(); + final Criteria cr = session.createCriteria(Item.class); + cr.add(Restrictions.isNull("itemDescription")); + cr.add(Restrictions.like("itemName", "chair%")); + final List notNullItemsList = cr.list(); + final String notNullDescItems[] = new String[notNullItemsList.size()]; + for (int i = 0; i < notNullItemsList.size(); i++) { + notNullDescItems[i] = notNullItemsList.get(i).getItemName(); + } + session.close(); + return notNullDescItems; + } - // To get items matching with the above defined conditions joined - // with Logical OR - public String[] orLogicalCriteria() { - final Session session = HibernateUtil.getHibernateSession(); - final Criteria cr = session.createCriteria(Item.class); - final Criterion greaterThanPrice = Restrictions.gt("itemPrice", 1000); - final Criterion chairItems = Restrictions.like("itemName", "Chair%"); - final LogicalExpression orExample = Restrictions.or(greaterThanPrice, chairItems); - cr.add(orExample); - final List orItemsList = cr.list(); - final String orItems[] = new String[orItemsList.size()]; - for (int i = 0; i < orItemsList.size(); i++) { - orItems[i] = orItemsList.get(i).getItemName(); - } - session.close(); - return orItems; - } + // To get items matching with the above defined conditions joined + // with Logical AND + public String[] andLogicalCriteria() { + final Session session = HibernateUtil.getHibernateSession(); + final Criteria cr = session.createCriteria(Item.class); + final Criterion greaterThanPrice = Restrictions.gt("itemPrice", 1000); + final Criterion chairItems = Restrictions.like("itemName", "Chair%"); + final LogicalExpression andExample = Restrictions.and(greaterThanPrice, chairItems); + cr.add(andExample); + final List andItemsList = cr.list(); + final String andItems[] = new String[andItemsList.size()]; + for (int i = 0; i < andItemsList.size(); i++) { + andItems[i] = andItemsList.get(i).getItemName(); + } + session.close(); + return andItems; + } - // Sorting example - public String[] sortingCriteria() { - final Session session = HibernateUtil.getHibernateSession(); - final Criteria cr = session.createCriteria(Item.class); - cr.addOrder(Order.asc("itemName")); - cr.addOrder(Order.desc("itemPrice")).list(); - final List sortedItemsList = cr.list(); - final String sortedItems[] = new String[sortedItemsList.size()]; - for (int i = 0; i < sortedItemsList.size(); i++) { - sortedItems[i] = sortedItemsList.get(i).getItemName(); - } - session.close(); - return sortedItems; - } + // To get items matching with the above defined conditions joined + // with Logical OR + public String[] orLogicalCriteria() { + final Session session = HibernateUtil.getHibernateSession(); + final Criteria cr = session.createCriteria(Item.class); + final Criterion greaterThanPrice = Restrictions.gt("itemPrice", 1000); + final Criterion chairItems = Restrictions.like("itemName", "Chair%"); + final LogicalExpression orExample = Restrictions.or(greaterThanPrice, chairItems); + cr.add(orExample); + final List orItemsList = cr.list(); + final String orItems[] = new String[orItemsList.size()]; + for (int i = 0; i < orItemsList.size(); i++) { + orItems[i] = orItemsList.get(i).getItemName(); + } + session.close(); + return orItems; + } - // Set projections Row Count - public Long[] projectionRowCount() { - final Session session = HibernateUtil.getHibernateSession(); - final List itemProjected = session.createCriteria(Item.class).setProjection(Projections.rowCount()) - .list(); - final Long projectedRowCount[] = new Long[itemProjected.size()]; - for (int i = 0; i < itemProjected.size(); i++) { - projectedRowCount[i] = itemProjected.get(i); - } - session.close(); - return projectedRowCount; - } + // Sorting example + public String[] sortingCriteria() { + final Session session = HibernateUtil.getHibernateSession(); + final Criteria cr = session.createCriteria(Item.class); + cr.addOrder(Order.asc("itemName")); + cr.addOrder(Order.desc("itemPrice")).list(); + final List sortedItemsList = cr.list(); + final String sortedItems[] = new String[sortedItemsList.size()]; + for (int i = 0; i < sortedItemsList.size(); i++) { + sortedItems[i] = sortedItemsList.get(i).getItemName(); + } + session.close(); + return sortedItems; + } - // Set projections average of itemPrice - public Double[] projectionAverage() { - final Session session = HibernateUtil.getHibernateSession(); - final List avgItemPriceList = session.createCriteria(Item.class) - .setProjection(Projections.projectionList().add(Projections.avg("itemPrice"))).list(); + // Set projections Row Count + public Long[] projectionRowCount() { + final Session session = HibernateUtil.getHibernateSession(); + final List itemProjected = session.createCriteria(Item.class).setProjection(Projections.rowCount()).list(); + final Long projectedRowCount[] = new Long[itemProjected.size()]; + for (int i = 0; i < itemProjected.size(); i++) { + projectedRowCount[i] = itemProjected.get(i); + } + session.close(); + return projectedRowCount; + } - final Double avgItemPrice[] = new Double[avgItemPriceList.size()]; - for (int i = 0; i < avgItemPriceList.size(); i++) { - avgItemPrice[i] = (Double) avgItemPriceList.get(i); - } - session.close(); - return avgItemPrice; - } + // Set projections average of itemPrice + public Double[] projectionAverage() { + final Session session = HibernateUtil.getHibernateSession(); + final List avgItemPriceList = session.createCriteria(Item.class).setProjection(Projections.projectionList().add(Projections.avg("itemPrice"))).list(); + + final Double avgItemPrice[] = new Double[avgItemPriceList.size()]; + for (int i = 0; i < avgItemPriceList.size(); i++) { + avgItemPrice[i] = (Double) avgItemPriceList.get(i); + } + session.close(); + return avgItemPrice; + } } diff --git a/spring-hibernate4/src/main/java/com/baeldung/hibernate/fetching/model/OrderDetail.java b/spring-hibernate4/src/main/java/com/baeldung/hibernate/fetching/model/OrderDetail.java index ec8dc32200..f4a9b8a678 100644 --- a/spring-hibernate4/src/main/java/com/baeldung/hibernate/fetching/model/OrderDetail.java +++ b/spring-hibernate4/src/main/java/com/baeldung/hibernate/fetching/model/OrderDetail.java @@ -5,54 +5,54 @@ import java.io.Serializable; import java.sql.Date; @Entity -@Table (name = "USER_ORDER") -public class OrderDetail implements Serializable{ +@Table(name = "USER_ORDER") +public class OrderDetail implements Serializable { - private static final long serialVersionUID = 1L; - - @Id - @GeneratedValue - @Column(name="ORDER_ID") - private Long orderId; - - public OrderDetail(){ - } - - public OrderDetail(Date orderDate, String orderDesc) { - super(); - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((orderId == null) ? 0 : orderId.hashCode()); - return result; - } - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - OrderDetail other = (OrderDetail) obj; - if (orderId == null) { - if (other.orderId != null) - return false; - } else if (!orderId.equals(other.orderId)) - return false; - - return true; - } + private static final long serialVersionUID = 1L; - public Long getOrderId() { - return orderId; - } - public void setOrderId(Long orderId) { - this.orderId = orderId; - } + @Id + @GeneratedValue + @Column(name = "ORDER_ID") + private Long orderId; + + public OrderDetail() { + } + + public OrderDetail(Date orderDate, String orderDesc) { + super(); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((orderId == null) ? 0 : orderId.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + OrderDetail other = (OrderDetail) obj; + if (orderId == null) { + if (other.orderId != null) + return false; + } else if (!orderId.equals(other.orderId)) + return false; + + return true; + } + + public Long getOrderId() { + return orderId; + } + + public void setOrderId(Long orderId) { + this.orderId = orderId; + } } - - diff --git a/spring-hibernate4/src/main/java/com/baeldung/hibernate/fetching/model/UserEager.java b/spring-hibernate4/src/main/java/com/baeldung/hibernate/fetching/model/UserEager.java index 22b4fdc76c..2559d5f048 100644 --- a/spring-hibernate4/src/main/java/com/baeldung/hibernate/fetching/model/UserEager.java +++ b/spring-hibernate4/src/main/java/com/baeldung/hibernate/fetching/model/UserEager.java @@ -6,66 +6,66 @@ import java.util.HashSet; import java.util.Set; @Entity -@Table (name = "USER") +@Table(name = "USER") public class UserEager implements Serializable { - - private static final long serialVersionUID = 1L; - - @Id - @GeneratedValue - @Column(name="USER_ID") - private Long userId; - - @OneToMany(fetch = FetchType.EAGER, mappedBy = "user") - private Set orderDetail = new HashSet(); - public UserEager() { - } + private static final long serialVersionUID = 1L; - public UserEager(final Long userId) { - super(); - this.userId = userId; - } + @Id + @GeneratedValue + @Column(name = "USER_ID") + private Long userId; - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((userId == null) ? 0 : userId.hashCode()); - return result; - } + @OneToMany(fetch = FetchType.EAGER, mappedBy = "user") + private Set orderDetail = new HashSet(); - @Override - public boolean equals(final Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - final UserEager other = (UserEager) obj; - if (userId == null) { - if (other.userId != null) - return false; - } else if (!userId.equals(other.userId)) - return false; - return true; - } + public UserEager() { + } - public Long getUserId() { - return userId; - } + public UserEager(final Long userId) { + super(); + this.userId = userId; + } - public void setUserId(final Long userId) { - this.userId = userId; - } + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((userId == null) ? 0 : userId.hashCode()); + return result; + } - public Set getOrderDetail() { - return orderDetail; - } + @Override + public boolean equals(final Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + final UserEager other = (UserEager) obj; + if (userId == null) { + if (other.userId != null) + return false; + } else if (!userId.equals(other.userId)) + return false; + return true; + } - public void setOrderDetail(Set orderDetail) { - this.orderDetail = orderDetail; - } + public Long getUserId() { + return userId; + } + + public void setUserId(final Long userId) { + this.userId = userId; + } + + public Set getOrderDetail() { + return orderDetail; + } + + public void setOrderDetail(Set orderDetail) { + this.orderDetail = orderDetail; + } } diff --git a/spring-hibernate4/src/main/java/com/baeldung/hibernate/fetching/model/UserLazy.java b/spring-hibernate4/src/main/java/com/baeldung/hibernate/fetching/model/UserLazy.java index 5038fb90ef..5852e74418 100644 --- a/spring-hibernate4/src/main/java/com/baeldung/hibernate/fetching/model/UserLazy.java +++ b/spring-hibernate4/src/main/java/com/baeldung/hibernate/fetching/model/UserLazy.java @@ -6,67 +6,66 @@ import java.util.HashSet; import java.util.Set; @Entity -@Table (name = "USER") +@Table(name = "USER") public class UserLazy implements Serializable { - - private static final long serialVersionUID = 1L; - - @Id - @GeneratedValue - @Column(name="USER_ID") - private Long userId; - - @OneToMany(fetch = FetchType.LAZY, mappedBy = "user") - private Set orderDetail = new HashSet(); - public UserLazy() { - } + private static final long serialVersionUID = 1L; - public UserLazy(final Long userId) { - super(); - this.userId = userId; - } + @Id + @GeneratedValue + @Column(name = "USER_ID") + private Long userId; - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((userId == null) ? 0 : userId.hashCode()); - return result; - } + @OneToMany(fetch = FetchType.LAZY, mappedBy = "user") + private Set orderDetail = new HashSet(); - @Override - public boolean equals(final Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - final UserLazy other = (UserLazy) obj; - if (userId == null) { - if (other.userId != null) - return false; - } else if (!userId.equals(other.userId)) - return false; - return true; - } + public UserLazy() { + } - public Long getUserId() { - return userId; - } + public UserLazy(final Long userId) { + super(); + this.userId = userId; + } - public void setUserId(final Long userId) { - this.userId = userId; - } + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((userId == null) ? 0 : userId.hashCode()); + return result; + } - - public Set getOrderDetail() { - return orderDetail; - } + @Override + public boolean equals(final Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + final UserLazy other = (UserLazy) obj; + if (userId == null) { + if (other.userId != null) + return false; + } else if (!userId.equals(other.userId)) + return false; + return true; + } - public void setOrderDetail(Set orderDetail) { - this.orderDetail = orderDetail; - } + public Long getUserId() { + return userId; + } + + public void setUserId(final Long userId) { + this.userId = userId; + } + + public Set getOrderDetail() { + return orderDetail; + } + + public void setOrderDetail(Set orderDetail) { + this.orderDetail = orderDetail; + } } diff --git a/spring-hibernate4/src/main/java/com/baeldung/hibernate/fetching/util/HibernateUtil.java b/spring-hibernate4/src/main/java/com/baeldung/hibernate/fetching/util/HibernateUtil.java index bbd7729232..c7be96abb7 100644 --- a/spring-hibernate4/src/main/java/com/baeldung/hibernate/fetching/util/HibernateUtil.java +++ b/spring-hibernate4/src/main/java/com/baeldung/hibernate/fetching/util/HibernateUtil.java @@ -6,27 +6,24 @@ import org.hibernate.cfg.Configuration; public class HibernateUtil { - @SuppressWarnings("deprecation") - public static Session getHibernateSession(String fetchMethod) { - //two config files are there - //one with lazy loading enabled - //another lazy = false - SessionFactory sf; - if ("lazy".equals(fetchMethod)) { - sf = new Configuration().configure("fetchingLazy.cfg.xml").buildSessionFactory(); - } else { - sf = new Configuration().configure("fetching.cfg.xml").buildSessionFactory(); - } - - // fetching.cfg.xml is used for this example - return sf.openSession(); - } + @SuppressWarnings("deprecation") + public static Session getHibernateSession(String fetchMethod) { + // two config files are there + // one with lazy loading enabled + // another lazy = false + SessionFactory sf; + if ("lazy".equals(fetchMethod)) { + sf = new Configuration().configure("fetchingLazy.cfg.xml").buildSessionFactory(); + } else { + sf = new Configuration().configure("fetching.cfg.xml").buildSessionFactory(); + } + + // fetching.cfg.xml is used for this example + return sf.openSession(); + } public static Session getHibernateSession() { - return new Configuration() - .configure("fetching.cfg.xml") - .buildSessionFactory() - .openSession(); + return new Configuration().configure("fetching.cfg.xml").buildSessionFactory().openSession(); } } diff --git a/spring-hibernate4/src/main/java/com/baeldung/persistence/model/Foo.java b/spring-hibernate4/src/main/java/com/baeldung/persistence/model/Foo.java index bdd48d6aa6..d36a1e58cf 100644 --- a/spring-hibernate4/src/main/java/com/baeldung/persistence/model/Foo.java +++ b/spring-hibernate4/src/main/java/com/baeldung/persistence/model/Foo.java @@ -16,92 +16,90 @@ import javax.persistence.NamedNativeQuery; import org.hibernate.envers.Audited; -@NamedNativeQueries({ - @NamedNativeQuery(name = "callGetAllFoos", query = "CALL GetAllFoos()", resultClass = Foo.class), - @NamedNativeQuery(name = "callGetFoosByName", query = "CALL GetFoosByName(:fooName)", resultClass = Foo.class) }) +@NamedNativeQueries({ @NamedNativeQuery(name = "callGetAllFoos", query = "CALL GetAllFoos()", resultClass = Foo.class), @NamedNativeQuery(name = "callGetFoosByName", query = "CALL GetFoosByName(:fooName)", resultClass = Foo.class) }) @Entity @Audited // @Proxy(lazy = false) public class Foo implements Serializable { - @Id - @GeneratedValue(strategy = GenerationType.AUTO) - @Column(name = "id") - private long id; + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + @Column(name = "id") + private long id; - @Column(name = "name") - private String name; + @Column(name = "name") + private String name; - @ManyToOne(targetEntity = Bar.class, cascade = CascadeType.ALL, fetch = FetchType.EAGER) - @JoinColumn(name = "BAR_ID") - private Bar bar = new Bar(); + @ManyToOne(targetEntity = Bar.class, cascade = CascadeType.ALL, fetch = FetchType.EAGER) + @JoinColumn(name = "BAR_ID") + private Bar bar = new Bar(); - public Foo() { - super(); - } + public Foo() { + super(); + } - public Foo(final String name) { - super(); - this.name = name; - } + public Foo(final String name) { + super(); + this.name = name; + } - // + // - public Bar getBar() { - return bar; - } + public Bar getBar() { + return bar; + } - public void setBar(final Bar bar) { - this.bar = bar; - } + public void setBar(final Bar bar) { + this.bar = bar; + } - public long getId() { - return id; - } + public long getId() { + return id; + } - public void setId(final long id) { - this.id = id; - } + public void setId(final long id) { + this.id = id; + } - public String getName() { - return name; - } + public String getName() { + return name; + } - public void setName(final String name) { - this.name = name; - } + public void setName(final String name) { + this.name = name; + } - // + // - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((name == null) ? 0 : name.hashCode()); - return result; - } + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((name == null) ? 0 : name.hashCode()); + return result; + } - @Override - public boolean equals(final Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - final Foo other = (Foo) obj; - if (name == null) { - if (other.name != null) - return false; - } else if (!name.equals(other.name)) - return false; - return true; - } + @Override + public boolean equals(final Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + final Foo other = (Foo) obj; + if (name == null) { + if (other.name != null) + return false; + } else if (!name.equals(other.name)) + return false; + return true; + } - @Override - public String toString() { - final StringBuilder builder = new StringBuilder(); - builder.append("Foo [name=").append(name).append("]"); - return builder.toString(); - } + @Override + public String toString() { + final StringBuilder builder = new StringBuilder(); + builder.append("Foo [name=").append(name).append("]"); + return builder.toString(); + } } diff --git a/spring-hibernate4/src/test/java/com/baeldung/hibernate/criteria/HibernateCriteriaTest.java b/spring-hibernate4/src/test/java/com/baeldung/hibernate/criteria/HibernateCriteriaTest.java index 3bd8c5ee00..88186098cc 100644 --- a/spring-hibernate4/src/test/java/com/baeldung/hibernate/criteria/HibernateCriteriaTest.java +++ b/spring-hibernate4/src/test/java/com/baeldung/hibernate/criteria/HibernateCriteriaTest.java @@ -14,178 +14,170 @@ import com.baeldung.hibernate.criteria.view.ApplicationView; public class HibernateCriteriaTest { - final private ApplicationView av = new ApplicationView(); + final private ApplicationView av = new ApplicationView(); - @Test - public void testPerformanceOfCriteria() { - assertTrue(av.checkIfCriteriaTimeLower()); - } - - @Test - public void testLikeCriteriaQuery() { - final Session session = HibernateUtil.getHibernateSession(); - final List expectedLikeList = session.createQuery("From Item where itemName like '%chair%'").list(); - final String expectedLikeItems[] = new String[expectedLikeList.size()]; - for (int i = 0; i < expectedLikeList.size(); i++) { - expectedLikeItems[i] = expectedLikeList.get(i).getItemName(); - } - session.close(); - assertArrayEquals(expectedLikeItems, av.likeCriteria()); - } + @Test + public void testPerformanceOfCriteria() { + assertTrue(av.checkIfCriteriaTimeLower()); + } - @Test - public void testILikeCriteriaQuery() { - final Session session = HibernateUtil.getHibernateSession(); - final List expectedChairCaseList = session.createQuery("From Item where itemName like '%Chair%'").list(); - final String expectedChairCaseItems[] = new String[expectedChairCaseList.size()]; - for (int i = 0; i < expectedChairCaseList.size(); i++) { - expectedChairCaseItems[i] = expectedChairCaseList.get(i).getItemName(); - } - session.close(); - assertArrayEquals(expectedChairCaseItems, av.likeCaseCriteria()); + @Test + public void testLikeCriteriaQuery() { + final Session session = HibernateUtil.getHibernateSession(); + final List expectedLikeList = session.createQuery("From Item where itemName like '%chair%'").list(); + final String expectedLikeItems[] = new String[expectedLikeList.size()]; + for (int i = 0; i < expectedLikeList.size(); i++) { + expectedLikeItems[i] = expectedLikeList.get(i).getItemName(); + } + session.close(); + assertArrayEquals(expectedLikeItems, av.likeCriteria()); + } - } + @Test + public void testILikeCriteriaQuery() { + final Session session = HibernateUtil.getHibernateSession(); + final List expectedChairCaseList = session.createQuery("From Item where itemName like '%Chair%'").list(); + final String expectedChairCaseItems[] = new String[expectedChairCaseList.size()]; + for (int i = 0; i < expectedChairCaseList.size(); i++) { + expectedChairCaseItems[i] = expectedChairCaseList.get(i).getItemName(); + } + session.close(); + assertArrayEquals(expectedChairCaseItems, av.likeCaseCriteria()); - @Test - public void testNullCriteriaQuery() { - final Session session = HibernateUtil.getHibernateSession(); - final List expectedIsNullDescItemsList = session.createQuery("From Item where itemDescription is null") - .list(); - final String expectedIsNullDescItems[] = new String[expectedIsNullDescItemsList.size()]; - for (int i = 0; i < expectedIsNullDescItemsList.size(); i++) { - expectedIsNullDescItems[i] = expectedIsNullDescItemsList.get(i).getItemName(); - } - session.close(); - assertArrayEquals(expectedIsNullDescItems, av.nullCriteria()); - } + } - @Test - public void testIsNotNullCriteriaQuery() { - final Session session = HibernateUtil.getHibernateSession(); - final List expectedIsNotNullDescItemsList = session - .createQuery("From Item where itemDescription is not null").list(); - final String expectedIsNotNullDescItems[] = new String[expectedIsNotNullDescItemsList.size()]; - for (int i = 0; i < expectedIsNotNullDescItemsList.size(); i++) { - expectedIsNotNullDescItems[i] = expectedIsNotNullDescItemsList.get(i).getItemName(); - } - session.close(); - assertArrayEquals(expectedIsNotNullDescItems, av.notNullCriteria()); + @Test + public void testNullCriteriaQuery() { + final Session session = HibernateUtil.getHibernateSession(); + final List expectedIsNullDescItemsList = session.createQuery("From Item where itemDescription is null").list(); + final String expectedIsNullDescItems[] = new String[expectedIsNullDescItemsList.size()]; + for (int i = 0; i < expectedIsNullDescItemsList.size(); i++) { + expectedIsNullDescItems[i] = expectedIsNullDescItemsList.get(i).getItemName(); + } + session.close(); + assertArrayEquals(expectedIsNullDescItems, av.nullCriteria()); + } - } + @Test + public void testIsNotNullCriteriaQuery() { + final Session session = HibernateUtil.getHibernateSession(); + final List expectedIsNotNullDescItemsList = session.createQuery("From Item where itemDescription is not null").list(); + final String expectedIsNotNullDescItems[] = new String[expectedIsNotNullDescItemsList.size()]; + for (int i = 0; i < expectedIsNotNullDescItemsList.size(); i++) { + expectedIsNotNullDescItems[i] = expectedIsNotNullDescItemsList.get(i).getItemName(); + } + session.close(); + assertArrayEquals(expectedIsNotNullDescItems, av.notNullCriteria()); - @Test - public void testAverageProjection() { - final Session session = HibernateUtil.getHibernateSession(); - final List expectedAvgProjItemsList = session.createQuery("Select avg(itemPrice) from Item item") - .list(); + } - final Double expectedAvgProjItems[] = new Double[expectedAvgProjItemsList.size()]; - for (int i = 0; i < expectedAvgProjItemsList.size(); i++) { - expectedAvgProjItems[i] = expectedAvgProjItemsList.get(i); - } - session.close(); - assertArrayEquals(expectedAvgProjItems, av.projectionAverage()); + @Test + public void testAverageProjection() { + final Session session = HibernateUtil.getHibernateSession(); + final List expectedAvgProjItemsList = session.createQuery("Select avg(itemPrice) from Item item").list(); - } + final Double expectedAvgProjItems[] = new Double[expectedAvgProjItemsList.size()]; + for (int i = 0; i < expectedAvgProjItemsList.size(); i++) { + expectedAvgProjItems[i] = expectedAvgProjItemsList.get(i); + } + session.close(); + assertArrayEquals(expectedAvgProjItems, av.projectionAverage()); - @Test - public void testRowCountProjection() { - final Session session = HibernateUtil.getHibernateSession(); - final List expectedCountProjItemsList = session.createQuery("Select count(*) from Item").list(); - final Long expectedCountProjItems[] = new Long[expectedCountProjItemsList.size()]; - for (int i = 0; i < expectedCountProjItemsList.size(); i++) { - expectedCountProjItems[i] = expectedCountProjItemsList.get(i); - } - session.close(); - assertArrayEquals(expectedCountProjItems, av.projectionRowCount()); - } + } - @Test - public void testOrCriteriaQuery() { - final Session session = HibernateUtil.getHibernateSession(); - final List expectedOrCritItemsList = session - .createQuery("From Item where itemPrice>1000 or itemName like 'Chair%'").list(); - final String expectedOrCritItems[] = new String[expectedOrCritItemsList.size()]; - for (int i = 0; i < expectedOrCritItemsList.size(); i++) { - expectedOrCritItems[i] = expectedOrCritItemsList.get(i).getItemName(); - } - session.close(); - assertArrayEquals(expectedOrCritItems, av.orLogicalCriteria()); - } + @Test + public void testRowCountProjection() { + final Session session = HibernateUtil.getHibernateSession(); + final List expectedCountProjItemsList = session.createQuery("Select count(*) from Item").list(); + final Long expectedCountProjItems[] = new Long[expectedCountProjItemsList.size()]; + for (int i = 0; i < expectedCountProjItemsList.size(); i++) { + expectedCountProjItems[i] = expectedCountProjItemsList.get(i); + } + session.close(); + assertArrayEquals(expectedCountProjItems, av.projectionRowCount()); + } - @Test - public void testAndCriteriaQuery() { - final Session session = HibernateUtil.getHibernateSession(); - final List expectedAndCritItemsList = session - .createQuery("From Item where itemPrice>1000 and itemName like 'Chair%'").list(); - final String expectedAndCritItems[] = new String[expectedAndCritItemsList.size()]; - for (int i = 0; i < expectedAndCritItemsList.size(); i++) { - expectedAndCritItems[i] = expectedAndCritItemsList.get(i).getItemName(); - } - session.close(); - assertArrayEquals(expectedAndCritItems, av.andLogicalCriteria()); - } + @Test + public void testOrCriteriaQuery() { + final Session session = HibernateUtil.getHibernateSession(); + final List expectedOrCritItemsList = session.createQuery("From Item where itemPrice>1000 or itemName like 'Chair%'").list(); + final String expectedOrCritItems[] = new String[expectedOrCritItemsList.size()]; + for (int i = 0; i < expectedOrCritItemsList.size(); i++) { + expectedOrCritItems[i] = expectedOrCritItemsList.get(i).getItemName(); + } + session.close(); + assertArrayEquals(expectedOrCritItems, av.orLogicalCriteria()); + } - @Test - public void testMultiCriteriaQuery() { - final Session session = HibernateUtil.getHibernateSession(); - final List expectedMultiCritItemsList = session - .createQuery("From Item where itemDescription is null and itemName like'chair%'").list(); - final String expectedMultiCritItems[] = new String[expectedMultiCritItemsList.size()]; - for (int i = 0; i < expectedMultiCritItemsList.size(); i++) { - expectedMultiCritItems[i] = expectedMultiCritItemsList.get(i).getItemName(); - } - session.close(); - assertArrayEquals(expectedMultiCritItems, av.twoCriteria()); - } + @Test + public void testAndCriteriaQuery() { + final Session session = HibernateUtil.getHibernateSession(); + final List expectedAndCritItemsList = session.createQuery("From Item where itemPrice>1000 and itemName like 'Chair%'").list(); + final String expectedAndCritItems[] = new String[expectedAndCritItemsList.size()]; + for (int i = 0; i < expectedAndCritItemsList.size(); i++) { + expectedAndCritItems[i] = expectedAndCritItemsList.get(i).getItemName(); + } + session.close(); + assertArrayEquals(expectedAndCritItems, av.andLogicalCriteria()); + } - @Test - public void testSortCriteriaQuery() { - final Session session = HibernateUtil.getHibernateSession(); - final List expectedSortCritItemsList = session - .createQuery("From Item order by itemName asc, itemPrice desc").list(); - final String expectedSortCritItems[] = new String[expectedSortCritItemsList.size()]; - for (int i = 0; i < expectedSortCritItemsList.size(); i++) { - expectedSortCritItems[i] = expectedSortCritItemsList.get(i).getItemName(); - } - session.close(); - assertArrayEquals(expectedSortCritItems, av.sortingCriteria()); - } + @Test + public void testMultiCriteriaQuery() { + final Session session = HibernateUtil.getHibernateSession(); + final List expectedMultiCritItemsList = session.createQuery("From Item where itemDescription is null and itemName like'chair%'").list(); + final String expectedMultiCritItems[] = new String[expectedMultiCritItemsList.size()]; + for (int i = 0; i < expectedMultiCritItemsList.size(); i++) { + expectedMultiCritItems[i] = expectedMultiCritItemsList.get(i).getItemName(); + } + session.close(); + assertArrayEquals(expectedMultiCritItems, av.twoCriteria()); + } - @Test - public void testGreaterThanCriteriaQuery() { - final Session session = HibernateUtil.getHibernateSession(); - final List expectedGreaterThanList = session.createQuery("From Item where itemPrice>1000").list(); - final String expectedGreaterThanItems[] = new String[expectedGreaterThanList.size()]; - for (int i = 0; i < expectedGreaterThanList.size(); i++) { - expectedGreaterThanItems[i] = expectedGreaterThanList.get(i).getItemName(); - } - session.close(); - assertArrayEquals(expectedGreaterThanItems, av.greaterThanCriteria()); - } + @Test + public void testSortCriteriaQuery() { + final Session session = HibernateUtil.getHibernateSession(); + final List expectedSortCritItemsList = session.createQuery("From Item order by itemName asc, itemPrice desc").list(); + final String expectedSortCritItems[] = new String[expectedSortCritItemsList.size()]; + for (int i = 0; i < expectedSortCritItemsList.size(); i++) { + expectedSortCritItems[i] = expectedSortCritItemsList.get(i).getItemName(); + } + session.close(); + assertArrayEquals(expectedSortCritItems, av.sortingCriteria()); + } - @Test - public void testLessThanCriteriaQuery() { - final Session session = HibernateUtil.getHibernateSession(); - final List expectedLessList = session.createQuery("From Item where itemPrice<1000").list(); - final String expectedLessThanItems[] = new String[expectedLessList.size()]; - for (int i = 0; i < expectedLessList.size(); i++) { - expectedLessThanItems[i] = expectedLessList.get(i).getItemName(); - } - session.close(); - assertArrayEquals(expectedLessThanItems, av.lessThanCriteria()); - } + @Test + public void testGreaterThanCriteriaQuery() { + final Session session = HibernateUtil.getHibernateSession(); + final List expectedGreaterThanList = session.createQuery("From Item where itemPrice>1000").list(); + final String expectedGreaterThanItems[] = new String[expectedGreaterThanList.size()]; + for (int i = 0; i < expectedGreaterThanList.size(); i++) { + expectedGreaterThanItems[i] = expectedGreaterThanList.get(i).getItemName(); + } + session.close(); + assertArrayEquals(expectedGreaterThanItems, av.greaterThanCriteria()); + } - @Test - public void betweenCriteriaQuery() { - final Session session = HibernateUtil.getHibernateSession(); - final List expectedBetweenList = session.createQuery("From Item where itemPrice between 100 and 200") - .list(); - final String expectedPriceBetweenItems[] = new String[expectedBetweenList.size()]; - for (int i = 0; i < expectedBetweenList.size(); i++) { - expectedPriceBetweenItems[i] = expectedBetweenList.get(i).getItemName(); - } - session.close(); - assertArrayEquals(expectedPriceBetweenItems, av.betweenCriteria()); - } + @Test + public void testLessThanCriteriaQuery() { + final Session session = HibernateUtil.getHibernateSession(); + final List expectedLessList = session.createQuery("From Item where itemPrice<1000").list(); + final String expectedLessThanItems[] = new String[expectedLessList.size()]; + for (int i = 0; i < expectedLessList.size(); i++) { + expectedLessThanItems[i] = expectedLessList.get(i).getItemName(); + } + session.close(); + assertArrayEquals(expectedLessThanItems, av.lessThanCriteria()); + } + + @Test + public void betweenCriteriaQuery() { + final Session session = HibernateUtil.getHibernateSession(); + final List expectedBetweenList = session.createQuery("From Item where itemPrice between 100 and 200").list(); + final String expectedPriceBetweenItems[] = new String[expectedBetweenList.size()]; + for (int i = 0; i < expectedBetweenList.size(); i++) { + expectedPriceBetweenItems[i] = expectedBetweenList.get(i).getItemName(); + } + session.close(); + assertArrayEquals(expectedPriceBetweenItems, av.betweenCriteria()); + } } diff --git a/spring-hibernate4/src/test/java/com/baeldung/hibernate/criteria/HibernateCriteriaTestRunner.java b/spring-hibernate4/src/test/java/com/baeldung/hibernate/criteria/HibernateCriteriaTestRunner.java index 8341df9fcb..99164efb7a 100644 --- a/spring-hibernate4/src/test/java/com/baeldung/hibernate/criteria/HibernateCriteriaTestRunner.java +++ b/spring-hibernate4/src/test/java/com/baeldung/hibernate/criteria/HibernateCriteriaTestRunner.java @@ -6,10 +6,10 @@ import org.junit.runner.notification.Failure; public class HibernateCriteriaTestRunner { - public static void main(final String[] args) { - Result result = JUnitCore.runClasses(HibernateCriteriaTestSuite.class); - for (Failure failure : result.getFailures()) { - - } - } + public static void main(final String[] args) { + Result result = JUnitCore.runClasses(HibernateCriteriaTestSuite.class); + for (Failure failure : result.getFailures()) { + + } + } } diff --git a/spring-hibernate4/src/test/java/com/baeldung/hibernate/criteria/HibernateCriteriaTestSuite.java b/spring-hibernate4/src/test/java/com/baeldung/hibernate/criteria/HibernateCriteriaTestSuite.java index ab27a6ba82..2911fb4725 100644 --- a/spring-hibernate4/src/test/java/com/baeldung/hibernate/criteria/HibernateCriteriaTestSuite.java +++ b/spring-hibernate4/src/test/java/com/baeldung/hibernate/criteria/HibernateCriteriaTestSuite.java @@ -7,5 +7,5 @@ import org.junit.runners.Suite; @Suite.SuiteClasses({ HibernateCriteriaTest.class }) public class HibernateCriteriaTestSuite { - + } diff --git a/spring-hibernate4/src/test/java/com/baeldung/hibernate/fetching/HibernateFetchingTest.java b/spring-hibernate4/src/test/java/com/baeldung/hibernate/fetching/HibernateFetchingTest.java index a650f8eb37..42245ca89e 100644 --- a/spring-hibernate4/src/test/java/com/baeldung/hibernate/fetching/HibernateFetchingTest.java +++ b/spring-hibernate4/src/test/java/com/baeldung/hibernate/fetching/HibernateFetchingTest.java @@ -13,31 +13,30 @@ import static org.junit.Assert.assertTrue; public class HibernateFetchingTest { + // this loads sample data in the database + @Before + public void addFecthingTestData() { + FetchingAppView fav = new FetchingAppView(); + fav.createTestData(); + } - //this loads sample data in the database - @Before - public void addFecthingTestData(){ - FetchingAppView fav = new FetchingAppView(); - fav.createTestData(); - } - - //testLazyFetching() tests the lazy loading - //Since it lazily loaded so orderDetalSetLazy won't - //be initialized - @Test - public void testLazyFetching() { - FetchingAppView fav = new FetchingAppView(); - Set orderDetalSetLazy = fav.lazyLoaded(); - assertFalse(Hibernate.isInitialized(orderDetalSetLazy)); - } - - //testEagerFetching() tests the eager loading - //Since it eagerly loaded so orderDetalSetLazy would - //be initialized - @Test - public void testEagerFetching() { - FetchingAppView fav = new FetchingAppView(); - Set orderDetalSetEager = fav.eagerLoaded(); - assertTrue(Hibernate.isInitialized(orderDetalSetEager)); - } + // testLazyFetching() tests the lazy loading + // Since it lazily loaded so orderDetalSetLazy won't + // be initialized + @Test + public void testLazyFetching() { + FetchingAppView fav = new FetchingAppView(); + Set orderDetalSetLazy = fav.lazyLoaded(); + assertFalse(Hibernate.isInitialized(orderDetalSetLazy)); + } + + // testEagerFetching() tests the eager loading + // Since it eagerly loaded so orderDetalSetLazy would + // be initialized + @Test + public void testEagerFetching() { + FetchingAppView fav = new FetchingAppView(); + Set orderDetalSetEager = fav.eagerLoaded(); + assertTrue(Hibernate.isInitialized(orderDetalSetEager)); + } } diff --git a/spring-hibernate4/src/test/java/com/baeldung/persistence/save/SaveMethodsTest.java b/spring-hibernate4/src/test/java/com/baeldung/persistence/save/SaveMethodsTest.java index aadaefbe44..2e729c5680 100644 --- a/spring-hibernate4/src/test/java/com/baeldung/persistence/save/SaveMethodsTest.java +++ b/spring-hibernate4/src/test/java/com/baeldung/persistence/save/SaveMethodsTest.java @@ -1,6 +1,5 @@ package com.baeldung.persistence.save; - import com.baeldung.persistence.model.Person; import org.hibernate.HibernateException; import org.hibernate.Session; @@ -25,16 +24,9 @@ public class SaveMethodsTest { @BeforeClass public static void beforeTests() { - Configuration configuration = new Configuration() - .addAnnotatedClass(Person.class) - .setProperty("hibernate.dialect", HSQLDialect.class.getName()) - .setProperty("hibernate.connection.driver_class", org.hsqldb.jdbcDriver.class.getName()) - .setProperty("hibernate.connection.url", "jdbc:hsqldb:mem:test") - .setProperty("hibernate.connection.username", "sa") - .setProperty("hibernate.connection.password", "") - .setProperty("hibernate.hbm2ddl.auto", "update"); - ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings( - configuration.getProperties()).build(); + Configuration configuration = new Configuration().addAnnotatedClass(Person.class).setProperty("hibernate.dialect", HSQLDialect.class.getName()).setProperty("hibernate.connection.driver_class", org.hsqldb.jdbcDriver.class.getName()) + .setProperty("hibernate.connection.url", "jdbc:hsqldb:mem:test").setProperty("hibernate.connection.username", "sa").setProperty("hibernate.connection.password", "").setProperty("hibernate.hbm2ddl.auto", "update"); + ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build(); sessionFactory = configuration.buildSessionFactory(serviceRegistry); } @@ -44,7 +36,6 @@ public class SaveMethodsTest { session.beginTransaction(); } - @Test public void whenPersistTransient_thenSavedToDatabaseOnCommit() { @@ -244,7 +235,6 @@ public class SaveMethodsTest { assertNotNull(session.get(Person.class, person.getId())); - } @Test diff --git a/spring-hibernate4/src/test/java/com/baeldung/persistence/service/FooStoredProceduresIntegrationTest.java b/spring-hibernate4/src/test/java/com/baeldung/persistence/service/FooStoredProceduresIntegrationTest.java index 238b228101..db64107405 100644 --- a/spring-hibernate4/src/test/java/com/baeldung/persistence/service/FooStoredProceduresIntegrationTest.java +++ b/spring-hibernate4/src/test/java/com/baeldung/persistence/service/FooStoredProceduresIntegrationTest.java @@ -25,7 +25,7 @@ import com.baeldung.persistence.model.Foo; import com.baeldung.spring.PersistenceConfig; @RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(classes = {PersistenceConfig.class}, loader = AnnotationConfigContextLoader.class) +@ContextConfiguration(classes = { PersistenceConfig.class }, loader = AnnotationConfigContextLoader.class) public class FooStoredProceduresIntegrationTest { private static final Logger LOGGER = LoggerFactory.getLogger(FooStoredProceduresIntegrationTest.class); @@ -47,8 +47,7 @@ public class FooStoredProceduresIntegrationTest { private boolean getFoosByNameExists() { try { - Query sqlQuery = session.createSQLQuery("CALL GetAllFoos()") - .addEntity(Foo.class); + Query sqlQuery = session.createSQLQuery("CALL GetAllFoos()").addEntity(Foo.class); sqlQuery.list(); return true; } catch (SQLGrammarException e) { @@ -59,8 +58,7 @@ public class FooStoredProceduresIntegrationTest { private boolean getAllFoosExists() { try { - Query sqlQuery = session.createSQLQuery("CALL GetAllFoos()") - .addEntity(Foo.class); + Query sqlQuery = session.createSQLQuery("CALL GetAllFoos()").addEntity(Foo.class); sqlQuery.list(); return true; } catch (SQLGrammarException e) { @@ -80,8 +78,7 @@ public class FooStoredProceduresIntegrationTest { fooService.create(new Foo(randomAlphabetic(6))); // Stored procedure getAllFoos using createSQLQuery - Query sqlQuery = session.createSQLQuery("CALL GetAllFoos()").addEntity( - Foo.class); + Query sqlQuery = session.createSQLQuery("CALL GetAllFoos()").addEntity(Foo.class); @SuppressWarnings("unchecked") List allFoos = sqlQuery.list(); for (Foo foo : allFoos) { @@ -105,8 +102,7 @@ public class FooStoredProceduresIntegrationTest { fooService.create(new Foo("NewFooName")); // Stored procedure getFoosByName using createSQLQuery() - Query sqlQuery = session.createSQLQuery("CALL GetFoosByName(:fooName)") - .addEntity(Foo.class).setParameter("fooName", "NewFooName"); + Query sqlQuery = session.createSQLQuery("CALL GetFoosByName(:fooName)").addEntity(Foo.class).setParameter("fooName", "NewFooName"); @SuppressWarnings("unchecked") List allFoosByName = sqlQuery.list(); for (Foo foo : allFoosByName) { @@ -114,8 +110,7 @@ public class FooStoredProceduresIntegrationTest { } // Stored procedure getFoosByName using getNamedQuery() - Query namedQuery = session.getNamedQuery("callGetFoosByName") - .setParameter("fooName", "NewFooName"); + Query namedQuery = session.getNamedQuery("callGetFoosByName").setParameter("fooName", "NewFooName"); @SuppressWarnings("unchecked") List allFoosByName2 = namedQuery.list(); for (Foo foo : allFoosByName2) { diff --git a/spring-jms/src/test/java/com/baeldung/spring/jms/DefaultTextMessageSenderTest.java b/spring-jms/src/test/java/com/baeldung/spring/jms/DefaultTextMessageSenderTest.java index 439bc6caad..c0761939ad 100644 --- a/spring-jms/src/test/java/com/baeldung/spring/jms/DefaultTextMessageSenderTest.java +++ b/spring-jms/src/test/java/com/baeldung/spring/jms/DefaultTextMessageSenderTest.java @@ -12,8 +12,7 @@ public class DefaultTextMessageSenderTest { @SuppressWarnings("resource") @BeforeClass public static void setUp() { - ApplicationContext applicationContext = new ClassPathXmlApplicationContext( - "classpath:EmbeddedActiveMQ.xml", "classpath:applicationContext.xml"); + ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:EmbeddedActiveMQ.xml", "classpath:applicationContext.xml"); messageProducer = (SampleJmsMessageSender) applicationContext.getBean("SampleJmsMessageSender"); } diff --git a/spring-jms/src/test/java/com/baeldung/spring/jms/MapMessageConvertAndSendTest.java b/spring-jms/src/test/java/com/baeldung/spring/jms/MapMessageConvertAndSendTest.java index da9bb0294d..117f8bed82 100644 --- a/spring-jms/src/test/java/com/baeldung/spring/jms/MapMessageConvertAndSendTest.java +++ b/spring-jms/src/test/java/com/baeldung/spring/jms/MapMessageConvertAndSendTest.java @@ -12,8 +12,7 @@ public class MapMessageConvertAndSendTest { @SuppressWarnings("resource") @BeforeClass public static void setUp() { - ApplicationContext applicationContext = new ClassPathXmlApplicationContext( - "classpath:EmbeddedActiveMQ.xml", "classpath:applicationContext.xml"); + ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:EmbeddedActiveMQ.xml", "classpath:applicationContext.xml"); messageProducer = (SampleJmsMessageSender) applicationContext.getBean("SampleJmsMessageSender"); } diff --git a/spring-jpa/src/test/java/org/baeldung/persistence/service/SecondLevelCacheIntegrationTest.java b/spring-jpa/src/test/java/org/baeldung/persistence/service/SecondLevelCacheIntegrationTest.java index f97f53b82c..907043b8ce 100644 --- a/spring-jpa/src/test/java/org/baeldung/persistence/service/SecondLevelCacheIntegrationTest.java +++ b/spring-jpa/src/test/java/org/baeldung/persistence/service/SecondLevelCacheIntegrationTest.java @@ -43,8 +43,7 @@ public class SecondLevelCacheIntegrationTest { final Foo foo = new Foo(randomAlphabetic(6)); fooService.create(foo); fooService.findOne(foo.getId()); - final int size = CacheManager.ALL_CACHE_MANAGERS.get(0) - .getCache("org.baeldung.persistence.model.Foo").getSize(); + final int size = CacheManager.ALL_CACHE_MANAGERS.get(0).getCache("org.baeldung.persistence.model.Foo").getSize(); assertThat(size, greaterThan(0)); } @@ -64,21 +63,17 @@ public class SecondLevelCacheIntegrationTest { return nativeQuery.executeUpdate(); }); - final int size = CacheManager.ALL_CACHE_MANAGERS.get(0) - .getCache("org.baeldung.persistence.model.Foo").getSize(); + final int size = CacheManager.ALL_CACHE_MANAGERS.get(0).getCache("org.baeldung.persistence.model.Foo").getSize(); assertThat(size, greaterThan(0)); } @Test public final void givenCacheableQueryIsExecuted_thenItIsCached() { new TransactionTemplate(platformTransactionManager).execute(status -> { - return entityManager.createQuery("select f from Foo f") - .setHint("org.hibernate.cacheable", true) - .getResultList(); + return entityManager.createQuery("select f from Foo f").setHint("org.hibernate.cacheable", true).getResultList(); }); - final int size = CacheManager.ALL_CACHE_MANAGERS.get(0) - .getCache("org.hibernate.cache.internal.StandardQueryCache").getSize(); + final int size = CacheManager.ALL_CACHE_MANAGERS.get(0).getCache("org.hibernate.cache.internal.StandardQueryCache").getSize(); assertThat(size, greaterThan(0)); } } diff --git a/spring-katharsis/src/main/java/org/baeldung/persistence/model/User.java b/spring-katharsis/src/main/java/org/baeldung/persistence/model/User.java index 67e4c6ae1d..58a92002c8 100644 --- a/spring-katharsis/src/main/java/org/baeldung/persistence/model/User.java +++ b/spring-katharsis/src/main/java/org/baeldung/persistence/model/User.java @@ -30,7 +30,7 @@ public class User { private String email; @ManyToMany(fetch = FetchType.EAGER) - @JoinTable(name = "users_roles", joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id") , inverseJoinColumns = @JoinColumn(name = "role_id", referencedColumnName = "id") ) + @JoinTable(name = "users_roles", joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "role_id", referencedColumnName = "id")) @JsonApiToMany @JsonApiIncludeByDefault private Set roles; diff --git a/spring-mockito/src/main/java/com/baeldung/MocksApplication.java b/spring-mockito/src/main/java/com/baeldung/MocksApplication.java index 32be4c6a0a..94309cf1a6 100644 --- a/spring-mockito/src/main/java/com/baeldung/MocksApplication.java +++ b/spring-mockito/src/main/java/com/baeldung/MocksApplication.java @@ -5,7 +5,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class MocksApplication { - public static void main(String[] args) { - SpringApplication.run(MocksApplication.class, args); - } + public static void main(String[] args) { + SpringApplication.run(MocksApplication.class, args); + } } diff --git a/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/controller/MainController.java b/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/controller/MainController.java index 679a455f3f..10b54e345c 100644 --- a/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/controller/MainController.java +++ b/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/controller/MainController.java @@ -17,13 +17,12 @@ public class MainController { @Autowired private ITutorialsService tutService; - @RequestMapping(value ="/", method = RequestMethod.GET) + @RequestMapping(value = "/", method = RequestMethod.GET) public String welcomePage() { - return "index"; + return "index"; } - - - @RequestMapping(value ="/list", method = RequestMethod.GET) + + @RequestMapping(value = "/list", method = RequestMethod.GET) public String listTutorialsPage(Model model) { List list = tutService.listTutorials(); model.addAttribute("tutorials", list); @@ -37,6 +36,5 @@ public class MainController { public void setTutService(ITutorialsService tutService) { this.tutService = tutService; } - - + } \ No newline at end of file diff --git a/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/service/ITutorialsService.java b/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/service/ITutorialsService.java index 24059f2662..237b603590 100644 --- a/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/service/ITutorialsService.java +++ b/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/service/ITutorialsService.java @@ -6,5 +6,5 @@ import java.util.List; public interface ITutorialsService { - List listTutorials(); + List listTutorials(); } diff --git a/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/service/TutorialsService.java b/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/service/TutorialsService.java index f67cc0824f..9d48e130c8 100644 --- a/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/service/TutorialsService.java +++ b/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/service/TutorialsService.java @@ -10,9 +10,6 @@ import java.util.List; public class TutorialsService implements ITutorialsService { public List listTutorials() { - return Arrays.asList( - new Tutorial(1, "Guava", "Introduction to Guava", "GuavaAuthor"), - new Tutorial(2, "Android", "Introduction to Android", "AndroidAuthor") - ); + return Arrays.asList(new Tutorial(1, "Guava", "Introduction to Guava", "GuavaAuthor"), new Tutorial(2, "Android", "Introduction to Android", "AndroidAuthor")); } } diff --git a/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/spring/config/WebConfig.java b/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/spring/config/WebConfig.java index ce8ce1919a..17388b52b0 100644 --- a/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/spring/config/WebConfig.java +++ b/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/spring/config/WebConfig.java @@ -13,7 +13,7 @@ import org.springframework.web.servlet.view.velocity.VelocityLayoutViewResolver; @Configuration @EnableWebMvc -@ComponentScan(basePackages = { "com.baeldung.mvc.velocity.controller", "com.baeldung.mvc.velocity.service"}) +@ComponentScan(basePackages = { "com.baeldung.mvc.velocity.controller", "com.baeldung.mvc.velocity.service" }) public class WebConfig extends WebMvcConfigurerAdapter { @Override diff --git a/spring-mvc-velocity/src/test/java/com/baeldung/mvc/velocity/test/DataContentControllerTest.java b/spring-mvc-velocity/src/test/java/com/baeldung/mvc/velocity/test/DataContentControllerTest.java index a9fb242755..1f90b0fc67 100644 --- a/spring-mvc-velocity/src/test/java/com/baeldung/mvc/velocity/test/DataContentControllerTest.java +++ b/spring-mvc-velocity/src/test/java/com/baeldung/mvc/velocity/test/DataContentControllerTest.java @@ -38,7 +38,6 @@ public class DataContentControllerTest { @Before public void setUp() { - mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build(); } @@ -53,9 +52,9 @@ public class DataContentControllerTest { mockMvc.perform(get("/list")).andExpect(xpath("//table").exists()); mockMvc.perform(get("/list")).andExpect(xpath("//td[@id='tutId_1']").exists()); } - + @Test - public void whenCallingIndex_thenViewOK() throws Exception{ + public void whenCallingIndex_thenViewOK() throws Exception { mockMvc.perform(get("/")).andExpect(status().isOk()).andExpect(view().name("index")).andExpect(model().size(0)); } } diff --git a/spring-mvc-velocity/src/test/java/com/baeldung/mvc/velocity/test/config/TestConfig.java b/spring-mvc-velocity/src/test/java/com/baeldung/mvc/velocity/test/config/TestConfig.java index 8b84bcdd23..a75cd1291a 100644 --- a/spring-mvc-velocity/src/test/java/com/baeldung/mvc/velocity/test/config/TestConfig.java +++ b/spring-mvc-velocity/src/test/java/com/baeldung/mvc/velocity/test/config/TestConfig.java @@ -8,7 +8,6 @@ import org.springframework.web.servlet.view.velocity.VelocityLayoutViewResolver; @Configuration public class TestConfig { - @Bean public ViewResolver viewResolver() { @@ -19,14 +18,12 @@ public class TestConfig { bean.setSuffix(".vm"); return bean; } - + @Bean public VelocityConfigurer velocityConfig() { VelocityConfigurer velocityConfigurer = new VelocityConfigurer(); velocityConfigurer.setResourceLoaderPath("/"); return velocityConfigurer; } - - } diff --git a/spring-mvc-xml/src/main/java/com/baeldung/spring/ClientWebConfig.java b/spring-mvc-xml/src/main/java/com/baeldung/spring/ClientWebConfig.java index 76351b96f7..b5238b04d5 100644 --- a/spring-mvc-xml/src/main/java/com/baeldung/spring/ClientWebConfig.java +++ b/spring-mvc-xml/src/main/java/com/baeldung/spring/ClientWebConfig.java @@ -8,10 +8,10 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter @Configuration public class ClientWebConfig extends WebMvcConfigurerAdapter { - public ClientWebConfig() { - super(); - } + public ClientWebConfig() { + super(); + } - // API + // API } \ No newline at end of file diff --git a/spring-mvc-xml/src/main/java/com/baeldung/spring/ClientWebConfigJava.java b/spring-mvc-xml/src/main/java/com/baeldung/spring/ClientWebConfigJava.java index bee09b742a..f299c46dbc 100644 --- a/spring-mvc-xml/src/main/java/com/baeldung/spring/ClientWebConfigJava.java +++ b/spring-mvc-xml/src/main/java/com/baeldung/spring/ClientWebConfigJava.java @@ -17,40 +17,40 @@ import org.springframework.web.servlet.view.JstlView; //@Configuration public class ClientWebConfigJava extends WebMvcConfigurerAdapter { - public ClientWebConfigJava() { - super(); - } + public ClientWebConfigJava() { + super(); + } - @Bean - public MessageSource messageSource() { + @Bean + public MessageSource messageSource() { - final ResourceBundleMessageSource ms = new ResourceBundleMessageSource(); - ms.setBasenames("messages"); - return ms; - } + final ResourceBundleMessageSource ms = new ResourceBundleMessageSource(); + ms.setBasenames("messages"); + return ms; + } - @Bean - public ResourceBundle getBeanResourceBundle() { + @Bean + public ResourceBundle getBeanResourceBundle() { - final Locale locale = Locale.getDefault(); - return new MessageSourceResourceBundle(messageSource(), locale); - } + final Locale locale = Locale.getDefault(); + return new MessageSourceResourceBundle(messageSource(), locale); + } - @Override - public void addViewControllers(final ViewControllerRegistry registry) { - super.addViewControllers(registry); + @Override + public void addViewControllers(final ViewControllerRegistry registry) { + super.addViewControllers(registry); - registry.addViewController("/sample.html"); - } + registry.addViewController("/sample.html"); + } - @Bean - public ViewResolver viewResolver() { - final InternalResourceViewResolver bean = new InternalResourceViewResolver(); + @Bean + public ViewResolver viewResolver() { + final InternalResourceViewResolver bean = new InternalResourceViewResolver(); - bean.setViewClass(JstlView.class); - bean.setPrefix("/WEB-INF/view/"); - bean.setSuffix(".jsp"); + bean.setViewClass(JstlView.class); + bean.setPrefix("/WEB-INF/view/"); + bean.setSuffix(".jsp"); - return bean; - } + return bean; + } } \ No newline at end of file diff --git a/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/EmployeeController.java b/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/EmployeeController.java index aa25f47a2a..fa76933f8f 100644 --- a/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/EmployeeController.java +++ b/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/EmployeeController.java @@ -18,28 +18,28 @@ import com.baeldung.spring.form.Employee; @Controller public class EmployeeController { - Map employeeMap = new HashMap<>(); + Map employeeMap = new HashMap<>(); - @RequestMapping(value = "/employee", method = RequestMethod.GET) - public ModelAndView showForm() { - return new ModelAndView("employeeHome", "employee", new Employee()); - } + @RequestMapping(value = "/employee", method = RequestMethod.GET) + public ModelAndView showForm() { + return new ModelAndView("employeeHome", "employee", new Employee()); + } - @RequestMapping(value = "/employee/{Id}", produces = { "application/json", "application/xml" }, method = RequestMethod.GET) - public @ResponseBody Employee getEmployeeById(@PathVariable final long Id) { - return employeeMap.get(Id); - } + @RequestMapping(value = "/employee/{Id}", produces = { "application/json", "application/xml" }, method = RequestMethod.GET) + public @ResponseBody Employee getEmployeeById(@PathVariable final long Id) { + return employeeMap.get(Id); + } - @RequestMapping(value = "/addEmployee", method = RequestMethod.POST) - public String submit(@ModelAttribute("employee") final Employee employee, final BindingResult result, final ModelMap model) { - if (result.hasErrors()) { - return "error"; - } - model.addAttribute("name", employee.getName()); - model.addAttribute("contactNumber", employee.getContactNumber()); - model.addAttribute("id", employee.getId()); - employeeMap.put(employee.getId(), employee); - return "employeeView"; - } + @RequestMapping(value = "/addEmployee", method = RequestMethod.POST) + public String submit(@ModelAttribute("employee") final Employee employee, final BindingResult result, final ModelMap model) { + if (result.hasErrors()) { + return "error"; + } + model.addAttribute("name", employee.getName()); + model.addAttribute("contactNumber", employee.getContactNumber()); + model.addAttribute("id", employee.getId()); + employeeMap.put(employee.getId(), employee); + return "employeeView"; + } } diff --git a/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/HelloController.java b/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/HelloController.java index cc9d66d4d4..17f0801a6e 100644 --- a/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/HelloController.java +++ b/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/HelloController.java @@ -11,8 +11,7 @@ public class HelloController extends AbstractController { @Override protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { ModelAndView model = new ModelAndView("helloworld"); - model.addObject("msg", "Welcome to Baeldung's Spring Handler Mappings Guide.
    This request was mapped" + - " using SimpleUrlHandlerMapping."); + model.addObject("msg", "Welcome to Baeldung's Spring Handler Mappings Guide.
    This request was mapped" + " using SimpleUrlHandlerMapping."); return model; } diff --git a/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/HelloGuestController.java b/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/HelloGuestController.java index 614888ae42..c7f3adb594 100644 --- a/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/HelloGuestController.java +++ b/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/HelloGuestController.java @@ -10,8 +10,7 @@ public class HelloGuestController extends AbstractController { @Override protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { ModelAndView model = new ModelAndView("helloworld"); - model.addObject("msg", "Welcome to Baeldung's Spring Handler Mappings Guide.
    This request was mapped" + - " using ControllerClassNameHandlerMapping."); + model.addObject("msg", "Welcome to Baeldung's Spring Handler Mappings Guide.
    This request was mapped" + " using ControllerClassNameHandlerMapping."); return model; } diff --git a/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/HelloWorldController.java b/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/HelloWorldController.java index 6ed3d06ab7..a0be507125 100644 --- a/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/HelloWorldController.java +++ b/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/HelloWorldController.java @@ -10,8 +10,7 @@ public class HelloWorldController extends AbstractController { @Override protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { ModelAndView model = new ModelAndView("helloworld"); - model.addObject("msg", "Welcome to Baeldung's Spring Handler Mappings Guide.
    This request was mapped" + - " using BeanNameUrlHandlerMapping."); + model.addObject("msg", "Welcome to Baeldung's Spring Handler Mappings Guide.
    This request was mapped" + " using BeanNameUrlHandlerMapping."); return model; } diff --git a/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/PersonController.java b/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/PersonController.java index 39dabf86ed..71d9ad7845 100644 --- a/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/PersonController.java +++ b/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/PersonController.java @@ -22,63 +22,62 @@ import org.springframework.web.servlet.ModelAndView; @Controller public class PersonController { - @Autowired - PersonValidator validator; + @Autowired + PersonValidator validator; - @RequestMapping(value = "/person", method = RequestMethod.GET) - public ModelAndView showForm(final Model model) { + @RequestMapping(value = "/person", method = RequestMethod.GET) + public ModelAndView showForm(final Model model) { - initData(model); - return new ModelAndView("personForm", "person", new Person()); - } + initData(model); + return new ModelAndView("personForm", "person", new Person()); + } - @RequestMapping(value = "/addPerson", method = RequestMethod.POST) - public String submit(@Valid @ModelAttribute("person") final Person person, final BindingResult result, - final ModelMap modelMap, final Model model) { + @RequestMapping(value = "/addPerson", method = RequestMethod.POST) + public String submit(@Valid @ModelAttribute("person") final Person person, final BindingResult result, final ModelMap modelMap, final Model model) { - validator.validate(person, result); + validator.validate(person, result); - if (result.hasErrors()) { + if (result.hasErrors()) { - initData(model); - return "personForm"; - } + initData(model); + return "personForm"; + } - modelMap.addAttribute("person", person); + modelMap.addAttribute("person", person); - return "personView"; - } + return "personView"; + } - private void initData(final Model model) { + private void initData(final Model model) { - final List favouriteLanguageItem = new ArrayList(); - favouriteLanguageItem.add("Java"); - favouriteLanguageItem.add("C++"); - favouriteLanguageItem.add("Perl"); - model.addAttribute("favouriteLanguageItem", favouriteLanguageItem); + final List favouriteLanguageItem = new ArrayList(); + favouriteLanguageItem.add("Java"); + favouriteLanguageItem.add("C++"); + favouriteLanguageItem.add("Perl"); + model.addAttribute("favouriteLanguageItem", favouriteLanguageItem); - final List jobItem = new ArrayList(); - jobItem.add("Full time"); - jobItem.add("Part time"); - model.addAttribute("jobItem", jobItem); + final List jobItem = new ArrayList(); + jobItem.add("Full time"); + jobItem.add("Part time"); + model.addAttribute("jobItem", jobItem); - final Map countryItems = new LinkedHashMap(); - countryItems.put("US", "United Stated"); - countryItems.put("IT", "Italy"); - countryItems.put("UK", "United Kingdom"); - countryItems.put("FR", "Grance"); - model.addAttribute("countryItems", countryItems); + final Map countryItems = new LinkedHashMap(); + countryItems.put("US", "United Stated"); + countryItems.put("IT", "Italy"); + countryItems.put("UK", "United Kingdom"); + countryItems.put("FR", "Grance"); + model.addAttribute("countryItems", countryItems); - final List fruit = new ArrayList(); - fruit.add("Banana"); - fruit.add("Mango"); - fruit.add("Apple"); - model.addAttribute("fruit", fruit); + final List fruit = new ArrayList(); + fruit.add("Banana"); + fruit.add("Mango"); + fruit.add("Apple"); + model.addAttribute("fruit", fruit); - final List books = new ArrayList(); - books.add("The Great Gatsby"); - books.add("Nineteen Eighty-Four"); - books.add("The Lord of the Rings"); - model.addAttribute("books", books); - } + final List books = new ArrayList(); + books.add("The Great Gatsby"); + books.add("Nineteen Eighty-Four"); + books.add("The Lord of the Rings"); + model.addAttribute("books", books); + } } diff --git a/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/WelcomeController.java b/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/WelcomeController.java index 5459481674..2760fb8f89 100644 --- a/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/WelcomeController.java +++ b/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/WelcomeController.java @@ -11,8 +11,7 @@ public class WelcomeController extends AbstractController { protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { ModelAndView model = new ModelAndView("welcome"); - model.addObject("msg", " Baeldung's Spring Handler Mappings Guide.
    This request was mapped" + - " using SimpleUrlHandlerMapping."); + model.addObject("msg", " Baeldung's Spring Handler Mappings Guide.
    This request was mapped" + " using SimpleUrlHandlerMapping."); return model; } diff --git a/spring-mvc-xml/src/main/java/com/baeldung/spring/form/Person.java b/spring-mvc-xml/src/main/java/com/baeldung/spring/form/Person.java index 88e4f9ff4c..01638fbe76 100644 --- a/spring-mvc-xml/src/main/java/com/baeldung/spring/form/Person.java +++ b/spring-mvc-xml/src/main/java/com/baeldung/spring/form/Person.java @@ -7,146 +7,146 @@ import org.springframework.web.multipart.MultipartFile; public class Person { - private long id; + private long id; - private String name; - private String email; - private String dateOfBirth; + private String name; + private String email; + private String dateOfBirth; - @NotEmpty - private String password; - private String sex; - private String country; - private String book; - private String job; - private boolean receiveNewsletter; - private String[] hobbies; - private List favouriteLanguage; - private List fruit; - private String notes; - private MultipartFile file; + @NotEmpty + private String password; + private String sex; + private String country; + private String book; + private String job; + private boolean receiveNewsletter; + private String[] hobbies; + private List favouriteLanguage; + private List fruit; + private String notes; + private MultipartFile file; - public Person() { - super(); - } + public Person() { + super(); + } - public long getId() { - return id; - } + public long getId() { + return id; + } - public void setId(final long id) { - this.id = id; - } + public void setId(final long id) { + this.id = id; + } - public String getName() { - return name; - } + public String getName() { + return name; + } - public void setName(final String name) { - this.name = name; - } + public void setName(final String name) { + this.name = name; + } - public String getEmail() { - return email; - } + public String getEmail() { + return email; + } - public void setEmail(final String email) { - this.email = email; - } + public void setEmail(final String email) { + this.email = email; + } - public String getDateOfBirth() { - return dateOfBirth; - } + public String getDateOfBirth() { + return dateOfBirth; + } - public void setDateOfBirth(final String dateOfBirth) { - this.dateOfBirth = dateOfBirth; - } + public void setDateOfBirth(final String dateOfBirth) { + this.dateOfBirth = dateOfBirth; + } - public String getPassword() { - return password; - } + public String getPassword() { + return password; + } - public void setPassword(final String password) { - this.password = password; - } + public void setPassword(final String password) { + this.password = password; + } - public String getSex() { - return sex; - } + public String getSex() { + return sex; + } - public void setSex(final String sex) { - this.sex = sex; - } + public void setSex(final String sex) { + this.sex = sex; + } - public String getCountry() { - return country; - } + public String getCountry() { + return country; + } - public void setCountry(final String country) { - this.country = country; - } + public void setCountry(final String country) { + this.country = country; + } - public String getJob() { - return job; - } + public String getJob() { + return job; + } - public void setJob(final String job) { - this.job = job; - } + public void setJob(final String job) { + this.job = job; + } - public boolean isReceiveNewsletter() { - return receiveNewsletter; - } + public boolean isReceiveNewsletter() { + return receiveNewsletter; + } - public void setReceiveNewsletter(final boolean receiveNewsletter) { - this.receiveNewsletter = receiveNewsletter; - } + public void setReceiveNewsletter(final boolean receiveNewsletter) { + this.receiveNewsletter = receiveNewsletter; + } - public String[] getHobbies() { - return hobbies; - } + public String[] getHobbies() { + return hobbies; + } - public void setHobbies(final String[] hobbies) { - this.hobbies = hobbies; - } + public void setHobbies(final String[] hobbies) { + this.hobbies = hobbies; + } - public List getFavouriteLanguage() { - return favouriteLanguage; - } + public List getFavouriteLanguage() { + return favouriteLanguage; + } - public void setFavouriteLanguage(final List favouriteLanguage) { - this.favouriteLanguage = favouriteLanguage; - } + public void setFavouriteLanguage(final List favouriteLanguage) { + this.favouriteLanguage = favouriteLanguage; + } - public String getNotes() { - return notes; - } + public String getNotes() { + return notes; + } - public void setNotes(final String notes) { - this.notes = notes; - } + public void setNotes(final String notes) { + this.notes = notes; + } - public List getFruit() { - return fruit; - } + public List getFruit() { + return fruit; + } - public void setFruit(final List fruit) { - this.fruit = fruit; - } + public void setFruit(final List fruit) { + this.fruit = fruit; + } - public String getBook() { - return book; - } + public String getBook() { + return book; + } - public void setBook(final String book) { - this.book = book; - } + public void setBook(final String book) { + this.book = book; + } - public MultipartFile getFile() { - return file; - } + public MultipartFile getFile() { + return file; + } - public void setFile(final MultipartFile file) { - this.file = file; - } + public void setFile(final MultipartFile file) { + this.file = file; + } } diff --git a/spring-mvc-xml/src/main/java/com/baeldung/spring/validator/PersonValidator.java b/spring-mvc-xml/src/main/java/com/baeldung/spring/validator/PersonValidator.java index 3a271f6545..f7625bacd9 100644 --- a/spring-mvc-xml/src/main/java/com/baeldung/spring/validator/PersonValidator.java +++ b/spring-mvc-xml/src/main/java/com/baeldung/spring/validator/PersonValidator.java @@ -9,14 +9,14 @@ import org.springframework.validation.Validator; @Component public class PersonValidator implements Validator { - @Override - public boolean supports(final Class calzz) { - return Person.class.isAssignableFrom(calzz); - } + @Override + public boolean supports(final Class calzz) { + return Person.class.isAssignableFrom(calzz); + } - @Override - public void validate(final Object obj, final Errors errors) { + @Override + public void validate(final Object obj, final Errors errors) { - ValidationUtils.rejectIfEmptyOrWhitespace(errors, "name", "required.name"); - } + ValidationUtils.rejectIfEmptyOrWhitespace(errors, "name", "required.name"); + } } \ No newline at end of file diff --git a/spring-quartz/src/main/java/org/baeldung/springquartz/SpringQuartzApp.java b/spring-quartz/src/main/java/org/baeldung/springquartz/SpringQuartzApp.java index e51e4ad43d..547ef78d84 100644 --- a/spring-quartz/src/main/java/org/baeldung/springquartz/SpringQuartzApp.java +++ b/spring-quartz/src/main/java/org/baeldung/springquartz/SpringQuartzApp.java @@ -10,7 +10,6 @@ import org.springframework.scheduling.annotation.EnableScheduling; public class SpringQuartzApp { public static void main(String[] args) { - new SpringApplicationBuilder(SpringQuartzApp.class) - .showBanner(false).run(args); + new SpringApplicationBuilder(SpringQuartzApp.class).showBanner(false).run(args); } } diff --git a/spring-quartz/src/main/java/org/baeldung/springquartz/basics/scheduler/QrtzScheduler.java b/spring-quartz/src/main/java/org/baeldung/springquartz/basics/scheduler/QrtzScheduler.java index a944f8fe43..6601df6c94 100644 --- a/spring-quartz/src/main/java/org/baeldung/springquartz/basics/scheduler/QrtzScheduler.java +++ b/spring-quartz/src/main/java/org/baeldung/springquartz/basics/scheduler/QrtzScheduler.java @@ -45,8 +45,7 @@ public class QrtzScheduler { } @Bean - public Scheduler scheduler(Trigger trigger, JobDetail job) - throws SchedulerException, IOException { + public Scheduler scheduler(Trigger trigger, JobDetail job) throws SchedulerException, IOException { StdSchedulerFactory factory = new StdSchedulerFactory(); factory.initialize(new ClassPathResource("quartz.properties").getInputStream()); @@ -64,9 +63,7 @@ public class QrtzScheduler { @Bean public JobDetail jobDetail() { - return newJob().ofType(SampleJob.class).storeDurably() - .withIdentity(JobKey.jobKey("Qrtz_Job_Detail")) - .withDescription("Invoke Sample Job service...").build(); + return newJob().ofType(SampleJob.class).storeDurably().withIdentity(JobKey.jobKey("Qrtz_Job_Detail")).withDescription("Invoke Sample Job service...").build(); } @Bean @@ -75,10 +72,6 @@ public class QrtzScheduler { int frequencyInSec = 10; logger.info("Configuring trigger to fire every {} seconds", frequencyInSec); - return newTrigger().forJob(job).withIdentity(TriggerKey.triggerKey("Qrtz_Trigger")) - .withDescription("Sample trigger") - .withSchedule( - simpleSchedule().withIntervalInSeconds(frequencyInSec).repeatForever()) - .build(); + return newTrigger().forJob(job).withIdentity(TriggerKey.triggerKey("Qrtz_Trigger")).withDescription("Sample trigger").withSchedule(simpleSchedule().withIntervalInSeconds(frequencyInSec).repeatForever()).build(); } } diff --git a/spring-quartz/src/main/java/org/baeldung/springquartz/basics/scheduler/SampleJob.java b/spring-quartz/src/main/java/org/baeldung/springquartz/basics/scheduler/SampleJob.java index 9474272a3c..7c50f9a231 100644 --- a/spring-quartz/src/main/java/org/baeldung/springquartz/basics/scheduler/SampleJob.java +++ b/spring-quartz/src/main/java/org/baeldung/springquartz/basics/scheduler/SampleJob.java @@ -19,8 +19,7 @@ public class SampleJob implements Job { public void execute(JobExecutionContext context) throws JobExecutionException { - logger.info("Job ** {} ** fired @ {}", context.getJobDetail().getKey().getName(), - context.getFireTime()); + logger.info("Job ** {} ** fired @ {}", context.getJobDetail().getKey().getName(), context.getFireTime()); jobService.executeSampleJob(); diff --git a/spring-quartz/src/main/java/org/baeldung/springquartz/config/AutoWiringSpringBeanJobFactory.java b/spring-quartz/src/main/java/org/baeldung/springquartz/config/AutoWiringSpringBeanJobFactory.java index 0e24238467..d3034ae7af 100644 --- a/spring-quartz/src/main/java/org/baeldung/springquartz/config/AutoWiringSpringBeanJobFactory.java +++ b/spring-quartz/src/main/java/org/baeldung/springquartz/config/AutoWiringSpringBeanJobFactory.java @@ -11,21 +11,17 @@ import org.springframework.scheduling.quartz.SpringBeanJobFactory; * Adds auto-wiring support to quartz jobs. * @see "https://gist.github.com/jelies/5085593" */ -public final class AutoWiringSpringBeanJobFactory extends SpringBeanJobFactory - implements ApplicationContextAware { +public final class AutoWiringSpringBeanJobFactory extends SpringBeanJobFactory implements ApplicationContextAware { private transient AutowireCapableBeanFactory beanFactory; - - public void setApplicationContext(ApplicationContext applicationContext) - throws BeansException { + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { beanFactory = applicationContext.getAutowireCapableBeanFactory(); } @Override - protected Object createJobInstance(final TriggerFiredBundle bundle) - throws Exception { + protected Object createJobInstance(final TriggerFiredBundle bundle) throws Exception { final Object job = super.createJobInstance(bundle); beanFactory.autowireBean(job); diff --git a/spring-rest/src/main/java/org/baeldung/web/controller/CompanyController.java b/spring-rest/src/main/java/org/baeldung/web/controller/CompanyController.java index d640ac671d..aa694c08ed 100644 --- a/spring-rest/src/main/java/org/baeldung/web/controller/CompanyController.java +++ b/spring-rest/src/main/java/org/baeldung/web/controller/CompanyController.java @@ -8,9 +8,9 @@ import org.springframework.web.bind.annotation.RestController; @RestController public class CompanyController { - @RequestMapping(value = "/companyRest", produces = MediaType.APPLICATION_JSON_VALUE) - public Company getCompanyRest() { - final Company company = new Company(1, "Xpto"); - return company; - } + @RequestMapping(value = "/companyRest", produces = MediaType.APPLICATION_JSON_VALUE) + public Company getCompanyRest() { + final Company company = new Company(1, "Xpto"); + return company; + } } diff --git a/spring-rest/src/main/java/org/baeldung/web/controller/ItemController.java b/spring-rest/src/main/java/org/baeldung/web/controller/ItemController.java index f3e3738bfe..1cc3eae432 100644 --- a/spring-rest/src/main/java/org/baeldung/web/controller/ItemController.java +++ b/spring-rest/src/main/java/org/baeldung/web/controller/ItemController.java @@ -14,26 +14,26 @@ import com.fasterxml.jackson.annotation.JsonView; @RestController public class ItemController { - @JsonView(Views.Public.class) - @RequestMapping("/items/{id}") - public Item getItemPublic(@PathVariable final int id) { - return ItemManager.getById(id); - } + @JsonView(Views.Public.class) + @RequestMapping("/items/{id}") + public Item getItemPublic(@PathVariable final int id) { + return ItemManager.getById(id); + } - @JsonView(Views.Internal.class) - @RequestMapping("/items/internal/{id}") - public Item getItemInternal(@PathVariable final int id) { - return ItemManager.getById(id); - } + @JsonView(Views.Internal.class) + @RequestMapping("/items/internal/{id}") + public Item getItemInternal(@PathVariable final int id) { + return ItemManager.getById(id); + } - @RequestMapping("/date") - public Date getCurrentDate() throws Exception { - return new Date(); - } + @RequestMapping("/date") + public Date getCurrentDate() throws Exception { + return new Date(); + } - @RequestMapping("/delay/{seconds}") - public void getCurrentTime(@PathVariable final int seconds) throws Exception { + @RequestMapping("/delay/{seconds}") + public void getCurrentTime(@PathVariable final int seconds) throws Exception { - Thread.sleep(seconds * 1000); - } + Thread.sleep(seconds * 1000); + } } \ No newline at end of file diff --git a/spring-rest/src/main/java/org/baeldung/web/controller/advice/JsonpControllerAdvice.java b/spring-rest/src/main/java/org/baeldung/web/controller/advice/JsonpControllerAdvice.java index 7d62cc0c66..996f229128 100644 --- a/spring-rest/src/main/java/org/baeldung/web/controller/advice/JsonpControllerAdvice.java +++ b/spring-rest/src/main/java/org/baeldung/web/controller/advice/JsonpControllerAdvice.java @@ -6,8 +6,8 @@ import org.springframework.web.servlet.mvc.method.annotation.AbstractJsonpRespon @ControllerAdvice public class JsonpControllerAdvice extends AbstractJsonpResponseBodyAdvice { - public JsonpControllerAdvice() { - super("callback"); - } + public JsonpControllerAdvice() { + super("callback"); + } } diff --git a/spring-rest/src/main/java/org/baeldung/web/controller/status/ForbiddenException.java b/spring-rest/src/main/java/org/baeldung/web/controller/status/ForbiddenException.java index 348ee6d596..458bdaf170 100644 --- a/spring-rest/src/main/java/org/baeldung/web/controller/status/ForbiddenException.java +++ b/spring-rest/src/main/java/org/baeldung/web/controller/status/ForbiddenException.java @@ -3,8 +3,8 @@ package org.baeldung.web.controller.status; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; -@ResponseStatus(value = HttpStatus.FORBIDDEN, reason="To show an example of a custom message") +@ResponseStatus(value = HttpStatus.FORBIDDEN, reason = "To show an example of a custom message") public class ForbiddenException extends RuntimeException { - private static final long serialVersionUID = 6826605655586311552L; + private static final long serialVersionUID = 6826605655586311552L; } diff --git a/spring-rest/src/main/java/org/baeldung/web/dto/Company.java b/spring-rest/src/main/java/org/baeldung/web/dto/Company.java index c7d0718140..3164d604ad 100644 --- a/spring-rest/src/main/java/org/baeldung/web/dto/Company.java +++ b/spring-rest/src/main/java/org/baeldung/web/dto/Company.java @@ -2,37 +2,37 @@ package org.baeldung.web.dto; public class Company { - private long id; - private String name; + private long id; + private String name; - public Company() { - super(); - } + public Company() { + super(); + } - public Company(final long id, final String name) { - this.id = id; - this.name = name; - } + public Company(final long id, final String name) { + this.id = id; + this.name = name; + } - public String getName() { - return name; - } + public String getName() { + return name; + } - public void setName(final String name) { - this.name = name; - } + public void setName(final String name) { + this.name = name; + } - public long getId() { - return id; - } + public long getId() { + return id; + } - public void setId(final long id) { - this.id = id; - } + public void setId(final long id) { + this.id = id; + } - @Override - public String toString() { - return "Company [id=" + id + ", name=" + name + "]"; - } + @Override + public String toString() { + return "Company [id=" + id + ", name=" + name + "]"; + } } diff --git a/spring-rest/src/main/java/org/baeldung/web/dto/FooProtos.java b/spring-rest/src/main/java/org/baeldung/web/dto/FooProtos.java index 61251ea33a..8ca96c38fc 100644 --- a/spring-rest/src/main/java/org/baeldung/web/dto/FooProtos.java +++ b/spring-rest/src/main/java/org/baeldung/web/dto/FooProtos.java @@ -4,617 +4,594 @@ package org.baeldung.web.dto; public final class FooProtos { - private FooProtos() {} - public static void registerAllExtensions( - com.google.protobuf.ExtensionRegistry registry) { - } - public interface FooOrBuilder extends - // @@protoc_insertion_point(interface_extends:baeldung.Foo) - com.google.protobuf.MessageOrBuilder { - - /** - * required int64 id = 1; - */ - boolean hasId(); - /** - * required int64 id = 1; - */ - long getId(); - - /** - * required string name = 2; - */ - boolean hasName(); - /** - * required string name = 2; - */ - java.lang.String getName(); - /** - * required string name = 2; - */ - com.google.protobuf.ByteString - getNameBytes(); - } - /** - * Protobuf type {@code baeldung.Foo} - */ - public static final class Foo extends - com.google.protobuf.GeneratedMessage implements - // @@protoc_insertion_point(message_implements:baeldung.Foo) - FooOrBuilder { - // Use Foo.newBuilder() to construct. - private Foo(com.google.protobuf.GeneratedMessage.Builder builder) { - super(builder); - this.unknownFields = builder.getUnknownFields(); - } - private Foo(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); } - - private static final Foo defaultInstance; - public static Foo getDefaultInstance() { - return defaultInstance; + private FooProtos() { } - public Foo getDefaultInstanceForType() { - return defaultInstance; + public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry registry) { } - private final com.google.protobuf.UnknownFieldSet unknownFields; - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return this.unknownFields; - } - private Foo( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - initFields(); - int mutable_bitField0_ = 0; - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder(); - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - done = true; - } - break; - } - case 8: { - bitField0_ |= 0x00000001; - id_ = input.readInt64(); - break; - } - case 18: { - com.google.protobuf.ByteString bs = input.readBytes(); - bitField0_ |= 0x00000002; - name_ = bs; - break; - } - } - } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e.getMessage()).setUnfinishedMessage(this); - } finally { - this.unknownFields = unknownFields.build(); - makeExtensionsImmutable(); - } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return org.baeldung.web.dto.FooProtos.internal_static_baeldung_Foo_descriptor; + public interface FooOrBuilder extends + // @@protoc_insertion_point(interface_extends:baeldung.Foo) + com.google.protobuf.MessageOrBuilder { + + /** + * required int64 id = 1; + */ + boolean hasId(); + + /** + * required int64 id = 1; + */ + long getId(); + + /** + * required string name = 2; + */ + boolean hasName(); + + /** + * required string name = 2; + */ + java.lang.String getName(); + + /** + * required string name = 2; + */ + com.google.protobuf.ByteString getNameBytes(); } - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return org.baeldung.web.dto.FooProtos.internal_static_baeldung_Foo_fieldAccessorTable - .ensureFieldAccessorsInitialized( - org.baeldung.web.dto.FooProtos.Foo.class, org.baeldung.web.dto.FooProtos.Foo.Builder.class); - } - - public static com.google.protobuf.Parser PARSER = - new com.google.protobuf.AbstractParser() { - public Foo parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new Foo(input, extensionRegistry); - } - }; - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - private int bitField0_; - public static final int ID_FIELD_NUMBER = 1; - private long id_; - /** - * required int64 id = 1; - */ - public boolean hasId() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - /** - * required int64 id = 1; - */ - public long getId() { - return id_; - } - - public static final int NAME_FIELD_NUMBER = 2; - private java.lang.Object name_; - /** - * required string name = 2; - */ - public boolean hasName() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - /** - * required string name = 2; - */ - public java.lang.String getName() { - java.lang.Object ref = name_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - if (bs.isValidUtf8()) { - name_ = s; - } - return s; - } - } - /** - * required string name = 2; - */ - public com.google.protobuf.ByteString - getNameBytes() { - java.lang.Object ref = name_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - name_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - private void initFields() { - id_ = 0L; - name_ = ""; - } - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - if (!hasId()) { - memoizedIsInitialized = 0; - return false; - } - if (!hasName()) { - memoizedIsInitialized = 0; - return false; - } - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeInt64(1, id_); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - output.writeBytes(2, getNameBytes()); - } - getUnknownFields().writeTo(output); - } - - private int memoizedSerializedSize = -1; - public int getSerializedSize() { - int size = memoizedSerializedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeInt64Size(1, id_); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(2, getNameBytes()); - } - size += getUnknownFields().getSerializedSize(); - memoizedSerializedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - protected java.lang.Object writeReplace() - throws java.io.ObjectStreamException { - return super.writeReplace(); - } - - public static org.baeldung.web.dto.FooProtos.Foo parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static org.baeldung.web.dto.FooProtos.Foo parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static org.baeldung.web.dto.FooProtos.Foo parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static org.baeldung.web.dto.FooProtos.Foo parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static org.baeldung.web.dto.FooProtos.Foo parseFrom(java.io.InputStream input) - throws java.io.IOException { - return PARSER.parseFrom(input); - } - public static org.baeldung.web.dto.FooProtos.Foo parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return PARSER.parseFrom(input, extensionRegistry); - } - public static org.baeldung.web.dto.FooProtos.Foo parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return PARSER.parseDelimitedFrom(input); - } - public static org.baeldung.web.dto.FooProtos.Foo parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return PARSER.parseDelimitedFrom(input, extensionRegistry); - } - public static org.baeldung.web.dto.FooProtos.Foo parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return PARSER.parseFrom(input); - } - public static org.baeldung.web.dto.FooProtos.Foo parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return PARSER.parseFrom(input, extensionRegistry); - } - - public static Builder newBuilder() { return Builder.create(); } - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(org.baeldung.web.dto.FooProtos.Foo prototype) { - return newBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { return newBuilder(this); } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } /** * Protobuf type {@code baeldung.Foo} */ - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder implements - // @@protoc_insertion_point(builder_implements:baeldung.Foo) - org.baeldung.web.dto.FooProtos.FooOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return org.baeldung.web.dto.FooProtos.internal_static_baeldung_Foo_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return org.baeldung.web.dto.FooProtos.internal_static_baeldung_Foo_fieldAccessorTable - .ensureFieldAccessorsInitialized( - org.baeldung.web.dto.FooProtos.Foo.class, org.baeldung.web.dto.FooProtos.Foo.Builder.class); - } - - // Construct using org.baeldung.web.dto.FooProtos.Foo.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + public static final class Foo extends com.google.protobuf.GeneratedMessage implements + // @@protoc_insertion_point(message_implements:baeldung.Foo) + FooOrBuilder { + // Use Foo.newBuilder() to construct. + private Foo(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + this.unknownFields = builder.getUnknownFields(); } - } - private static Builder create() { - return new Builder(); - } - public Builder clear() { - super.clear(); - id_ = 0L; - bitField0_ = (bitField0_ & ~0x00000001); - name_ = ""; - bitField0_ = (bitField0_ & ~0x00000002); - return this; - } - - public Builder clone() { - return create().mergeFrom(buildPartial()); - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return org.baeldung.web.dto.FooProtos.internal_static_baeldung_Foo_descriptor; - } - - public org.baeldung.web.dto.FooProtos.Foo getDefaultInstanceForType() { - return org.baeldung.web.dto.FooProtos.Foo.getDefaultInstance(); - } - - public org.baeldung.web.dto.FooProtos.Foo build() { - org.baeldung.web.dto.FooProtos.Foo result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); + private Foo(boolean noInit) { + this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); } - return result; - } - public org.baeldung.web.dto.FooProtos.Foo buildPartial() { - org.baeldung.web.dto.FooProtos.Foo result = new org.baeldung.web.dto.FooProtos.Foo(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; + private static final Foo defaultInstance; + + public static Foo getDefaultInstance() { + return defaultInstance; } - result.id_ = id_; - if (((from_bitField0_ & 0x00000002) == 0x00000002)) { - to_bitField0_ |= 0x00000002; + + public Foo getDefaultInstanceForType() { + return defaultInstance; } - result.name_ = name_; - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof org.baeldung.web.dto.FooProtos.Foo) { - return mergeFrom((org.baeldung.web.dto.FooProtos.Foo)other); - } else { - super.mergeFrom(other); - return this; + private final com.google.protobuf.UnknownFieldSet unknownFields; + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet getUnknownFields() { + return this.unknownFields; } - } - public Builder mergeFrom(org.baeldung.web.dto.FooProtos.Foo other) { - if (other == org.baeldung.web.dto.FooProtos.Foo.getDefaultInstance()) return this; - if (other.hasId()) { - setId(other.getId()); + private Foo(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { + initFields(); + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + default: { + if (!parseUnknownField(input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + case 8: { + bitField0_ |= 0x00000001; + id_ = input.readInt64(); + break; + } + case 18: { + com.google.protobuf.ByteString bs = input.readBytes(); + bitField0_ |= 0x00000002; + name_ = bs; + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e.getMessage()).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } } - if (other.hasName()) { - bitField0_ |= 0x00000002; - name_ = other.name_; - onChanged(); + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return org.baeldung.web.dto.FooProtos.internal_static_baeldung_Foo_descriptor; } - this.mergeUnknownFields(other.getUnknownFields()); - return this; - } - public final boolean isInitialized() { - if (!hasId()) { - - return false; + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { + return org.baeldung.web.dto.FooProtos.internal_static_baeldung_Foo_fieldAccessorTable.ensureFieldAccessorsInitialized(org.baeldung.web.dto.FooProtos.Foo.class, org.baeldung.web.dto.FooProtos.Foo.Builder.class); } - if (!hasName()) { - - return false; - } - return true; - } - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - org.baeldung.web.dto.FooProtos.Foo parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (org.baeldung.web.dto.FooProtos.Foo) e.getUnfinishedMessage(); - throw e; - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } - return this; - } - private int bitField0_; - - private long id_ ; - /** - * required int64 id = 1; - */ - public boolean hasId() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - /** - * required int64 id = 1; - */ - public long getId() { - return id_; - } - /** - * required int64 id = 1; - */ - public Builder setId(long value) { - bitField0_ |= 0x00000001; - id_ = value; - onChanged(); - return this; - } - /** - * required int64 id = 1; - */ - public Builder clearId() { - bitField0_ = (bitField0_ & ~0x00000001); - id_ = 0L; - onChanged(); - return this; - } - - private java.lang.Object name_ = ""; - /** - * required string name = 2; - */ - public boolean hasName() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - /** - * required string name = 2; - */ - public java.lang.String getName() { - java.lang.Object ref = name_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - if (bs.isValidUtf8()) { - name_ = s; - } - return s; - } else { - return (java.lang.String) ref; - } - } - /** - * required string name = 2; - */ - public com.google.protobuf.ByteString - getNameBytes() { - java.lang.Object ref = name_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - name_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * required string name = 2; - */ - public Builder setName( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000002; - name_ = value; - onChanged(); - return this; - } - /** - * required string name = 2; - */ - public Builder clearName() { - bitField0_ = (bitField0_ & ~0x00000002); - name_ = getDefaultInstance().getName(); - onChanged(); - return this; - } - /** - * required string name = 2; - */ - public Builder setNameBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000002; - name_ = value; - onChanged(); - return this; - } - - // @@protoc_insertion_point(builder_scope:baeldung.Foo) - } - - static { - defaultInstance = new Foo(true); - defaultInstance.initFields(); - } - - // @@protoc_insertion_point(class_scope:baeldung.Foo) - } - - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_baeldung_Foo_descriptor; - private static - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_baeldung_Foo_fieldAccessorTable; - - public static com.google.protobuf.Descriptors.FileDescriptor - getDescriptor() { - return descriptor; - } - private static com.google.protobuf.Descriptors.FileDescriptor - descriptor; - static { - java.lang.String[] descriptorData = { - "\n\017FooProtos.proto\022\010baeldung\"\037\n\003Foo\022\n\n\002id" + - "\030\001 \002(\003\022\014\n\004name\030\002 \002(\tB!\n\024org.baeldung.web" + - ".dtoB\tFooProtos" - }; - com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = - new com.google.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() { - public com.google.protobuf.ExtensionRegistry assignDescriptors( - com.google.protobuf.Descriptors.FileDescriptor root) { - descriptor = root; - return null; - } + public static com.google.protobuf.Parser PARSER = new com.google.protobuf.AbstractParser() { + public Foo parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { + return new Foo(input, extensionRegistry); + } }; - com.google.protobuf.Descriptors.FileDescriptor - .internalBuildGeneratedFileFrom(descriptorData, - new com.google.protobuf.Descriptors.FileDescriptor[] { - }, assigner); - internal_static_baeldung_Foo_descriptor = - getDescriptor().getMessageTypes().get(0); - internal_static_baeldung_Foo_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_baeldung_Foo_descriptor, - new java.lang.String[] { "Id", "Name", }); - } - // @@protoc_insertion_point(outer_class_scope) + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + private int bitField0_; + public static final int ID_FIELD_NUMBER = 1; + private long id_; + + /** + * required int64 id = 1; + */ + public boolean hasId() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + + /** + * required int64 id = 1; + */ + public long getId() { + return id_; + } + + public static final int NAME_FIELD_NUMBER = 2; + private java.lang.Object name_; + + /** + * required string name = 2; + */ + public boolean hasName() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + + /** + * required string name = 2; + */ + public java.lang.String getName() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + name_ = s; + } + return s; + } + } + + /** + * required string name = 2; + */ + public com.google.protobuf.ByteString getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private void initFields() { + id_ = 0L; + name_ = ""; + } + + private byte memoizedIsInitialized = -1; + + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) + return true; + if (isInitialized == 0) + return false; + + if (!hasId()) { + memoizedIsInitialized = 0; + return false; + } + if (!hasName()) { + memoizedIsInitialized = 0; + return false; + } + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeInt64(1, id_); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + output.writeBytes(2, getNameBytes()); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) + return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream.computeInt64Size(1, id_); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + size += com.google.protobuf.CodedOutputStream.computeBytesSize(2, getNameBytes()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + + @java.lang.Override + protected java.lang.Object writeReplace() throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static org.baeldung.web.dto.FooProtos.Foo parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static org.baeldung.web.dto.FooProtos.Foo parseFrom(com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static org.baeldung.web.dto.FooProtos.Foo parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static org.baeldung.web.dto.FooProtos.Foo parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static org.baeldung.web.dto.FooProtos.Foo parseFrom(java.io.InputStream input) throws java.io.IOException { + return PARSER.parseFrom(input); + } + + public static org.baeldung.web.dto.FooProtos.Foo parseFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { + return PARSER.parseFrom(input, extensionRegistry); + } + + public static org.baeldung.web.dto.FooProtos.Foo parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { + return PARSER.parseDelimitedFrom(input); + } + + public static org.baeldung.web.dto.FooProtos.Foo parseDelimitedFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { + return PARSER.parseDelimitedFrom(input, extensionRegistry); + } + + public static org.baeldung.web.dto.FooProtos.Foo parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return PARSER.parseFrom(input); + } + + public static org.baeldung.web.dto.FooProtos.Foo parseFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { + return PARSER.parseFrom(input, extensionRegistry); + } + + public static Builder newBuilder() { + return Builder.create(); + } + + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder(org.baeldung.web.dto.FooProtos.Foo prototype) { + return newBuilder().mergeFrom(prototype); + } + + public Builder toBuilder() { + return newBuilder(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * Protobuf type {@code baeldung.Foo} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements + // @@protoc_insertion_point(builder_implements:baeldung.Foo) + org.baeldung.web.dto.FooProtos.FooOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return org.baeldung.web.dto.FooProtos.internal_static_baeldung_Foo_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { + return org.baeldung.web.dto.FooProtos.internal_static_baeldung_Foo_fieldAccessorTable.ensureFieldAccessorsInitialized(org.baeldung.web.dto.FooProtos.Foo.class, org.baeldung.web.dto.FooProtos.Foo.Builder.class); + } + + // Construct using org.baeldung.web.dto.FooProtos.Foo.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + } + } + + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + id_ = 0L; + bitField0_ = (bitField0_ & ~0x00000001); + name_ = ""; + bitField0_ = (bitField0_ & ~0x00000002); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return org.baeldung.web.dto.FooProtos.internal_static_baeldung_Foo_descriptor; + } + + public org.baeldung.web.dto.FooProtos.Foo getDefaultInstanceForType() { + return org.baeldung.web.dto.FooProtos.Foo.getDefaultInstance(); + } + + public org.baeldung.web.dto.FooProtos.Foo build() { + org.baeldung.web.dto.FooProtos.Foo result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + public org.baeldung.web.dto.FooProtos.Foo buildPartial() { + org.baeldung.web.dto.FooProtos.Foo result = new org.baeldung.web.dto.FooProtos.Foo(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + result.id_ = id_; + if (((from_bitField0_ & 0x00000002) == 0x00000002)) { + to_bitField0_ |= 0x00000002; + } + result.name_ = name_; + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof org.baeldung.web.dto.FooProtos.Foo) { + return mergeFrom((org.baeldung.web.dto.FooProtos.Foo) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(org.baeldung.web.dto.FooProtos.Foo other) { + if (other == org.baeldung.web.dto.FooProtos.Foo.getDefaultInstance()) + return this; + if (other.hasId()) { + setId(other.getId()); + } + if (other.hasName()) { + bitField0_ |= 0x00000002; + name_ = other.name_; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + if (!hasId()) { + + return false; + } + if (!hasName()) { + + return false; + } + return true; + } + + public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { + org.baeldung.web.dto.FooProtos.Foo parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (org.baeldung.web.dto.FooProtos.Foo) e.getUnfinishedMessage(); + throw e; + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + + private int bitField0_; + + private long id_; + + /** + * required int64 id = 1; + */ + public boolean hasId() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + + /** + * required int64 id = 1; + */ + public long getId() { + return id_; + } + + /** + * required int64 id = 1; + */ + public Builder setId(long value) { + bitField0_ |= 0x00000001; + id_ = value; + onChanged(); + return this; + } + + /** + * required int64 id = 1; + */ + public Builder clearId() { + bitField0_ = (bitField0_ & ~0x00000001); + id_ = 0L; + onChanged(); + return this; + } + + private java.lang.Object name_ = ""; + + /** + * required string name = 2; + */ + public boolean hasName() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + + /** + * required string name = 2; + */ + public java.lang.String getName() { + java.lang.Object ref = name_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + name_ = s; + } + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * required string name = 2; + */ + public com.google.protobuf.ByteString getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * required string name = 2; + */ + public Builder setName(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000002; + name_ = value; + onChanged(); + return this; + } + + /** + * required string name = 2; + */ + public Builder clearName() { + bitField0_ = (bitField0_ & ~0x00000002); + name_ = getDefaultInstance().getName(); + onChanged(); + return this; + } + + /** + * required string name = 2; + */ + public Builder setNameBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000002; + name_ = value; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:baeldung.Foo) + } + + static { + defaultInstance = new Foo(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:baeldung.Foo) + } + + private static final com.google.protobuf.Descriptors.Descriptor internal_static_baeldung_Foo_descriptor; + private static com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_baeldung_Foo_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { + return descriptor; + } + + private static com.google.protobuf.Descriptors.FileDescriptor descriptor; + static { + java.lang.String[] descriptorData = { "\n\017FooProtos.proto\022\010baeldung\"\037\n\003Foo\022\n\n\002id" + "\030\001 \002(\003\022\014\n\004name\030\002 \002(\tB!\n\024org.baeldung.web" + ".dtoB\tFooProtos" }; + com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { + public com.google.protobuf.ExtensionRegistry assignDescriptors(com.google.protobuf.Descriptors.FileDescriptor root) { + descriptor = root; + return null; + } + }; + com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(descriptorData, new com.google.protobuf.Descriptors.FileDescriptor[] {}, assigner); + internal_static_baeldung_Foo_descriptor = getDescriptor().getMessageTypes().get(0); + internal_static_baeldung_Foo_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable(internal_static_baeldung_Foo_descriptor, new java.lang.String[] { "Id", "Name", }); + } + + // @@protoc_insertion_point(outer_class_scope) } diff --git a/spring-rest/src/test/java/org/baeldung/web/controller/status/ExampleControllerTest.java b/spring-rest/src/test/java/org/baeldung/web/controller/status/ExampleControllerTest.java index 1344d2d40e..c50e1b4f43 100644 --- a/spring-rest/src/test/java/org/baeldung/web/controller/status/ExampleControllerTest.java +++ b/spring-rest/src/test/java/org/baeldung/web/controller/status/ExampleControllerTest.java @@ -32,13 +32,11 @@ public class ExampleControllerTest { @Test public void whenGetRequestSentToController_thenReturnsStatusNotAcceptable() throws Exception { - mockMvc.perform(get("/controller")) - .andExpect(status().isNotAcceptable()); + mockMvc.perform(get("/controller")).andExpect(status().isNotAcceptable()); } @Test public void whenGetRequestSentToException_thenReturnsStatusForbidden() throws Exception { - mockMvc.perform(get("/exception")) - .andExpect(status().isForbidden()); + mockMvc.perform(get("/exception")).andExpect(status().isForbidden()); } } diff --git a/spring-security-mvc-persisted-remember-me/src/main/java/org/baeldung/service/MyUserDetailsService.java b/spring-security-mvc-persisted-remember-me/src/main/java/org/baeldung/service/MyUserDetailsService.java index c662c32738..e6c77110b3 100644 --- a/spring-security-mvc-persisted-remember-me/src/main/java/org/baeldung/service/MyUserDetailsService.java +++ b/spring-security-mvc-persisted-remember-me/src/main/java/org/baeldung/service/MyUserDetailsService.java @@ -51,9 +51,7 @@ public class MyUserDetailsService implements UserDetailsService { private User createUser(final String username, final String password, final List roles) { logger.info("Create user " + username); - final List authorities = roles.stream() - .map(role -> new SimpleGrantedAuthority(role.toString())) - .collect(Collectors.toList()); + final List authorities = roles.stream().map(role -> new SimpleGrantedAuthority(role.toString())).collect(Collectors.toList()); return new User(username, password, true, true, true, true, authorities); } diff --git a/spring-security-rest-custom/src/main/java/org/baeldung/config/parent/SecurityConfig.java b/spring-security-rest-custom/src/main/java/org/baeldung/config/parent/SecurityConfig.java index 67d9abbae5..616c2a7684 100644 --- a/spring-security-rest-custom/src/main/java/org/baeldung/config/parent/SecurityConfig.java +++ b/spring-security-rest-custom/src/main/java/org/baeldung/config/parent/SecurityConfig.java @@ -37,5 +37,4 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { // @formatter:on } - } diff --git a/spring-security-rest-full/src/main/java/org/baeldung/spring/ListenerConfig.java b/spring-security-rest-full/src/main/java/org/baeldung/spring/ListenerConfig.java index 80af01aeeb..3d727fc19f 100644 --- a/spring-security-rest-full/src/main/java/org/baeldung/spring/ListenerConfig.java +++ b/spring-security-rest-full/src/main/java/org/baeldung/spring/ListenerConfig.java @@ -8,9 +8,9 @@ import org.springframework.web.context.request.RequestContextListener; public class ListenerConfig implements WebApplicationInitializer { - @Override - public void onStartup(ServletContext sc) throws ServletException { - // Manages the lifecycle of the root application context - sc.addListener(new RequestContextListener()); - } + @Override + public void onStartup(ServletContext sc) throws ServletException { + // Manages the lifecycle of the root application context + sc.addListener(new RequestContextListener()); + } } \ No newline at end of file diff --git a/spring-security-rest-full/src/main/java/org/baeldung/spring/WebConfig.java b/spring-security-rest-full/src/main/java/org/baeldung/spring/WebConfig.java index 57e9b32a62..efdb2bc8d4 100644 --- a/spring-security-rest-full/src/main/java/org/baeldung/spring/WebConfig.java +++ b/spring-security-rest-full/src/main/java/org/baeldung/spring/WebConfig.java @@ -16,7 +16,7 @@ import org.springframework.web.servlet.view.InternalResourceViewResolver; @Configuration @ComponentScan("org.baeldung.web") @EnableWebMvc -public class WebConfig extends WebMvcConfigurerAdapter{ +public class WebConfig extends WebMvcConfigurerAdapter { public WebConfig() { super(); @@ -39,11 +39,11 @@ public class WebConfig extends WebMvcConfigurerAdapter{ registry.addViewController("/homepage.html"); } - @Override - public void addInterceptors(final InterceptorRegistry registry) { - registry.addInterceptor(new LoggerInterceptor()); - registry.addInterceptor(new UserInterceptor()); - registry.addInterceptor(new SessionTimerInterceptor()); - } + @Override + public void addInterceptors(final InterceptorRegistry registry) { + registry.addInterceptor(new LoggerInterceptor()); + registry.addInterceptor(new UserInterceptor()); + registry.addInterceptor(new SessionTimerInterceptor()); + } } \ No newline at end of file diff --git a/spring-security-rest-full/src/main/java/org/baeldung/web/interceptor/SessionTimerInterceptor.java b/spring-security-rest-full/src/main/java/org/baeldung/web/interceptor/SessionTimerInterceptor.java index f5c1626989..90199347b4 100644 --- a/spring-security-rest-full/src/main/java/org/baeldung/web/interceptor/SessionTimerInterceptor.java +++ b/spring-security-rest-full/src/main/java/org/baeldung/web/interceptor/SessionTimerInterceptor.java @@ -13,44 +13,41 @@ import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; public class SessionTimerInterceptor extends HandlerInterceptorAdapter { - private static Logger log = LoggerFactory.getLogger(SessionTimerInterceptor.class); + private static Logger log = LoggerFactory.getLogger(SessionTimerInterceptor.class); - private static final long MAX_INACTIVE_SESSION_TIME = 5 * 10000; + private static final long MAX_INACTIVE_SESSION_TIME = 5 * 10000; - @Autowired - private HttpSession session; + @Autowired + private HttpSession session; - /** - * Executed before actual handler is executed - **/ - @Override - public boolean preHandle(final HttpServletRequest request, final HttpServletResponse response, final Object handler) - throws Exception { - log.info("Pre handle method - check handling start time"); - long startTime = System.currentTimeMillis(); - request.setAttribute("executionTime", startTime); - if (UserInterceptor.isUserLogged()) { - session = request.getSession(); - log.info("Time since last request in this session: {} ms", - System.currentTimeMillis() - request.getSession().getLastAccessedTime()); - if (System.currentTimeMillis() - session.getLastAccessedTime() > MAX_INACTIVE_SESSION_TIME) { - log.warn("Logging out, due to inactive session"); - SecurityContextHolder.clearContext(); - request.logout(); - response.sendRedirect("/spring-security-rest-full/logout"); - } - } - return true; - } + /** + * Executed before actual handler is executed + **/ + @Override + public boolean preHandle(final HttpServletRequest request, final HttpServletResponse response, final Object handler) throws Exception { + log.info("Pre handle method - check handling start time"); + long startTime = System.currentTimeMillis(); + request.setAttribute("executionTime", startTime); + if (UserInterceptor.isUserLogged()) { + session = request.getSession(); + log.info("Time since last request in this session: {} ms", System.currentTimeMillis() - request.getSession().getLastAccessedTime()); + if (System.currentTimeMillis() - session.getLastAccessedTime() > MAX_INACTIVE_SESSION_TIME) { + log.warn("Logging out, due to inactive session"); + SecurityContextHolder.clearContext(); + request.logout(); + response.sendRedirect("/spring-security-rest-full/logout"); + } + } + return true; + } - /** - * Executed before after handler is executed - **/ - @Override - public void postHandle(final HttpServletRequest request, final HttpServletResponse response, final Object handler, - final ModelAndView model) throws Exception { - log.info("Post handle method - check execution time of handling"); - long startTime = (Long) request.getAttribute("executionTime"); - log.info("Execution time for handling the request was: {} ms", System.currentTimeMillis() - startTime); - } + /** + * Executed before after handler is executed + **/ + @Override + public void postHandle(final HttpServletRequest request, final HttpServletResponse response, final Object handler, final ModelAndView model) throws Exception { + log.info("Post handle method - check execution time of handling"); + long startTime = (Long) request.getAttribute("executionTime"); + log.info("Execution time for handling the request was: {} ms", System.currentTimeMillis() - startTime); + } } diff --git a/spring-security-rest-full/src/main/java/org/baeldung/web/interceptor/UserInterceptor.java b/spring-security-rest-full/src/main/java/org/baeldung/web/interceptor/UserInterceptor.java index 4ba12d0138..6b808d885e 100644 --- a/spring-security-rest-full/src/main/java/org/baeldung/web/interceptor/UserInterceptor.java +++ b/spring-security-rest-full/src/main/java/org/baeldung/web/interceptor/UserInterceptor.java @@ -31,8 +31,7 @@ public class UserInterceptor extends HandlerInterceptorAdapter { * Executed before after handler is executed. If view is a redirect view, we don't need to execute postHandle **/ @Override - public void postHandle(HttpServletRequest request, HttpServletResponse response, Object object, ModelAndView model) - throws Exception { + public void postHandle(HttpServletRequest request, HttpServletResponse response, Object object, ModelAndView model) throws Exception { if (model != null && !isRedirectView(model)) { if (isUserLogged()) { addToModelUserDetails(model); diff --git a/spring-security-rest-full/src/test/java/org/baeldung/web/interceptor/SessionTimerInterceptorTest.java b/spring-security-rest-full/src/test/java/org/baeldung/web/interceptor/SessionTimerInterceptorTest.java index a29de04bb4..916a849c63 100644 --- a/spring-security-rest-full/src/test/java/org/baeldung/web/interceptor/SessionTimerInterceptorTest.java +++ b/spring-security-rest-full/src/test/java/org/baeldung/web/interceptor/SessionTimerInterceptorTest.java @@ -30,27 +30,26 @@ import org.springframework.web.context.WebApplicationContext; @WithMockUser(username = "admin", roles = { "USER", "ADMIN" }) public class SessionTimerInterceptorTest { - @Autowired - WebApplicationContext wac; + @Autowired + WebApplicationContext wac; - private MockMvc mockMvc; + private MockMvc mockMvc; - @Before - public void setup() { - MockitoAnnotations.initMocks(this); - mockMvc = MockMvcBuilders.webAppContextSetup(wac).build(); - } + @Before + public void setup() { + MockitoAnnotations.initMocks(this); + mockMvc = MockMvcBuilders.webAppContextSetup(wac).build(); + } - /** - * After execution of HTTP GET logs from interceptor will be displayed in - * the console - */ - @Test - public void testInterceptors() throws Exception { - HttpSession session = mockMvc.perform(get("/auth/admin")).andExpect(status().is2xxSuccessful()).andReturn() - .getRequest().getSession(); - Thread.sleep(51000); - mockMvc.perform(get("/auth/admin").session((MockHttpSession) session)).andExpect(status().is2xxSuccessful()); - } + /** + * After execution of HTTP GET logs from interceptor will be displayed in + * the console + */ + @Test + public void testInterceptors() throws Exception { + HttpSession session = mockMvc.perform(get("/auth/admin")).andExpect(status().is2xxSuccessful()).andReturn().getRequest().getSession(); + Thread.sleep(51000); + mockMvc.perform(get("/auth/admin").session((MockHttpSession) session)).andExpect(status().is2xxSuccessful()); + } } diff --git a/spring-security-rest-full/src/test/java/org/baeldung/web/interceptor/UserInterceptorTest.java b/spring-security-rest-full/src/test/java/org/baeldung/web/interceptor/UserInterceptorTest.java index 0b65311203..ff40c86906 100644 --- a/spring-security-rest-full/src/test/java/org/baeldung/web/interceptor/UserInterceptorTest.java +++ b/spring-security-rest-full/src/test/java/org/baeldung/web/interceptor/UserInterceptorTest.java @@ -23,8 +23,8 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. @RunWith(SpringJUnit4ClassRunner.class) @WebAppConfiguration @Transactional -@ContextConfiguration(classes = {SecurityWithoutCsrfConfig.class, PersistenceConfig.class, WebConfig.class}) -@WithMockUser(username = "admin", roles = {"USER", "ADMIN"}) +@ContextConfiguration(classes = { SecurityWithoutCsrfConfig.class, PersistenceConfig.class, WebConfig.class }) +@WithMockUser(username = "admin", roles = { "USER", "ADMIN" }) public class UserInterceptorTest { @Autowired @@ -46,8 +46,7 @@ public class UserInterceptorTest { */ @Test public void testInterceptors() throws Exception { - mockMvc.perform(get("/auth/admin")) - .andExpect(status().is2xxSuccessful()); + mockMvc.perform(get("/auth/admin")).andExpect(status().is2xxSuccessful()); } } From 3a27d6b50e844626ad525d4a5363e5cb73ca3649 Mon Sep 17 00:00:00 2001 From: Sunil Gulabani Date: Wed, 12 Oct 2016 10:33:48 +0530 Subject: [PATCH 262/265] BAEL-255: Added encode-decode of url --- .../encoderdecoder/EncoderDecoder.java | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 core-java-8/src/test/java/com/baeldung/encoderdecoder/EncoderDecoder.java diff --git a/core-java-8/src/test/java/com/baeldung/encoderdecoder/EncoderDecoder.java b/core-java-8/src/test/java/com/baeldung/encoderdecoder/EncoderDecoder.java new file mode 100644 index 0000000000..62d2663994 --- /dev/null +++ b/core-java-8/src/test/java/com/baeldung/encoderdecoder/EncoderDecoder.java @@ -0,0 +1,38 @@ +package com.baeldung.encoderdecoder; + +import org.hamcrest.CoreMatchers; +import org.junit.Assert; +import org.junit.Test; + +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; + +public class EncoderDecoder { + + @Test + public void givenPlainURL_whenUsingUTF8EncodingScheme_thenEncodeURL() throws UnsupportedEncodingException { + String plainURL = "http://www.baeldung.com" ; + String encodedURL = URLEncoder.encode(plainURL, StandardCharsets.UTF_8.toString()); + + Assert.assertThat("http%3A%2F%2Fwww.baeldung.com", CoreMatchers.is(encodedURL)); + } + + @Test + public void givenEncodedURL_whenUsingUTF8EncodingScheme_thenDecodeURL() throws UnsupportedEncodingException { + String encodedURL = "http%3A%2F%2Fwww.baeldung.com" ; + String decodedURL = URLDecoder.decode(encodedURL, StandardCharsets.UTF_8.toString()); + + Assert.assertThat("http://www.baeldung.com", CoreMatchers.is(decodedURL)); + } + + @Test + public void givenEncodedURL_whenUsingWrongEncodingScheme_thenDecodeInvalidURL() throws UnsupportedEncodingException { + String encodedURL = "http%3A%2F%2Fwww.baeldung.com"; + + String decodedURL = URLDecoder.decode(encodedURL, StandardCharsets.UTF_16.toString()); + + Assert.assertFalse("http://www.baeldung.com".equals(decodedURL)); + } +} From 51729209ed21820bda42bae0ef4ee75f37d93c0f Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Wed, 12 Oct 2016 08:40:56 +0200 Subject: [PATCH 263/265] Remove unnecessary field initialization --- .../main/java/com/baeldung/java/nio/selector/EchoClient.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core-java/src/main/java/com/baeldung/java/nio/selector/EchoClient.java b/core-java/src/main/java/com/baeldung/java/nio/selector/EchoClient.java index 188db21641..1c034051aa 100644 --- a/core-java/src/main/java/com/baeldung/java/nio/selector/EchoClient.java +++ b/core-java/src/main/java/com/baeldung/java/nio/selector/EchoClient.java @@ -6,9 +6,9 @@ import java.nio.ByteBuffer; import java.nio.channels.SocketChannel; public class EchoClient { - private static SocketChannel client = null; + private static SocketChannel client; private static ByteBuffer buffer; - private static EchoClient instance = null; + private static EchoClient instance; public static EchoClient start() { if (instance == null) From c0d4eee6697575f0c5dd84845cb08283de90e4b1 Mon Sep 17 00:00:00 2001 From: DOHA Date: Wed, 12 Oct 2016 16:29:30 +0200 Subject: [PATCH 264/265] configure live tests --- spring-security-custom-permission/pom.xml | 48 ++++++++++++++++++- .../src/main/resources/application.properties | 2 +- .../test/java/org/baeldung/web/LiveTest.java | 24 +++++++--- 3 files changed, 65 insertions(+), 9 deletions(-) diff --git a/spring-security-custom-permission/pom.xml b/spring-security-custom-permission/pom.xml index 6f460f1751..b2854fe7c5 100644 --- a/spring-security-custom-permission/pom.xml +++ b/spring-security-custom-permission/pom.xml @@ -55,7 +55,12 @@
    - + + org.springframework.boot + spring-boot-starter-test + test + + junit junit @@ -95,13 +100,54 @@ org.springframework.boot spring-boot-maven-plugin + + + maven-surefire-plugin + + ${unit-tests.skip} + + **/*LiveTest.java + + + + + + maven-failsafe-plugin + + + integration-test + + integration-test + + + ${live-tests.skip} + + **/*LiveTest.class + + + + + + + + + live + + false + false + + + + UTF-8 1.8 2.4.0 + false + true
    diff --git a/spring-security-custom-permission/src/main/resources/application.properties b/spring-security-custom-permission/src/main/resources/application.properties index 0b40f62fa9..4433a53ac7 100644 --- a/spring-security-custom-permission/src/main/resources/application.properties +++ b/spring-security-custom-permission/src/main/resources/application.properties @@ -1,6 +1,6 @@ server.port=8081 spring.datasource.driver-class-name=org.h2.Driver -spring.datasource.url=jdbc:h2:mem:security_permission;DB_CLOSE_DELAY=-1 +spring.datasource.url=jdbc:h2:mem:security_permission;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE spring.datasource.username=sa spring.datasource.password= spring.jpa.hibernate.ddl-auto=create-drop diff --git a/spring-security-custom-permission/src/test/java/org/baeldung/web/LiveTest.java b/spring-security-custom-permission/src/test/java/org/baeldung/web/LiveTest.java index 80b1390083..7e92765dcd 100644 --- a/spring-security-custom-permission/src/test/java/org/baeldung/web/LiveTest.java +++ b/spring-security-custom-permission/src/test/java/org/baeldung/web/LiveTest.java @@ -3,35 +3,45 @@ package org.baeldung.web; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; +import org.baeldung.Application; import org.baeldung.persistence.model.Foo; import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.IntegrationTest; +import org.springframework.boot.test.SpringApplicationConfiguration; import org.springframework.http.MediaType; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.web.WebAppConfiguration; import com.jayway.restassured.RestAssured; import com.jayway.restassured.authentication.FormAuthConfig; import com.jayway.restassured.response.Response; import com.jayway.restassured.specification.RequestSpecification; +@RunWith(SpringJUnit4ClassRunner.class) +@SpringApplicationConfiguration(classes = Application.class) +@WebAppConfiguration +@IntegrationTest("server.port:8082") public class LiveTest { - private final FormAuthConfig formAuthConfig = new FormAuthConfig("http://localhost:8081/login", "username", "password"); + private final FormAuthConfig formAuthConfig = new FormAuthConfig("http://localhost:8082/login", "username", "password"); @Test public void givenUserWithReadPrivilegeAndHasPermission_whenGetFooById_thenOK() { - final Response response = givenAuth("john", "123").get("http://localhost:8081/foos/1"); + final Response response = givenAuth("john", "123").get("http://localhost:8082/foos/1"); assertEquals(200, response.getStatusCode()); assertTrue(response.asString().contains("id")); } @Test public void givenUserWithNoWritePrivilegeAndHasPermission_whenPostFoo_thenForbidden() { - final Response response = givenAuth("john", "123").contentType(MediaType.APPLICATION_JSON_VALUE).body(new Foo("sample")).post("http://localhost:8081/foos"); + final Response response = givenAuth("john", "123").contentType(MediaType.APPLICATION_JSON_VALUE).body(new Foo("sample")).post("http://localhost:8082/foos"); assertEquals(403, response.getStatusCode()); } @Test public void givenUserWithWritePrivilegeAndHasPermission_whenPostFoo_thenOk() { - final Response response = givenAuth("tom", "111").contentType(MediaType.APPLICATION_JSON_VALUE).body(new Foo("sample")).post("http://localhost:8081/foos"); + final Response response = givenAuth("tom", "111").contentType(MediaType.APPLICATION_JSON_VALUE).body(new Foo("sample")).post("http://localhost:8082/foos"); assertEquals(201, response.getStatusCode()); assertTrue(response.asString().contains("id")); } @@ -40,14 +50,14 @@ public class LiveTest { @Test public void givenUserMemberInOrganization_whenGetOrganization_thenOK() { - final Response response = givenAuth("john", "123").get("http://localhost:8081/organizations/1"); + final Response response = givenAuth("john", "123").get("http://localhost:8082/organizations/1"); assertEquals(200, response.getStatusCode()); assertTrue(response.asString().contains("id")); } @Test public void givenUserMemberNotInOrganization_whenGetOrganization_thenForbidden() { - final Response response = givenAuth("john", "123").get("http://localhost:8081/organizations/2"); + final Response response = givenAuth("john", "123").get("http://localhost:8082/organizations/2"); assertEquals(403, response.getStatusCode()); } @@ -55,7 +65,7 @@ public class LiveTest { @Test public void givenDisabledSecurityExpression_whenGetFooByName_thenError() { - final Response response = givenAuth("john", "123").get("http://localhost:8081/foos?name=sample"); + final Response response = givenAuth("john", "123").get("http://localhost:8082/foos?name=sample"); assertEquals(500, response.getStatusCode()); assertTrue(response.asString().contains("method hasAuthority() not allowed")); } From 65cd2dfb064dcae0c98112d4b37c470e59385e38 Mon Sep 17 00:00:00 2001 From: Kiran Date: Wed, 12 Oct 2016 12:08:13 -0400 Subject: [PATCH 265/265] Code refactored and updated (#746) * Updated indentation and refactored code * Updated indentation and refactored code * Updated indentation and refactored code * Updated indentation and refactored code * Updated indentation * Updated indentation and refactored code * Updated indentation and refactored code --- spring-jms/pom.xml | 27 +++++----- .../spring/jms/SampleJmsMessageSender.java | 6 +-- .../baeldung/spring/jms/SampleListener.java | 17 +++--- .../src/main/resources/EmbeddedActiveMQ.xml | 27 +++++----- .../src/main/resources/applicationContext.xml | 53 +++++++++++-------- .../jms/MapMessageConvertAndSendTest.java | 6 +-- 6 files changed, 76 insertions(+), 60 deletions(-) diff --git a/spring-jms/pom.xml b/spring-jms/pom.xml index b15c18f991..8e83f82f38 100644 --- a/spring-jms/pom.xml +++ b/spring-jms/pom.xml @@ -11,6 +11,7 @@ 4.3.2.RELEASE 5.12.0 + 4.12 @@ -29,7 +30,7 @@ junit junit - 4.12 + ${junit.version} test @@ -58,16 +59,16 @@ - - - org.apache.maven.plugins - maven-compiler-plugin - - 1.8 - 1.8 - - - - spring-jms + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + + spring-jms - \ No newline at end of file + diff --git a/spring-jms/src/main/java/com/baeldung/spring/jms/SampleJmsMessageSender.java b/spring-jms/src/main/java/com/baeldung/spring/jms/SampleJmsMessageSender.java index 1ef3902a31..927762f05b 100644 --- a/spring-jms/src/main/java/com/baeldung/spring/jms/SampleJmsMessageSender.java +++ b/spring-jms/src/main/java/com/baeldung/spring/jms/SampleJmsMessageSender.java @@ -24,10 +24,6 @@ public class SampleJmsMessageSender { } public void sendMessage(final Employee employee) { - System.out.println("Jms Message Sender : " + employee); - Map map = new HashMap<>(); - map.put("name", employee.getName()); - map.put("age", employee.getAge()); - this.jmsTemplate.convertAndSend(map); + this.jmsTemplate.convertAndSend(employee); } } diff --git a/spring-jms/src/main/java/com/baeldung/spring/jms/SampleListener.java b/spring-jms/src/main/java/com/baeldung/spring/jms/SampleListener.java index eb9d51160d..6d4bef5402 100644 --- a/spring-jms/src/main/java/com/baeldung/spring/jms/SampleListener.java +++ b/spring-jms/src/main/java/com/baeldung/spring/jms/SampleListener.java @@ -5,13 +5,21 @@ import org.springframework.jms.core.JmsTemplate; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageListener; +import javax.jms.Queue; import javax.jms.TextMessage; import java.util.Map; public class SampleListener implements MessageListener { - public JmsTemplate getJmsTemplate() { - return getJmsTemplate(); + private JmsTemplate jmsTemplate; + private Queue queue; + + public void setJmsTemplate(JmsTemplate jmsTemplate) { + this.jmsTemplate = jmsTemplate; + } + + public void setQueue(Queue queue) { + this.queue = queue; } public void onMessage(Message message) { @@ -19,17 +27,14 @@ public class SampleListener implements MessageListener { try { String msg = ((TextMessage) message).getText(); - System.out.println("Message has been consumed : " + msg); } catch (JMSException ex) { throw new RuntimeException(ex); } - } else { - throw new IllegalArgumentException("Message Error"); } } public Employee receiveMessage() throws JMSException { - Map map = (Map) getJmsTemplate().receiveAndConvert(); + Map map = (Map) this.jmsTemplate.receiveAndConvert(); return new Employee((String) map.get("name"), (Integer) map.get("age")); } } diff --git a/spring-jms/src/main/resources/EmbeddedActiveMQ.xml b/spring-jms/src/main/resources/EmbeddedActiveMQ.xml index 6b419c3270..016b07e831 100644 --- a/spring-jms/src/main/resources/EmbeddedActiveMQ.xml +++ b/spring-jms/src/main/resources/EmbeddedActiveMQ.xml @@ -1,15 +1,18 @@ - - - - - - - - + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" + xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" + xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx" + xmlns:util="http://www.springframework.org/schema/util" xmlns:task="http://www.springframework.org/schema/task" + xmlns:amq="http://activemq.apache.org/schema/core" + xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://activemq.apache.org/schema/core + http://activemq.apache.org/schema/core/activemq-core-5.2.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"> + + + + + + + diff --git a/spring-jms/src/main/resources/applicationContext.xml b/spring-jms/src/main/resources/applicationContext.xml index d94eb4c371..28bf848e59 100644 --- a/spring-jms/src/main/resources/applicationContext.xml +++ b/spring-jms/src/main/resources/applicationContext.xml @@ -1,34 +1,45 @@ + xmlns:amq="http://activemq.apache.org/schema/core" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd + http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd"> + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + - + + + + +

    UIA}2|bZ0%5O?g3I* zM-yRAcomyIa0>*Dow^prWp7Gt5C5c=0s2ek3dQt2N&+J^Ee%WBc0GoOKRjy?F*=Wy zobVUfHrWgAgC=|M49&(ZnMH-QDZMR_akOtOs+<>(Y#+O%&?q*+MOiL^D8bY3w9XwY z@=O+RMu9mf`0$}cIgl(lD=1{`X*(mNZOzrm7p|mDs`_ zLD~)h2_n>0w{5BQ$G_X=5JhkVrxInUn$o{gjA#gxxE`BOpiC`tUty0|#y?#i(|>+% ze}V_`&bvIxK4yQ%#@$8r4A-?s?^HkL0Av?6!ZnS61f+p&9+oHYl7SdZ6?SGuWzD7$ zpS7ZW$llF;3+|?9GEOr}2jU)#jvY}Puo$o4m%Z$jYz=?*Xct# zDXF1vI`(znlK8S~jTgvIxqTkrQC6D>A+H!LDGsUFk-Pl}D&2FK$~*p--ElDe(Wc&) zXM_yQ-_2?N1IXi#SJ!_*9{=HpB*t|90eK8`{snoY!2JPvOeKZ`k0kVTWpgv*P_c{8 za{&HSrdI+81KrAnGo>5@Q|It;eVlb|d42Kz1fm<@)05TX75NtH3rF&+2MIh6$?FV` zgS2=u(2O9evaa30XeRu^`8^NpT}$<(lKjx(S#1nj)uUNwS-qM~bGQd7(EdW0#L_UK zuBDPeJ1NT9X`!aqyt(Rk=P)t<*oAG@&2dZ&*W9>5ndW)h&(8*ej89h_8aL~m2soIv zm0tjTZv>TAjx1N&e4cnqdY0#i4yG1T8o;O(Qm4B!uHU#`CXxtY{* zIjg?@e}Q@YZ_n|6uAx;77!n|^Avz*BE@JYp59PU7bdL0MR$aKy^ZpOlW|0~Q z(hB5YEY*FY?b42iM|bnPQZ0TRa2j1THiFKYu5lTv|JtZIeGY?FVSE)%@iKu1g(B$+HJxSyrpPu36`R%x zo~dR%5u+3|ObfD((rCM;5!|HPehN-!HJ+n{S9(IF)xPS8LlRzauzy^kK}$!rxX`uW zF4*)1XzZgQ=uly~u<@F?It2$+4=^_dnS>5j?`D#3|FA*GRh{UBj?ogF#U3pZWi`DT zu6o?u)XT;||8{FKU`<@l1BEV5bYzrO!zAn~W(yV#hwTv-sodv|f>9XdN9Hx9)1_E$ zn_1aoUZ?K}ObCg3lV7OCnmqxZ(KLdwC{sm z0p@#E1_VLEh~`u&LwXxRD3TaS%v!T{>qP6ykSsP9O%>bGLC|Y8ax-%L8v@wC5hH6= zS8(pZg$m8hld#RZ_CAa5>+7hM9zAkI91hKc*sNDvJ4RcaHH#6*mmWRlBVyLKJm9m1 zH|ao|3|0vw6(r~tx*w{`D!F&Ah*?-P^2(HsvW2wsjKO0OTkU!&mJ+&kJ36X?oEl?v zj7f_KqQO1;APlSgSS>q+Qd}$Ht)O>w4@?hka|nRKr0C2ZUe05Br15gBLoz zh}_%d16{~o+QHtFet7x=vJ9$DRe+l)9GgiJfm*=$0n8`1q!&L7BJ{2E)(_Xkg4UFO ze-!-EC9djL**mL_5bjhs`vDzBhoc6=~!U z7O`)*K_5V`%)m?M8PE7S5e|JCcW#kbI>-mag*Sk*p`WvxvCR!WTE|S2bguq0>@%4b zJH}BxXK=Ht^V9A{vo8RKx4Y~LnZhi6bB~`8*zeRzggpZ%O>(hDvbI|qkb+gs+?SAzVXsh2x z!pE>d^YP2}H>)?Adk?C71z z*KLu!Lr?jUs1nuRRwd-4IutUZ&kIZXVMxzHIprg5P+Ha6qWb%(HoA8ZP%t9CMc_s7 zqv)gjP&;$ZLu!{v*cBk9sGbj_aH@7=jA*P~8aMFmhl?PKNI`_Ok422A>JP(c3lfHn z&_TgR369U08{O)fU>G{04M2=#80)n`0i?<^F7cHQes(MO2jVHi3)4g{xUvT}_Y~~r z@l@=_*XrF-q~ht_k)-M<+yZTi>eolvG`#i#Hf+l3A5`;<>mP@(8Kj07u+Q}8ykZ7+ zt!4{OM_P+|hq&lgMScTYq-a9bRk6eE$lGG$DcSn|u+P6%vZb$8xFwIJbcNPYvL)=P z-7VRq)jj%a3whyc_MB*P%%UlF)gn+h$Ce26)d|Mgo&5*uqe! z8cr3>6r57clK$=05y>TK7}FTc4xeLM)?vjx(^tkGQ$*50o{zXjz%gdfR$Y8zcJV0VjTt=ZqIpetZ+o-(B%57=CWdAPa%3m7JMI=Q4UM5 zl}@a?Kb)z!u{LFqvt{c+TU;~kXd%at#n!W{2adKV%}r`TSt^G+rd5-oop)!UnCl#>4#)_?Y8F|IMcOPAAI5eoiJ&phrZ=wIRKncrnX7`y@Ri0 z9`g#G|HV5zWI$3tglMTEBotC~NX#r2OuYzH8xm^zC?*MOM9vI%ramXI#?B!hhkzvj z(<~fICe0p>!AjX2{MJ!1j6{^lWEFneFo1kUGs~UM)&N|=Cc@(N7{QDPM3X5`Ps|ql zl9TU_IMmfJ#x=UTJA)WNt6(;Ys!et?D^#n1GzzSc6g`ymt_cV70X@~ZGSqY;x$;-? zzRKhRP>|rje&9ry^u!!#eMtv-p6I5w@^p6tj z#1rUXrr);Cbf{aluyrRND%mHu6&8;k3vNVOdX-Hai8xY9w^+~Fh>af9pOzX{>sdE!M95 zhJJd#>r8!J1xV{C^1^$?fNR+BtjzAo5J#NXiNI_U+xr5uC-pY7Dr%;;iSx9nRj#L}>_#VX;VVZm~XH6Ri^O zfhMcuR5INh|D8^Z)!%jzfH;X*bc95mPedul^qrGDhW@9=v*IM$M)IM^IhqR8VY7T# z>lJ(KsOes-Rv2fWnsQ(}b~c* z3luGl&e>LU6hibC7beG8Ba}4uO?McgK$eVY7KPL~UZoK_ODd`iKIlci_o$zTg}Y3( zB~%na2M#=KwIxmfLs7J8x+cvqwQQ*5p?ShzdCuXd9 zBU`kLI<TL#fJiExF)TITb_Uyo!2-P9kbt~l=6K$msT!$*x+GdHi;+A)0B-10%9#A57u*1W)C zZ?_XvL_TN{3bY08!6}ZIT~P6fgtBeEbAvt`TPC$$S6fYCaLQZ;m-xoL#K0!RxV(iP zBENZlVxBez<#Bc2k}kS+oK@##x3jD`E)kWGOt~GSMV34v60}$3mM&GBXtki9bV|W! zFp<~^&Y~kfVIjc-@PVnS*#-HFStm_g{h2OFu9D`YSap*PEJv0>Hb+$r;&CB_9H@KX|ug2j&#;0w8}HZ zuA`0mC&zRyQ#LL3;v^gX=K+5f7Zsb6XqCp^nC>+`qzAqE0l~uF33p^6r=_)_+pNV8 z?fQ2VwscZgfp+iCRV+lz<*3ew5YsX8efX29IU?s3jQIJ z<&S3dFEvzVytXaEAL5a1%V#x>DhdltzZMEP>fDBfqCQADkAN>Z_|AR}lu5iXYO=QU zWjlk;lj1KD1nV8xD^c`GD^)??q$8cNvDDj)#|*~W+uOxQ+;0o=NpcBtaa9!C(Sfb> zK=i1BV7K-_F_H1d(4}lWVkBKLN!6i|kz6$fL&Iv_{*laD24pDV<9C~EDz2|-_EN+7HSfe}&F0$>00-B70eOv?! zJMA6092o?*QW0}MxEJB|noD7^@)FGFa0e&@R|A0|`%$4LA>yg#?S^zO-)s}-ed036 zcs1ss*5@)qpkm89!R9MqOjB%6NH!gRSlcuTfeC5>Rk-ItQP$2O$4zE~o*xJ66_Co} za@+E#pdo;+-M^GCVkDeTIao)rI>mC7KD-XZ)>Ka~@4+^p9eB2mE>f;k`M8_OZSDF>Dra$Q=KorAqAJH$e;GEt-+DGX_Gj7AsfWb}jW< z8xY3Tx%u)V!v_y79>P-AKC2f2ySpIt^ z0sB9*s{X^Fao9~O#wmn?mI##IQ@;% zbU|O=;CXdSe|!5ui|Jga1Y(d7;`VqS?+Dv!-T>+=LoMU2*QSxl!{8+C<~OdsmY=IU z7f)&r(^u6De)Lixc!A$XQXEV;_<;38(WwGU@=*+s=iw|)KU>o#-kom-3Se+ z$IRc_evlxxN;ZuidlS@!#!FdFl#caLNJCP#XbfPdOU5!(uC2L=ho*f3HY#skaHKRA zN7noVHyAp(N=;gch*hD|;aD5J6$#w8ccJzq`W{w{S_IZu(d zIC}{;>I2F}Rp%W`-doG-l|GcENIVxD#lfH|Q2r?BVkqR=lMf$ChCsqd8Wd*5vZnUs zMZiiMsazWQ*y@!Y(T9U%l5_35Xc#mTc)dwwb!|`Sxr$Jt;rO^mD_1tLgHo2!K0M9+ z(C6K955B=Z@LP^&un%+s?thW?j?tBE>$-4N#kOtRwr$(2Se1%1W81dvq+;84#j2!Y z+_~0X>wM=st=+ZvZRgJ%ZT=m7^j8nwpDSL~(mb|jt&Wqc=3U4yZIf52uh3qupFirG zp0M=KzVu2g?-N`i_l)Pp_74gG;q5kI&K+46;=?_cSzoJi+ z;<$AGA0(18xrFY@-)$Q>qLGF?fORyovuA|$tH;^Al&91h`D+_gIgdqJvf?EgSfdFqLGSqNQ5w+Yc%Qckc8{Ba? z-k1$V@NTwfVT+x(#i&9KQdinsw)BUISx3H;@oQ1SWvPgBD@IcPUuKfj{MHnW*IP<*7OUN4YzdPtc_4mc(Cu$P2R9)dZDTXZbUoKVIKA zzIjcTFnrwxN$rQjS~g8(HaDFZOHFXp^AD;FKy@NM5aX=Lg|JXt<18T#iv{X%eo{Yp?5zAG zen|%)s=+%RXm*5SaqGk|L1&NEC$iiH4`L6xC_J@H(3 z<)!ExoM9nAh)3%g#R9+dkbBSMID1`nDIA_LaOU-CnYX?+)EZ%m%xvV&KQV2%_N7CpJj()|vzTZ+(RaqdyfK>dQ zW+9Pr_PO9aHXfM_mqL4BVw9!AbEFYgSA2emCpDYcStT@`did_3d&z_NNOSV%|tX%h^Rzl9{eaAnkw5q&+NrSp5TuK231Mf8WV|V1D(AShZqyQq8i&@9#B(T zXb5vFT!`i!)dAf+sEu?6Jtj%Lv$y=Y+q4z6>bO`Zg5F%2H$z_utGz(2zlsTVVHgG{ zZ$&qH*UOgPU|v;3&N|u1VRDv^1;yMR!YJgAaw^Pkpw&pNyj%)rz=CIo!Gr3T^r9l(t`)naN{y*ESt0=MKsMLrj}(XC-FN`Ccecj!Va88*Z;)3ipBYU>kHR;`^eizJipe zVI^?SVPLWK^|bF>i*^-u52I+~2X}m)!mAq|eI?7Cb@EARyA(%FhW0d(M=rm30|Z2w zYICRP5CUyR1@`Q&$mPVm!@|sBR{|q!lW9b=oqk>P6F-%%y=affWHt6P4+9&Wgs);X zS93X+i)FcX#*_)BU5+xKOo1ZNs6DWfg_JwDlS#~=G)6V_(lY8p_PYXed+cu6oiRI} zo+O>wf)javZs_mI;$KOJPCyF|-`3)u0&h7^2`{?>EZNvBB!XW(qo0S7cg^R^T-e7k z%DC-abGljbx##MvTRR>6q@M3XX2g7ryi5R0LEks>hW9^Did&hox()i0jMfU(mvl2r zZLoO7VQ-`k2P@1TQJ9dbZQSd?zMbv|O=F}!v}WK_WC`>4ll3U=w)%a;_m;y%9k}AB zl~ejzcWN~6BJBTr5GBl67d~s3#TQYgP;gpbC)miBa6ER94fRw*RC;*-_|H zrK(L33A6$5)T7?S!}ahL4!mpTkK4|9+!P>@`g$C!8w}!{L?LxmJ}ies#`&ahmyB#e zaNQ;__GQ#K;p>`R+3EcbA}g)eMyp2Pk|2`Yl00(rnKD8LnrY8$0iq zg_4)>R)P#9@64CaqtUI)S$8aW6!MF<4lIcTO2h9S`Hij>O3ySx)Gg`M9G$Rtp|G&v zb<-I}vK~fvbFQm=!;*?KI$86iCq0eH`QLx|eegrxS-sWszW!OTywD8q;Q_;q>OUGt zu>Ny${43;;{_#|GvNHRx@ROvjW2@qd`SG^ikexl>AOnG?&W&`Od*)!4p}zUazqhcJ zsn*09q{-r9Rb6+z=pqzT1QvlGXN!>>IqFvc6m2~nJ^gbKcGw=-(16Z@AL-7akQm6q z6%QRv3VAZW_x8uH&G(*d_wKs_o2v;B%fZx0eJl~?`wS20 zFqn1+ptT?jzHwdjpci@un+wT+F;B!W>$zwNK<{|wniGE!aY!8Q`|)Be4ubXZFgYBE zhiE^Fhi1RN?Tq2hXE+jD-f*}t>INo~xm(LCSz)L9UWDn`1RVLR9@JQnW>JmVaz#9# z>PhV}6vzo$-#s=UZRc4`j7Zjv0B0PBu|KR0_OpL=k{X0oT)zmLaRqToWYv7j={7)! zJR6-Ayt?MEpE77nX@^YG`iP&K64BKS%ZMLR?Kd_c(pxs2lUli^N=j$fD0_@@H)LtO=O-AhHZu35d z&(K)m*DxYYnZ_m#$6e8uMD6y=RLFWrZosQfZIQq84B@0VDieNb?Or=-NL5VQTY}OW>=lJ%6Tp z4Q#CM7ACks+7{{YSqZiGeXv{0&j=ghNM(3>q{~{7CNa9=_YB^_rp+Q=&*p>DO@+d&#F^Py3f^ zsHn4KkmeW7BI1m?w=e?W<$pT0s>ze3L7{)zkmvjCE%V7o;?s8o1Rp|0Ur`pH{P#z! zEY1-8%#dgUMgWWl5{4sY$~CvopwufM=7vY;4MOX?Nx*psnS^|}EZ>L#kw|hIg44uL}k=GY`L<_<}aVFQNr$XA0#Se2O{Q9j`a9^Cqu1*9kO?H@9xi51lBH z7I~pVQ3Imc*w}sbsud)M8YOTN@w)lrYKU8Qq z?-JTX+h=?3P|M$JGds2fyOVi@J(#R@lu|3L%20he%Lyvy}fz5 zhu`_cL%pP$sAgNfqFh%c)Y}O_Wrf3Zfs@YGZV%q{$arBQph$ANwl8&$OKuL9YYVagtDA84%}Q$L^X7$-)6k&>?Z-^sThi zAHNArQ-@za3tiMd>J|p6=I|k%s!WmAN?A_ag9H_;~dyoq9_7;)tZ0oRk{E3lLMw=5ukL>${DEK`^y(EO3g|EMG2L!X1&oB zF}zhZJRDY0yK!N2FPd=ii?w6fHoz@0&fcnoJpEBbR+f}Jy>xM*3RCKj1!Ol{MxRu0 zvV1sOZZDmtx~>kp{`7Wo0CguTB-KrE5b2YH0s?RRoU=!PIB&3lKAg473N|lTfL8~i z0}6>60{n9$Nak}B&L0l3Mt(v@nC6h-THb18V^y-N9& zO+1?(3E5k&700pnzkF}hoh`cUNQ(WhL1btS49EM7b{ z)@FGpNS&(~@**5I^$bX-Xp)!wQ76jQg;u5L zRd`rBrlitbPo}e)SY_K-g1SI<5rabJaQz{IgjvhPDc}Y*Tsx`X0iq4?d&H`SY^UA{D=N9_QFiujO>_2*G?-(>;`hQ^9oZ`kQJ1#*BO}=D05?gOL734U4O#V%?ex3M z>-g25Y1@A^@1$l2Mk+vdjLSdj_nH2muI^tqwn}{)2%e(8+t(Y7)+fd{qcSSe=|G0D z3(|;{E=tQp0Or^mkzU(KQ)*)kY>~|!hFZAyk5z{;O76sR4uV5QGzEFMpARB^{e2_$ zHK#XiDGOl^@({S(oiE)lpSqo=-XH%k`T$}4q%t(j?1I(6jLaO*{L>7R8Qqk2Omb9m zd}L(AODTj!f8_YSF9M$d^$vz*M~vhP^oEC+e^5hT5ZadqDo}Xp(qXG$V&T3_6-r^1 z89#b3YJFwO`$KS#nTkE$EmcRn{ytq)bJan+4McP0)Qr9jWk-mwrL7S*)W(>|KiSZ( z_UO>&J@f`)>B~F_Qq;Ud-Bkye@{Hk0VDafvsDEN@_-{D^_Wid;0=g?hRJ_QsvNQE| zZoc?)k7UK1QSsqU7b_pI)Tdp0_-A+#*~|gwQ{8d$7%%jQRsXf ziK+JzRA)RCe%12KjOlT|W5bJbC?k*UKIyV4Mq+|W&m;-VA{Lg7QkhKwn3$XNa!4fo z<8K+rqFCPYT~_rdo2;Gz(^dyJS2^0YIb~+52>q*Y=$xL$zs9mg)S`sK%p=S*W3U2j zO&W8DF(~db<+enk(uRPzuH??Gcbwb@Mh7>h~pVhpHg{gzXd%Mus~D%rY&e!;-_6SqpfXl(18zI z*knCdn)r=-Vy4^I7fYUCOAk8-UPanwSk=`X~z|!0~xmh^Al>mLK&M@#AlTHZ*aRa z1P)dCRCheOc6037OFI-8G##l9S(5tB`aTlVSD2>YUY5Xv@ z`?q{`l8od?ZDhK2qi=H0!5`yCvhuO8u>ihQ|-!GVX1cm}Xgg_C5U;_wPexVFNqPWyaSY~DNqx99yl&hNeB|Czw zX)H#Ny4c??8k0}1N*{1jxUi^=y|kx}ADZwlpJSTION$jXp^B@Sm51lEtIK6v_BML3 zof$YuL0;ll=hUD0Ax@WjQ5{6pYYqEKAWeO|5YT(r?nNQOU#vv(ih2wCteP#kQzLr+ zSU0xVhg@Z21CVrAkzw1<;&+xGQ1y6LOz%{>@ro31~?b+n+p%2*ov z-r!V9q*w)Oq;p_lS@CV(+U+%+&C?{!s9v7qeI|;e-H~#bGM(nWj-JJZjec^zf=SP! zE04@|?_~_HnDkes)stCFA?&*WXTPG~5>sSWb1&@4JRhwWx|+r25a*;mBrIK{3zI$T z52KOeqR_mUeEVN}!w*PXf$b^?rn-Gk&>LC;gZRAa`%OM?S;Vw5gnm&W$nmwi{Mpi8ZNFF7Xd=$ z+NbSDl1w|w!D23XqIQ)1f?!ge`R1M@`QbXHM(7o(!`SF`@@m~gL*T1&o&D%rCSd)E zWKlDp{n4!Pzn>4}lRL~}9)7~+lt>jW>prgCM?&UwudFx^s-}-ydYmO-oe>=y<)a*} z3B7y;vrrA7to`8l<0cSSyiqj(JDq}m^!WS_@D3n@{jY%Xhge!2@f{T0h{T>M(Mg67 z(%SaN$V#e?JsDBn?wlXW=@zmUKe#^~j+S}6Y+W+vhi>tV?V-v!K?4 z-feA*p0}xNy{v-U=^o#AI6`;{ad|*&TuL2@i3WhmL}92qQWy~#JP^{55)#Wj5Ym`4 z$g32VgviMoPZ-2LWG3`8KncJEfb8e&2kj>np%taxMND^~5LH$J!&XQ2jt~O?ttT}t zRtz7bcY_01k)idOJNx*+)>F+i6|YH>(Ov^Wp!FL>h9kd##God|DJ%AJAg?XtTdC2U zx+ssIwx`C=MA)oe}&>(a7n^b&z&cmlUUXr&Z>7anM5E3SU z(}3;D9gbAa6Era&4d+8!O4sl1>mcKF8=3CdgVdQuA1H5Q2xW1g8m3x3(0F^b(h)#) z3pQh?4K!2sX~Z*vT4&`XYCg)J%h#kohL?zb7E2#AUNka3Pt#xJ)1yf`NeZgI9;9}B zx_pl6=)*BXCkqRsk@PuK`~FBngJF79Q>fQaY4AOeA-c`_#JY`e4~An#eL1L$#I^_Q z`H*QpW!TlqK?45~)JH!}qOaPy&3aLHE#OKY^I>0)e*HwG#Cy0en@yJ}t~L8iV|++# zo;m9U`HM_ZX6(#fJGsrQ3uk3|vStl>L!Z1eC6n&%?|3p*<>MZ2mHKZ7TV-I^>bLJ2OYy{Ru|F#)|)j1;>@_$ z;e)+xTcFfGzm@mrHrS{qPnj$2OXZOP_ouQ|Pm=z&Wv0qo7m>nhPtBN&FR9X=ntjSr zY08|5gleV z?H&0OrSapENCEjhsD!>P1T5_)B!oQ}{x$N2-Y&HoR@Nq3v>@kN>_aQO=d zp*ROP{Bg9X!pxWeJjptGlKjj*T((GP4V3-0NPE#j0-S_;%xt|J%e@72#6@q5tHf94 zv~L$x1kocSUu_Wb5G1y|fOcarfQlsrc0qQB$XNF+IN^53)(Iu-q|xU0;9}Xv9*UXy zYoza6sdB>YHJNA770Y6soi5)X;2E!efp1i^ippOnrIaK8hTwH9YbkTm?GUflD>>U{E&5m2CRmDS*LjmK}Tm=Ye;p&+Fhx(rACFEJK>Eg(L8trv0sujrUe(l}_O4 z(Za!w*R5@Tp&7hBEAIHwo3Meucl8dGv_~U~gvBBP&jn-M1=j2Z#p`WldplE3vSkmZ z>nRle>fQKM-R`#P{ZGFh^5taEWMC;Z|Bt$BhJW84{-M^9Gjp=|+ty7@p+o+Q5+WbS z%M988K`mpQVbl$IBPKSA@n>zxbBh$5)`Lruar&^`ib`2ppux--r+br8IMAHiQU2%S z?e|ZNeT1R{17@HB%Oa3DGk8N+K`*`9!XIfZ zXIv==7x+euENwnk^`aUu@|CutU&U04ysU9=+GsBzcCGt))RS+MyyV!qtDtUjRJ1i| zHc;D`wU!p-Mc*Nz zRWko2`#ZXFh}#6d7kuDc?Eg-x`VSzgKi=Hm5Y>On7&2c`G*I8=d2c+1_670bWgVqI zqu_>+@A!R&z!oMPh{Yf!!i4rPRzMCkaK!~J4W}-wZa-Ejx8!J4CV)W)O#=0oUQ{c( zq)|If2ebASq-k=U#zTM#D#c`&%KCQYj{op7r8_U%7$n0CFw2Z{R3GBP0uH)j zky4CCQe)#{;}VU=QWKeq1pC;*xO+HeMZ@54p>8Os>L2D_8WI2?Sk?C|A zIamu|I$v~v=EEMk0RZMhEj>{5u#1tFVv%D`y_EL!gRUq$ivHY zoB6a^VZ@m!YR5^BeZ zs2*HHJTqXYMBO*WWmyxXw~ic7S>8#diFodg=aGECd=t{Usy=;vO~k1E8EI^-M|Jj4Djn(;>l>TUbUig2c_nU#gu@dQbDEd%zRN< zRlR{*YNkkGg~G>KF&`vGJnJeJNMeJqU_miAQUxVhSSf3V0oyOnQMjzb0C(0>nP^d0 zhS@*x&+9jNlXwMnCFRhOOzomV+GbH^MNYvqIa=2?3T!7=9?agbZ61NxAC8PW3M6xS zstB@Xu`@RxNFBxSq*wR}T^yHc{v%OqqZg(ujpUF{W6Y-jvT58)v_UN4n}4lak@&e1 z@LG(U$M;(*u=Hd zZhtj())KI=E_aHXSWA>w+s)a~C6J~yU9mfQ4#+0JdkT%S;9n0h1CB#B5mA`LX)4(wl3 z69)`e@cQvAouZ6l)HxnN1(Dolqqb~xNyqmp{PNJdI>wKau1BV=TN&5&gJ+J|oY*6J zEQOeK!L(b5pyv+fKkb(aH;#`c5*fb1huc%Z?rULe&E~fntc-P)RK7q9x7(q0aVu! z)9bxM$G9wi(QorVGdusSsoCZ)o3>bJsHSJG=IW6pyMP=bPgPx^Z;>Wqp^Qu$Uc78Z zq>!rSL%C_Xt159UVVToQmTeD{o#wN6hJLptbn(d7X?^B_!qz_C$L+ctu^uP{REDHj zLetpro@?1-)(l(6nZY%z{K$-I0F-F;W7>EC*m%dWv-|nEr?=%WG>16>qdzd^e&m8e zCl0)r?m4Fq(53hB7F~nr^(iC{)g<pO&A3<0R^Jmt&xF$#Z|z!% zzeQw2DjI}8qJ?3WP~4!@_4Co;cdWm@gFYjw-63tS$*^*_?Y{{X$>Wfb}ZQG=(&ay29TuG}SU3nhg?$n6>J zBgIj?Ns&3K0o=X4bMbTS*BU3_C>VeyAn{gYMGDp2ae5=;c9VxCt>!95;gj0ArRHpH zo{>s_GQbXxX#yzbsV4E)0^u@+t0cBFgaaqCK|A9MX`8SY)l1Q^2?|i_Bv{1Vc5Op} z-fj>pK?$xraeB%8jnAN^!TnI_mBGidZl*upZQoqfr2eW$jH`*l%9_OfrC05C56@^B z+c`QS79zYnf`Z?LEGCGe&qVljz;`F;u2j!66q(s|_okwB{y<2?AM|Z0=1WKpRMNpm zhLEH~in~|*zCHu=BOJJu#Gw9@PxGePS7}bly9kPDAuX_P zpU?&lw-srUCynrK328@Y8Q93#)UXMcBz~z~Ldh_b7X|2>P7tv;Wz1D<4EdBH*nRSn zIJJYVtNdwr^JkURImSJs1I+XF|6Ba)??VJW|0n*HrLG5@repfZub7Hx<{Hk5=c2a< zdmDlz8pCM{P-<#_X;!p6mFNgk(Huz`1-EP3`YmxcMX&?rM#||nbTbCy8z}Gt#v;=S zuS*eU+r5EIlBL#!KHD9*8|un4`(cyM!q@A0^WhV~Q9(>wOn-2g8k#zsnih==ErXh0 z>BfqLH#+V;!6MQBVY41^aSG4$hq^ZY3{dpY-m#?QZLqh+u4|0bi<+dX8Bb&*pONbyOpIeUF4N_fGcl*f$!Iq1t#txx z-`2S5P8&_6HQ}N&!HC+^?i(SH&t!^FPm**(w*xx!h*_@5xw#iwaY(yH!+@!%4+g=b zU(2%5T*B}f^t6**RLN9UGp8J(g}PjRnj-=`FXc!IFI&c{K{IndeDrS=Y4`5AJUAN8 zw1p}1)`pL1JCPAaS2x?;!Cr8QT$*=Gg}vM>;zs#!r+D5Z(>Z9F9_3UUTYCbW@5asW z2VXAX0R;gTeHpH09G* zb=6N34-+%!krmvJgybglTG?63U_gI57YR$tr`?y|CdaK2h8OfXJBJ#jHnWiAC~PBL zmpEySGd6VgkIHW46a99pCX8CZwxg+-BhCp5L|u|ZgRrVZ9Ho_4Kk=Dg-3E<5zd|os zSt(q2512S$KZGvgGI^P`@ww9zcxKu58d{0{){O37%(sX#bKf1*;ah>1kGFq42A%1m zO&1!8RhBMsYOD- zvE}{T?3EA?L5R!Zlmwv|nw>YOuwmSLRxTywGs$*tQDk<_u{NR9al^1L**?mg$B z3ZHd4U!l62rgiUyiik9E7Y9j?FV7rW0!2!*8W_T!v^ttYW6jmYF-b3wC z4U(Ftqf$}t`&1~Q;>B|#QAE(bOUBr4fybt!*Px>lEf&RK4X+>ymF_b-gKb@){yneALDtZ(V&w1SU>}5`CC5a;Acf9}pa$r0nyApp zq5S~vSw*6N6rSo|8xFy-w2yW$cdM!&L|k>hw?jl9L*)z%;5$MNJX&v~XRB)-X4@R@ zqK;->!Zrl!*yh^g?66nFWlSM1UdVSb`eJM=Wd7C4xUjnnxdWTPrGK2K{|6Z1e+zGa zV}u$y&MH8R&@JAaqND^Bnv$vv8qO~LlNAiAEz+P9O*5*M6|MURtYegS%>F;q4-!Ko;;MO>G4moD;e;Gc*{p!#;dV@Z^j(f$~ zTQ>>0G18RSC7PBxXajwb_kT3YiGc+Xr zC|>}eqF@7{17?LYaN`}Z`Izzhm9Sz8WQGzjV{dT# zn5T$|_r+XBJP;7ZTS;xNNJb2QFEuh&{#t6xRs@U~FpG9gQwzbA|ccQtHEx%3G8A+7D7?M zcNi~q&)b#TCOcRD;cBq+#Fd0${sN_M!imyWI2f)v`I{EE;L|OWSuMhA3&qwTg;~xO5B)M()Wpy@&;@N%=tcp6f~4Hvf-*k z^OQhO z(?-927XPk zAPm(`(wa7HX`x?QlO%XC!HO)tuwm_yFdB!1O3E}M*s zki_;>`0f|3ULxN^WV*>%aSMFez%(=KgoBPQ4kRViGd&w3K0eV6D>4ngVJ7*&a$ec& zV=Xo@vX0AlK9*-M`_r@0`(6|^z=9S9vs%inJ|pUMIwH8|{f(GiDhqvK{>=tbOgYE* zs8J(I0}p%5B?dk=*d(w>^uV4U21MFromIi#I1&^%txA z+af(+YU8<7d0|u;DxQ>Os*}6fwc2B%E?E6TjMwto3}Zwpe+CDr z0^~NhbiWaM{PpDRnar^K#NKhfOsHIq7L4)4tf9EJ@7`fsoiDXus_V8!?T#jAXi^|z z+lGr$>H>4uirXhra!W*gG{D9^>`<|C-KIAM9e%I8b;x(g)Y?%}tEGrxz~wL3Zl6KE zn}cM{qF3U7H4}YyJn(Qlh!DCb(LVJabo-d*^#((~uMz(X+=oPfs1*E2KvRS{o!Ci4 zYbXe6FtgCqHeGy}zR{d<;s@&_<}w(D+|1iZGyHwqO`m3#9R|yqST(~=E0 zegluhdyW+~IhIuIX(WStw9oQ*wXRq6Ku&atq)gxuyA$Frnn`QXH`s~}JA=H|;nNJi zntkdO)XUU9fb3MnEku#WmzY#4-hqDMigOGl142Wg2MaDFUuDoYFeZ|F6dWWaGV>E1 z&Vl$Fy*!2~_&(C5hsNjv-R;q`JBBW0npD}CyQ>jd?XT4Om$xx0$Pb)w>&1>h(U&dp zENQuu)OTqQWreMeKN}u1R+FGhV8bK!zp=ymV;=TLGWjoX_K!b*gR>p-Kz?7QYrr%+ z{AXpQ0A)dFSgWu(LBwDXu$XtJ%mFDM(J;Mhf>%jVq%cYEPXxg$JZac@3HRpq=0}Y$ zzu#`43`4VjWdHDiL?Hgs8-w}8L=4K*zCzR(t&k1bD`{5DxR^>;0N%(jZXtKPF>*Mr zI;D^zZ5}@(Cztp2%)1x^!6~`UB$b;=$t>AQEv;TsHhVcqEupwWVDxD5jG>J%^kj3< zg!=>~|D|4^^1Gew((JZUP{YT2h%}xZdQqz;WaM$^`uH*ZS9+RQoS@)@|MR zvqn`YB<)JF@aH<}TyjE7xy97{xKzw#vst){r3Ll?rU8hz&(C`;;>M!eiYOT?$3PWv zn0qtW8HD4e`PD?1^JNx`MRCJ+x9>Z&A!G>GGuOQ%tn>Miq!aEA=ZIsdNsvjR$pl1n zEdsOKSZu8b04H3QX}xjm+PDKY$Kh=SU65lf_yn<7CAIpK7ZMsddM?xhW21Qf2~K)`YlIg+IUj*&VsJ!3s&0oR`^ZFhxZgciSw0_=eM+}nWwM*nC-Z>NO+16lxhuC+Zs5x%KH!+ZT>QwEk zweEcnbClYJiQm&}O}K08`N2XQ@yMLsS5K1-HLk2VR+$^edm4)~t-6z=Kp`Ozk0l)1Zt^%Hc@^)M6JUi{^gWmc^nwf$r=w zW9``!X6|bLw}9F%R_G7f za_~00Tz*|sQ}&bA%9L4kin(K@jK{*^d`h1Am&>}@)(BW^IlS#%s8EnH zMa9x?TQf2Bdf=G=VkL&Cf)&2Ou9b>caclY3N=@zpvtD_C+ErLd;i!6?n znvdMgQ}@cZKWQnMF#CC^z|l+OKf)~k#!l|{xiur<5f54lS45$A7kFR@7u+p!L2WvIQ-23?O!u_U+qL8jthQ z{_P>09{>(&99f;TQd%>iHd_#r3JZzUOq7VCHnRE1=z`la31TZr$kocE14IbV|GpaxB%4V{?!zgbVAEyuADsn9=wR- z7p3{Hts&G=e9{O3Q>O|k>O|Uy#|2zU%~BuzK__z{#)o4p$VQzcE*O$OsfHl^al*A^ z5yW&%k%=b~$6`X0vJrj7f&|+?;zmF3Vnb~xn=!4pU&8#6zV=;NH>`k1nDvhnG|vBr zyF<$S*9es5uWY8QC$j<6qc_Z&3e+!dJ}c=6tfRU$$ON7R1`J}9-5D(g5I=fwbS)ll zk`9Qj^(cNsf<>$ZJgXnaP-oF1_2{e9Pnce2IZv5#`hL8%gUljFiZ7nQ}s|H@<29yua9eoDfz zv4>uG9NA|_2li<7?jieXkS54~ai`(HcRYRTw+Ez%-E<0$R0~PLMPiWRDCrV%4@K-L zdk(P-r9GI`!5ACEAc)wY)2 ze&yc*uUL`h`(Mc5mS^NuQ1u-axIidyC79xO(bFh~Ju7b@inen%ol&dLhZGJjoKb!6 zT;va8+I~Y*W<7QnnHVgv@jZYE`uPfbi^17o(V50Wn@EL;PX!M=!wFVI z$)rLi=3opL<;ifTD*8&c9i;6L0?!^hLmB{*^3IFMV8KqCP`~4|0mh-Dj#-^HDGKN$>8x(7l1sGB+90^=9A>vW7lHT?SJw5skIRCwsD--6D|BERh^euB+e0 zbYsYwz(~5b);%(|R5683)2i$ZA+Io~$pXKo5$lh%p7ZD#oEA9eTSBQVdh)uOjW}kH z{DjSSE*9fDN5=(Rt~DSZ-4r&*=G}VlQMh~yjtDBgdE%C#FDchH_ZO}d4hoG0Lw7FVG*0$#$RM;h+&A(%0gmbuR8^tSybqB zr^gW}Yj#k@R&prduTs$nr=^VC1y?|Yjy(?I8ayjP$LhD~t#8w99WO^$F$SN^uUp{? zknN>f>5SC-0)k$U@g+TuLlE?gkM9fMFhH&eas4p9e{RgB_ym>riOb6@(nt}Ogt^#3 zZ-|%Nl-5{z2%4CAPtmk;4>}OI=$z4|Y=6|wP9g#;JuRk)y~T4VyN0dAPKM*w6ra$U zs{l)zR)rNd;8ctyxwfrnRV?C_BE(R%{+Riq*I65vShsysc3iDO`Q^Q9MXD?1+A1nqQ<-gc8yEO?fc@z`2q5{;IGF`B zp?x%mGg!{v4w6$u&^EOk)D)6qk7pw&7leMuNmhs9T2s3+o9iby9qKO`o3f;%(N^K7 zIkDlfYc)O6uL|qhKQGeNog%DO$EfFx_q3DQPYyluOs|wQ6z(a;-BqHq#^})SSahPV z%sr$~2NBE9h(#>uh``%alRRhV#LnT}u{eN2g9C(i0Lf^X>~g*RO=kBvqY_cYD~2c+ zx+s!5v#Nwygk@00Twz<04dA_d%;g+bP61$u$u036FoLy~klI{~JExz9NDGpOIa{Dwor=WWH7w?uXqOT8#w=IxLTG;wI5K=rESno zpj}}^7;9I;d|NSWt-QNG5gi?oFpl6F#1k)fltwfRM78*l%z3 z&d_?z?BzGbO`fG7H7FjyaZG~euIrj-lDHz{tavv|kX2|d{(w~Zl~SZq+2`)hk%oGb z`}r-faLE9=eE;96KJ@=wy!`ju^tXkM(!VNDl~^m706&Jku^=!PqXHRHd+*9}+Vabg zxmY3*3aToY9_hURQ51n6G0a>3;u!Xs2i@}W|A)1A46H-l)`c6}wr$(Ct;V+PG`4Lu zY~04SZL4w8Bn_H7+qL%DTDxc8?|wgKGXKtZc#LN}W72p0XlV^1fW^gTp7Wmbo(mo~ zd8f7R{g>nwwt1!Mf*ABZyIO+r{-moE$x^@c66TCtmSnG232WTZ|_KA74M1`Ti88j*Uic=zsWKa9kZas6cD!0f~DMHI) zU))^2A?mtIk<5Ey4{*#vUcA6_U{6Vg7Bnfr?WsbO<#EJ#zuAhxn0hr($e&=NTj+d> zZG*_E0fksAN1n~El$+uG5qkse(?*}k8KQ$2ONlLAF`!R5-Mvo(ZiF&h^G1n>Av&Z} zu-jo|{r!V{mrzRR;V)qBgo;=aEg*3i{B14pmj#%)shz2lr7?r5lcAfblk-m=BXN5t zcSEQDxkH)*;4=adLad5q`go0YMec>@G#w1TVxl|XEeh$uC@{^#KGyH3PM!toKM_o@ zEg@z0Em7o-(3i5j=9K#BCz+98WH9I&)GCx4@)@%H)TD$;Uu+6h4vNak?8j$m;3IkQ zdo4St6>d2q{UEl}3y7h>BjnO1Yg&fd*pI6#ezfL2!_(YExYZV6rkV~Oi4Na=)2B18 zvQvx=%0KuZvp`b#-xJ@x%|tj{f3())>%AVAaIs&+*ieeOP!n1So6jZ=aFsuhjW(&j{Gx z6bB?<_D-IE1O`|6FVMY!rrel{v1ok@qR@PAK+`hhYPeiKKNkj9xI1D}?-T&?^72kV zdc9ccfPS1gF7&&Pf&Duf7he~j5FpTOM0{N!Z*Cqa51JCSdNWVsNz&;x8o3WQnaX~$ zv(YJjvIFc1p(B@3S+bu*3B%B9E&H6GyE?%IXmDcFQYtbR1fec{Ie;IWzT%AHK;5Xg?KL6RMX@36-j{l-W zu5nY)LP`Lx{vD?my861h5>1Cf(v=1!^d%VFq1KJHlXcv;8!L4DZjlkglH!WXtjsN+ zIo{kBo&cmuz(JZqL8*LM3s>*4V0Ce+9PGX)%rbTQ<*@cVq|?pAiZ7HcrW}tBA54M*T2e(eq#9ZMmnfP3H;_4bQvIoVRR<4v!fy;MZl~iH`Rrj`kAov#981gM z=OcC;xblN@yhJdjgoHpE&aOsEt_3<2(pqrzd44ChcZCU&V^b5w!3xBJNU?-KsAF-&_n^Z0B7vkl@f0wJER1zlw&w3QAyW_E zCEC0fLLwXiE6%{={I%IZO1UUdm2Qh3bRJe&) z>_t$H7cs&I*XAX*$733l;TX(lw>~++Mp?VThU|r=L$Wa9`Yew50vMvG&^vu(lDFY9 zE9W8ZNaNiXO^$jaVsoQ~{>)HJS{TQ1O-9D7pcqfQSt?q?*qw6Kng`w`cRYqW-y2c{ zkTMY-+JzKGnln+mB7o~;yBQ_2_im6+ne?1u1XTV&{{w9zG4oe}|6(d8u( zH8^s>D*6Fcup@qRL{H6aKuw`tl&FdbY};79c(BRDHxo+mwW2btDsfDxI4fOa%L7$- z=;seS5SyFV)u-U|dCNw_Z(qX-m{Y#*1QP&Y3F*gKMm!9rWqQR4YnsC{Q*A!4d0ry3^7?DetHE z0y&H?7Y3-P@NYW_|BZYArQ<(oYpCKM%mH(yaxwMalJJWa>p!qVfDn5q@>0&rd=eZ_^O-6YV8cCCVU zau@wxx1S$Hn*{G#4PBnIZ3G7L{92Y^?jJ<-RcLn{#TDde)N*8Dh}?K zH{Pz=HM?FsUl`wCjGG_+PO(kL$VtjisRVzSRUEu#`(?IpU$sRxp4Y(2PDrXG(o@^2 zQc7BznIsrHEa#-cvqCImMDa^O7!xz)o@%(_K;dvV=p8a7V?87D6=NN+Ry5%okQ6+j z4!UIUzE)E+3!^=#j1#aFdtE+q{64s)={E4MPUX6j!rlVFaZvsCt(booP^A8L!}woa zhwtBRm&`0wPt2e7MSl(tQ7tU7?>#Q;hAhS*J9g3=!d#BSG>3Up+W;IXUV1G*j<)3} znHca+ch2Ryb($PH8p8?Dt4h~oR${HUDKsGh8WToVL5Gz!kMFBW1uy}m8*)~vX88gb z7uVqU;=V|S1p1DF(1%(Z_zX3>T(q45h%8##{ExUIm#{|n^q&%D(|ysQYRAY7N2I@H z8aCaem0Zx(oPN&cM+#IdgB|o-K7cKe5x5W)?Q>M4gjg#Ahixl`d{oahw< zaPbs5mPy5}6!Ls?IO^Wuxlm%;MySUN+Xcmd)j=s^9E9l`6n*hOH5U{eD2;a2RziLv z?XC-lwam54N;XAxu4S~dnv(1YhBM?>jw}$}`KZk&Id!4}JrTL_aBcon`azAf@U z?EEF2(V^mbet=}?f9p2>JL&vqmHwYFNB-Ag4iNqR&|0af_4V1r{^D#^fNHn&?kDE&&P(wl-200R;g*Hijlj7A=CPjA+3sdwDl-dU0_0l%VWcqm+4Jad3S|lu3@Is}X5hnfWQH zahatDg;8la`ufE?DtY;Fsb9ey=!WI?_HIt)Rym3}>Dxxs%@|6OlX5i{);b$wN+>E> zY6&`8uAT%H#@n(kaK_cIQfRavj!~c2!SqWw2D!|X9{_O(@{x=WsM?d=KOo!CL#?|?c zKLBRVzY&}O8q_#|jhLi#Jvnx!!8kvO0X5cynvU?J1|B#1|5J)(USC*!!Mt0h?;RTkd;}v^MM_jKPomgi!Wlw_JnpZm6_U43eywsOiK7f zzbB9tZgWiuml&e5)B1Z-eP;={r8*{|s{L z$a(`Q0P)xV);0X)CePn8J_%F1f2=J3u{5eywN{vWkLtHMTWySr*ajK>1+Cc$3qE5w z9$_3-3K4~f*dkibbHHe6q9(Lk;fml`qU#Y2Wkwc-?Pfw?H;-}GGGjM1yxh`Be#)DE z%2{4v3n9;-11P?`I0Okw3hIa~TB?=MP*+&GSCou;dOsqSF+wHR0*)kLkTJ-jJSgCh zIz;g@BAjB?q){YcCdy7BJ7ESvZSWnpDQuC*pjN+Wwn$pE(o}mmeptLR<3?dG0VAuZ zaf9{hXLJrWYc@Z&FN3ZW1MvlWg*6%4x>H%?Iar=FouhPiI9@)PIxx-6ljnu0Y@XtC zIqe-4vX|a-nQRBxhth+SN9FNOng!WkJu(~x;@42skz(}B5sO%IGb1LGotbM6%wfy? z6o%%ul(e_of-1POp(%>Gnja*h#S4dU1xJhUvl(goGK$q_zoShea(QKWrIR5h?L6K;JVK; zxufSlHd>O&3PH+VN0}1YLO@^(u&OPH_(auFLKG~L6ze5WL8oETMKhw)eFo$n*%glr z`Gtoe2*)eW?Ms6Fy8Wao36nAi_g`N=prR7;Rdxonvtm%~6bD2WFH?%==9@a?hiHc( z%R_3~pbqdzU7u_Y^&p>OZVGXC9}~KD6Q_Iz!jdT;V8(Vt;cFE$v4399LA)PEy2?Z( z4GCYsCuW6EbP6ZEwOe7Xy>~JIIxRWOxa2)9iQCVQ!+Qn(X+UDtb`M(s7DL2uEjSTGN!ta*kRTk(i#g*#Sr(?Z#wZgbX~!Ua@@iG;&v1*k3^r^1G2;dIzi4~Y z(yC4<0d7sjf_wiRGYj$s8zelzTR9<=YZxW8;&P zm&WeQ23@|7pxgZDdgGs4zZz{01Vwq%Q%w9nCvqUN zmw?AA*L#n>uH%mjTT0K$GAN-v&GWV-vBg}C#ifvQ%eWj>Ik$wfN>A~Ot!S50y>|o! zV|=E)9yGH~6kpwnE!Wr$OAJ(kT5!zClP896B-~YyI(>)}b?qfdBe=<<52(MtK{g1K zeM+MGMjOkD@NoTAk$f>l@iRBO+w9E(Lf}9bzl+QCuy0XSJWfC`qVv?ry zg6ItN3eJLNg}<7y4EJuE!=$PO)k51){Ltm zEkU3^$wSa1ZtuOz>sY4ZD@VG=NtVPx zaY9bOeh+F#G~j3^YKc7_w+nZw`T?4OsqViJGdR2b@-OZ}n@Pgz|!T+5GJDv+puB}8E56QHP1otPYd)!Jc~ z`EhOIuodLlz_O5iMwCGAr3lg)A|hbs&eY8Oo@FazWBl@?y}-M6!GS>*oUiQcwl*uv zxkI?nV2J3@!=&U8Lp{Xmc*%8V??Gfh$JiW6MS^syT_=4DLXL1siV48Py^A=J`N%pt zI2C=dnju%L&Xcb`tzt#O>`)azY<}5{zh0C*h&kPw7qr3x?{ueh)eyJcks!}*Ok`jD zDhM%yBW$;IM^@m2U|A|1av-07pu~GRaz$z>k=_PXFwN$8JmwZZPv=Im)8$VC;0SXz z;#EiKUCbN8ACSh&61>gB^SL_UM4~_?_yG=M?dkb!*E)1T56v|gWwItB@6!|^Qhn&~Uy5ze!Q$dvb z@wopn_8Rint?Alyx#NXF23jA8967_cDvr+XN`-{CevS<9CWX0^;hiffukXj$KP9eB ze3BjykoLiEo$6m=7yijg{<%-;D_;)}1hA5^wmrm9N;GUC$Fy=Wk^&^SnOe34xk}hBIzsaD12u9gAM`ccPrn~rk_5o1+9cb0u&3J4u4y_F zUJVFgJi)fF9@4Ar0OFs!!p&s>e-h4!TO@`9wa9i+79nB>67l2vdvMhB~Q}>6G z)!^pNxG{Uaq0&3|nHO$~Ig=f;o`stmkU~}D0k9Gl_jT8vJ`P?jS2W^?8-AvEkJo=h z%J|YeQ~*1x$+2WW2l^D(8y?%>6?2z?1kG9ISPH@oJ0X!Li@b2h-UZQgUJZAMQIT6L z7Z|uWW@;$P@ty4YA`?4f_e}Fc12nBW|G=|6*rC8P1#lD|l}&O(74uX|fG4d?I?(O{ z;UVMX3YC6sQ8xqQXSWX*_6QEp9zov%^n2>BKF|QOM3-n_IG*E|tf59^72FV|fE!7l!;1Ehej z|DIsPBx?NxNe;awSrxLadTkAfq^t%B5ujE)=4%?90!41`vC|`O*h$OscBTYDP#za; ze?X>Cx)MGaJDZ%e|H1NwhoSZ%?%g4yq2X|EU8oX_G5Vm+OtcGjNHc5nGHXxsOe{Z+ z-taP}5Jb=TcO^;?VR`{QF2_*h*snBX8`HN)B4UX^ zCQ`X>T#vR=!#W#0fP}*!Dt3RNbTD0sx?Ob_-obZ%5h>G}|9Tq4c<;F~Az5L&HTPm> zeNS3Zwe;SQZi@dxF8!q;Pptr@68DjYY~xJsO1ixnwZ?F>@LS?Th<>w~lm6(S%RP+kiwMJ~bE8*xufUb`3mX2S zbD&0lh_4lj?SWdYB4cP0(e`a1Qtl=VYk8pFo4;(HWpCmx3?T3G-}=G7JSp@K^8T4d z{zKiYYHI6XW9af{Cn+?(#|l^oHten3wW_)~j&NRt?^w|LY$8ZM1pgGKpK18`tS0&k zzb=CBI|6C!bMz22Y52ew{~Izc+^$Zb_U)eS$?eU2<7qP3Jcx#zz3xR*qVO@_)YX(? zY@}V z1R)Mze_)2#MKF{h;V-qD<8bP�_X?gp`fKL$?P^yoi_GQ`bZueCyh))tx3~6)d-$ z|5gULA{mDx=!_#*ji_D5J&y1*gqU$y6U+m=rQ2`a+fla}a1AoA0D zOUzFWc*f{<1y+X0B06y^9M#4A?J_MOh-?-9W;DcpJO|`n43i$3Hu~nl5NKH^F?X3w0IO&WQ_34x}w?hATq?sGJeuw+r;Bs1E-tkOT(}|D6PmVG5wT4u+!8z?! zpO6=wPfiaK#JYxpBT-)>%(j{gRmTsR`=bzOJ;PF+G( z&hP0<3}%NpD;fllr8w0Vk&GVqLCdR2AGDab1{B33jNI;mn31v5Qm!vA5zT59oqGFC z)9hrOz98S3V;1Wqnipp!U$ak@dCWf_9BSMV6p21U?NP#Eo6{C&aa#a$u#B*C`0F>s z#W}`YVZBzd#WnVPaXpOWI^*TCO_8atd{GXtRDExZIkjvRcAGKCXT~)I{pA*9bP{uF z_SD)>WM?eHWf1eSwA1~^FY{YhJc>C2=uiD`-R*BfuDGQQ;GmP7y`7B-I#+jli4Svkmf(A5ZJ->B)~*Q2SOn>VAugnd5cpfIaw zBLi=;0#LjD1c>Sa5GAa$R6YC}B0&(n@1`h3uL2V&Iz%8L2zqdSx{*~CjiUmKiQi!#un6MCORuVTnR;K zM{Y(#77{MgE>n87+hMeMt!>nN6z!_a4GHpseUjo6ZTM)2c*p!9gA2goUb0llLi({uCakG)!?kTU z6%cFJ6`yilk)bEDq?bRDoFY**QSf11u*l**aReEzrsi7Q*<}eE0M3%mA-QX0LIh4L z?LIWp#G1~J@DRE4l<{IRm5DcAsQaWD0z$`(%ISI<{)WJ3cQM2YLrOr^H^FXcLJ7yl zBMjJP=ySLo?TTZx`El~4a|wgH(T`MZ&_ES)wm^UtW=%37?~dOyR}d+Rkt(auCLAXFx|l!OwB6$|J1c*-)0wboqB`}!?X@s$g;kj>Wj-6cWVH4LE6WDk5_ zWk1Ecfi`&Nu^B5q#e3`GBaP!dw?x11ImEY?aK}T}9~1;`KpT17X9VCC2;UP0?mQ|T ze^S8*fsQS<>kyI3}s1{#|l= zU%#Vu<4TMy>n@jrNY2r@b! zZ!rdOWqDWOZMdbkhX;b1(LnDd^9TE{ZCd0C`XLAvMDg>erg>?ZU~ws79O>e3won-BpI2hC^uS*zUcts) zUIcmI>D&fa894VC>bQ-+CA|sry1P>W5r4{9|8kUlw0@hN*7iImAn*dYZCftaO1&cj zr3FPG^{5FrWFQ9B06YM z(C9g8E!>7_uh^D}W&%Ya(F%+0AHLIb6_fi~S)WZ$yMAEm{gVILLMO9c_S8>#X|%GY zbgZ-nMU^GSW$`f8DhquD0(*rfwwnH!H%H~;p4~E6SdC~izu;oscV-L=PI+-SNS(A; zSf8OqEM|50Vd>^Fdv4`T19ch-sbC$q1njYW!g=L?7=S$c1{`2EtM8l?#@lfZ(n9UN zqta;gv*u>$pH98S9jP^`SfFmf+%G)QH03X8tB-2d{*gJ(pJqm&&a)Tx-h%q0_#uwO z0#>hS&PNx)5SX^X=@yMVDZT0i@`cPCEjs6xAlS06W!4F`=(u0%Tqazi2ek1j&!=IT z8}ZNJgO$Hk`Yz0#vF)BjVdZGF3f-d{)a!UkPb`gV`bg=N)Yo!{L}|7g)hL!$>%%!$ z>iwWL*6JluUxJ9#6hLrU?<{3$^maA@;XTJEzu$(@+^-rozvV&&Do^8QS>#K z#0T+f&GMC)fEKw#N)n!ElC!Tn`CPwL>En3#9?A3+z2%M#gQU9rb03ThtPPs|%ti%a z0Hui{TmOdmk^`#kom&{|9_hEaNehHHzqn>NFT++@>wdK#($iSFR|O9z!0>bYWckJ; zba&uP{#19c_1+dI@UJ1u@V}JoPA@dfVSBOUL ztP~K3dYbpCbKw)tXG?%1eCW|F>RteFXLi2#k9%UrDXl zDww$_o4P?l+5~mL#p#<=eZULoGGU>x)|Rit1=#2Wm&0&_o@gt*NsUKxX`?U7)9i2Jf^O^VM z`2To)Rd{EZyml26Vhgn;y_`@-Ba{-K3gGul=_cDJ-6wk?6|x?Ji*6Dbbm8GHc--zO zN1%gz-X7p1@VtE59>N3sd!C8S*Bl&RKKOu;WCZnnCQxDECPS0FpP6J2suOk07|UQU zLvxpTv7Xo%M21<}gLDrJ-PFcVe~`xT8OfRX9&qxGgt{oe6f3L_?K&kIgg4o6*EuY8 z+atR`fHQYl1z{n+2K&3>C^H*LS3jeNRWqF&!T_CJrTPr%5GB_rmYRl0Mq$lubO~Ba zra<*=Nb?kx+5T+0cI=wnk09F!)B;oi&C0|zG}_&7XS-nox4I^nt;dq350o$~m*9I7 zW=q3DOT%NbQ>I}%%`j%y*HO7b4wC7oZnA}w?OwMi zC9>bmvC~!ys@Hql;bb);K@~6TCt*YY05q_LCJbEF!TbCghtTi@fX zx%8T4*^J2=nYs3rfuEXA;l(nmfhuOti8#R?SXblpNg2li)(FowQA7W9liIZ8 zvdR8Y^BID0KxgRgsD6`k)({zuFcvJ{ zjSX~v)eR&&2i0-c?g_8?(J!ZR+YRP|tuQG>eisG;uM|GQNd))?TyJetV0*(dLpJAq zeh?BudklpR#mh&T6Tewm_uzK|gs1O-;-)d9_h^#;0oQf{xxu<>n6Vg07&IZk*c@3A<4eD_yevgTMKw zpm%-6B)xH1n}&5g}hh=dRmlKiNs#A~5k>0tAuwHX;$z<{-;Unz6cHd6d zah#ouHT`LnyX)AMRv>Mj*HhrBxH=m`Fiwqz72cUw(^r^M#?EtuCa$MG6peg*tLd+M z_-NlYDM-2Xn5z22I*(ao)?EVJ2nXsWowmR~ydZ$=SoNS>yI`DhDC#T_c}0u~NpFG5 zECCC|Jp!{xciBhe39J4qQR7k!QDWT8cwQs%fMs1=xK8+LgTc?HP>AihvO1tp1^aDV z{x4Ck|1Q9PDRoj*bQIYU9 zv|c0I7T8%RZ?_PR4kV07!;pPc+O?z#?7k7q%;j=E%(~3Jof!YoMIZpQ-iIlXx<@Y& zYaDMJZk%o$vd2FJ68iyaKA$WQw1%?0*A$FNSGjwpMo`EZ*|8D4RBnK79ac6ilJ&Ei z$#jL$I}X)RM~MLvT{Wgi_^?x#DO3^X&*olIRpC`+X9H(douqL7$pzPxy7zK4I>|y+ zJih2!j?Nll`R0%^Cgw7oC(EE#6`)?8@-Jv2^mt5|v8GD#n!`;R#b3>jbd{*3mgb-f zQNI&uoTpo6{V)#G+|-JP{We!hXFfXi*(DEVqfnBXILFbZLP^cmJc&1neP$M$VVvKS ziLZi*QmpI@`=$a*8P(UYolH_x%UyLsP;vkTMKI#zy} zWlIIi1}*1KvhqY~h77)j*K=Wiu7l#^OjVS)c+u=L-YI-0W@pIpnu&E^3W5oQ17Gju z%n!_%@9(x+f(NO`eMFpoFeEx>@D;Nw=B)@@;W?@=3#uFj46b z>t(Hg@jC36=I3ccM9ADToO*3V|2B_h1x)HzF#cdyWOxhULL9lD)(q`@`>F5XVfL2s z09`KxIIaKO1pP0w>HpF9e}-Y?D8I>|3ZcHW-`YLc>3wVDeJ(ALcgWpwQwqreMFIew_e(=0K?3g-YvEOW;+Zqyh$J?!k z;Y@G$CEdM#+o(Q_S)32i2Z795objR{h=~BD^`a<{W>NPWks<{r@kq2Z6v;%1t8h_U zI zDsCi2NOY2BBTwoYer%R=HXEMxZL*?Y?iqD&e^~5-*?mFT?9wL;M-$WK4;~w&G9urU zb?!BnhOhXJV4AL3CZ%hn%TEifL)zL?5~8;NP%2bgGVa6msJMdDHEXE3qYl4CoOIQ& z(vPq^QZ;0gG^k>syKi(T<^rDf=|@QT`iI_-)@cQ3&m=!`0)G@w9~#nKW2*R$%2Rlo z%C7e8f6v*O!`qB_u=-nnK!tBx_JrUk zX7N`Wk1ltjxEJ6V>wY^i5&rK&+rMebpBlsVM^mUo-Btxa-tT88`6<2%Qb?5ALV5`q znK4M3E#C+%nH{RJ-Ss@mCJ_cSZNp`S@eblnVE%0y;rJb3Z#~FB+L|ZlWb5QZ^AY`6 z6e2f>8Tr(T^Mz-Zx%16oUY;NLG{{HnEmdRjUJPVaCPH;_mYg(ioqUmlY8=Tr!z#`%>iG4R10X{F%$wlf*FGBP~tSIu%)nRa)SZ zbP}VInJA@JY&_ai25XzJ_x*wkmk!e0WLi@yLbp*PUSrW`tgqGfAcjj~lEl1nt)zuU z^ds)u#mX*c^N%0x2`!f_9t0U&lMehD93G!r({~m_QfH)`CS7yc;c67Stm4?~zI)sa zt>=5VxPAAhD0--JCMpq!phyyd7J0u;tF6VK?XHa1(sbth$w8%dd{6BW(|I$dkAypoQspiZ9xjHd!%WrQ+@*d=~H?J$M93U@Wu>Ip%6Es z9Jb7Wa8IL6E)HFIxry^I=e`B{d3)y;*=Ni?DHeK3kNQ@V4=lX02gke^i)VF{Y{(hn zsYyPIjULOpQHRWGmvovw8Fn6V3Y>C^@R`-E6YBDI&7U4F5V8jzZ7~oOjtVXITTA>U z7?PY=(snu;GGLqB-QO!`=Hw83qMgaxF1R*{M?j#68KUR0qrZ7=h%gd5Vg;6?h^CXf zix3%`_RLH$ZFNnBGC%fDBY+RVM#itr#fnO-ESM%rBsXD$pp#-_L36$vAVFn$b~zRa#l_yG&9`${m} z5O<7u!cj4@1lif$vCJN1iLATc4PkAes!}_11x%N-W^ugQy&xybn;zTQ3&ysiCown1 z{9-k%B0Q#!rDheLGTnY)LR~11M7Ul+*`>U{H66rZF?1O|-Gbw}W4(z@Wlu$8WBc4Z|6KaNO(Cu_oTiD=X6p`u14!V75kFbXQ+DiIFo%xxd zBDF?R)T&=bw~vOx2rXT9Q@}ZS@a@+?v${84g7arIgZf=Wlm377Q-As^_CNiVnzhQB zI4WNhZ8cIaQ*ARmS)90BG=ZZmBw4#KG-(M_d@87w8Mn%gRW!IGiHBV8%ayMiT|fMuaJvx~IS;w`k6QZ@_B6LOcQp@N zhaB^aLyep8sQFR*#F$7|X98KMR~hq(_Ysczuj-+}js~t0pkrmId&56k4CPDXoAVIv z1!20tNy%DZ4xquQq|aYbeZn?#kn5ujV;$eA4AYUcZlw#Gil40ucLZ>U7w*8Au=+%d zVc%eyE4q9+%!Cg{CCD~EjzKuY$IKERWF8$DpM3&p*iKxa>{$ph#L5V=)e1>DW2PI+ zD%~?v$1751%Bk#puNu@;gJb%o%6#P8D9`6u?}{qMklkD2BGDH`VHTV)V^qqmYmNq7 zUE@}lWsmy%jVB#ChC!X}YUxXB(^hg)Pn5U3WV07dBk3lCK&pJ znBo;cDK^((Y{wL0S#PAtwu=xo?_=tv-H6$j(br+3<$kW5an&XP)O)q{J|?#cv+swIG!EHthBLBOqj=v+#DmV9a1$%wE}4%y)59zWyEn$ z#Id~q((85_pD*sw5|#4hED~(rkR@SQMA98z-#*Q)x(GBmqCP`AOjCgC=>loaEjv zGwHHEOammmG=k^>vH|@SgTrgaXrM%vAxj0*%R^!jw)zoB%3#ZV^!L}O42*JL*hDj1 z-(`rjPZ3=zfO}|YBx!dCTS_1r%iYaEZ|Y+L?`&?8LrF+8nP!G&2I^jkqP-P8l5!?w z-No=a(0@n9o0?AD61x*4ZUdo9SQRoS?g*AN!qDq#A6*oPr_fJz$;7s`_aLzU@yn-B z-mmzt1M;4--}apU5~lobRiQKht^6-@=U;2nsM&H&mU9d`Upc(u@wG$22XqFaC@Jfq zkp=*mJkvEcs5M)pw;+FU1u!r^=pUpAyX4i4gdQ0?=iaw&n?8PB?Lf-|R?uK5rYJDv z=yJ3fn$7PCZHWS1(78+?M;9{Z3P7x2PFrj>q%K-;KqIWqBi}ci-tkhGpMwcADqMHB zD4-@alBM^3sX~GyduW?l0O}bxbQptVE~8gjN(>`P0tNf9xUv9h>#NzD^@ffP6VU-TFSX6|%J!4tK+wHu?;4Tn>Cv2hTP!pOyKX`RC-a zXyWUezOdrk+yk(Gckw5GI<->xkBG&pjFB)rlBc4s@3>t-#HzYy)$}#2Gb0W~BX})m z?byio$|PdAOooEJwJj{@?feOEq4&%nZ+)%9=bhV~wbf?Mp)e0r?4yZ?p(J?zpSvxi) z44fxk@N_nH^xhe9I5D9F@ffP(GIjGoYVG6-C_RyJLiVJLd5$6H2hXeGX9acKA#|c` ztjnbPSGTRp^9vn;w{KhaT_BJhK$vSVn+aYipfSs0q?-bVAxK432tkTOJtz(LLKK9E!7Yc~a`zSTf2Bc@3B03}Avn zIz}#(lwrK4#E_zobxzpXO%7?`oEX4@n%d0|IcoLD4W1$*-{B1-YY#y|)*swMrVo(v z$P@7GHt*^Q2(fq6?0w)Q-GRtXc0ejZ_UlywLUYnyIIjvgT@PMg+yr#%o8<&kJ{p#R z(x$rm6?>rPs%3ze{NAA82=Jb}{Mt>RV^H#{!tC*riB#v)Eic~EF@ay3~!G3D-cF{^}< zPmB{O70&&XJ&h=1&N{GLjNMK<*F0d@v%X0gF9AwxdqxARm1kFvWPVP@LUBX1Ij>py z4YcL~^iWcaB^xnN+YHE)tk~J^(I;AVk9CV#%WZtZiCX-Nt(pvXAmm1lVeFA!jkvfS z8{IWCZ|}!)Re>SVkRuE2ZPz>?3I5@iMTsA9eRx+)vOb7EPX!*2`Joxk9>cb6bDxscC2ukt+TVi>M|E-BS= zi0{Jt^o_`C2frU=rsKo2w+YY>p+0t$DvbkJbXaZaUDAOm(?$oYG95g3V4orFHpm$U z1!3dJlj#0P@zd%>EM`aXHkJWR&J5{k1}*7@aNYho(D}o>14Ni6cennEiCD(W3e}Au z)VhMYHS!hB`R2lkjj(Ep20mk`LtFtTwb>-Fs*FW38#x?C)l4RsXsbwsC0Ml!li9dp z4Qx=!jCIFV)5=NljV1h;k_`FWNo1i$X+TwIY*X*TcR&p*%)q|PxdxJW}w=dpQHb6WV1G1@T8`B5uKsUBi zUu!%TnNvc2lXIxct3OqFrLxbz$J1!=zKJ~mtXaafxP~1lT1$LEwztQq ztAd=(P}FqS$Tp*TY3js=%n{p7)RHF z>_e>ac?t2IsdhAd4L!G@yCp%4EA9qstSjION$f&j;I10EMT&+)f0K@cn@>umlI>y3bA>}5*^ zIr`S-?%F{+bu?vBia(2KVTdBkcg<|6pr+gpW&}@8isD&u0*J zEwHxG>kN&2SK=l^bx-)Z$9cTdT>OsnE}O!o0VDW><9JjLI717Pg}&wr%rje9WYV!v z6FS4b6KQ3{>h#B!h(xHazB-(Ws;SMByH<}`A zi(HdJSw4o-xPZ4yPK~E%PW|CHmD#WMkSm(WoZy&qNgC|gP6L)%tK{4f@jZ#Mh`;$o zJRd;+r4-SmdwnOpacO|>&3hm#a4Yb$bJxINq~s0YQMX+N=!B;f+^8Lny6yt%EP@a9%jt0p+jbVYd@GglRUB9 zp8N-3B~d51R1_KC&Fp9|J0pirz~A>f^ftX68I$e%&2Co^7;tpBb;kGDtr z&%JlQ{a*c4Evk!Ebg!Oc%sKS?2F=1U{8KcbF@BAo^+M7^T7W!~@5YUk=;v19rpr6- zC+SpcYK7(=5p8G&68WAdAOzfDGa+=ej)u~ss5ZjBzKApE{3Q0XSBZj1>zBO8WJWi~ z0QG~<+MSoFw@bJZuK7gXUuQdm76>Y5ll@VvJvmaDA2;yfZsI;~dr8PzJinjhJ;k}3 zgkbq$3ZaASsf90n9Jcn=-~QV3;O4z$P~j~Mw@_4n3gk}=MS8-p=q8*&^yGUYojr39 zpV$(wkG@1}4?9ZHfsZY`Q!A&nj%hs8ZLstW&sJ5G5ovRZ0Fg^u$OQ`N3NgIM4g{uO zq)*)g#P(pQ&0Xw^dYP|y`HaXOiH6}%{hFJULO=-1^VW&oFO9O4nU+5UJ4~kkKVISd=GR2@PJdX#oG_cS+KCma&C zF$bv!PnjY&E5RLih@?zLA4$yK1v^>v*-K}zSoAq4XMAFn|JE2LMr&@A)*9e}rs1&O z7thX4pVkUOAh$g@#tA34Y#oZFK|fwGlvu1*w0ZP!(ryl511&*t0`L}m@g(&ivlaY5 ziTGo6F2wnM8=?=c4-rNzd+bB#A0O&89l{b%6GzGF(kgY+?!j;!b^7oIUm>o-HFU)H zFygI)YZZmaJYn(nGIyQl-Skj1Rx^Awf1FPffM;# z^W^*x#==7QCjvwWiCdhJj^bx`8Jw zKN|jVo@u@r0U1m0JyDp2EXH*DV}MN%zJ@w*PvW|5;{>|X97<$4Y1>hT8!23zV@_>|Dt~Mtq5jHIE3G0_G8f}r1;(_ZDdw;2m9Dnb0`&WOD ztcBH|;20D6KU&nyZJu9GuT2YK1y+B5tL$KJFKUh{yyuE!}%)9z~6NdeEsj?jKKfPYW$hV`jgT!;hr}j>0*3n!IvPJGQJiRGCm#f$d8ceL9nxJsz52eue z98kgbhr6c}85~!x5?5CX3umv6G&$^71jhx}zTiVtK+gkKS?mR3@aR)h1*b(ZoiJhd zSuWQV^*A2M1fEU(DciiqEfvsxTCF>+vN01twjb<3)Zcz*4x!@aVb~aKhgvl zewyJ$4(YiGK5Avqf~m)^Lfca~;Joy{drvBY0!2gtPZCBqjlb<$Xd6qfaf|9Lr%4^7 z9m%5ArEYt>+=FGybM8alA$XyNKf>s!2g+YbGMMz3sP4@@>`0O_09SL`4^W62P)=le zoM%-Wd3+b*H>=HmjG_PhN$5lo+S}}XWHCM$HYj}wFDze9d2$uAm`73|w`3O0;MEiJ z-mV>`!{$eJ1DD-mJR{F{kyN}ipn)x^Yqog?irQA1l9bb6{TMtNe#;PGP8#O^zbN7&Bmn5AeZ9!9{WVbo?^liubztf-WjRSH#rTzEELn zw$fMJ_f^I@krD%wsS9W>&0;Q?1UhdcVOm?KSz1cFd#tikDZgvHpBTjN&(R27}O=oH9hGUd*)gjKinFheH zOr!V4w%o2;uT3????%NXLW|;>7E3+CP)zU2u_qlYc&TtFxo&x#I{GTD5~auJj**lE zr-?F%(#G)`(yaD4dDi9Ipg&PMkBMb9|ke-QVuv;1rHI^*=d*ZqSDwLF?R=V-0t9W_I-GUM3m)g z6+qfPc5~knsuS*Z;c94xde!b5_3AY(YNOf@<5AwM@@Wd5ix z8uB}OP`0#VTt1fEgdqsGu`k?I?9(}5mR?}2IyO1_eav!|Pz4eOw#+^PmuD1)Y(!}^ z4?%~q<)mkL5i|(8!Fg+f3CDt|pFq{V_T}4nLonP%24$v$H;*2FORSMle_RE|U_$_3 zi_3PWi5xe1RI7{lY1EDC4O-!gP=U8UvyjyLW<2;ty~@6xE61Tqw?&{aGSE> zkKqBRn3-GSY8SFEqEE`%ws@+}SD@X7us89}2B*1?b~O3UV2S{rr0S1?UZHy8hs{1% zQ8P9u@YRY6CF*(V5o@p1HV~(5&Q*?R?%xi>5~^?yZ<*`_iN$$ysCY4B5>7@!sXuc} z5el1fdZT$gmZx_juPHT=HJT)ft-72#IqPm`Wf`oKJWkcaGE6y92>A26uC(5BCVHk5TlZ#5}`&8>4}D0)S~w+uX}g zw4%+>Fj;!Ni|GpETaL$bt|2W$Cf=31K^MmKm=?7D*fbU$c6b`mPm@rfLrz(=L@%ym)}R%yJ=iJ)$g@gI94H(fS7H^)P^p*%mD3baHl} zd&t`-pbyC^|HRqo1gFgcd8Q>y+7Oy8hG))tl8-GgSjl*T!j#@j!~9^k(0oJx8W3!f z@dF?G&0WxtjNK$fx2NmY?b#Pp;k0Z9hkch5t-k1*@++;h2iqXqya;GXmxvJsC8={L z_m<{Yk5GB@lMaK{Co+BN=XPgbDDLOOjdcf!fY&AVkj_Z`yDFi5TMG_%(kCR>{+uKZ zUNL}&d~{F60ew^tU|@as4@*3f%Ulc57JF+gs4wzdQHir>~r0Df^1r?N@ z$aT5vIvJ+$yTY2ug31W6~ zG8X@v^?`qx%YStH{Yk6(3zw#M+iQ3Ij;|3OF}x)lOG(iXgE)N9MrWki3U#J2v`hM* z)dAAq)q$1<7Q4Oi$0uJ8h}w`Qba-xRZcG>2L(Ta*LqU;c!8eDrjzf&9mM#^eA*-sZ zr>U;kk}b2wl5sMWZrC#AC5akuR>f`a^IJWBC+} zNV|nC+jrlitr9)+sI5uWjvU?n-O2(;=f0NvKUN3+rnqD+oc>YI`P02of3LBkj{H*n z9#Z^d=|lZTsYs&Ks@OzUD&%->w$whzkU|;b$7NXK;W)B4hw;^Z#U)5`@@To4v%I&N zFNOT9Syl)})@0$o2}>q82#y`vXOs--rN3m_+=5lV?osHNX5 z3qpj;K+TrASMJe>ie;J#HPt~itVgM8Jqd>K(VhF2j@1O~t`tI}J4bRL2El)hYBVJC z&6h}67~nNcY+u#73<(z~90|)r-It1dhQLJM7Zizfp*Y~PifSkn+9pgpau0|Jx>p4S zltx1KFvqu2kOXHi&lqNO+W=`&lMNzH7g|ZSaaX}pS5?5hE3yM_p+olsqs+d2gMgAJ zkd4Ev06%*+fqZ1~laY}|NHw5n5F6)-YkcDI2O20{P%m{;Gnb*hypo1UZki>}+%Sov zYFOH3j9HCO9lwi_-yX>`^6K_X#0EzM6S%+!V@u_>@*_vcoRj z?0EK8$J2E9u$+5Pvyw~SEeKOTii|m@hkhQQ7-dE_QXHyyNiVOMcL6N}N&101mv9E= zQKj5DEe&wC^zZ@znseWaL@f7h!PcTO?t7-$u2h;2$UVTPdDMJzWu&Bp+sGxPOs2ZqCx+%@v~5!Y&P4x*bk&J zDiH|>!U7KI={d9hY-fBfGC;=}D+wU*=NXH{tlI&FEp=RrESZJe%3-76Lo_x&PH;PR z@N)Y@WW7yoAmTI8cs9qGEEu*Pb0_LyQO zSq)u;wYVr`4wH~p%a82fp&AF!wjw-$)mOc!r=KlM8a)HM@{C}xfWCS7y%6y?P@_IQ zvqgK+XVn7?D85iEZ#yTuTe?KG+lLMf76;PwXv`h*r+tp5JSiQJs^kK;R=S~(sNs-8 z&ms67U^}jP6h*9@{26Nl*KzvvR27rM3<+_1_3*cuULRPx!4gS$Ibw~Eidt@nb!hT5 z+gl=ZN;8+3V;1ApPg04>!Bjxfqn=BZk(lA-mNeJbzcEXm@e|$0IE3*Q5aG>Q^!x0# z`To{s``#*ZwWp4QSPJE<)0Y)2(wN>W%)ueS@)lM$+5F8sS0X*jO(=@Ifs}(tm==d> z>YvSRszot)?kNy82)20@ILq=bX+9bUE@LTsLn1#t6E$o7d_AJ0ojhRn`9hIer%_XB zc6Co2jB5RGOZ2uoj=;Ww)&7?nG)>t!2F`PM{Aa&>3#_J5ZO#kw#h>AZcAF;%3(WKW z&vIf$_wC@|lHpgvCU}PN_!8W9^ZhS7-`W0NisIkS)PJ*qZo zP=3}lIehqVKwSQ=ljqRv!Wbhz*@IdWD!e7|Izda+O09ss4rvHkk?}hn=r`L{tTeML93r}wasw!V|`U6j|L+3NeJxjbpM`pc*abr&D zLdjPagKZl9%+npq(_*5q5yT5CI;2=zM1k}Cm<*c{7v1grto;aBA`D4s>v` zr9C+v5MZ&EUuAoc{_tal1cm~s8kSf9aFyUcsve@loG4z6k0M>Yvu%Dg&{e{y>Gx25 zhA3KEr6-egI7$t$IE{JJOQ4)cB_{ZZLa~opwtTNti^8;T7;FTI+k(pO%cN2zYSnRn($z_YC`2RY^k;nQ35_oMYY! zeVaqW=*OQygt=p!-c$10U%0FFy{= zUa`1Of!+gKj0=rdlP}^TV@!;VjZJopy{WgWBfVdpVxyCzehkQa$J>e=gmnfD??7>i*gl0WrnP;ZX+neymfgAA-QZ-sXNZkIglg zNHs^|#1xJCmhW^W#DMPhLrpPXZL}L<4{bVrU8Pam=eHW#yUIz?MCZFAO_#OvLfT4f z%6eSo^5YH{RmcoQEZ&2~*7%&Rj%8$>2`(om1BkOs(n)jjaVcUDfHk=avsTR*6TAn%eW)%h`BN4Iwauo zzEo>`(n&_e<@9)YQ9OOVLA7)-*)!h#U<`wKjCD7nxNe+|=fadCZVwlo-{`mzb*1td z_rP$e%|v&E%@wyW%U))q%5cX<&CT5vV)hyb>Ht4}TD)1J9aAtxqMhZs8fuzu9i6dV zVV%+^Ep#9|e_H~;h!;C}{`$Qi8;iWVr?1xbB#ZaP#~2jfVEM1-23TjO22o!qU!Q&B z!{R)6!>3&E%Ks5EMQ3&Yy4h2d^$EZ44DYCGI_11FL@)P|%M)q(M%o-*jjv=8bLh6) zDM(jZ@c2|gPgJ9Sb=(4LB1e($EhcSnlepA$mE#DTt`kg6KD0@(EW1=f)O zM9L?mF|~%Dpnh5fRkOq#P=$?FABYj7v2HH*u{ifh^~p#cha7ldLN6E*$*1!qE=)ati_V?HUr2pdx`L|=gSMZP4sQG2BuIa$*SZeI2 z)?btys1?Y+a8An2QBsS={{-Svcp&S|NQ-rk;;wh5-GN6+TpdDvVNYhJJSsg%{mN8g zq&pb!Pg;jTMJ6lPjJr>}4qYZ(aq+$t6S2%zDFCZtFpbI}9mhHEra1F?)wU$%`gIT; zPd-7yjMq%cG=FcOkUa@@u>z_zdMQnRuOcNVpU!9cV2wTab7&I)gm#@s6K%YTo*CMf zr9u!5QXw&LWBD{u%k8>&;IZ!U&WGER+M8fsKGQNlQ}VD0zZ%RZs++ImCA;} z;tv)#h%N?IV;}AEmzNJoL}*aG-)e(dO=Of5UvQ)~gM`-5T}Fc<8P!aYAdS;3xjmT6 zFk=Z(+@wlTlG)c|y+E#fA74K63+^#3{ZLUa=7zhCGnW~5-}^mCbZp-E;#X_b^IsnP z|2I+tQ`i6ZhPGeE+KyI2Vx0A{7;{q?0f*X6JcE*w9DzJMdGe4*L64=EQ~J8Xk_>&0 z`GBG+^m}Bu($pTo_qP32uk|1Ip1x4E5lQHm+|t~8F0==lb9Ki53RuD5vn4Oi=98A~lOgJ!RIG^O)$^YabW`!mBmFc5Ii3)x6xCx}A;B1P&PpS_1%GI;RU z0N#hrIDjy%=XirEQvj{4)0(4=wx+)`{xc^szuihtEZ=mf* zwA(QB=^F3v9zAB1*fS_qwHuf(Vx(qMvK-fR4x|O7X3(ogS&nwfV+uimRg15Bk6MP+ z%~$rTorff^=23N7Lk#vZ?B~D7zX#1Mwo`cz+jww%Z@)Yf2Y7WIB_9KV2@mv=%l&9I zO(dbd-+M2L$J5Kg=} zTp%fBI3_71*vb|#Aq$_?KdWoTP8rSlbxhtZ%Fq2my+eTODgS%%?r%0~h+6zciyAn3 z{Lixcg$UJap8q391TCh3!QlJxzaEs&7%%9280goO_X+=CEZ6`;LRsug1-kUsUs)S4 zg|&m?K|sU?oITdD<4~d^l4w=v_k}>|r1GULK3mRJ8yxlA!j(#Dz zzyawj@DK{idcE+ zLM`pp_5E>xz)B4JHlLAa17;3%SN8lD01ZjZP4#xB*9;k9h+Fe{uR1`5r00EsnC|e< zmo~D*ooH`tRoxf2cc84g_R~*%d2hBCls&vVnMIh-p+|ekQ5*HNV4j5lP_%+2loHdZ zL?n?|OK7jtidj(j>m;}vh5%tJq>(6?;BH@Ev6Ih8r#@9NJ5H)sHIO$mBn%9Lzr{7_ouDf z8Uj+{Py$oIb9VHJ!eCLQMB^k$0?|e4lx>{vKW4nuu$jGVQa!~HX;kje*Q{XmWOr+| zXp1JX*84oddl|e(C&6m0F&B`(n5{aqVU}9n#u1R`tmBrnwxC7%Gsr6?-79+v@Cl@v zztm*|=R?4%FR5j#x3Z-OEi`cXX^pIxGYuctD}(4w?-69fl3ON=2DLC(YeO*BN2W1Z zczJF79uvyQbGke-x1Hxwu)$+tI(Zpcsm6gl&DfCK6_B81>GN@G6t*T3*DfxaQV@+D zB#uWnq0%BZDV%=e^^VAv+o&6@t(Yb7y45};5@qIT09Sc3R0q+Zy&4I{58(CEh;hJ= zc#GnBW#D=H+vMGxuykpHWeD?^GW?r6P~@MG?f($qzfRAyKRlHwYHV~q$$qfa{);TF zI;DHs;7L2jmFewo2CBEoXhX-8hpDqnHAX^%hVVG?RDH2y?;==5%9Pnw+9whFvyu&< zI-RxHK$=CK{k6JGZR{GWwI7Ot@Fl^B>^GZN#i+$6p<0sRgpv}_ApjMZJ9S2Mh2yRh zs~oTFbKqsMvuJ_a0{V+dsj1|9+sT&xIzYm&&F3`Gp~S?2>e`b317Kwo6P2xu1wJ_k zr#tA{?cer}rP{As&pI+qQ&EAT~7Y%B zisGWan<8#jthFl>^Vf$cYSj8niuL)l9+#sHaIbLxdL*(J#${RAMEp8p;$HjdwfrE; zq+Bv&JbK9wd-^-BNxnNShSi-(Kff2KFJ#8vt>gyczmbJfU~D0OioHUQ2wV)QH_@gH zTnt&|JxZU4!NYTDZ}2Of1Grr1=~t@&lmzhSI!U&GH*$QEKUuVd{&0GVWm zu?K4z2}fG}kC{=i6C7X&hg&0*fH{Vu;_!jY+4_>802*fXi@HcwdZxx;#FZ^mcWY;B z8{->Ca$asvm-~_PWl9mbLcjDpt{H(V*(KGj^!%E^go;V`<#fsrmE^LcV@NlYOc|PV zR0Z60an-L=+q2I8hQK{h{=MgRpP?z7G=89wR?9s%R$=mN^i~#KoU|$=cQCj&nN1Ew zVzk}D*jlLA`+@q4r3XN@enQ%c`4aQ4e86mO-+L=^R=Di$S7sDF@G&`V6L2%QPNp(! z`blaiviyq6%P1)WftXt4?x)T$GPjCT$~K$LnlgtwFPZC|wU0l$!KF;Y@Ja+r7^BEL zlSR|?4W<63?!=U%Bh_RD)F1zVA7B3HCAiB1R3ih5B0)lH1#d%d^c(5E$=$7h4`d3KE1CCulWw~Fv+&aoZ|HD%hWG6{Cr8Tm{l(8;3cw^X*} z;l;im4%8RYSbC>k=EDrI%g&1seG)R%pWGpPFpO}yjRs2liw@13n;Upp^s;R}dXCB2 z@JzQcV*lofPaVFBQfrr zi@fbB4pWnHMuB)+*Gu$yb@vVA89zNwyTtX^oqRUbhqqf!Z;KSpUh9nJEpXn!pPd#Q zp0~DFt4!O*+4vvBj_y^J5dUk?Djob18BkY?P{L^Ao4;a1;QV3@Y^NX}M&XP0{c1wn z`JAllcYPhsfwg?aQ(I=IQNLVQi*q+fw`ul!_$nUrNctGBOC{1f`c*cb^VU1d+i;Vr z0uU@B{(VFt=Ew?+-kpH{Noet47DJV27gFia<;HoZ&^fnL9Y~zkXc1*i#T?2T=A8bl z;Ix)lOuUP-n)`&xFhWLT+CRlSG;Rl?^-%N5fb}-MepO-=Np0o(YcG+0!`3vnjhEkC zM;Vg+A{yX)DC1wk5dU6&?LW@0e~XR(Oo?95jCTtBj&-Pv@=kc?==aFoQj>Z;fkYd4SzIdkOR5q;_08-N!pz&_K>Frpi2#V;SX}1t&F- z^FfSF?_1>^TAl^C!QkX;~AJ{Pn&iQ6PL;mhLyh%y=6=gkwum9aq|9er^Z;|~gFa~pUTR8t= zb9|!fevL^6{S0HmQV9(%iee15(5YV+Bl8i2rKHrH%raU8SMJ6?e9>q)f9*|qK~Jg$ znQ02LyYEV?Ig3$vg&7Fh0qN88qu;)nx-WuC`mCu`2RQbjNXfB=<*pd5=Np)GG*4we z$^Hq?NpQZBhm%^t zUAN(S>jz#g7}$-U6fnQWH?sfb^8H_E{J)m(pBfMLk(H2NvXd(+Ow*r>-);&aXvN!# zr%=MOBd~`@Po9GF3T>lK|L!8Qwo!`I(7M{ot8)3rY=GQ1tlvBhg3 z@WS3!7F+=s1ed|zWcU=(dmm1RZF^}z#*u=4PucOg7 zeiXFC2%fW{&UX$hK^M(@q7UG#LV|ieC&DezDdNI?^LJJuPl}{~q_p|0yp0 z-MdiykGQl5+`Awk7^)UZNzmdzwNfp$NG|sLCzBpHfyZG{B-}mPnU!^Cx<2On8`{`w z2~CENfsgP<`vQ9|k=46kYXYbpSn8(FYef*2a7Qk*6p5?HtZ>Rr4;bC1ub))gr#PxjwBqUhVx6j(*`UDq2QoFrPg+gCQg@(cOx?*lN+)$1 zTNLqViw_X>R@QXO7#ivf+~wYW_NZf%h=~COh2i4TVYkq6rhT{l;@YxaE?YwGV?F82 z&&zgrbm#F??d!Apc>7gOitDRXf4{@~v}ik*C!IkC=O^XC8s{giK|ALs^}#deC*46p z=O?AX9OtL^gL=+SYJ(fjPag&aoS#$%-MBj$`eA7)xT1F?NGW17MIGUXEl6pk)Z;42 zxdM$5r2-05NW~nNb6?S=+vU!eA$a)xZawKi)-*k@jiN&$ZF_W;~&Vt`=m z`FjHwyU!Wv_1z(PfCRn4fS7GH5QPIuuZnxrriISfIlz_4x|<9zX~@y5t}~*)=>l@A zjoSR6GjL9@uJ2Bm!s7jr1IXWl0U$I&>Md!F-(+d;KZmL|yhpXON?lu@UL%Yk&(Eq; zB{t||zEF+#ldWc%Nt@W7o$ll(S=;zbNza{scmt85wQrFMq`W?ljEk<8#qNhPRkk3r zm(TrD9qd|y$|GQI&73S(5@l>^(O7dnSB=KTp?R`p+?)c+oaCd?tQ}>=LQNBxe1wTO ziM}&SECqJwho>(T%uu}$p>aGQC@dP4CSJXPq8m3gXU8(us9~Q=gS-6<5Z#Yy%$*|G z9@`T6x+#x@o}Oc?={4wpqqUsn|EZ*sr*l44f+H%OP^K^8VoV4}e1hDKBsJ zg5JE;sgp1a@z|(rz0(>LqRP|erBYE3x6Woe1W|2pIVGX%QjW8ncE)nwy6>Hc_2sa@ zdC!|VQ%zi?L*`Iv%~I#V3551RCI&=)7hkwM|7n9c^r#;7hQ5fJ@T(Uc^#|!B5Om9% zVl8>sHllqlUvsEg#bZj#@)c5vGh`ZgD;H5TvXCy^0)*&m{~wPYLjFgLJP7>U2Qn#i+|6DN6(Bg&D!q3C`_8*r)R}7{YtS%E2gQJ~ak)d+&n7ynIu$le4Ltkm#lmvexm0f5 zl*dvgvrI-(nJ>WEgs_46%RHpH)4ET=8RW^yXUSIi$N5=d=9kwKCNvA@YI_+=-->q4 z3RTR8hv0wEUSl7+v!ZOgW0-#=K>0y*`BOl!-5jey;(Xh0lSlOYT@mPFMq}>#mkQ@P zFOk|r+XUu@Rv&-AeHudz%6HUu{5%M&D6FzH)&j8XeiLi&G>Lajb|2;Ac!Y8X*WZ7F zhf}c>F)$c8zoj#W`QjY;5rhipwO7pt`6j)o{pbsgcDn7Z)`(;nV$QKGHq9T9mEQre zBKAnOj(Iw`NV0r)4l>W_vC4l2*oDpa9Opm3vJ1Zjo}iwtxxa7Z*n*l~577{Pq;0?IE8j=gzyjSkLq-vHTQk^1+qLpy&x^aoJ zk`?I@t4ix*9)BbPuOcql5w`FL!#t&2c95XYkbF@-yYw7{?B@3nPo9Yj!K$RvqM*-T zgsTLr5dA$fz;6!z%VQe&&2JENcKvbUN)upjC=pQnap3$PK7nsXNzMiS`tJvn>T^Mx zlu|Uf8%c!IH%)wyM;I;v$$FuVUU=9?ReU$^D*C)j@7 zPG}v1XnLO?O)}R@>zk&SA(G2)0DklgvLo4FkM0{z!>7nYYKf6Y-!Mg_$RnKVYY4v0 zLwbbt>%%`|qP{fbu@=u zD$t}-R;ogF#QS?;q9XVdwMmcMh51&6BLr>0U(JXoDSVk&$?W$xr_Vh0*P>7wg>}gb z=JwaZdUGQWz776M$*)zvfzCYj*P>IBKt1ZlEQhjmft@=(Ri(CU5?xzB|L$9Qx5bMz z=NZPGu88%%6sr_WLv~gN{_q=A7ZBCzvtr9PRHQj7)TT_uHd>6J9$byxAH)W3KV>lr!S&VO10|K7GC z)P;pmD)`{NIOUp%@qw5Efzh9 zCxbVNr@*Pssm_({SSg0wvj)rg0L8e9Iz)yx@bM$8Ednw!)>Jgl8_`uXrf8yt$X3%i zHY4I<#>4aw;&}(XK4@qlbo{oXk{UovnXY$ARiZ`qFt}hT+-OM#5ZE-2BoiIa!Ae!) zlN&p~bI${ER$kYLMlahr7$6h!xjdAPti;OFy3pv~qb91csmNW5uEsci-5}i!GcO-3 zZ2T;!U7p5|!R~~Zs|VqaS^c`aG9Y);Z#mfe+{#dJL!EEnN-yt4e`n3J7)joB36MEZrNB;dd$RA3o9{d2OGc0n-&# zCI@th85pH1@{JM4>={Ha8y|)kXH;Q;Al$ncd75iV{LF78c8lOT=-k^!Y5rW3tEw;!*IWrnL2n_GJYz5qPvNVDgtxK%cg`KsZ~ zV%sZce*TUyCD&393c)%21aPbM{~n+-{gvA*YGP#fyH&}F^v^x;XH>2Pp4TFT&ZjXu zuBI~DIs4A@oMf3ly9YKO33lua$$`TvXmQy!*(K^h14>L)F-GWTY0ANOa#(mK`?Il3 zuZc{ayW{;E{4Zc4RavXlX~vSg+`Lpl02Myu2MI_|R3%cCAw$w&sX~=hvFuoeq~nw= zaqMP$`pAO$BGzXdA}#71)OnekW-4og)RAUjZK4t0{R|qN_Iwr1`{SNRdKnhHa6bQ0{`3v`EBkcL64AJHFe%cIRkd}t^oIeZLs z@!?x!Lg5yg&S2BcIev;pbnxTgukfoU_v+r+${j+7TNidI35$L@DL%6h-rQ)0`}%rS zbt3B8yI|pX>o$j}@)D1jm#D}5e7`;7T?kd-5AwkhsENM!HN3C)*|2GlMG65d$@;&C`) zZ6CY(M1;Btzr~_>QAmsA_U2RV z&fpXnSJ{XeG$~e3_#G}$`F!(a?qr~62Hnq3WT~bsU(J?jhOUMlQRO76DC;l&EO1w& z*_>%o3Iy!G002B2NQBCo~Pdyj4g$+N2$ye;P`UV3%mBCyH zS7bX=8p24{8IeXLG4X-S(0H=?tKF;vc;4Obdd-WD^v-3z2kT^c!9*dTq{@M^rEfTT zTcll6uz{W-+~L9O%8l$5zBJ#6?gA(QRC?kgR^%WK;my;l)EyNii5otJJ%l+7!C*X!ePoU)6=!*}e8dOe1arOaI-DbG zWw7(Rnr-H9q#X}diQK>3c8dQ`YGLq)Pw@v|^?%m~Wf=u@A>BD+^{2>M)h29z`_Fi({0XhonTFeeliKg|6AOkMGAbpcSv2<;PO;43Ck3Tw7N-ED- z*;sg`&ba?ADRANKI%jHC{;QgBVx5#8G%PYzzB#5N0~{3sUBj_n068$5EqxPCVB3G| zfpalRUetO47#_9vy4R89r%aWq5G9Oj2k@<7wL3C}G>S4g_d!vzgft|+gLGfmAUbM! zdy3XF5};^&N0L$2HjI;LH9Sg)V%Cd8)dU-%2vcuHmvl^*d;|>A8a%&sKyt{R465tS z+kEzt%88xWU#ogPPni7X8b8-(sBM~VvJM^}3{c?>@s(}+VDQw$9;4wQYJ;A%VTwIz z!`%b!BD!nO$@23Qz#hK)B=5}e^@Wf=gDd@H$Y8Sz+8}k@f&8obt!OO@V&!Jtn*2>{ zQzZLo8zj5;_LAWtDSQ*R?zh9*H?+$1iUc;n`=xmFA99}%CXmXf5EUyGp*xi;3tT7D zD8vUGv}IB#TdEl^uNdz4)3C_D|2`??;&Qx_z$y{;UsS@_E?E++1^@iP0>5%HbY=iw z^oDkJ&h-B}1o~C@>{b|&*KTN7oooGLE47`cllh!5g()eIj8Te2{lUD3{x4q9iBwF8 z@W#i+4}5EbUTzxp6v3D-O34VCC1aXN8|ymT7JY~Kq=vVqbnx`WRNhu6P1Hre(k{7g zqA;qGHJF=GVy@^As=Lw1bbCs-`U03sKRQC8rnC9G&3y9&4tKpe4BO{=KGAac$kvn; zgfa+>246muW- zw~=6PXf3_27&Did=qokwlPeX1Bp}pEzRa7AZ1%&92Wsk*qDIvzd8Jd!iw4?%biG+u zc&irT8dFw~NBeAWxXtUYWlJ@DoDy&R`n$jnrSpN*Z!#6MLyT$8Xs=6nq}k8QP7U-#CdDBJ(|wYMCunv?bMqt^$h117z}hT z#2 zV1q9^M>7TkdjlhL69x-c4+be$k3Wn-mL{Axo*M9HmvO?9E&0Npc>=r5%na)q-Yh0M zWys>Fczh$PjnR2-!Z>M~YeU1tSTUrM;#(UGI(SX$5LitNQTUT$GI&-0ck3;b1nyft z1#eKh>`Yn4b;)8k7&g4lynfzw+;yJ)?BuY^@jmPhc~yzhjf>b@yxL-M{V$c*eszGs8<=|hhI>61!N7b!2r<_78u zc%U|FcFK7`5Ej{!LXQk;G1+S=SSfVLe0zfOyt>74;vU1qe(VUh+SbheB-(022eyd2 z`o+nu=hu+66dzGFUk@!}2vVtHlF;%a3v#Uk1)+}1TU+4m%$Nvr>)JFAXm9J?-CnU( zR){6`w`uAOZ1K@n>(?=S`~i6XEu09m_w}4ZLw3I~W&|U$AVkk=+PytgjZ|7|%oNC} z(C%01=bf+Qg=jyTo=^*s(bEedJ7A_H>jMG6oc=*g@63LR_jslk7QmcdA7(H?I#93A z%-9>QWyn3TJ7yCFsG{SAdN+CxPY`>dro*sp#YwuY&G~Mdr&Vs?&b})0Y+D^D&?jO1 z1j{k(jspi2*j!e)FaUN9jx)b}DSioM7`kWSC*7{O&!zQlmB$n_Rz)YFLI`_DYMTl~4s`&HnFSoqk7s{S0E&(m3y;)JNR>@*C z2h1P~VD`nX$CQX?5O1-yBYY1=bLHyc5W>(5%iiir zF6Q)LC;{&349}etxjBFD&KvD0MMD>vNqbvouxd|Np_o)?dmgNAX74WB=zje$MM-yR zvNw_S&}e1V;R~;GD^Z4hqrXOJ-U0T5-qmr{a8L5l9em9*~~-fCi0}5vFIZ(ID~-= z(Z-;GseHQsTa%k*v6u!wUC{Ceam^@ecG@-x{I5DB4SZsQk*wNlXk6dlN^Qf@T?UOb z>hN+bwb@#c$J<)9l{I)+LX~|rOZ6(X%U~~Vvx*m2tr%R=e-5=7oTm=QY2sN;b+vcr zs&2&axnn(Q}<%rOw7=DO`M3i{}6Ki3J3)>7QdvE-!wCD*=%G75JL5PN= zl1fZX?@OzkiQ`PPTEVN;89Rakt^_**>xnrU`@IVJc8|T`G*>E#u7E%*{^GGu&dCAmsZ0Xkc>L*NX4{)rX}lII##{Lv0~@3^qYms+jqmh5zS_t>+G}JmX|jc zm0s3wYb!7?lPxwz6P0JMk^q>zSd9CdF-NuU%AEG4`?TqV;G*f|U))cuZV0`p5pSVL2hp(u;T|WxMoy^F~6R-x_#a2%xCa1LoqKng5Es> zw34`B0X@=d_McxtXNrBW84=AUiDj3$eP^#Ta{FDg;S46^#4qUY?%3~M{=2!DibiS* zc(K*sGP}+B63mJIY-F>p#6C^r0dRDASuL7ly*zD&Lk^m9Ka*whiI;J;~~5{8f~-PBJq2j4q=gs){V%kWu40wpH%F6}l4mxm2`D zXZd|xbayOKA%A)znipG!LaC?0tY+|oVPy)#TsZk4ZV~7K(TLTTUx}klEQgL6@G20U z;^@|CxgmY=L*Io{CWTopMrbmJy_h4o$b-Aps0T$C{Nx%$>=I$_N0f31R}Zlobkrux za0oRA=opgVB2=d#+PI67yQ@|qg6=ab5OkQ=;3|-{gn7;dhFbJ!CM~KiFS0H!(OO$) z4SUDb3InPSbDb59+wet-hQ#U#!lU!K6nv30-^xU8F1Q8%D0Jmtg|&uiBF867A;72R zOKZz|wIw{-H#6xW4BmmHiA|<6>?9F7#~+}_>i-NCTuCIe#dqY{1LP9z$NOlX#Z~sc z{cOSxSRCFg`9VDQ_qeR#4&4Ks=VIhq)gNn4IJp&qbADp^b)B5jrH6BeL7VtE&J`!e zw_^&Uk;rF~g2^c5vGxH+Y$2Mw_Kqij6gOA+Yww%bH88xgZpUfRP`oMl%>oL-(Hs$K z5Tpiiq)v`I>_fRhNR_`LOB5!W*uFUk|C&2PFGzan$l~#5oj*}Sl3$9{OJ0totERx- z)(J&kUAXr{+uzD!3T*}){}r>>7JHHiNTDRgoLfh!%0$H96%t90V8swwzQ|~#4x)%= zriU5*D$H|m_Vg@u1S|>&Blt*|M8_)*La^rKNR~+VozLd5WeE^G;^+pQ z&59vonn^O2=XphRJZB2ymK@!~j9^sx}oTQ_t6XXFE5w zujhvss^17*5P5vRQ-2mAcge#m)fM5_;OFaW03rfZKx>h!UgX~`^X5;L_Xc=Sd^h9a z6YSLlb0dCqkOZk{3&l#_gHc*K=m`po;B*k*TcVE$K^S4?7%2A}!7wRi4H3aOq0hq) z{SNUs#zdtrFhCf<%rTM|Qe5u|nU+U^WKs?#swbpnU=Aj_!6C9c#u#9ID7vQJ$TB`I zuo_`<8DN>;&~CjA^<2Mc!=1nr#nHM37AWeW633n4Oy^!%k$meSfHs6v9oBUS{srK6Do&^Jj#|S-q&-*t+lG8BRQ{i5uKxcZE#hOOM zhD$?=eU}i=9}L$=o+s4XO;i!4uOt&K!;E~=Q)`EiA0)Q&oce9Jt=2tR8yknZ-4bD?fPNE^O6=Ndp#L$=!L->lJ zHBBT8muV!59QDu-#934_Cxm~%iID!bP_$rR(w5xURw}xpYu1dCs@S^G3Rb%iI3xvJ z8iY*yJ)sE61@jEeYI*Q69Diwug~X53?5nEUYkhicfEH%eF?t4Anx-|tZStYqU;L$( z)dlM3m@p3{=W|mvgBHkt5eP2UP!x$Q`5}Sie43X%cX`GmI)H$KUIPAcn-E=qaOSR9 z;#+v4B=aVq_p_BR`Il15d!BXz(ZdB{0ZgpaX| z?TyFIQs~R885N zkJr(*li$;(li%M>Ca0a(o#4nHss}r=#98e7gLz0ovfeA_1z;T_P9 z@^!*w308IRJD}iQ0D);xk+W2T1Za{DvG5h}Ay6jIP4FLr&~0_-TY^DBVc-Izh~AQ6 zxCF03^g8MhojU3u(s_U%Uugy%2YPBMhKl@YQ~hH+0-2 z1ijigVYW%~@-?E->{v0kVHOW?WYBY?m1Wim^tA;IFL9p2Fv7~+bhEa@{hoMWY9&iT z{`vmm_!YzZn$)NcbOmUSXuv-RBL)PqUR+;K>rPhXDqJ0v$0Dx|t#s>yX38eRvQrM0b5vU7 z&(;H?B-Lr{k)c;X>q-D8Wd?|=K`;yimOm*^27UPaqJOlZx!NUxR=HJ)z10D++H14; z;=a_G3KD`-znMW**ZyhUVU+R%%ul9`>m7V=!akDr>-(!^>{sfk%S$26(WbaNCww?# zB@3AIi&%_6OE=-hqpGU3Nlg=3QxfWl=*-F4M~b}7pIx%L%YT_28x^W6(}JvLr|LL1 zONOFH5&YZoiCT?4v9wK=jDxymh!CLSwXKZpWyoiZppByzDts?E*m{>F&}~McnXQEO z;xNZb3QRIUOaB~WVy(IcK9+>X6!wox{VkCvt_q!^p-#!1hY{OLmwr)#+0iNzT|ySjb+)dVsd)wNS;!EW@$*Wb&wsnk zG-FcZik39zDGU?hsZ2GO{M8!P3uY@*Vmu=Qlg>)x*GN6Uo_K!=W?`e+!wXsm%2Ok` zrZHu$)`Q5^z3YP&qkRQwIHG-5HnI=1-Ued+Cj^u54Yhosg3Q&P16=uQPuucz0e7CO zvG)NK1v10_rgsi%Btq?wkY$pNTCQn{kwAg)2zYVg7OwT&zC&}YcyPA#O-fzQ4s#)Z zpPyY3N$!}1fHWxVmcWG^Q{0ZAY6#e2BH45~D9FU@VoIh7m;#WQ!^+OC&eT>SdboJH zzOJ(GV`!%;D1#|zwA?n@sw=~S#Gtvb^pj>fHTfuZxM}-34%Lihnt@=#-&yUo4v2@uSBC@7z9g*7xSTp5fO$myUDC_MHp#gwJmng9s zdPIiiVEb@=2Hk84(>FWG)NLcwMG0s8mIiB++Tg^cvNR|H>qFguzBXhXEPs2}YrrQw zEqO)bGD-IC*Iwo6s~!tC3WCfP(;G>fi_JCV-^eoS`Gb;*NN?rUiH0k~djU9^|u-`C|Dh8)#cqjDq-GQ5#7VEf!-4e4#R}^rm$zH zix-_`R!tMXVa&71L0tkXW>FMc$#k49a(pB+)aA??R^mNS>g+IGE*@lLkV@-EnNQ!A z)ODy!9Bu0@n4!}(rPYX{MWb>!WQ>4L44G_}>yzAa*Sc^OscLAgQ5uFK!C7|lJPEKz zOIaC0E_7&Oh+UO)MV2IxRdhnm*+Ip05n+}j7F#t>Ju6yYw;DR>!#R65P7V%`-vvfA zlw*u^Q@Q+*t$3IhG6p+{m&p{e-C$LgFsMF>TRL=N?p71QzQD7u3BsnjLZ|xJPKHsp zar~p5Es=1xqO{61B5Z_hMlctVyvUll>QG>g`(?3(kvi(3e9T3#J8y8NZGRI52ahK1 z#Vb(X36d)mu_qK~2oMyzBTWL&$0bvI1Fh%i8r}CF#!bT`59>jbqKpL8R1jNZ4TTU} zqn#rj!&sE1XV6OA6sW5T5;H!Cdnaxye$3mZhY4;!_hhhog-oE_uBrd2ggpYosWw{u z!xy{71W%1Va!V@*Aiq3^9RFlsCYd{r=Yf^$VGha82_W`1R*f_`y=SL$SkkN- z@SHq+=s<0qbBvR=G23~p?7L+)erc4gYtl6iiAtw{9j)^{6e~L_J=P$g&(E^k1EIRw zzq5Gqan`eTPPuN5sClgjb~3ASMmlS6qqR>$y=r{?kmfvD=a?Id|4DItts~0NdePW= zaqWR^)JBwc)f+`A*V8#_N3xor4-gJO2?IGO(PD%+8ml$5w7FxaHL4fqiA2|MMya%_ zC(=VSraNNkO$~8ailtrnbo`T0#Q9!^k%gc=Kidf?|`9jh_cfhafKm zQdLZWh)_!^p(mrFd`UD?w7y}bAf|{kMo7>7R?5*Y=|~=nRq6KkwlKza5?Nl3DriZc z;g{M@X*i9XDQxYqzOZ0ujrQ}`8~&30oOr3-|57~@4+uq2KXa0jsJi41mdxdvv8B0b zH(RYn%-t|(jqq;D7_68UyDd^G|Eo^09A)1jV^i4Nj@Gsc-gtvu?t=goXB>}7lKgir z2CC?mBy7{ejP~3*e3y0=8EK1w5uy-g?%)Z-U49 z3jWC7NhVOifHvL|xTd2j~}t%A~e#u`da3 zq|UN2hzzbqot_B<7{fIHB_cB+-y#2r zfE*HpyLBn^mR68fnN*_wp5CMD-hf&_=Dvt#9Kr^b19j?V2VRQM9J0`5CO8y9r$QDO zqNLMo8q=)0CoB-FW?zd$NA;R3Q4b~29aQ);)LwSK547mvK#=0$fRI9&;^n|#+0_P8 z>ghm%+W7;mA!K80kG9QcD4F*D21TuT_3UCk49AADI&3vuI33ETQ@dJbcwmlH_j2ct zqmC1I3!o;J-6S2LYHzG}bLxl|qNLNYk>Bj%z;#F+#a=DTJoXseGj3}(y6*zJIHR`q z@!{VSs5VePPf~8IMLEV5v!z**{R_LjHEAl5>R_)3X=ao1(FN0bZ#Zrt1$v~wWJ^|I zzWpNM6_qUMyu`qxqCP(GOtQnGXFQmp#|Z4}>(0kyVBjwLD`RRPK1BMBR*J8|WGlpx z{79J*o1!`*_`KFK?LteZ#v}Vg%jf*G_o&0kER=B1oSkDOIBN|DOarC<*GTZT%3hgL zqGh$)z6)kG6zIsWqkvM@l!(wQ5d)j}T#81^&g#NY>@4y=+;E8XwP0L-O;m3-1SX)) z>Zx#6dy{-|YQQDObVm}7#I>Liak9B-n~W^uojW}@E^X9^(Tycpd|l@1`T$j^9Cgm( zYBeTOY>YCW8sLtTt7Z#sDGy2{G@`{@XYgQHPL6JB~Jr%aP@hSrpyU!o->9 zNfVfh)XLGBr_No|&|rHkoPDl@*o~ShBSKgk9W|0IdELhKyYUB8yW?CZSGuoHyTRO; z%|=PLM_kDnGA31Yii8t+ksgJ!T|B9wVjYN7Ti0ypm{>2waZ^%2&`FckM6@>rOIq-| z7WreWgl>T19mo2PI))ne=iPhf-c2dPIi>Mi>zTkZ%kfDssLwoldpAyZ0GIr^n^`f# z{%$k#yKfFm=>mFdw$MF4&sr?fkHY6u%qg{5b>#j~!sk8X64xi^hog6es>`%5*S0kT z`**K6rQP+*9niJm@T-s_g^sk+9GmpMZ*qAN8F1AL(OicpJFG5HTU_X^kbR+>Vg~kT zf9UeO(Baf!_opJ}5bUV>3Z*0?#<8^Np_yGSH`JXN6X{uNQ9iVxv`~(;Som=!1vJ8u z(_}pZz{b-Lw533tuCA;RG`&0{6p0$b$ehjk2v=jKoF0{nQHYogf8V9g1m<5iU%y@5 z1ED+Y!6Gc(xBcGd7*w3{FlFnLYL89OfB%`(r4h}8J>b|9t{NRY44E*zbF%jo13_~W zrf}pg(&}pp^@LavTz*u@M-MmBl~X00h|FW(6J1fBy^14v2Ab+p&=fdLTT*47=lA`8edF`ibGVEa6~fbevGg|{V375oNz<} zRD)2$u`5ejHV$c2Q9}Zkj=`}&nt*J~(6PZ9zjRdCu_B7Nbj;DQgPO=}6w|SU8sAI; zOM{eZbgdyLi%7w-#+vl6L|PWz&>>K|M2ZxR2EoB7k}*)bJm#3lK9O7!zDGh70abB0 zx5jW{qzR%1iEo4EG_jR2OS^CkQR?{GA!E8MZK{QFbyA{>BPvE5%^@TOk(wlhM?{vS zBdcRF@#vDGP!45jTp@CQv`_Ng7#xq{!w z?ym-LB$dFN?dH4^gP<*YvLHgG`pW=kw)+=h@$Entu$Ol+p_vuC& zrpx-S$OCK%zYmvE)n_4q=adT?SFzQJYRS#9a?#BJYKbe|^C1_SS8->`?^H)R{B`CR zUd5N;b z$!RY}SHWi|0PEBbox9LCh(d*LT)7UZSt!{O4us~Y_V?& zNxp9kg(}|+qG~U`mI@tX;c4nKahaZJaG9Qg@u`{y!s*Jt{{Nk>+|eIAWz$GM^~3C{ z^^Hs}^WE5Gdgz7TR_GlNdg!cze(;*Cd)@hkSGM#0tuJ)%{LkO5i+GM=i(f3y${z@B zvL6go+8+?PxxrWZIoU9ek_!Ny7i9sOevmQ~wVv!@p}~|4Ru@)WZ6|g(Q5Gb(FAF(0y5n zIZj+(tm6rNi@Y%q=YOao3)UA0(1iSkp;2_nGI7F83E7%71%4UeW;BQ}k(02kW;89POjBfuG9(BVXCNYqoUvjQ1}7C^#Q?vM zNkuZg$scr*+)*js16XelO5_NdnreW@+j5t;hq*4o0(eJ%oFBFohI_EeUu^spJs0a) zSHrKbDZ31-lc{>;ok{CW_(V9;*T+mw)Aw<|C)LumoxJ;;l{oK$EM{u)k4*^*$`BwRz!_Oi1a=GuDhF-xpn<8D9BV;)#)s&yj0QJ@ac zV1>AQ{JBtYp@8eytvFnjwp=s03dY9mXeofVI_3#%zy&&Ph2b6&uS8F1_T@CP8jYIuHv{oA zarORBNcctShE2i_iO`pj=v_q7Igwi5s0A*6c2e@r4AZ)BjZG70 z%y=Zu;B@5=qFE3_vNl-=|0pEJPg|%VullK7(G|bOGuT@mn$&j~9hdu_;n_?SuCHWr z=HQ-cBjMI$_n=R0#vv6q96Y{}XU!kNVE*RpY;|eY!Gt2@Ve?)vwpesDvgV7N#zi%zY>O1f5Xq&B1Ai8;fXG(R;c-sqK_|DtCH(`qrz! z=yTPMEo6h05|aq6Evz!q9tnzJ;^dvZ$&ZP3&aw&!Hv`p0UM0KE@aMEwm!K_!>Ee3J6Mp@0_2jT+BL3WqiweU9safRr@ zuhYvD+x^`q;IAfwJ@C6v0cn8UkT8->`f#uWM0QM2S6{df6@3T-sr04;0xXbJyS|$& zBh(iu5uNddS2lw^QiyaKN*n%fY_O|BfG*;&$xUYfn~Zk=FOu5OV|gFTw?d-bDF*s6 z-fFw-z`nBDRT+z|38X4R?g<{QiiY2c_g&uA+7S1Y)K%t0kIpFeeX`k0%t-KKD5~d0 z0?3+h;lUrK6e|-kO((eSNLYUq~MsvuQC;EEVm7j4L<>)4_>lT=BCGWktH=;EY)oUt2TZq#`TC6 zFzLXaWFDD~+fc(NHRO9v< zN=1uN)TBT0@S_7cLQnOG7aT0w(@d7K?K$I`Jq1ny$Q_3~r~+tzJYdVC{fh|F)joY) z#wpR>C4De6%ugXwkrpc<_TMoZx(HQ#1}PuPnRqvh(BwFnSBrBPR&t9{adOZ^bNP&5 zCM+iv2MR3D9^G?TC}{qKN9G8@(7>_f45Y8PK3474p@a+8mCvf`K~w5-UHve|kuzy~ z^Id7hS=+4mVkf{{=DU42KlUz?`-5Fasz#Aw8rC)w)47z=>D0KuV^uJJCTaQF;KLUbt#H+)grrm6U+%){@y?prQ}+ar?@o8iljK2D#)sN{Q6*(-U+(pwE)(3 z@Bw$RGzQW32jEv9|I;BIZT#o&0MV17J4tZcB&y49QXc1yAZqO?_83T&x$a{$? z^b(sGBwr(Lzu`re39KR#JBq$y30jGZ7$iP&93u0@8AZ-X_rQN>5}w(Jh>O_;((^Im zRA&fP&uEo*&GelBR_cs3|`4awhypZ0SlkTNo;AyB?-dseQllhQ* z!J@eW5j(u_`}wcilj52h>fjsbY5v`9|L0CS+5eZ@^S=s9HnB6Zf&B2pW?Gu-gc0Uv zy@{=liiov5R)&g&5=cCB^fk;$B*0BKOWe;tc#|A{M@NTyt?rypw(d-N`}lbS^}%Sb z?QYmp_T^5eShXh$sE}IJNk=#m(|(v)woLeW zZ4kRv8|4-b186E_lCLs1w2I`>x-y#&FkXQ;@$-0dNOnP9e@rqBAlzf>qH~6fgdhz_ z39Vd%cfjxr2n`UZ!_2^pgn&Kp&!1Ew!1U@770EkgQIO&#a`A|)^4%97%cYb)!!piG% zs4zbg-*3Ee_seByjc;YLFE39=-@ltqwsuc%GqHLJDm4gB=)*+&|LQVhO zQe|3~r8LfTmY=XP#$;cFOT5A`>_&>;V92TJKV`)oC~UmvG2P@8Qv(H#siVp-dww1>Q)V7+N;z`j;v%8~5n3bhpNbt5Eo`KzLCy z91)b+XsW1fSYiR+8SVIiZ$${GY}0XVSvoLc5Dqh~b0K8Qzwj$t!3L8*>1&=opiL98c4&-Y!*t zZly!2gpkS=v&eSnxoC_c?qxJ7*EeU}m>sxZIdHY}gg+<{ld^d{e@8KGnmu3@mT(7R zN5l&0aaP>LuQKjBt&RlmJPFN9a8;?_)VuCLSDJuYZnXez`D6&)z$!@QMc+nOn#el4 zE(^|eJu(@b30&$;f23;_s-L?5_?w|Q@Df9c#TpF<2y^BY1>ru}IozGdLGgOgBbt00 zKA9tnbFX+C@gb%xNlxivyJTBQ32zj$7VWGs*$8mRs);$kH~%$77UWQl%Paq|u?Cx$xkWSDoZiZ0%{C9d6AFp$N_6>zN_>Zw4;XinexSf;pze?i&eQ_yF$oBIi z^91r!AOj-kK(-7Gt740X2hpQR!@|RAw4qIak{L;gpPva^c@d4Y+gNT2queN;#gF%0 zr`!MLcwJ47{5`|^?Lti|zerz7P-~z&5D$Fz-Q>9_&!2CXisNs~o5P74;0PMHP$SWsHruP0?MdJK@y%9|JPu;xbJuP9W!kOhj%$aioBQLaQ0|Ahs##m!4?0)( z8xcC+!=c!2_qoVica?axsmBTrPT%5#6;9tmDjhXl9h9^2(n>@fj1J1BC3KzSlL~D$ zBNvtYN=Y4+lL}2WmJZC)%A1ais!EEE+cV3Gni7;kXg7#WohS?OH~L>!Xsbts)D+jc z{!}2m#NYa#VxYXF_T7EaKx`13gx3`Qa!}r?yHLDIM0*43{*d)*6mH7Lv%#4Z!w?=u6>T|^_!6&f~?5pN|7MY3l@^M}T17U^oR@aY& zW3tzQAO+9@l(k9hGyDEZ(&MOMK2zW#Jcslt0nI?3GhI{qn(Ved=lJg!r1shR*Ft)$ z?PBKYFZ{XMVAn>mSZOS2?KmA5PdaOyLQmwzm@=)~{7eO}Z`ZTgfNyqCY zo_q334g`dzc12E+y+`DkZo2Y;8nj}?V3vOWg+}S0fmsSmg<*lxV^U5`%MhZiz>ov? z9+EFL7?pSWqYm|me(Kznm*@R0S!xe@ipJ&MBj}OWbAad+xP~mlOcOC&#e`BJD$KyN zz0%}-L82P#ljRP$%!=xf1p9>5&tR6m>g#m~h%vCa=2hGu_bJ!AHw> z_pFiw+4B#>?LcWDA>Dmmi?HKDgK`0#N%6u3R#h9i0~jh->f)&S==xyai`~Po=nZEv za(i~>_7$!8KlijMkeE1F?3@YvD;guCF>|9d*>29l3xXf-t=#s4aA7D^vLTg!el|j3 zVokla9cKFO6L~K;5NSppjQM72rL=$gky4S;ar=)Ie>{?(_?dW`?mkOXrFrKgk>e^s zM3a^CCa5k2-(!?m_$Pu(AM;UV$8Bhpp&hbP&X=Ml)KVmU1~Wr#XlJcNX|>!Jd{Nm@ z0*@@mi3j>8o}(0;!&YgKZwdY#^%aot=n?UN!nM;+kiD@TnPyAFlSeRqdM(p^h~P>&q-_|0lEaHY{^ zIal!b2eSC~T;-5WO1D6M86jFr=i_Wevpo4|9UV>?`L@+gq=0Y9Xv|<;-5`@E)iq=6 zJ-mPg3e?@q1fbtODIRn`qP4Ikc%QXTxyrSaYv_b-`w2 zkq%97oz>=L^l{?i?U!qk+s&FC_OP+cxKJ`EHpZb^yM}jgqez>Q?&xxP($R>@Ld1u} zagkiZw2&R1)XeBmj`FRv(7~H7URvlJwv12)psG>j0(6y z>;S<^pF-~}vP6tL-hny$$&Aq(xg?{X56zgBa{y&HS~up@74ksrD$3Ra z`f%^Dt;r{EL=y7P-29wr1*D72(L?>kUvdRn4pChPZ6%C+AMZEz@o{lpWn2&b6| zmv}=Su4G0wiJ^uU?D!TELk7fy4fJ{ju~b&2gRnjc_u%z8#Jxk|%pnTh*mR3dCO}8D zq%$`I)i#;OzJ{L#aYn(%ejAHE7npI5cr}|5ce(wz1Pfen-&hOf=a7Q9OVRZUlKp<~ z((00IRnz9_LGpZ^_Ly)2N!lcn0S;OA>Ad3}gRyz+##|CgVT)SIyj$8m1r-L97dzD+ zK-gNSXGp%s|01?=zbTnnsU#b}bbjED^$|vt+-40&tX)Tni?^L2WrVDy@aZNOz)Z zA;avcrLNREsV0Quy{!Dmt-K%PMR;#A)X>-7J2646jT4-$SH*vZ)tKH2%G80~hUzp# z0ReaT**@3}e1cpn9#BD$)gHPqtLo0d>d5S>Msv5I7%H+hv-mSGEkRjq8y&9mnFM5o= zn|et)IrztX@NG6~${mb1z*Re#qz#kG9)@4lDb>WWi zv`0e5%w}*-5H+{Q7sQA|5=t-ff#gyg>D(}rP(D~LIihUI|0f7H{FYoH<%VWnK|(}B zZnWXtnM3prn-rUajDSy5m3bUBmDj9SJ$roR=++)9S_-!X&IsG-@E!J7c~7E2`Zj(u zTTn3pMO}fmhRN*O1v#{-o*{B)M;kaZ?`*}GdgVp@SFd686kk?-B95#d!NH1#hu?tu zJI=#1SmuPlDUPGIGS~_h`4WSy*pz@YT8c5>um@Fpz}%Qacd}^l{1IGX%p~o(wL7Ac zL}7RB)Q>zZv3@N`2oAf1Ri-2LG)T?GAV4$1!V)9E zlEbtd#ay9swu09FSSIiczKip;Aq_Hhy8l2sOM}oji$mkrO*Qw#(u*&>4Z4Zq7|h-@ zbVjSBPI7P{G6>hnJV)oOTTrCZswL8ec8H@3$4l2vd#3E@Jj67Q$uv)5n%6XsaRtL+ zU-v+ov|ZID_@$tonb7D`7C^*0N2#Bn+Jj6Mqu;9olc~)eYICsvdqpi-9SS zWUE;-kU5+M!`WHyL^W{j?@(UaF=AopPN#N)noa)I37QL5#nMGuP0QSun|@12VoxvB z-?EEi`P>mo7dTqQC&B{PJUJf(2^YQ^dAoVz1 z;G9a76FpiW@f-|yhb7W%rps;AO!L{5=?=2r$B}RH?Mdst_PysL*)9{0+OA?kU*V+_ zWI$?Mi^&{{ZZ%{ou_;okDX%g^j=MI|qpfX;r^2@ELpDXmth!S(Q_GFadnv>92LJmt z6@5S16Rcgf+LGIx!gN$SD`5W?i!-*}!pZW)E`NTK%;w$Fo6zg1Aqkw0HRSr}#UI_6 zIV$%6aC&}WBUU6vvct5RUtW+S1vK!++OVx+5H~+UPZx(Pl8TpN^SOn;IV=Y0NUmVnq`&z5cFfhK^ z7kc{7y&zmF(d`pFAaU2|_Uk?-;}N1mc|Rp}1VEn3MQsumJY=;_2N`$YdH*i$3| z3ga(lD@u-0a_ONiEQxF~C3c-hStGGZdN*NwqMnXoL-&}wZb0KpsGX*ejoimrG1?Bb zKaIz;jBR9yeTMpb!}s=YQEdt+Tc-f%A3sw6;}8q!KP0FB%4if#ob0T>c{ctlK@I-5 zE+}%=${?{!fz8KYW?AUteu29cg75_e`6{LR<{*h}czBgWUoHtQ2&mt0KFLiRP*6CZ zYuv_xE{_Rs-)^5D?0p@PCTLW&s+s0}4+a1Tgg&VHFjm0nV+};;mU+L`G-FPwwK8RT z>BpC}o#UWw|O!li|;rQ?JjmGG#(&Df6$-E5e+xB4X>QyIHp* z3D+kG{|p}JtGMZC=ae8Bq;yf3%({>gQC#n>Ao&BFY9^Gffew$MeyH=mCz?`nW|sB& zW+UkOC;w(N1uTd`z<%e9`QPiGbH;z_?*8vP{6B_MqkKky{8Y(OKCxzFEUo~NMSeEz-3{TY#c zLk*EAXqC9&ces@HKF?(vy9h_?UTi_CoqS2f$l=mP45QJq2RTczX2(pU;YCaiHAqWD z>|~rvFBJKnDO(hR`VUkONhHOLI#5U{ube7qLqcVf&Cp0CT>`3U;usAf(y}ecc zaf@mH;SdX(m>RfPJOAIBZ2w(tQPidX zcF9dNfAO{l9oamL@p1bW@uN^}_00q5bAAszjsK<*-+dw((8NrEKjNx;&GxuM9CrDf zxMu~DM^1#6rW~&l3YTx0ZnT^yr7w-wPn6{JPQ3P!CfPLpvBZ|&OVPs)dfoRd<+C!z zUjy;j(;~qF_k`HkBk^cV2xEcA@A{sUCuQM~Aj_!kP)Rk9P8ggxBoS5C^mn5m2oTZa zkJ=nbA8z9hWTltvH^5I8c1eQ`e(hTRuY{Kcq4^%nvT2rO6G-&)EZ{FS_3xuyZ4(rx z9A1ES$B4~8ZGYu4*xWsZwe4v*`Ru30d_&Vi=*o-6)sMb@uwqb+F6alB&H5SG&Xx#- zSe2i82fjcotD#R(P+!y~aaI*Qx#=5XiJaSmr4WB!5ASuVT{w4Nc^xeMwXaD^tOskNiiSf6ziiN@d#I!2!d_yyk zKW%+4NU4d7n#BD|QY=@0SXosouWO1A5kfR6R=arH6KohW5IZzllwN%z`P?j_;o6J# z&0&b?IS=!Vu=&vYnrQ&fvkwgTe$Oq<#9n1NU44E&!SVfUi-2=Mc9uSMmm1l?++MMl z8z=~YV@^sCH`Lx`@m~R*MBZo56a?b%mjX%!B~_d~oOGt`G&_!R+kWiZ|cWC}wau8eA-p)VqP1;yQ01%#|DOOTPP zu8ck=m&AHr+M?2mrDC=8v?=Ps%KomtC*AXWd*c0f3~8irYV19~F}WGWY%4eWS=oT{ z%W=@xVAGQ%jA>!ylO5r>!+&Cgf$pN#+YGq?# zzdVk%9mcG^vHi#$?xLA9y5ZxwSTz&JZcD>{$k2YNb)}blqk5LepjA`0upqBif-WWN z?;?kuYg(}2(haaoLcdSvmapi5v|NrAQ<_-k&k9~kuI+~Iu{h5u+m%O&5zDC-xzs|U z*I3Kkvi|ZO^Eeqw3jQ-#fwdV7bZe1tprxT~jgHD$-`4RJV$d?hGks7;% zlAU)pr>IJEP6L>>{x{seN|6MFt*MH_v@UhL;46-Gq#p6L2bc~aouH>fS557q1dVmT z16i8_<5}x~JPyB=iw&J6Yzx8{JB2-)i<$AQe6`efQJjB0)b{aIK7xf8v|<mrIW?C-)jHI()&L> z3_^DH9^dFHGskcE#lO^FO>F;XloQ;=EH60_JfF7$DP&^WaH`r+{Z8Zn158c0x6QdHzE>( zh(YeV2~OsJM6Gp*ovER5`MzFB&xGBGn`J@^@nGXP7m;c(IK(;vCfF%0Onks!^<<_R zvis%rs6*m@GD6tINYs1+J95g70aFSK0Lo9&Az;=A20bh5I!U2+ENw%r_&3EJ%*wCB z=I?j#^?UvEW%e(s&i@nC?0?@75!df)?Z2MMX!!}r0eN_yg{J7}xt1Q*0z%3rfhbi? z_@Q8te0gQ%%^l*EG{wY(ZRA%uT4ZEEFy5|Mc%mZZu_$d8Q!LZK=H1J~=g+(l5gZd7 zCs5-!HvZ9cdU_K>TqcleMVsjB6nz!VC0FFPmScz~-F1MzIT_{g`cxTPR}>Ln%E#vk zf5>TE9N)J=aF80NMiYaI`3kaQ(7}OjJ`K6R|9IT)jy{XB>!e_oYw;nroc1#rG`bu$QA$g;5_hz%oh7iv?39 zebdY1kv)7-xcOZ_n&toUZw;YD1Xe|w?^vbd|5v>7O=I>g9q8<0V67yeE^c6JZ2dou zWwx@G9FhR?=dhrg7HWGKnlOlhL;kVn09FLhb_FO4`pqpfjgXd3%ap6-b?EbMWNnXS z0gI)f_oLY}lec{DT8;USXa<=c4yPmUzg%Xfa(sSXUkH5)n@tXb{ZYY@sI(ew)&y32 znvfFb%(JPYKpQaU^s`p_t^NeSUJK?drPar5^yd0z$HY?YRD&+8#lobRLl!?4q_0M{WNG;}w(VNUlkTuUEPU z4OHy0)QsAxfq)JzmaW%ecJdOtnxbkYrFv0(tRsDwd_q3;wT2atY`%v2;68>B-HW9L zXhvqiyu;RcZ03ecC9#!Lyh-YTolu^W&Cq)ktF2(3*T=|^mihu3)T4_0BFVM^{Qt$- zI|b?1E#11aY}>YN+qP}nHOsbb+qP}n_N-a1Q{P&D?6Y^oSu1v&i#OuE9;1(*nJu$D zS>Ar)VXT5GIYGteyAZW~rVA3{>o=b8P;{Zdp8WwCov;S)Q@bu0C6C zfpM{HRp(Ny!S`%mK@;;u`o$g`KOBFQ5k%i8$vv_Se5z%CjpY-WGY@Cp{TDUcF0LRw zFWndD9VHfIBs>#iN`A(RkCUGNRs%Z*sr{+N-bGYzaOUd5u217-SXv1eT@dSefhkmo z;gbBbTDx;x631G9G9aG}bFEAD&o9NLvjOn#M0WJY*f=}oPUzm>H+&1D`iV;t`?y)7 z_R@Y6OhUbgZkbjk=NUL&q1Ax1b7DrBePq@dlXYD!wgT$z_n%TFzn@RdXVaQZ;scmD zbwyXXaa}CMw%3!+haFsbWY3YR{u0aHvrY4jFGigS9B@@i-c=)}P#jZ%a-DbAX&&IK zJ@U7lQ?Hn_rbK-t4k^Xo-2ZEUL3mK26XPcq-27KZ`hTi)e?B@>3p1C0VOsxv>kX@W zc`N@({?5@eJ&`44;|{q?yTja(Fcrk#&j%v66HfFGQmdm(94Em@p9=EGlecL$NnPow zZa!$)c5y@Lv{K_2?=zpT@bB2rxxUcE+iq@AwW;>eL=m5DcVmn-27FoPdw!Id`P_bd z%ii_)y5aVD&c_2RD^?|o;kqwFisiT`BJ({Q@{%PaqaZ`!C|{E(md!XLu1zH6I7cMY zxhNWz)x0SBBfGIz6fN7aB0&&cV!^Cah=HkMu3WB=EXo`GfvIA}tW<~@ZEC@+Rj3(# z!JJVzuN{42!K_yp$=sn{=r20StXVS;8LevBBw6_Lzk2?7_-+qsm>g{ngkk7e(?Nl2*auehu+uzT@0Q+kv_mm;$v;rcZ}<=NbX6WS55z@EPjmw?7y#HoW~(aQaI{WbB;?z%I(%^#Jupw7(tr3mbr#b{ft5%m^R& z-l`@x;$5EqAnnrrBj64Eoeh8++9t%M4+&!3g*&*{+)gkm((IK^Oc_G>?gu4dW-YVz%U6iaVDiN3!0nB%P zB9h%%(PTvu${hTMaB04~YN^4C8vx(3MO#(KiXQ5m` zHQI0l^P^POYIuz5zQRBEyh&D7=0z`?b<&^)(PwomML=OA;2ZI-!2cWdj#c2VZRBuw z|H_Je)3g*hiyo3Fqeb^-SAE&5_{fWbvO;?XeL+FPSI6Frz6>$CO{E4Z1SujExQWLa z3(YD<{?RXICB_*~w6qM?4ExA&M-_nJmI#vpqe^w1_9%HB27eMYhpjc#eHbguC}Xdx zVj2} zuSC8cA5H5`SG3)ShEuTU`1>BF9f=SkLb)&)=xxzZ>j9UUZa+5RG+l#%Nl-7NgsB@6 zBgJRfDh#D+J{Hue4S@@*@@fqA_2`uKtR)FCkc-er7qa2 z%nz8V?Q}Z>VkeD!G`QTjcx~$%7sE0lgVIFFVM#fnH5DaNaMuy7|G1{<#GLw3ZdmRB zuD!|AV@8v7Q=dnV8d4vFH-jBYx#u^Q=U+$H8yis~608YfKeF3lM2IBz+cWnMRFAMe zZzNo?W*{(dMv+Uw8AMMWh|*gWT~iqd>&@TMj>IU_4{$!&aPaDbSgRV<1*)JlV^o9jy;F|^yYc>}bBm%*dD26bCRrmDWA9*U(TRbV ztvWlCzA;R6OjG)mh1@T%D9GHTr*U*&-9|7}13jwl={Pe?fXJ{B5KnU7 zl4L9fyEp_Oo%Jk16grsc^({^uIB(2Oo`jvU-%fpk65NRY%_x`_Cn7Fb8y%d^l2d4+ z{wUsVBQl0^(n}vsL`p5d-_Pjg_>01FY`TOb2hC zj=K8k)KI9LTW^mSVmIP}D>-i@^dobsN6f<^L2A_=n>~{E(G?5y&0_=zM-McY5zb?h zWb@S2Bx9#7W`NKWg>`?<#QL6% zW`_YuHR)#-qtdFXj5$|OA_^lIqDWT^h$&H+l3#T~aoAL41tZ z!&pE7YiID1XY`^9Xr%KD(52PxJl!HBb_zqY3l)QHOQ(Dxv#172s=-hZseA#lv5jk} zAM7-)AW#(bn{J3CJZV#2t9WK8sm}Wwlz1+MI?iQP7|sFH?Bkw4KzC0}Tu)Furs&zy zMnkcaF{M`uG1rphKWxVw=1)eho2J~kDQV*u$H2DnX97Bnv%As4Xo5g7_uRKnfZu+Q zbQ%pJZiBxOOS-JCTU_uYz3B7Tc?z&97e^s@Cn&Kx>MGms8K!nZf4GU4109`vE}d1w zXBT1&nW^>u)e}aK_v<_@K+CZPE4+!!krMH~MVgVylSMe~#0RN^>PK85v*dLvC;p$n zBOX@(YH+43UfSE>VAv|Sq2o8~`XkiST&#O}{wEGud-8ATfkt)L{<&;z`5bxK{-cE| zXgmQFI&GA0LI!O+#&=##wAK_AHn8j+b%gpxzF3cJXdc!w)J+t6q$U$nl9RyLwmT2H z&@yDkeJyyjvBhLmt+_%Af%nrqX**ZAE733m_4Csb?cpr8j%W;JHv^cWt_DtQsyJ}$ zOdql*bW_XNUTPHr9(^dMF*Khr5Wn^>Clv6RlzO18LY?do*ST8j=~c{!n?JnG-yYnGKX>QslP@k z)iC>uZ}cl|`P|xBRaM?OjuyaLY&g?$oqVa#K#jL+K86}$GTb{KoMvz8)7#DXX2deU z@jjrB+gTFHn2LwXB<#z_$(58C6l6l>miuZ=^E6fTD=P#eANC_FFn8sdWO|*nXfKD& zC$UP1E*EesCf&z|#z@WXCz}F$`feN=UjF(l)B(CSE+%efu$>l8=afKW9s{DnG?e^PO(*mIe97ifcys5YCZK`$ftoQimLN5% zRO^wIb2YR=iaIgd6#%VeqE`x5GO@0G4wy>o$=&D{CFG1X$Gwo_#I|*s&Q706Q5O(Sc^nj_jL8nqu~Xzk!8GS^p1Zu5s`-*wyZ zo(*yqzZI%XD0%fO*rdA2g}SxN=$Kp-Q#>6)JcH%E(l}WIHA&0f z(OE`>U)Oh`J`WOXtIYVWP;=K7r~SJfpxMv_gcWhYQv26V2>&wE1|F+Qym+irFUbJV z9BwF9R$Du65_eChmq5CqwFTjbmzYwLU7^9QDxghX@ z3)dp)EKUtYPv)2_Yz?6Dpo#Wq15{)?r@gv0Z-7gLkrR)a??am$-*_Zj-DNn!#@@8N zOv9sp3M6a+ROQonwh6?H^)jg^TgFjs6aQd5kZZhlOj(gU zqCn-=)`r6V(co#SfZBvJ&a?(9bYq(sZtu7~nBsW?4tXgCAT4gu@ue+Cb`$RLioIX^ zOwT}$HdUE8;O~nsm*#QndwoytJS4ZBqHvSp1V$@$&5G?t`@6RztzdgJ4*cgA+A#p_ zgphU;oTCD+X!XG@?{akV1$k^&sQc0%dj{Sp*+1Zl7wopGu?DrCfO@KO2evMVe=C&Q zyndbHZV-F}>% z>+9Rl?bfu$0>Fep#zNr0?ZNg;@JQl<_yh*+a;$@<1Ey?OQ-J+kc?Ed|1#wB5{=v$x zKi3sNQ^W!quJ_&i!?a$WU5~o>6;tE76r;f7T{f>z$NS~YB2(k*>-b+dfF+};Xd_$U zt+4j{`XB)aGvcgdd)a|Z#GQn@mY_$(o%p+&ASp!Nr@lZ=ILJEfK1hH+fGyze0)46g zbdcuv1HsFHnB8%8(tVNum0k8miT*Z#8Qph=(f-YVD<1J=QBZSxA_SU`_(t9S(;jKT zry$nIb4j7z)^QH#*^JCV#?bp^QDy!H0HX*=2&1|f5La;yh&qh2`8p#~Ycz)@`Ccg9 zjJkug7`26BBUoo~4gg#x+C#1wxA`(7?`Ns^0LmD62Dwp_gb!pt3~?pr$u`0kHIS%- zU;PRy+mhrp6}DK)vg9rZB$zc;5#${`Ir0g`+v{v)AyF0=v_v%`gH^Pd%4E%MO3cgI+H;RE+RfW>1S%s#`pkRAr!4KbzP| zSf8_04xL>@QLZQM77JBXW$dzT*rcwZ)BUQWzx+b9ADmZ>ONT&=O*qP1tu7kA>6_Yd zu)t_1m&-(0jEMTzkuTLe*fR|03pLpdU?&;(1 zFP277A}S*Y+-V4W@^IzI5m2!WmiJD>9VVabf!8_HwmLklo`axJ3`ONlO=TkZ4`f0a zhn8?ts&X7KDb_iu4tz=x&C>DqZ{iJ9TCH6xMG0|HAgO|D#>c$ZyHLQcBM>n6a^x87H@>EDJf`fa>$7u^S1LVV}bBBw(Eg+^rEfvwz%*san zw5aEncS0-vUF@cy$`oVv!(AGz-_W?I@^KHmSx(`+41{SvEW6_vsnb_;a?21mY5VNB^uDb+2TiF5it^P|Hdcfw`53b=9??n` z**eVZxW4#iRzfpV#ACt0A+ynsyckbivb~rtT2Fw&xQ4&oZ{3eP*8h{eVs*vJ@BPhy zc-dlWm!H&6c+N_+<*|5O!Or3xVN(A!=gD3U3(^GWWKM#*NJ(AFqAqtiCmp>efHfz9 zRiDb5AInN4t!4i^gI;peK0Cu9R`Z^#c^~egPp>J_ctZrGDbuq&^bLckDRpLn7qj^D z2??i2?+pG^GSmsuLP-|mkCFc)`>$DGIlG!6IAA`6c3|!i0*IZ_HIn{Mwh6q$JQC?U zr-SJ_qj8o>P@y@GWaZ-*RgS(PpqYCLhk;Wf@0S|$_U>RI#Yry_3>0|d(crv zH{_6(A2Z4Xt)#w%o8|G9N8f1txdgGir}6KABF-?$&e>u&peysKYocuPf_mvj`+<#T zc)p1eajDX2AYqf;IQS5BDMtU&Ut%THJ%b?Frk|7z)xD&A)z{`5ByVg6g# zVf?=dJ2D1Fj&_RwY$G%Nx5oX0CzeH0K-O6lEKU6_*iNC#FLDl3Q5F_Jo`8-ENh(PE z;<^!IQa2T6AUPn1j<+-fCbI0`OP(SBpd>j+5q#Ed284MWP4oMSH?PATO{pxD{vq~*O|0?Uu2YZ zig7T!+kTmWvc0RGqCQ(J;L$L!UZ3%gxPV+kI@cfd{vf$6uye92-3ARcO1t&rtTp&y z6&^Edo7Lbc%@d?T?dD*kb)m-sb1k?(1tzJaJRQ&CWp3kSH>HRabE_h4K!&=Wc&jJhb4ij3e%s*F<4<8KOAjh^N)t z)YBAGoN-kxdsn2M44qJtP@3~?fVg0v|DHALFcDHMM zj{*{Wp%tORw1IC9W9UJkxvcUAhPlfG(+@Ga>0VUxmM%z@vC}-)%s1^E2Y}iPPO_!5 z%q?t>r{li=7~Rr7Dz0;wCi^w!WkRqe|vv~ED(6MOq}x%%1dq371y<@3I)<_g3PH0xDA z6-i20^Kd}$I~uSRa*MQ1V$bzA7w`>oo7A4|Z!h2*6nFJKgx_KyxJYZ%b;aPkSz18~ zY2${dks{O=KIDBIyvPUEcwJQ<41pqraK0_chUIWX2&N9Wk)Wtj-sFSas4l#M?Q@}y zF*Kvts7@M7^=Y?a2&ixQh5(UJALJ(%5T=dnxx(j8WaQS_0a>_crHl-BPW4IDfcC)mB2`ixC``` zRZv8(o?m;C*JRS<7f)XrFXb?-Z5eBYtP7shcb_!b3<4oFU_BkdYb6@@epFCU;k0Y^7gglzWjr3vj_B`)$AGzUEu;o2k<6m}P;syJ28C%B$fW?3a#Ic=l>Gu*!5W3s0F2%v z1T(=b*3ByIl}il~H;?n*m1F1SnF|OVK8$6Av`0gVQnO086K}6jS08&iWf4v|#&a8r zf6MT!Xg;uzET}5eGP@@pkZQ%&kP*8n)#64jH!Hp_F85VH5gGZU7Z#q67cq|ymj1;A z0wSXbh<8{gmC0N}bgXVHvXw$(>lN96R89b*j|7vYn2>WC-Ay1hShViZt}H!7rZ8_1 zwkymdTwn}JY*vw@iN_Lu#Jr&?**o$Dy*yvAnm=@^PGR<23xH8bKjMn3S?yn+WHd=r zqdx&p1=i_kuTiyJ*EZ!`AM<@DCNJYip(SWZaOe)SWJxda5!H-gsf<`w zR{cyVvEFWI=UQc&Xlx z!nqN@1;YeE_Dzq|mTMFlD@DPV-wuXY=Gu>SCa424dRwkv?#Ds@OZZAoFA-A`ih2in z-4waQ*~tKFcOcv)5?gMS-}$qUI8i~WqSZ*c4$JIl-zCZBa*(_TVNHr5ws1N6HOT%I zIFr2uYZ1lSs3M?F?9rL1NFU0uD!YVUxh+qW>TJjuP4jBlJ4bFKa!(dn*mVGlV)9ln z_;4va+{A+z+#MSxo4p?DP;c@VyTW!_O00^O7pofBxL9TRwcs*qDB~iBG{U&sS>A0z z58UD%?##%0S~T2T09^P<>>18q2E`*5$Q&VZ6nQv>WLDZ~Q< zT^TaVzx+@O>VuwSvaqfPNh(!#PF30L$!5#(_5y4(#=J9xypYX;sj=`@uy};jO@J~_ z4GLHgXuVO113P)7%ywjytx2C8oxTk%oldeQJ5>Zf_X=A z85RBDhq))}PV^gqdcoMdheG(EI(}iBIK6Fp1B2a@BZ2dy0C~~6KlDc&Fd&KYOV&7Z zX!s=mKnZ2g%?o1uf-Ctu7mGwdFDY-pHG+t#9QXJ2?zGPAh(LMH9X^@IIcsa*Lw;;# zgW?YM9{vd^I3_ZDCO%nE0DXUw zJ2cq;mfTVQUx&8;iEAqBKU*h|d9w9MgCO8l-3~!Dz!8+S<$(_ZFb5F9L31;TAPN)H zm*|DYGjoenBqhrgcdH%>mo^6xQ`ANEWZiPxeQvtVJUx9sK0ZMD=yl&1_C^~5N+EM7 z+-vZw^)&@V`=bIhKr}$0AW<{t111sQNQ43J2(kH*Xo2?O!oc#xXXpfmRUmv2 z3jlx-Yz3HTTk!p<5Dh7B4CM!8P!iip2!jn!;225{7!oLR_BtXch?S=#Y;oa~kL<;U z5kr)Z;`PCUWQep+KqjG?oJ9)G)w~1ATx^pPG&UEa7RUqH5T_ZQL}0lyH9SZlpUt1x zhv#(Y?9=yMae4&Cg^%2IMy0ZynY+oUBk*dm>@e=ud^}FKp3Y-$UMT>6q&r z%yK8?9w+8abToE(rsu90LQ0Y}kfHMf0|Fg^gtRo7ghwc9!L5GRo(VFB7GoTI?*ZXl zR-LPZ+^Z)V_E$|q)k>JEZB0gsP)4ay4&+HNwO(Vd;?&D}L>eYruJeH-Ya_A-O1k?i zo2T!aWav~he<-htgkK`5j#EGl`aYH5Q?{65LSKvda0p*_*@W!yWtoM{WMCkr46`k6 za7qMOULou075*gGR$H?2cX6>x;_a^d<$ArHMJ4C&wo`f`=7V$r277wE=$u3-*>(x1 zC}PiM?bZ{BTd3tM4*?g=(>$FWIECbpoUOtPQ-5`3(1o14S?8Cpg2i;*nIFfn=5bE9 z>LH?PrnG_zn=%}Ue%n_?#H_J?yi$7d6*RNjL=N*6eDVy_Z;@T~LkvhPUb zG~;mxGyOW{_GBxRzv9VwlQ<+>0bI;|*}u@&`I&Wkt_M6d$7hDxZM=iQ_{7*CZWwi}~ARz=7?td-tED6!j|d zLI0o8)1SrY|9R5#KaZaNZ)%{3wTaFD8n%>?orDDtfUmmOMC~UN$F`^6r=}f{V2A&^ z&ayI=5kDSvry+|7hPPKJT$^}Pw4kC>zV!a+4S=4Hn}?Z)8jvq91R)aQ-P&qG9-XXe zEBLT`DN>q@fy}#j(HQ7EP&g68jd=^w&P#A?H zw7M1)*%$_wP&paxRjT-vyOm!2K-@eC&vB6iQ&?;m1W^AR3pD%%^!k3QLjXMv>yB(s zLQ=#P`hfP&bE(L8^z8b%uTFk`|M|Jl|KHqb0?t3cXhRq0|AC>|#O+G{tjiwh9bcZd zp<=nlb4JoB6Oh_Q6+qVs*FoPIsfyVg>(Dxkn$tod7C__SheOHM0TMCUo65TNe&k|0 zJ^g!$)dvD=qilV3To1|xaS4m=NUP0GD@oqACh|L9yP5^ed#XE5?Dy)5q-Z~hP>JRx zy>i85v+%6WxcG$?XeGj5V4->hF&_-{VVA0z1S;rF8I150j5k3Zdp=?{3l*YL9IRy& zH%5mxp7~SKB^+E#$!z|!&GG?#rG*2b1SqDdZa#P&N=*gL@=?mW7p7ZY2)P(NoE7!jQ6;0@vmoA#(%2H`ti>{P82e~c7;>KE1s*9*nAihS6R{?;9_vq}bvMqrSc((H zdjydy{NA5M@+UU^lw%#S(SDZ>8>yBqtOBMXE{ZA(SfEFAwZdAFX9OB>s(Er`b*S?{ zWm*yPBAnglzpzUZE@EafKO?H5|CM&}pPWlV<|al~PA)e8`y!WURV!yKHH0tKTAlGs z_v)b-6|y1X@_H1iio`Vu6SC@S?y9$VL@ft4in!*c6xI|HH8?)=j0IMHC}d1Xk7Pyi zSY+}ghq9}seu~(ZIl>JV(0ca!jo@nfR3R9$4CahI;lzW)gV2K-A*CkXP^muxHxy&dUO-f( zID@yyh}26)RI0}&+n zXd>g6f9=EzQHjY%xK8(|*LM{4U{X}?9s|bhVOJDfT-?1{2;993K+T)Iqc>sZJP{bM zwYBvHSD}pMSKALz6^x032*CzT-^QAgpl@Z(xq^z%8LG_cs%Nu>ii@+NbYs1&^PCv2 zza-D!5_96!goUHV0y<@tjqRjZbRqX|l~~NBW{@nom2R`8?@-v~^;PFFtVX*^IoeKR z;Z+WcYE~FbrRi{)xs#Al_-lPUlP7y4=|(_UqT)!LV@q$;$G7vj6*ZD&Iw8h=m_~7m zT&vvWzV*b|)XV!HXU)iq(5SMU9;&N^qU7XU?P)PqqoGfq@w$;<3N;?D!*W_uDVW$} zXkkTQnE`MB0F>XJKAr(LHi&8$;G@w&@f_rR^9pHeonD-=aEjR-MxO4}**LfJhe)25 zXq}`tE@VU<{u8`J`EbUgVoytPtcYac?>Fx2)+%eYGWK#$c$URXpkAClG)p3ZB~m>EmbFkeNmuiw zkF6y@1K8ZL_r@9C;lZ}Wz(I-OQKrNT-EYvZ;b|ZR(s8X%^d4mCU+Suniv%lWvKf#A z`h?l@hz1)qbCxnTR; zp*EEZ`rI{Q&F*HD891v*>4>2d**;C8%G5$KuXH;1if(SJ8EGMg-N?pk0c6e)eH4vQlnv3!*x>bQqtOkng#sYQb=HsDlJh+w^fG-2lp+;lozXI zISku&(lbY`Ro7SmnUfd}4f@P0rrK~#sLFN5H6QRl*_qJ@7q1LI{k?_ ze(e8Ru+RDUa($E{?j(&{ca$ik!32U^>lmWwi5<+{7o$q%L!uIo+w&8hRscG09>_(-J=Gy zj%|J~UBud2U!|k*LjH0NFMzCejhObddvkytY6UQBJgjipZI_fEk@kzl+!dP)vCk*i zoLj1ZvC(FLvtuSceme1JWhP_AQMnnWz=GSiBC_WRNLN*!B8daU8kuXTcp{Fy1t_d5lI ztpwuWRwvm{L9Wx-yqeB}vFlMy=8c`MQax=x_Iq_?N4J+>$l#7y_cxav+C16_cXh5N zuKc~yXE8wEtwZ#rk5k-goRokjgaqBBn6bfNtJ?*zVxqYA>KPHniNJV=V3}&slpzRC zh_Ea{;ay@MZsQ!&hn6`Adn<$8yyv0`ak37plvp6Ocv+|K7r&)t&YjVETfb*xt@yqp zv`tv?Xk3QR=pGqt*CQk0q3`;#*mTqa!FyHE_K4OK8UsRF53BSfoJ)FrSi}RxmqSmd z0W&#jUQj@-^aer;+iw~XpVJwPzDp1tJt9_xv*SkKk*XV_lXl#4N4s8fTHm|tX&;%& znZMj=B8T$ja}(hH9H8iNBPjNW-Ljg#&7Z+Vd|JJPhbNy6*hsZ(QAq#$bXo;OH*Yyo zIXm*nzgPITo+y(KwkCOl>l?B2qE=U~bKuk0Nu+h~HIcIS)c$1doNPf+A2kb=iWDef z&u`;>$=Y-@z!^G2C>FO=Pav+XgiTi@0jiL4RNK_e96j<0nodiV8>n*DVv?ebLeY{IV;eq@>Rv*<)Y9)B*%ma-yIHL{jZiVenNdPJ?1b%#PpJ zt7_l}tc4r0@jFs37Wj-jG8wn&=N@0Z|73Sh`<)cqKN;`Ye{DwmCn;9I(8<}+!07+W ziW{tA^N(%vhiJVnqdp)7rJ}iEXp;#ngy-28c)Qd4_4z6H%V}*sZXs^PUhT&$ z`A)f_VqNwkJzNqI5J7_?r|gaUJLXc6xF{{&kTrsyRwRGF0ohL6fhZ!Z3Fe@hTxTcg zpaOZdC`>9ITNrs!QG4D2%SmzSQhlV8lhIvn6v)Dhe0bFH5UKpQF7J@R_Toj*a#Qgg zQ;HLMYe8XXlM@&f**spFw>P8LNuz(=o$!5WjZIOdP*tLut3{)-2qns8T4uDWq``DB z-vK{oO_?5-4^W+k7lni@+r3~<^ustWvHq5A+EQcfyoX)KZzT7wo-YAw^+02?rYNdI zVFQK2>Dz;=9cA7e9VNb*5@jSgX1~*P+FAYd$gqBYO>~^&go$d93Y=EMB%fbzrs|kU zDiSN*WF4+~HGRKI1F8K)S78lHv|e&GK9MH8MoXrX7&pz)&wQIfa#l6UbCge8ed=^8 z&n7ryKokc3n2{~oQ)j6xNK(aMO}O(i!v>*qHLsgGVj7ZSqQEvXVIQ0mF1cE|TDml1 zI^n3~*ateIP>aA|6ZJ4;J2^yLggrfmSA4s0;YEf13UfJ6W3yh}@;fXxeM3pX{wC?1 zlKs%da=s<{v_S{baP)mtRhcHFeT{7;!6XvdtXb1dT8cFJF0=F28b$j17Q>+1rS{3Q z)}X=$yQvaR$%$zZt8?Y|>O#J#Q>_Ny0^8_Ci{Lhz>%67?ML&>h!gZThL+&~WJ&yqUh3nCHS zS_fwV$rP-PnFuvpqHyf%S=e`Q9Nf)@Mj@4}i_&c_%e`3ImNpI?o@ zMd0pBKvV4^Ojx89Hqjuk4yHfLW@w_oeC{66M`aEkeS-+_`gjm&;qR6y{GmSmO#m5z zlf3+|Wkb$gLj>rAGz=cppgW)A%>07Oe?e|xWLs3?j-vQP6O7evWB^J9xG{^I7CWt@H_7xsBy@w5xp%U;jD>2vSUxR-e-v= z83_U8I;yza-XOU$fO|Foa}{9h8V~_#pwb~Zq5OR1Jseak?iqE`FltiS^)~u^^%Yu` z^U)D|*U5DLY)CzKWc`Bm@n9fa4S87`)lCUDTPe z`5B9na^$T2EB5+Z!S~4IyBzD-?yNu0I~AbDyJ%aO&)(qn-(py&@V)!59}KJ}`2U~M z(Z$i4PDN4re++YqCT2g5PDhV_3u6CrF#cc_6Gw_9th9EqKm_Jjf&*=7XqAUVd)L8)=OUc1HaI5G_zZ zswgPzDpPqQb@SF94v3BpbRSyd%lc!D$`&~!8G5c=NC+UBq+Za)rk4@=M#-Dzf+mGy0-X2ws(+kE+@%a~}oQRGD^*m&dKVu^PS3<_IJDMD)5mL;8fXLuT{0dW<4meuFa(>3!nLJCJ9@gyQ88S1o4 z83uWPorH0f-C*l1*NObKXyh9)beP7lCPYWc!{4vexMyq36b>ZvoEtTGt2(tk7uAi= zWCj!tv!dQU)q*rWC(UC$mEcds!@-KpS=l2TEHt;5tmUnf$Z22O34H^*K29THSG+nS z$m=u>W*f5*zMlQN0{Yw@E-{>qfJEc~QAXq?>`{&piDw5$AkI#wk{me(z6+AEV_92; zkFe{T$~Cd0+LYa+hrf)#LUjLC&L1A2TG;-)Kkxrq&i^On<^Oz##6Mq>gsrLFzu%=z z{O-?~zz>jQaocvip$Vl95Jdn)>3JYp*BqI6euR%Xk~B}(-fe@&8ct(2B5NT>?6M_X`5D9jQ@)ro4RL47+)&Yco2vG#C({!CFs>timS6OW;~C2sTPw-Bhk zYf*w{YQJr9yuSXCI!rO59at_Wq1P-Igvx2D3^`s&U=@|Fgpe{Hc930L1Y-O)8#Twg zekxRp!dcbwp@yD$NV{!ClRPIfaRxkmQA+;Sn{hbL-u^K{@qYKW0dJNb^%7$xpJBzn#i znfRToh5(Oe?gf?yaj^U|c%f9nH%=d$f~3FgJ;xna*i5_Uf%~B4?UZ-mOzv5&)Y>gw zAtEyTgM4D+cF+c|mqN&&9XvsYbX-DfMu{jHVB7?OrS|pFkgj7F7|U)Jp`aT%VTpsrv`Iluea|7TszS;bGh@M`Q7t#e@K{ffTCIIi7z#VcOS-txcdjDi| z*ISr5OFt(DY4F1<3W47A6AF>+CH>^h5I3s)q zJUDPdIYk^=Q863=yreoHFe`xx5P`(JtSeb3P-3>p&*p-S4O9z}_l6c;{%TFU`Up+) z&Y^<2w_nw_WIdnWAIq_R{<*QNzPHwbuBkGEqeo1;T>pSEcuu`$y1D*Vx9ar*>jQn2 z{In+2`@;fGk-2O4q5|ZoUb+I%P`nlTS5dU(>1*~10&dA)Y6AGiUb3RtOuXer{+fL7 zkHDE|$2+Ku#2SC7k7zOa5+0T^`jQ@^G5S*cZ29%oiE!KRQC!+9^C#d#EmY&r#gm#N z(4UJnY1@s3#74Fk=2!G5!ap8$bcS4`!>8U$!=t*x1-SiFi1_JSB^>J?gjWgww@^~O zCV-^xxe)XHV{VRSug*UWul2zH*Q(q%?CZH^>W|&=3=kAp7+4qt9Z(u&_CNrj6quW0 z&jJN+)B;7X4+0>z@&%E%>R?jvnCc}jf`Pl>pz1va>h`3m<`xlsc+I< z`d4W-(oZ<4IY7C8uJB(4HooIU*&P|A)J5B#WG_E};VwEj6?|oTNs8D#fI#UTgrf9~ zHB;6`s`*5~lfNfpIGhFi3J_EIKq)2W4`@;y*lN}+3bv83(di5#X?DpcdaK(pJ`Yz{ zT638awr&iHpl}$l&)k5ho-Z>hQpBzp$GKQgDo5B1Zz}I79|i#%Y4lYL#2tnmBhQ)R3G;7WA<=KRI(vk zDI)tLzGcoBDwerWW5EJ~Lqr)N+A6G*oi?v%0MoKNmB94&9b?j26^8UF&_CZ|NW@W) zCz2_$eoMdAMsrqMmHmuwX0myouvdAF6x~2#m=3YHO=+-`GLEJ<7lVli+r$xbZSG2( z;3}TYipWMIL{uDK_$0~%#W)Ro3O%AUfiSYuk!Bp{25DKW~+TTu*cwq~Efvf`@H z$uQ^=tidqoI+d0_SFL^6!lq_%3+>kG3c9JTb3It-VNi`WFG&uS4pGR&!>rG~{pLT+ zPicA}Am}qMDZ%Bjj95}5aQx0?qsD~j%89y~5W-|!q6p1V+|F9)#4~GmC$YJ`y{&>( zLv>^^)I@F5H&2)ja^~NwOTYd zRgxo(8BXqI<7#4O&|jOK3eR~k(#*^S;WIY(MnXOFw@HJGGRDq?9~;OkTHy_Y1$2R- zrcXH$2e)%7J1BSvdx4m`KtB|r-Wjr+NML}5qrf^_Qe9x(c2&j|qV~ZJynRm}j4dA* zN!uNVp)#>YlH6o>Q?seT`{FaihSZ=3-O0LS3TOJQj!&!j$fz~j5z0iTMQHuNJKYG5 zgo1`Hsl#=s1+saNnrz>oXS?nkQ$v%~q-BvOqsSaX#DESbxF#~Llqn15_*Y^wiM~Nr zSM}e8^k^b_nlwTpIVtI6{LJvAO06f)oOJY-*agM*bjk@ojsEaK{!$W~Q6f>sN;Mvu z>!!hTaqi4g?C6QC1eUf(88_#U`GEjZlVC9dip+g8N<9zeV@x3rUbj&kFXGPRl;rAg0`B;!Q?G1~%Dc4c}~WF^1^N_q=D**(x`A8t$^T!BSZrh{_-T zQaT}poQ!Fmm>c2|ukolM=(t9oQ5_3nes0NV9Un={dtOe9Frr1F{`hMRPSmAr<>A>@ zT7;FH$?9l|M`EZ8mCY4ak$w=>KCCZ++Py17==TTyai*SkOhdL5L~qjT^ee;j1rJQj zieBHzTgYnN8}`uOGqP|f1;MIdI2ZC_QwrMs{&A00cG44^q-W3yz*ghB7Pg~FeWk#p z{t-6$W;bXmLA3fVHu}GSH|Aq|+ZbEv{W^zhy5FRhGkI@>mY(hAo9vo1f3ik1nB;wG z^=0&T*aJ?vYbo8c%Z5m=__0zN=)5-~7!S6uY>b67*Q`o(q5iNwPSgjtmU~gy9A|B3 zHREt02#0mkKEvw6@lLKM-^suer$Zx9rpn^u2c*9n=0f07SIjuw@+7QbDYh> zgDOo+y%Ec5_Oa$;we%Babh$d-8)Rr3OffY1o-wfkHqYUy$32rUbWAUkUHKn_mAL({ zz6pR^qq=D0#QVwR;1T3`?unA z7w})J9-@>9~ivq7ou50(3LL{z_IY7KO=bT^-R7%qg(x*z!*`2CZABnlQe6aN%@ z(f@TZ+JDPG{x|%V(og#FKb^vC<=204QcA$IQjS66g(w2nQUp1W;o~Zkg!0HI4d#ce zH|wcaS~OaSU(_Iou~`|uOb_r(yc?4W{qyfr?M!#N{`UOsPVd_F>-qjQ7Yj$*<+|S; zgaTnl+?8BMDUe)8YM?U^5+nn0E1AC+?(YhK!+2$$ydR{+U+QlL*kO_s1|{Ji#R`B6 zpu;$^mrT*p3{Cq2{4yyYQ3@#v4}T}vR~Mj`rb-_p0U{txktWg`;PC|EUZW2X2#Ff} zi0FwDG+&4x005$OW>EI%p6c4fLld{882;0F@uXy!(EsbshR(^edZSvv#cdknX_txK zaqGZ6%ay&H=wKV?_o?%x1wH7t_FWp(6;mM9cDLK6Ah@F|Z7Rv3W^BG84%`%lx_JWN zW5*Zw|8Vw>;hAmSwrC}(*sR#LZB=ZuV%x6hjcwa@DzIU@Tz zdY&#P{ZqN4#+)T;KOM+|cVRa|SRt!qR!f2N7NgHAuDSC-X~~+u&(l zjxGRjltdcA?4Kr+#6>S3pK|v18ilQju6-EH=_tHTPU-i`4sFspDXYo*=j#V!GD_vW z?Hf^%Qjhanz><&*9||f`>T6N6Mx63$`8*#pA7sEy#?Y@Z-#n(HoRtzC!=?@R9e1 zZW4S2{yAUmM}Hsu|D9ynU%|hio`ade|4O<12Ue_5gZ5NXP5I0+G`<+$1J=Wj_x;xE z0pT_UUJpmHjxd9i{#^>#3<|I@wnnT7_;Z}W#a}8p->89iua1{pU%z6kT@t7v6tAIC zW>(R1+EP||dQsZC+ER8=)~dO>!um1!hsmw0PxrCtYV2^HK~K5p$3Z7m;uf4D$$-$G1?~)e%P$tBdm@_nE_p+m{hv#_q9-Z%_@t z61#O0h55I#2o@5>Rt*VVN+S^B*Q>rs{H}V zk{XRz7FUU12E-{6qKu7L;zqG00mmAMOtIr6NGhzFKaQ)*#a1q&?v`ctvd`6G^7m6q z95eU>XO8O}QVg|;5A&DJ@}~Cv*dUE39(0RXLk+MPW`xnc-tW zi!!4=eO$pKh`E+ZW3CnQprNF`fy0{X{r(_31-<%2F$i$tU`?sLX$TK@Zhz(-WEWag zTbYofeXMQeI8wvqVUv5C=95L1(7$)Ql6us?Na;Si!bZ&A>kInK!*q2#w4(pk-p{?P zAY5zeX;K=Z{}a{4*~w8OVa(Ld%;frNylUDY} zU~&3!jauo(Mpy`8X9}nBHCIis}yyr z9koiPKHeXyS0+S0uFL#FlyUY=a^*2k^hXPb)Dxf1+^E5;>Z6qEZWhv4mq#!C} z>j=r~C^lx+r{T;^O_!EYB1?hN&NE2O#%W&cagF2o3E_7P)-jeRXo3+|Mobp#LjtqX zFv8_T{%zQxuF`<9h`tJ`POj|e5I`dvn>Dgpb$gw|5A8{~6^spn(^P9(D)<|lraIce zUy_3pD`k}{PhXmDZegyJ1`Ydg4;nH>%V~u~ET5fwlNYAeo3m@YZdoI6qa21Dh>G1N z`O9{eKX3eToF~N9YDvEvJ2e~c@RxBU^Euj)?Xs@hiO!E~mV3Hr?q&`oy6!HxGQplt zXvkO@@PXh@%~~B2`bVxyatQ@8tph>MsIw(77*Pn3i+lU zxF1yEm`Y~yqVUc!D8cwh<@P&H)wVp%fr1mA!GW7_cSIKST(MNR=c+CDHv&C4c!iV# zzbs6$%!2*1Q*!STDV$^Roa^x;*^F~y9$oju7NgnyftrGEenO+xjsLI`>ozJI4aseT zAW(~8VclG{VK!*bd*W)JKPUC0#vpHURs2Mb04C%xPZWcC18SU9ReJKQcw$lW?{KTc zA_h=RZt;Zel5jJmI^x}_DcsRvMx{2+MLVX`#u+u;ksVaOy?RC~V?J5RL%*)A6-ci0 z=Y04t~t=s+fqw0qPHR=eNwb4R&6tDw#x-+OE-xn0lB@WYpS7fr_*+1I=@# zMTud{cc-X+@4^U#E(`5c7`rl~N|xiwD1YqL@u5k@5QVPXM~ok)g)0uEDvcQPg^`p4 z9znSTITn03v^>mCA^q*NGO}lxMngZZB*zH#2(A5%o%)CG5!SmUJyXB1QL>AJpe02k zk39K2Q;xQQ&4SZd09T0n8|x&oC(y#=R!98aJ|@|;kn>qMu2y&xwIo2wS>U0Ewsc5m zjxt9a&7akjqf$8W>=&m93}kIN4%=!%EF{(F!JbunRkDR_e6>dZd2iyZp@id%cB`B( zZ{%2p^N`eGd4`w0F-JQt0EZRlV994m{0|!K{%RiDP1eLCAs%l2=Ds<{&knrpD&DXS zrgVrm7Bd8reEFxR`joJwYc(BDif4N=x%LlgFd5k)@c0<%HID*(&7CXq2w)4r?Rz3q zyzcoy2C{l`K0ZJfxiwP7>Cc#x$f)eRRu<+@Y+qg!?yv*-Go0=R#QN~;)&uc!Ucf;r zS#^sQ%KJwgc^T|DX1C_TVkDs*%ycT^8Ac%LZALG^TK61c!xLP6G04lr4*#GELxk~+ zk0%^GrM0ywy(|5TGG(mjsbh9FAqizVzL)-?iQ@2JiX+n&q#ZgT_KJ0JdR#s^XGH$& z(U9)ZP$<(SBE3kcNPgnSt$aAciOUx9mnMNci^K=CCz)giHi>TJ z-t9T)uqx5BId*T=+>;+fNsaLSk(VbMNLmd7tXjB5@w(WA3a@=y^9sOXI-D)8ahFpo z3T-VIM=Ztxg@-!_)g>3!MURZvPx~$}sK{wcz;PxCmpkyCy8&8O@z%}p7ICHb=b^Xz zpCtHkFTw!ans2Yi((rh{*>-G>#kocXkEI~P3}L-IVPP>B%+=nZ%q4XCJsBo;s6ky8 z{VpfJ9iqfj=7fXYD!>>hJ)lN`+n^D$QutYx57T zUu#;7hmD9#Pa+u@G=-AFw`3!8xX;S6r3~I46d1Ta;_eL~7>zU|i4aPItN3^jhd2wN z*oP9No4^>L+47L!N~8NZo6j23>_`CUD@_dfKj)2-y7?kG&d6Y?n3ZZY6FXr(MEGaPrJ)JMxlCXN>D+N=0oeDC&B`VU*ng5i@Wh1Au!R5(_TS&ME#%6NGIm#ZF zge+O=GyisBxN7R|I!_+2RgZksC*kcPYz^DL7f75AvIXG{Z>o#G==;eK-l`l9^Q7Bv z$&!o3q=%}*7OG%T$OGOGb1ZM`c`XBdtpIAeH zaPuN!Mm(0WP2PStOj!H1ajp2ZFxauhgalu%3*!cdmJ*Aee0logEbE&WFIBLSiw^Ma zR8XmHWoh1}IDGKGcFCEv}~!0;*kuiL4ro5~{8_wiqPkuG!$Cx2wV zzQP#shHl#Nu=KyIJM-xh{*0!0MU-Ju*Byu&e#bE38RJ%vHefABS zA9m^s6}b_J=2m4!dzdoepN-Bi_iyo5xT5tI=w&Uhgp+ow>klZqS@ zXHnZX)ssxuq2csRs&d|Ds^0R${cCFYow>$aZHJSQOaYeu5VQRmOxh;F%}L0L25(0d z{5*}emij->hN@Ow3uL_AzsM%G=&iStch1NMHJ3>)hpRSa|Fj0P;~l;LIgbiqw<}e~ z1WNZ!3xlEsOJE~I+u`x4!Uy-WlYB-}lwOG-${#<$9<*0>C|Tk?OtWJ(DN)fIE?$i) zL1nRukWSLjQ5M%02&+UOe+Rj`X_649&m&Q6Xr}ewv{>wyh)Rc|X!#mITgjxCNc8UJ zEyPhTl-TKEN&u_3yRT8yT9}GbI`?^X`3q1%Afl~5z9hcjwKhI%`oP*~pbjG08jiflM=hX!s=ETN_w-NY+Y$U|ao((P3wZ}M%> z$R8Zueb)w&S+;NSyTF5!>^eK-_HXICMvrqkmfd+g+OWAOC!@J022p#M9#e@l70$H1hP_0Tq0G1_lrt$7h1&8^PE5B~YRt&V z0`1_aKOC;{6=0{whzi!4cM-620j(*7YBdlJgF;H?BqZ!IGf5j0RXm!0v9nXH!Uz%O z8_NFJrNLCsDF>`+;3jiwc{alaVzqUQ^uxk#rnJ-hEGFCW^4r6{Pq=Xf(MFeBslYO8(XDxF4V zb%cYC7Nf7(2R8deLq-LuRxKUniA}qr5?LJllg>UWY%>$@#={0aiPrJ5i|Iq8B!8UA zPS-i5P(}!liZ#{~gYG z7?P7Sju{1tnRkjU5K%V`cABzLg=Rdf$M!dk#>?{(@O#k6&*rfttL6KvlDo|AN7C6L zI{xSpcdat9Nro@)WN(<`7uhk>N2eNH+DX_ui;(Y;_DsM}pvJ0lKWbj}ah%8uuO)SI zSo6E4AzVEr)#B8;BD*V*8o}R59LEfbh+eV(ctFxXrfv#tTHU?xA^G)PBE=)M1d6yo zZi9O6_=?<-09q<@H-)NT+j}*|v9It?wEbe$dP)OM&UN@-fq6TEwdFUB)=Fm3ri*n+ z@E#{>>Pj~?dx~wIVKbR_vUBlm5-TN^xv0+?;O$z3KeriLXYApvAwm&fPA#A4J z=!3|c@DpS&yHSJX^Othyh&g{j*%H0WJG?So2#&9tSjBf9nSs8HJK=qrQcu*ZhhJLx zG~_hD!m3v>VU%VXgVnBI{?Po`?oM;X`s^`p^Y`J*8>Gk>U6M!!1nim)LY@Wr>LrWe z2SKI_XYw+UZ(++QUQf)F9b&jwaEC#=CU218kyJ(PPAb{jDC%|k-|oFa-h9x!rETbZ z3Z1!JGvDe*R`hbO{{ErHrepZH1$^2oX$d338kv*=P+c}_8<^Na@_M zf-!RbGA~DPX~9!9XhpWi!<2|x@pfqRC_msSR{7Rvdg+a}Wz^9LSBV^{<3#|^C0gZe zSl~jlZ-T11t|NsDa&q>ld-wBS${aL68yOE@*-5N_Y&QL;hL-bhyAJb<2hRB=)!pp(6P3Gc z3l!9b(p9pX0+es`YlNefaU+g_Y_~rA(Z~~jR|o@d_(^SmjFC6NPISP8kvHi&Fr3cF zlVrC%+<~PT%7t+aOPJ;b{ej`kq?s}sc#vibiMTo%e#^kkvz4)~>Zp+sDF2Gz<57`7x zv4)5Wzf0ds>_5Ckk8R}2-*4cm(C<*K%pFC6N>_U$DOSb~sohTnQ^nXeaK+iX>MGaI zl`MbF0)x8QrEpCHSCTwf9(t+%0uo6tRW`I^hsxpXjytIQ)(3}%PRpMp*Y3UUgoL?h z)4|Z@qqt{G!?=KY%ymSts%GNQ6wtC@JZQdm6eSMJ92QQTd?**H75jEl=eX9S??l=0*R3C|o`V#QPw zw6W)fii>{4>AQ%sDO~t|W?w?u$~lnJ-OhXqdx^h@gnApv9KQRs zV{d}1`rL+G3aKBpa*!szKpe2+=Pr6M5?a4!#!Vbshx$TyOKUNy5$sIF(* zm}Ob=*!;D4WqUbg4T*$PZ^_Tre=)XKTph$g015j!1=ro2P!pFcYtp~coJRsbSnt?f zZO*qoQwoAbAxD#eW*j;rrV(eRsxAZh*f>SvNCMP?o60~Ufb*rXF_2Pixt@|x9oxty zG9w|s&W$4kC&uq9C8pLBZ^fZ9!&uB)-%3SfSqqE6K|FAD()xY9lY)$Nh$Z6?tB6W+ zG+=jX=P(d1$*B%O88)f$=cp9ox|-$k#n@7EwMZ#-G?fHwdyxw%#Z07iicY0!)5XlH z_P~e>c>BcY+G6hFO=6xg<-Lp)(*U)HLVhtKcX#o|r4B<@4=b+)=gOE-Ja}j~^@oOX zG|G#hpyU@fY|(+K7fRxRYorkXA73-OBjH|gsb0xChlUIbm~oSA zcLqw8FGxI=sFEFXy$-Y1O=s7|i3>yArLvO;lcP(bj@Qb0R6ZO=Rk2Zmc>~ZZgjS~F z(?)W23oHBD$4&k5*@bct>jA}lg=qKI6$VcI9xtzw-CQb{FseFC&0~fa@kr2P!p*Z@ zGrL#0 z(6*auxKXI5q2$@d>3)g$soz-^9=f|*=bK2vEgB<^>noBYluqQ*IHQf@s5=7ksjV~d z)Vgl^fCWRM`GTBhHdFftqNDJ`BC!cW&=Ij7oZcjAnDrp+%JV(hXPiS3o3ljeB8Y)C z?I5`5LwMEl69(ubySh;#5qZxS8cHdM;{JqQ2B*kc!IKO?+Fa$UT#Aox%D7cX)MpJ& zU{|J*jlXS6uKSJ6Y!4oR;<~`&%a#p4j}Gl+NDh{yLO~t~Y7yKN0ut%%phnTAl9!Tu zAC@rEA%@)!?tslx{;<}x(kAq?IF&$;uBz*-GkbW_PQ$_hgBv z3T1b^L_tfSHJxknD-y;Exs($`_g9!qB_38s&;{Xe+@X+s5i8QpOxdjrB5Z!P|#bZ25?Yu_8x03URVc+72OK$6U)7cKrK79L3*E%o>|nIvUy2$=G};$$fqJk0RV(Dt*B6C_J)* zDTk`5X5KV{Yo=ki4a$Dee*A@jNOKn)?Ush=F?wHuEi|!cf&zTmc&O|0b++I+{Wch-%hk)MMt1C#x=n<8nIU!{1w64+rcyjTNUS8m_6Q^>KrDbk5?)gi*|i) zUhTK!>Nf7*a-xyVc*yl8ar>F8aqMikd~f>u8K~W$!{hjN6 zU;8b2T4eM45VVDSDQ$nDd+Xo$jj~_8lGOj$UHf|%zMiZd z?sHLQznyV6*{rX5mwAVd_oqA1E+p#_wdfjhp*TB{f!J^h#!9Ma`bz!*H56b`0|-4v zurDYt^}OQaAF5b0`y~^{-Tdm~my7@XDNJQ47gc z(+k^KDn==s9-PVAhR{LnUI#74fZ9KUzMehwDLfMQ*M<*l*26VcjA}AvM@)Dh{VGmt zG~=dN2dsVMvnmz7a7z244==@&JKpw#-W9(uf-(fa&^iGbtI?^v{z_y^dmx zb3OK9dg+Y^F^qs;(M=IN8J)!B`mlo|^e>0l7^L1Ttvf9P-t#L&%yw%K=mSw7RG0!( zVsX4R1c0#+UVq3L&yVdAuApn;q)Se184pt5Y2I0xCl9gIZ=i1JWW>_CHm1J4cN-L* zBJ4g_7(K=xM7e1VxcV?Jg7B2RRQX~Udd)OwvHI|KKvg*ij-lIDpRaEM2oFfZ98hrO zGZ^s{*F1eSktmcyTf7-_AZvoKB1c29s+hTRWbiSS6x2e|;zBL5F@pGF_(>2kML`LL ze!N3BxFg`g8=%t99N@4M(PQ78wB8{9vcXDz=}?L<`|JJ3eqFME_7wkLKf!fxv&ahu z21W!X;|%8P3?K6HQD6qH61H zCT~wEN1YJkOT)my(U2VwBk)a|jL2W#TfW6xUqIhpwA9;Jy};W{+&I!3bBWw5IK(m> zMhYez2ES_vm^s`Rqfh@AXsi?r^_R;7he+ZqN(`M~=bgvMdgs|`l8OAo1jS@=d4Fzm z-muW*GVyVHsp}15i{n9=S-K=wQ?kQ^I;rGYxdV-=TRNpoJlPec$8Z^f@xwuRjD>;i zO%CCv*S|VB8Ba&+v6n0v4;iR_D>T{kTSYVZL2R--g8@)+Gqo}CZ&qREF$0C(LAALn zgeI0gqsDM9Ox}KJ*rgG*zP^mfQNo{vU*Lb+v^@tm*&)EZ5!` zmO*REtH2~eNvH|?;*o^vTVqzC6S3wRzd{jdR)UYosZ?z1gTj6-GeJwFkqyCZP6Eup zW9w{s>tV`-1XneoFJfZs%O3X4jphd9xvnydz#Le^N;5b7<3!F2roLqJ7Q zrbBlDJkRjO{>(um#YK;=mEkPoZuf=skSNTe)k7lnil~4-j5VtrfBivaVuWG~5 zI7H=iqC9E2vpCd@ZgEIHHY|Eb#dkc+ASf_)H>EimG_!mxQ!6d)*$ToYd6&B$sIr~0 zvBC)dc`Mqq3smJPWuG?|x#Mqc7*sdohty%rOi2kXR8Ju7)k2`^F1vKTu!~1k*+m1L z_4vRG)z~av>P1)ATD-`!kN0zth)lZJiC@_QHT?#%{9h-0Peoa@Q5Ky;;T81`i3Qo0 zWr{3tXqc1bN$8hIY-2@bTTFrawObO)y5%D}%QoZ89S8kX3yCTjHGN0r#_S4!vY6S* zfbRzAH{C`YZ{E(MMX|b9*3T0h25UGj>(jPBM=@5>*`nah_<-YSy-PHMy?=Q5|GHCs zV%^v}v-qAnorUm((OxwzFTf(e0)AeeeeT!DWx9Bz*%FS;Gti0~-rj$<#4tg{J`nAf zaBa|*x8)(seyn)KHD{)K*LI2SzvF7?+?|56y*3)x>20WuOFcD_8|R!3Kl07Q|7Z|_ zRxz*)!T?PEfkgmS-xI5HyQIyi*%xH3kF7b-#tsV}od@_55>h8&rDP74Y;A-LcOA`+ z4BtnfoIWcL&Vc(3oQ3>;?lR^?2T?w~MS}x)HvBmsyKWeQZZIrYg2UM08U94_eq`uo zsm$JI{Y<1xYXC3ir`&zVjh8;z%PV!)^T}TyxIf_M(6>`Qnf4;{m>)o6wTK-qYMgw$Pbn0t4_`d?BzxU&u|MPmp45@#i`4*j5(^#lJ)fZ9{DUx>OHI*QH4 zxXen&vw=i#($;X$**_Y24k1OylME6~3{V z6D6GzyDDIuBDegA#zEkSS#DC_c_z#f#)d=LM5*%Jcv>2xR~hoD6APh5BQ$xt-OTTA z0y=0yEmLsVdm@DMYOt5$C&RaogfA?yOckJTpE2vH)KT|hTypb(sJ%BRC;jJ5c{4~W zh_B`WOqX;l)hu~%r;guEb*+z~FVIcEK&n0xx z$He$jv3J&!bIj8)ktKXZ3B-k2amh)Qms#-%saicl*^$PQ0y1Xq#<-!+zjo0vnth#n z1D4P+lF`vI_$L6(lU22v$3XA`Hy!6 zJ!=yqX+6iU%G-aUrv}wk2NY$@PnKhG7gA~bI!JoR=!JeQQb?lWYT{rl!KrEDzJM@s z(&~&9W7Fhg+!haDb#0f$``X-#6L;A1*0RJ}Bl*hO*z97c@cly4O_vFmj?ri9qRHp0SGG;CYTVEG8X*8tZ$eBQ1LJma95?Erczi%c!<#Ihz8b))B?*_iNFD;lgbS_k<@zw%<>GUwa3&LnMOYpvw zC1@iwL)_XV+mEJ)HL?&)zaUk1BDmJjL9152*Vddu!})7nYw>86&Jo?UpzuMM}$b;nvG^f)u8Cy`j^2f=s9G7)iN z;s&$Ua6#Xd*ao03zA%9L+yqD}Pd47fv9X}d)b0D9N9A&H6diW@ipm-~n&2x_)zX{SVSmwm0Nl&JUj^#;15*wL(*jd{q2=eta_z}*Q*2jC7yNxvx z{lK8De~(ZB@u<JK--`% z7FIRwDA?8Z&VrlP)n3%NwhetbxHPAiW#+27xq?+d^*S>iO-ka>ZtS zN)pA6)RSOq)z_sIIFXqW2>EYFTljV;5@TPyX_81WQog7206h5ljU-&?Dqw*2g-2Zy z*hYO|LBA_BCX7NYSsKUCq9%%}Y%zGdH(in`0CeZ1763 zx-+6>O1HvIc`#yMUqD0#5uK`Vk?~Ave1Zdf*cdUH&vqo=wO@mY*XD*{%T~A&y(ziz4sXFZ3oh=ByO` z0R+^PoG4Kt<$@h0i1~59YL)2d^|uGy*j$e&?)2uZS`(Q z6+A`qvy6~0A~NHq5J=!hxVYICt|S9FZn1(S$ML57-{a1BB34vlu`Q9szmCElLfF(5 zU_FK|TeEx)Y*RB>n$*5j3N1EYBVlq9Kjsi!8NK)Kz&jakZ zHP51Acv1Kc`q1s6zl(-LAgKrJ+z->cDBY#C{7vkzK15=?;CfwgA=|!T(ar4clRzzq zWA}E7?-&`1YXm;w=+EwTkn05on15(O&B^BBZZ#g^?1DSf1vbQAr5+^KsY!Zx;FR_H zF0k1OL6-JIijj~J(7JcudKhP+a$|hvbahBv)-5)#Q^rdfkcPL$zq^usxjC z7jCaaAlqU|&hp#dc2QO!s)ixA?|SjKD*OR3Bdz z&k$PAz>KHV&<`y41fS7fM1Jx26Y0HQ_6PaLJG4Nmff5tB&z;4v3HEJ_C|j<|VtdWT z7a>f-<~u00?T$Ouj15nbXL$cY?2`imY4~46Fj$EHbP9|AU!B6l(hB0j0``t(#$Q}9 z|7!|8K|xv)gaN_Jtl_kBUZr9am)q4;)l@hNRe(~kK)HB_XMMbK+PNv;tQ(Jn{0Rv6 z4d{d1uF;#&Jvw@LY&0zigLINEO72pqEd7(rS; za3RJ_{|t~&j#_C}nD3SqV&L17DQaNC_C7_gN)7I5bXeup1hJ~WsBz{n$n_qVHIERwnCh9IO>Bn{|-U z#OaBL?qI{<4uARr&PB=P$`I8A^4xSdt~W-&yrrkqU?Oc6{aMlMDvMj;j@)Ey25 znB8EkAoQ!F9H3|MrJoS432@k8#OsHe_-O|lCa*PUiNZ5{IUVcXO=fhAP~lVyBS6#GPhW=m;F=bfs65L?<!A=>p+*Ez41+m9|Ka;+MrR!3CpGB;O0v%Lpb(IShAZ0=1%)ite0|&B8aam^J`J0r>WUyrR;GVqjHK} z;}j=^F<*AZ5#na%!HP2)j(8`ud9a#*?apr(Mn~zjX8t22fq1>Pe~*^3!cbve)#>P9 zE(rIKs&`_#i*EdpNOFj^H{*;xlh+VS@bNisC>Ciig0UbwCjr_dEb9G1`b;mj?Wp>T=lS5SV{F%k(_&a~&GqKioiV0h19#3f@8bZ<{vm zv6xUyA~$}?lny7`a-^HZ(d*b=6Q`77k=Dmh&)OxlIE)?ew!}41CQKAvyWa7;ez4pt zdQ(g4Dd{yV+r~vfUy^>zowsJD`naf1cGglFsd7>^Z+G-k5NI5YK)6*Xh_kmR6_OmR zwIq$ZNg@K%22fKIpkz9Q=n(CzlBB?994ZKJ`YFl2TG}aA zCcIBlw)k;ofdiBSBG~FjyN#gTWfstNdM!$H=Dz;(=>8j5B>vf-cK;2ozuZHbQu#L8 zmwQP0NB6+`KOYH-PWu0e&Hnq!D~(#uev$ahvOAqLN9Dt3=Ws*S%f!vm6zIzb1cXKt zl86u%i&;+fVH7ALan%mSyimLev03{4>IT1(@4_JynGzNh>8Y(eEWcpp{$ z249oaodNS86)&wM)lBLvb*3RkP&A&)D!D?fDMnoSk6ez(Z51*>Cn{s-nc54bGHgEev_=%U!p=*$d<90OP5yEqX@o> zINo^{zRPmo_oNBnDMAadN_uQ|A=Fytb7;p$v1T*v$GOq8=234)^1>MIs%k`vcQKml zEKYxSN!XUsC*iu#n>xRaF2k2P7?OaQmCdJ{R|MOoH-!W|r{49;uUUm&vDi41>$CW= z-}OP4WGn-AHeNX|BVwr{n%$@cX_OB`btu*r?E6M}WbaV?k4bWs(h$9=+==EPg&Jw* z`l%SlhK`<7CR=9=)SBNwk6lvdzEL;^Y%UnCs$xO(evt52AvYD^{dw0Tx~MbG7rZFp z!!lTUhPJjuV{Q|>meY2`=^q~{PHrKklhEj+m0B@*VeB%^(k5$_+2E0yhN5q}QOu%$ zjY$mm`z-?bD}f($Pp)SLqFTl-qecQ`$&Ho&;O&PoXHJXAeVSp=eU$iAwu!)EQ9Z`5 z0aMs$9?CdHj4sYj;+9BmHx5n+>nO2}X@MMZR%XNSU~*o3t8`U~{mEoWfm>-3PY1`5 z->y)O@#Q(;;CnQF@A!k+zWH&hVtbcl*%4WPnW@q-f}GHoi4Oduci{M+%~VRy(a6E^ z-&(4&rpu}@!pDMhxthw#9CJL1DM35O4^86sZ{pUKKlW&BXztzR1!_wjbLihAsT(9GvOs#cgo1dOfRKGDinS#0e)mWz( zZAZJTK(a8O#=1&$crMnE8`oAEadaVDPg~`GE(r|vl4qm4o7zV;1*S^6s$htgO3EUwuQbzP=DQpw>X=yuS92>imb!ts62@VO&!$YQT$wsc4rj!IgHA&8B#+vGw3d6dn?k5XFylJ9N zxFg9t=(q%<+S-GwDkn_ud&Qvb&Tq8BwAM{p2JGj<+@(za!1l8YErj|MZoQvA5q zadIHc6QAKR=wu5E8m+Dgl#VWTj6s`nsWfkXJsKpB-+J=`(FYB%!{n#c`_Ny2Kms$` zjE6{IP+tatknc8A^I;0*e!?yeF@Adhmp}QwIUa0-R0EbZp96?M|EU=-NHZ|XEOox~ zMJnQRMkLl`k~)ww=B{*DXsoYAujaZEZ!wn0+eS-Y$Egzu~M zj`i1rt#|llY5!Fjz4(G9e}C-%A0!4vT)%L~zk9AT6vV#}2)dV@qv)XgX@|{Gjxs~B ztHO6Xpd89#*Q>-rJ*kw5IrY#FGCCa;?kA8p`JJQ|d}RdKJd+MD zaL!~~`r}_C-SuH;&9u~xEv6ztLA-aa=mJea46ZOB&w@3CCw}0Bch6>+r&F81s&4`v z0Nrm%t-A^$!;X2j(~ch#3{MT74541M=7Ktum8Wc4qBT47#p$4PNzZzDobpZ?N95e( zY;${A>Yr}?8*@1_P3RgfxwZP}%dKdPJgPO_*rD?~xLv{`d_{4r==k!bAW)V$U*y4&1gNL}d6aqY_3O zBQu6NMoV}YW1-QW5sG0lBQ=HyM$*Z2J9hmTDqnb`@Lx(YaD*s+&{OsD~qF) zTT)Egv8FuKE53wpqbH_}z(E4fKAzp%JgBcvTjmYbzj)`3BI_`pcZh06&7OfoDaijM zQpqV!q$;7?&v?~Nie+!`WqIiLq%cXAu@`L;sozVvVXJ7VujVOg5dxSs|0K4=PEmk$ zDCnp4l@_$^8#zHr9fVPwjE9PA@zTf`b0{nTeoNjC20%t>l4#CGVd=NqttmGg*K6FJ zpDIbuhS5^#j2rh?tIbJM-j^~}n9Mc`w5uSq6O(_>mNubgQye)Y8A?sUwkFiAmM~`J zk!Y$t_`|a2=t6;2pQ4Zv?wt|?2p62T$M(O@t3$Vo#;V zDG+44i{{ari)PUPRX9NR9?EDFr$x_o#?DIFL3M%q^$5;e88dL)UAAJ--HGzFq2Eq< zaf-5xU{7Pewi{O`-l{E&WG?tMOe2`nMqs4g#Rj|>C`K*c7*10kT8{MKYKraXZRB=D zj&&MrDT1?aY6M5q%^>sYebS)=RaRK(;g3#InLgP053*?3R#Dd^Un7@kM^viVR49(D`ubL;ErbxBh z*_Og5_mb^mb;gJ@WYZKw%=Hc{DLUH)XnV)g>v^*#fnp*0?sry3oON^|JfSnA(1%?N zI&UuEFjG=Kj0#3wjHPR`cFlhOt{{g%gP2rbSK*uCs=hiij4y`&1=~Va*WH&LJYTG` z=yU_Hi9Be^7%4(HSjZ!(=fG7l4Q^r@+}Lp=V$YH%F|?ulNZpF?d_JUnDd9Z{CI9Zq z?5MJzrrx<=7D?4CPV)n=$hSw3e)v9`{HFRq_sB6T9G2mm!i&HLQlZ6us5NkJkqfQ;V23t zWEMYTO@I%5GxOpcs+RtYSVGAr27<76#gH@GC|)wj-Xg@a)50n$+C3J#9~@B!3D@PkjshE1un^<}X`YnRFNIS8!-c+&5aw zJlysnS0+Ec0|+u~2+Nn6PB!M<59|}3TCdXo9GBUhJ1XBDlqc_IDZ#)aJHUVU#|7T z+b>`j<~j1@H9XvKcR2=?f!DLNe|{$jve~Ir157!y^Bvtp2pm_Q8;ju^cNkyuag1~1 zV*s*?aygvdd6XUnr*biDS@lr#`XwpKukthOFX^W_G3Vj^oxwsBl}?L}qQw?k2+<^i zdI>^s1K$zE0-9U3 z#kxX^@FDE==wO23yZbcvxRkZCVXTAy`W}hG z2FJh63-cep_K1?gyV}ohdGUGu&+R$O|9l^u&0HL8-9K-{=QNMck#L+Z87E)q5S+uS~WtNt=RYRhKQ8|MC}omi8p^_&x^-((+3Hg6Q=xH16~sUQ<%qw-!E7{d+E2& z>wkVA|7O4Le}5qV^)&v=N%F6!lBOc(fc|-2!&n%^_5csZK#WF}Dyg=qzA*qc2lrDM zydueY=g6LNIISt()}iE$9qBFbgL!L;j@+ntJz_FD17++}=JSC4HFYRUicpBw4>S`}BM?)BgSE9NYoRT~G zL$Spo0BKE!Ai0VK(mmzPy?rk*1O%pX*ALW1`Y=%tGf#E%vviwTQguRYPxl3mxt05E zQ{0p$zx1UG2$D;=rSRTkh_R^?aofdd z&QpV%sx=FY5Ay0YoFVc2G+ttR@ML7ibp=>EZd~0C!-K!OnA(yD6uAg!8S1F;l_k;I zb}@way`I;c{X|_g9N(;`e64*z(KK_>XW|@*mveuxAen!GvI)zBIE>?=vte4;BKjKi zXv5!Akk?cO-U)wYR^XXRl^!S z1z-%>-R1H-jsZQpT8zwu;$S)3zTlPFg>b(5};>QUjq=b>f5KcUX`zS zZ-myr2<@k8$^0$tQsse?RYR}=%}a|g2ri9UwNf!lI9j+;7%40lt{r0@qf*f_S@;va zTr{g1Rz}07N75#o2B${DCQ_IMM_4>dA6AK(T{BA%c0|jjP-sF}F(MCE;A{+s2JQ|E z6z-$?>Z{yGC@&jAvm;McMs^X3j}7-y5tzWM6qOig55@xK1lGpO0#V>@j8%*2n1j9q zT#fPqYWK;>FYd5{5xW;*`Q%ohGrFB%*6ReecvPhvz6J&&!@VR1PC)9??BIcM!T{%B ziAm+@KY7EQx|ty|kh;eMy1JJGx4<<>ZgV)*vXI-Y)?3!Z;W9qelPuE$Gd`1bxe-p995Cb%`?TS7#pu?sW4l3j)1 zI}2ZxK{`+EL4zAT#JW9H#DKwfypQ--wl@fa`J3#?k0>AZH~8)O8wb80yS+HGHys3B zL3Ng%=SE)__)CoT~#bCpo(m$Q4w|#l_m~!snA7!=W|~9M*JH%JNoWZ{Wg;^>C)O7MA%c zv!6u^8{)S1j1JLO^bn7qx9at({Yx-^rypTb<}ScHw*FLytX>QGJWo6}NdrM5J{&Et z-*E$b$;655$R_?P8cFe7q{mRO(();SO(*CCVOWdMoaJvMeKL7XxK$(3?VJ>A>wQZ} zxoo2+Te2tl;^1@hYD#quR;=uBhz34#ygu_w8#5{tfqybLffwAINBV3eG!xZJO#iI`NJS(y z#1pGqqe8zL?s9*D9Ou@r%}1(Egvlzkhnr`+@T6&)v1PyQWF~Ont2J*I*2#oZ577%c zftB`TgA@lLm)sAwv6@4*oqFwumg=jjoV1_`nD?ui+?*z9qUifz*D@?xOHAH{;v$rW z)U~r{>0ZRtG>LDriO1~d3UtAlLf&r9=_Q-xZs6Hswhqu%koVt1 z&UZae*KK+)+QY}napV6z=^!#_>iS{h98Ku)nkFGsprf7?AQ%6thV~SwUXdbgQBYepvQw}(8ucWOR8gOq$7wv35runNsCKROaz6o z0OB@`8MLx9B4hyKa$71Z-T2{5$rdi{y*!5N-+r6tU)3Q=RGM&TKekGe5*Xs_la=@K zROXbS!ZT5&{)UXA0=(m1I1U{^#*i|B=S0t-8`(@<-^&k99x)s@HO`3Sid%&O53HAZChoj(F)>+vQ%wZOOZc@G1o3F z@^)lDR`|UJ2Sa2!?#*TFNO^xt)Nx;R@V3n8;qCG6oSSPY%V3fMA*?GTh{rhw{%E1H zYtlld(7d`sdP=jhW$h@I0!c%N`xK?zf{Twb$HnckcMGNbC?ge>N86lJoid&to(?5y zr0k}LRYO6GUrGIt}_;WWF1L zR>tL-h}%8qG2(N)HMwZIe*N%>sq!3-8fKG1Bph?ojif3&#tr)_i2hZo2NyP_DpkuY zt&skBsZ25hRUT`x1SQ8^!j3hILM(a7oF7YeI39-OVIh)c4N3fZ*pA+w*o$AzV|NkD-&sd9fs24u9pr9Y@{i;5_0Gv5>WCB^f5C z-<~YSP}u%>ry6&+n9A*V_Bu4x@M(m-b5lE8ye`Z4&P-2Tpn18WS414RurckQES%(w zptFq|?OJos^9@7mlsMnC)G&WPT;hc;b-Z{7tcr=aN684z7FAvYeMDuJ^Ut9LezN=p zh`lwpEnJ2A?O=1^vm|SAWwrXnSk1#pycIw%kyWGe5ax0eF{W;WfMGi1YxD$p1wjt)6C-->M2%1j-1OqiUFlRqZUQb$^jl)z zwX&SC;@LEBqJh0`t7KLi7eq>B!XBgIX;hMf$$dYZ7{Eo|vOT(VL;P*`s>6O=(`^;s zmVYzMUn<2;=tEW?f|e}-ThG~fiA>dc*Y5zpTHx(!q;zhSLA34OPLp)l*vzc)we%}?{( z9RvACHwMHGm1)klSE88vlM$#U(|Syc#5tYf@PYRlRNd8y#Bs{gdyo3^YXhmRiTL

  • Bk+KJay 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%0DkSsnTjJ)Prlnk0fJY;WP`j99@U9?)_s{L&4#ek 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