From 3af6986dab25cf0a03358e45c671d8b5b6a99496 Mon Sep 17 00:00:00 2001 From: glopez Date: Mon, 8 Jul 2019 07:25:28 -0300 Subject: [PATCH 01/99] BAEL-2804 JPA Query Parameters Usage - move article files to new module Move article files to other maven module since the previous one is already full. --- persistence-modules/java-jpa-2/README.md | 3 + persistence-modules/java-jpa-2/pom.xml | 94 +++++++++++++++++++ .../baeldung/jpa/queryparams/Employee.java | 0 .../main/resources/META-INF/persistence.xml | 31 ++++++ .../java-jpa-2/src/main/resources/logback.xml | 13 +++ .../queryparams/JPAQueryParamsUnitTest.java | 0 .../src/test/resources/queryparams.sql} | 0 persistence-modules/java-jpa/pom.xml | 57 ----------- .../main/resources/META-INF/persistence.xml | 22 ----- persistence-modules/pom.xml | 1 + 10 files changed, 142 insertions(+), 79 deletions(-) create mode 100644 persistence-modules/java-jpa-2/README.md create mode 100644 persistence-modules/java-jpa-2/pom.xml rename persistence-modules/{java-jpa => java-jpa-2}/src/main/java/com/baeldung/jpa/queryparams/Employee.java (100%) create mode 100644 persistence-modules/java-jpa-2/src/main/resources/META-INF/persistence.xml create mode 100644 persistence-modules/java-jpa-2/src/main/resources/logback.xml rename persistence-modules/{java-jpa => java-jpa-2}/src/test/java/com/baeldung/jpa/queryparams/JPAQueryParamsUnitTest.java (100%) rename persistence-modules/{java-jpa/src/test/resources/employees2.sql => java-jpa-2/src/test/resources/queryparams.sql} (100%) diff --git a/persistence-modules/java-jpa-2/README.md b/persistence-modules/java-jpa-2/README.md new file mode 100644 index 000000000000..ca31627ebc83 --- /dev/null +++ b/persistence-modules/java-jpa-2/README.md @@ -0,0 +1,3 @@ +# Relevant Articles + +- [JPA Query Parameters Usage](http://www.baeldung.com/jpa-query-parameters-usage) diff --git a/persistence-modules/java-jpa-2/pom.xml b/persistence-modules/java-jpa-2/pom.xml new file mode 100644 index 000000000000..0bfd04022276 --- /dev/null +++ b/persistence-modules/java-jpa-2/pom.xml @@ -0,0 +1,94 @@ + + 4.0.0 + java-jpa-2 + java-jpa-2 + + com.baeldung + persistence-modules + 1.0.0-SNAPSHOT + + + + org.hibernate + hibernate-core + ${hibernate.version} + + + org.hibernate + hibernate-jpamodelgen + ${hibernate.version} + + + com.h2database + h2 + ${h2.version} + + + + + javax.persistence + javax.persistence-api + 2.2 + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.5.1 + + -proc:none + + + + org.bsc.maven + maven-processor-plugin + 3.3.3 + + + process + + process + + generate-sources + + target/metamodel + + org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor + + + + + + + + org.codehaus.mojo + build-helper-maven-plugin + 3.0.0 + + + add-source + generate-sources + + add-source + + + + target/metamodel + + + + + + + + + 5.4.0.Final + + + \ No newline at end of file diff --git a/persistence-modules/java-jpa/src/main/java/com/baeldung/jpa/queryparams/Employee.java b/persistence-modules/java-jpa-2/src/main/java/com/baeldung/jpa/queryparams/Employee.java similarity index 100% rename from persistence-modules/java-jpa/src/main/java/com/baeldung/jpa/queryparams/Employee.java rename to persistence-modules/java-jpa-2/src/main/java/com/baeldung/jpa/queryparams/Employee.java diff --git a/persistence-modules/java-jpa-2/src/main/resources/META-INF/persistence.xml b/persistence-modules/java-jpa-2/src/main/resources/META-INF/persistence.xml new file mode 100644 index 000000000000..653ab83a1831 --- /dev/null +++ b/persistence-modules/java-jpa-2/src/main/resources/META-INF/persistence.xml @@ -0,0 +1,31 @@ + + + + + org.hibernate.jpa.HibernatePersistenceProvider + com.baeldung.jpa.queryparams.Employee + true + + + + + + + + + + + + + \ No newline at end of file diff --git a/persistence-modules/java-jpa-2/src/main/resources/logback.xml b/persistence-modules/java-jpa-2/src/main/resources/logback.xml new file mode 100644 index 000000000000..7d900d8ea884 --- /dev/null +++ b/persistence-modules/java-jpa-2/src/main/resources/logback.xml @@ -0,0 +1,13 @@ + + + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + + + + + + \ No newline at end of file diff --git a/persistence-modules/java-jpa/src/test/java/com/baeldung/jpa/queryparams/JPAQueryParamsUnitTest.java b/persistence-modules/java-jpa-2/src/test/java/com/baeldung/jpa/queryparams/JPAQueryParamsUnitTest.java similarity index 100% rename from persistence-modules/java-jpa/src/test/java/com/baeldung/jpa/queryparams/JPAQueryParamsUnitTest.java rename to persistence-modules/java-jpa-2/src/test/java/com/baeldung/jpa/queryparams/JPAQueryParamsUnitTest.java diff --git a/persistence-modules/java-jpa/src/test/resources/employees2.sql b/persistence-modules/java-jpa-2/src/test/resources/queryparams.sql similarity index 100% rename from persistence-modules/java-jpa/src/test/resources/employees2.sql rename to persistence-modules/java-jpa-2/src/test/resources/queryparams.sql diff --git a/persistence-modules/java-jpa/pom.xml b/persistence-modules/java-jpa/pom.xml index 51cc40133258..f23040fbdc60 100644 --- a/persistence-modules/java-jpa/pom.xml +++ b/persistence-modules/java-jpa/pom.xml @@ -19,11 +19,6 @@ hibernate-core ${hibernate.version} - - org.hibernate - hibernate-jpamodelgen - ${hibernate.version} - com.h2database h2 @@ -52,58 +47,6 @@ - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.5.1 - - -proc:none - - - - org.bsc.maven - maven-processor-plugin - 3.3.3 - - - process - - process - - generate-sources - - target/metamodel - - org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor - - - - - - - - org.codehaus.mojo - build-helper-maven-plugin - 3.0.0 - - - add-source - generate-sources - - add-source - - - - target/metamodel - - - - - - - 5.4.0.Final 2.7.4-RC1 diff --git a/persistence-modules/java-jpa/src/main/resources/META-INF/persistence.xml b/persistence-modules/java-jpa/src/main/resources/META-INF/persistence.xml index 6a236f0840eb..1f16bee3ba8b 100644 --- a/persistence-modules/java-jpa/src/main/resources/META-INF/persistence.xml +++ b/persistence-modules/java-jpa/src/main/resources/META-INF/persistence.xml @@ -224,26 +224,4 @@ value="products_jpa.sql" /> - - - org.hibernate.jpa.HibernatePersistenceProvider - com.baeldung.jpa.queryparams.Employee - true - - - - - - - - - - - - \ No newline at end of file diff --git a/persistence-modules/pom.xml b/persistence-modules/pom.xml index ba3baf6636a6..05b2c8e090b0 100644 --- a/persistence-modules/pom.xml +++ b/persistence-modules/pom.xml @@ -56,5 +56,6 @@ spring-hibernate4 spring-jpa spring-persistence-simple + java-jpa-2 From 1c1cf0fdc91507f83b9c828df5e3f6a2e279d253 Mon Sep 17 00:00:00 2001 From: Juan Vaccari Date: Thu, 11 Jul 2019 23:54:29 +0100 Subject: [PATCH 02/99] BAEL-2928 - Create new spring-di project with examples for Qualifier annotation article --- pom.xml | 4 + spring-di/pom.xml | 101 ++++++++++++++++++ .../main/java/org/baeldung/sample/App.java | 11 ++ .../java/org/baeldung/sample/AppConfig.java | 10 ++ .../main/java/org/baeldung/sample/Bar.java | 5 + .../org/baeldung/sample/BarFormatter.java | 13 +++ .../main/java/org/baeldung/sample/Foo.java | 5 + .../main/java/org/baeldung/sample/FooDAO.java | 5 + .../org/baeldung/sample/FooFormatter.java | 13 +++ .../java/org/baeldung/sample/FooService.java | 17 +++ .../java/org/baeldung/sample/Formatter.java | 7 ++ .../org/baeldung/sample/FormatterType.java | 17 +++ .../sample/FooServiceIntegrationTest.java | 22 ++++ 13 files changed, 230 insertions(+) create mode 100644 spring-di/pom.xml create mode 100644 spring-di/src/main/java/org/baeldung/sample/App.java create mode 100644 spring-di/src/main/java/org/baeldung/sample/AppConfig.java create mode 100644 spring-di/src/main/java/org/baeldung/sample/Bar.java create mode 100644 spring-di/src/main/java/org/baeldung/sample/BarFormatter.java create mode 100644 spring-di/src/main/java/org/baeldung/sample/Foo.java create mode 100644 spring-di/src/main/java/org/baeldung/sample/FooDAO.java create mode 100644 spring-di/src/main/java/org/baeldung/sample/FooFormatter.java create mode 100644 spring-di/src/main/java/org/baeldung/sample/FooService.java create mode 100644 spring-di/src/main/java/org/baeldung/sample/Formatter.java create mode 100644 spring-di/src/main/java/org/baeldung/sample/FormatterType.java create mode 100644 spring-di/src/test/java/org/baeldung/sample/FooServiceIntegrationTest.java diff --git a/pom.xml b/pom.xml index f24a307d9ec3..45c84ffb1177 100644 --- a/pom.xml +++ b/pom.xml @@ -669,6 +669,8 @@ spring-data-rest-querydsl spring-dispatcher-servlet spring-drools + spring-di + spring-ehcache spring-ejb @@ -871,6 +873,7 @@ spring-data-rest spring-dispatcher-servlet spring-drools + spring-di spring-ehcache spring-freemarker persistence-modules/spring-hibernate-3 @@ -1336,6 +1339,7 @@ spring-data-rest-querydsl spring-dispatcher-servlet spring-drools + spring-di spring-ehcache spring-ejb diff --git a/spring-di/pom.xml b/spring-di/pom.xml new file mode 100644 index 000000000000..62456ba31cf9 --- /dev/null +++ b/spring-di/pom.xml @@ -0,0 +1,101 @@ + + + 4.0.0 + spring-di + 1.0-SNAPSHOT + war + + + parent-boot-2 + com.baeldung + 0.0.1-SNAPSHOT + ../parent-boot-2 + + + + + + org.springframework + spring-context + + + + javax.annotation + javax.annotation-api + ${annotation-api.version} + + + + + org.springframework + spring-test + test + + + + + + + + org.springframework + spring-framework-bom + ${org.springframework.version} + pom + import + + + org.springframework + spring-core + ${org.springframework.version} + + + + + + spring-di + + + src/main/resources + true + + + + + org.apache.maven.plugins + maven-war-plugin + 3.2.2 + + false + + + + + + + + dev + + true + + + dev + + + + prod + + prod + + + + + + org.baeldung.org.baeldung.sample.App + + 5.0.6.RELEASE + 1.3.2 + + + \ No newline at end of file diff --git a/spring-di/src/main/java/org/baeldung/sample/App.java b/spring-di/src/main/java/org/baeldung/sample/App.java new file mode 100644 index 000000000000..17fc49fc8ce5 --- /dev/null +++ b/spring-di/src/main/java/org/baeldung/sample/App.java @@ -0,0 +1,11 @@ +package org.baeldung.sample; + +import org.springframework.context.annotation.AnnotationConfigApplicationContext; + +public class App { + public static void main(String[] args) { + AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class); + FooService fooService = ctx.getBean(FooService.class); + fooService.doStuff(); + } +} diff --git a/spring-di/src/main/java/org/baeldung/sample/AppConfig.java b/spring-di/src/main/java/org/baeldung/sample/AppConfig.java new file mode 100644 index 000000000000..8a177d2611e1 --- /dev/null +++ b/spring-di/src/main/java/org/baeldung/sample/AppConfig.java @@ -0,0 +1,10 @@ +package org.baeldung.sample; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ComponentScan("org.baeldung.sample") +public class AppConfig { + +} diff --git a/spring-di/src/main/java/org/baeldung/sample/Bar.java b/spring-di/src/main/java/org/baeldung/sample/Bar.java new file mode 100644 index 000000000000..54e8d544180b --- /dev/null +++ b/spring-di/src/main/java/org/baeldung/sample/Bar.java @@ -0,0 +1,5 @@ +package org.baeldung.sample; + +public class Bar { + +} diff --git a/spring-di/src/main/java/org/baeldung/sample/BarFormatter.java b/spring-di/src/main/java/org/baeldung/sample/BarFormatter.java new file mode 100644 index 000000000000..8396653970f1 --- /dev/null +++ b/spring-di/src/main/java/org/baeldung/sample/BarFormatter.java @@ -0,0 +1,13 @@ +package org.baeldung.sample; + +import org.springframework.stereotype.Component; + +@FormatterType("Bar") +@Component +public class BarFormatter implements Formatter { + + public String format() { + return "bar"; + } + +} diff --git a/spring-di/src/main/java/org/baeldung/sample/Foo.java b/spring-di/src/main/java/org/baeldung/sample/Foo.java new file mode 100644 index 000000000000..562a00121a70 --- /dev/null +++ b/spring-di/src/main/java/org/baeldung/sample/Foo.java @@ -0,0 +1,5 @@ +package org.baeldung.sample; + +public class Foo { + +} diff --git a/spring-di/src/main/java/org/baeldung/sample/FooDAO.java b/spring-di/src/main/java/org/baeldung/sample/FooDAO.java new file mode 100644 index 000000000000..151c0c38defc --- /dev/null +++ b/spring-di/src/main/java/org/baeldung/sample/FooDAO.java @@ -0,0 +1,5 @@ +package org.baeldung.sample; + +public class FooDAO { + +} diff --git a/spring-di/src/main/java/org/baeldung/sample/FooFormatter.java b/spring-di/src/main/java/org/baeldung/sample/FooFormatter.java new file mode 100644 index 000000000000..68cb7f81f2da --- /dev/null +++ b/spring-di/src/main/java/org/baeldung/sample/FooFormatter.java @@ -0,0 +1,13 @@ +package org.baeldung.sample; + +import org.springframework.stereotype.Component; + +@FormatterType("Foo") +@Component +public class FooFormatter implements Formatter { + + public String format() { + return "foo"; + } + +} diff --git a/spring-di/src/main/java/org/baeldung/sample/FooService.java b/spring-di/src/main/java/org/baeldung/sample/FooService.java new file mode 100644 index 000000000000..711711f2053b --- /dev/null +++ b/spring-di/src/main/java/org/baeldung/sample/FooService.java @@ -0,0 +1,17 @@ +package org.baeldung.sample; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class FooService { + + @Autowired + @FormatterType("Foo") + private Formatter formatter; + + public String doStuff() { + return formatter.format(); + } + +} diff --git a/spring-di/src/main/java/org/baeldung/sample/Formatter.java b/spring-di/src/main/java/org/baeldung/sample/Formatter.java new file mode 100644 index 000000000000..ab29c2b8486a --- /dev/null +++ b/spring-di/src/main/java/org/baeldung/sample/Formatter.java @@ -0,0 +1,7 @@ +package org.baeldung.sample; + +public interface Formatter { + + String format(); + +} diff --git a/spring-di/src/main/java/org/baeldung/sample/FormatterType.java b/spring-di/src/main/java/org/baeldung/sample/FormatterType.java new file mode 100644 index 000000000000..a00a9750bf45 --- /dev/null +++ b/spring-di/src/main/java/org/baeldung/sample/FormatterType.java @@ -0,0 +1,17 @@ +package org.baeldung.sample; + +import org.springframework.beans.factory.annotation.Qualifier; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Qualifier +@Target({ ElementType.FIELD, ElementType.METHOD, ElementType.TYPE, ElementType.PARAMETER }) +@Retention(RetentionPolicy.RUNTIME) +public @interface FormatterType { + + String value(); + +} diff --git a/spring-di/src/test/java/org/baeldung/sample/FooServiceIntegrationTest.java b/spring-di/src/test/java/org/baeldung/sample/FooServiceIntegrationTest.java new file mode 100644 index 000000000000..6b518395a18c --- /dev/null +++ b/spring-di/src/test/java/org/baeldung/sample/FooServiceIntegrationTest.java @@ -0,0 +1,22 @@ +package org.baeldung.sample; + +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.AnnotationConfigContextLoader; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = AppConfig.class, loader = AnnotationConfigContextLoader.class) +public class FooServiceIntegrationTest { + + @Autowired + FooService fooService; + + @Test + public void whenFooFormatterType_thenReturnFoo() { + Assert.assertEquals("foo", fooService.doStuff()); + } +} From c498f080b942319199e027a88c3e9db26f418193 Mon Sep 17 00:00:00 2001 From: Dhawal Kapil Date: Sun, 14 Jul 2019 14:24:16 +0530 Subject: [PATCH 03/99] BAEL-15951 Moved vavr, JHipster to default profiles --- pom.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index f40659bc16c5..d7048d8cf549 100644 --- a/pom.xml +++ b/pom.xml @@ -479,7 +479,6 @@ jersey JGit jgroups - jhipster jhipster-5 jib jjwt @@ -777,7 +776,6 @@ undertow - vavr vertx vertx-and-rxjava video-tutorials @@ -984,6 +982,7 @@ core-kotlin-io jenkins/hello-world + jhipster jws libraries @@ -995,6 +994,7 @@ persistence-modules/jnosql vaadin + vavr @@ -1165,7 +1165,6 @@ jersey JGit jgroups - jhipster jhipster-5 jib jjwt @@ -1444,7 +1443,6 @@ undertow - vavr vertx vertx-and-rxjava video-tutorials @@ -1496,6 +1494,7 @@ core-kotlin-2 jenkins/hello-world + jhipster jws libraries @@ -1506,6 +1505,7 @@ persistence-modules/jnosql vaadin + vavr From acd87d8e58f421b94698138e7f473cf5129e4d98 Mon Sep 17 00:00:00 2001 From: glopez Date: Sun, 14 Jul 2019 11:03:53 -0300 Subject: [PATCH 04/99] BAEL-2804 JPA Query Parameters Usage - formatting fixes --- persistence-modules/java-jpa-2/pom.xml | 174 ++++++++++++------------- 1 file changed, 87 insertions(+), 87 deletions(-) diff --git a/persistence-modules/java-jpa-2/pom.xml b/persistence-modules/java-jpa-2/pom.xml index 0bfd04022276..5e04a99f8946 100644 --- a/persistence-modules/java-jpa-2/pom.xml +++ b/persistence-modules/java-jpa-2/pom.xml @@ -1,94 +1,94 @@ - 4.0.0 - java-jpa-2 - java-jpa-2 - - com.baeldung - persistence-modules - 1.0.0-SNAPSHOT - - - - org.hibernate - hibernate-core - ${hibernate.version} - - - org.hibernate - hibernate-jpamodelgen - ${hibernate.version} - - - com.h2database - h2 - ${h2.version} - + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 + java-jpa-2 + java-jpa-2 + + com.baeldung + persistence-modules + 1.0.0-SNAPSHOT + + + + org.hibernate + hibernate-core + ${hibernate.version} + + + org.hibernate + hibernate-jpamodelgen + ${hibernate.version} + + + com.h2database + h2 + ${h2.version} + - - - javax.persistence - javax.persistence-api - 2.2 - + + + javax.persistence + javax.persistence-api + 2.2 + - + - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.5.1 - - -proc:none - - - - org.bsc.maven - maven-processor-plugin - 3.3.3 - - - process - - process - - generate-sources - - target/metamodel - - org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor - - - - - + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.5.1 + + -proc:none + + + + org.bsc.maven + maven-processor-plugin + 3.3.3 + + + process + + process + + generate-sources + + target/metamodel + + org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor + + + + + - - org.codehaus.mojo - build-helper-maven-plugin - 3.0.0 - - - add-source - generate-sources - - add-source - - - - target/metamodel - - - - - - - - - 5.4.0.Final - + + org.codehaus.mojo + build-helper-maven-plugin + 3.0.0 + + + add-source + generate-sources + + add-source + + + + target/metamodel + + + + + + + + + 5.4.0.Final + \ No newline at end of file From 7f747e44ec6a4ade68f7360bf0d549ca92e184a0 Mon Sep 17 00:00:00 2001 From: Andrew Shcherbakov Date: Sun, 14 Jul 2019 18:49:34 +0200 Subject: [PATCH 05/99] Create an interface driven controller (BAEL-3095) --- spring-5-mvc/pom.xml | 7 ++- .../java/com/baeldung/idc/Application.java | 24 ++++++++ .../src/main/java/com/baeldung/idc/Book.java | 55 +++++++++++++++++ .../java/com/baeldung/idc/BookController.java | 34 +++++++++++ .../java/com/baeldung/idc/BookOperations.java | 23 +++++++ .../java/com/baeldung/idc/BookRepository.java | 61 +++++++++++++++++++ .../src/main/resources/custom.properties | 2 + 7 files changed, 204 insertions(+), 2 deletions(-) create mode 100644 spring-5-mvc/src/main/java/com/baeldung/idc/Application.java create mode 100644 spring-5-mvc/src/main/java/com/baeldung/idc/Book.java create mode 100644 spring-5-mvc/src/main/java/com/baeldung/idc/BookController.java create mode 100644 spring-5-mvc/src/main/java/com/baeldung/idc/BookOperations.java create mode 100644 spring-5-mvc/src/main/java/com/baeldung/idc/BookRepository.java create mode 100644 spring-5-mvc/src/main/resources/custom.properties diff --git a/spring-5-mvc/pom.xml b/spring-5-mvc/pom.xml index 302080a8b462..7b641ffa7950 100644 --- a/spring-5-mvc/pom.xml +++ b/spring-5-mvc/pom.xml @@ -3,9 +3,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - com.baeldung spring-5-mvc - 0.0.1-SNAPSHOT spring-5-mvc spring 5 MVC sample project about new features jar @@ -87,6 +85,11 @@ ${jayway-rest-assured.version} test + + com.github.javafaker + javafaker + 0.18 + diff --git a/spring-5-mvc/src/main/java/com/baeldung/idc/Application.java b/spring-5-mvc/src/main/java/com/baeldung/idc/Application.java new file mode 100644 index 000000000000..ff86301f7db6 --- /dev/null +++ b/spring-5-mvc/src/main/java/com/baeldung/idc/Application.java @@ -0,0 +1,24 @@ +package com.baeldung.idc; + +import java.util.HashMap; +import java.util.Map; + +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.PropertySource; + +@SpringBootApplication +@ComponentScan(basePackages = "com.baeldung.idc") +@PropertySource(value = { "classpath:/custom.properties" }, ignoreResourceNotFound = true) +public class Application { + + public static void main(String[] args) { + final SpringApplicationBuilder builder = new SpringApplicationBuilder(Application.class); + final Map map = new HashMap<>(); + map.put("spring.config.name", "custom.properties"); + builder.properties(map).run(args); + + } + +} diff --git a/spring-5-mvc/src/main/java/com/baeldung/idc/Book.java b/spring-5-mvc/src/main/java/com/baeldung/idc/Book.java new file mode 100644 index 000000000000..387f7049e1dd --- /dev/null +++ b/spring-5-mvc/src/main/java/com/baeldung/idc/Book.java @@ -0,0 +1,55 @@ +package com.baeldung.idc; + +import org.springframework.stereotype.Component; + +@Component +public class Book { + + private final int id; + + private final String title; + + private final String author; + + private final String genre; + + public Book() { + this(-1, "", "", ""); + } + + public Book(int id, String title, String author, String genre) { + this.id = id; + this.title = title; + this.author = author; + this.genre = genre; + } + + /** + * @return the id + */ + public int getId() { + return id; + } + + /** + * @return the title + */ + public String getTitle() { + return title; + } + + /** + * @return the author + */ + public String getAuthor() { + return author; + } + + /** + * @return the genre + */ + public String getGenre() { + return genre; + } + +} diff --git a/spring-5-mvc/src/main/java/com/baeldung/idc/BookController.java b/spring-5-mvc/src/main/java/com/baeldung/idc/BookController.java new file mode 100644 index 000000000000..5b2349715dcd --- /dev/null +++ b/spring-5-mvc/src/main/java/com/baeldung/idc/BookController.java @@ -0,0 +1,34 @@ +package com.baeldung.idc; + +import java.util.List; +import java.util.Optional; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/book") +public class BookController implements BookOperations { + + private BookRepository repo; + + public BookController(BookRepository repo) { + this.repo = repo; + } + + @Override + public List getAll() { + return repo.getItems(); + } + + @Override + public Optional getById(int id) { + return repo.getById(id); + } + + @Override + public void save(Book book, int id) { + repo.save(id, book); + } + +} diff --git a/spring-5-mvc/src/main/java/com/baeldung/idc/BookOperations.java b/spring-5-mvc/src/main/java/com/baeldung/idc/BookOperations.java new file mode 100644 index 000000000000..70b44561af52 --- /dev/null +++ b/spring-5-mvc/src/main/java/com/baeldung/idc/BookOperations.java @@ -0,0 +1,23 @@ +package com.baeldung.idc; + +import java.util.List; +import java.util.Optional; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; + +@RequestMapping("/default") +public interface BookOperations { + + @GetMapping("/") + List getAll(); + + @GetMapping("/{id}") + Optional getById(@PathVariable int id); + + @PostMapping("/save/{id}") + public void save(@RequestBody Book book, @PathVariable int id); +} diff --git a/spring-5-mvc/src/main/java/com/baeldung/idc/BookRepository.java b/spring-5-mvc/src/main/java/com/baeldung/idc/BookRepository.java new file mode 100644 index 000000000000..0550b3b79afb --- /dev/null +++ b/spring-5-mvc/src/main/java/com/baeldung/idc/BookRepository.java @@ -0,0 +1,61 @@ +package com.baeldung.idc; + +import java.util.List; +import java.util.Locale; +import java.util.Optional; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +import javax.annotation.PostConstruct; + +import org.springframework.stereotype.Component; + +import com.github.javafaker.Faker; + +/** + * Repository for storing the books. + * + * It serves just for illustrative purposes and is completely in-memory. It uses Java Faker library in order to generate data. + * + * @author A.Shcherbakov + * + */ +@Component +public class BookRepository { + + private List items; + + @PostConstruct + public void init() { + Faker faker = new Faker(Locale.ENGLISH); + final com.github.javafaker.Book book = faker.book(); + this.items = IntStream.range(1, faker.random() + .nextInt(10, 20)) + .mapToObj(i -> new Book(i, book.title(), book.author(), book.genre())) + .collect(Collectors.toList()); + + } + + public int getCount() { + return items.size(); + } + + public List getItems() { + return items; + } + + public Optional getById(int id) { + return this.items.stream() + .filter(item -> id == item.getId()) + .findFirst(); + } + + public void save(int id, Book book) { + IntStream.range(0, items.size()) + .filter(i -> items.get(i) + .getId() == id) + .findFirst() + .ifPresent(i -> this.items.set(i, book)); + } + +} diff --git a/spring-5-mvc/src/main/resources/custom.properties b/spring-5-mvc/src/main/resources/custom.properties new file mode 100644 index 000000000000..78c6675b2659 --- /dev/null +++ b/spring-5-mvc/src/main/resources/custom.properties @@ -0,0 +1,2 @@ +server.port=8080 +spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration \ No newline at end of file From 306c37cfc4223d2f2ac4919e9758f48093b105b1 Mon Sep 17 00:00:00 2001 From: isaolmez Date: Mon, 15 Jul 2019 12:44:59 +0300 Subject: [PATCH 06/99] BAEL-3014: Added sample code for lists --- spring-thymeleaf-2/pom.xml | 20 ++++-- .../thymeleaf/lists/ListsController.java | 64 +++++++++++++++++++ .../resources/templates/lists/contains.html | 12 ++++ .../resources/templates/lists/isEmpty.html | 14 ++++ .../main/resources/templates/lists/size.html | 12 ++++ .../main/resources/templates/lists/sort.html | 12 ++++ .../resources/templates/lists/toList.html | 14 ++++ .../lists/ListsControllerIntegrationTest.java | 60 +++++++++++++++++ 8 files changed, 204 insertions(+), 4 deletions(-) create mode 100644 spring-thymeleaf-2/src/main/java/com/baeldung/thymeleaf/lists/ListsController.java create mode 100644 spring-thymeleaf-2/src/main/resources/templates/lists/contains.html create mode 100644 spring-thymeleaf-2/src/main/resources/templates/lists/isEmpty.html create mode 100644 spring-thymeleaf-2/src/main/resources/templates/lists/size.html create mode 100644 spring-thymeleaf-2/src/main/resources/templates/lists/sort.html create mode 100644 spring-thymeleaf-2/src/main/resources/templates/lists/toList.html create mode 100644 spring-thymeleaf-2/src/test/java/com/baeldung/thymeleaf/lists/ListsControllerIntegrationTest.java diff --git a/spring-thymeleaf-2/pom.xml b/spring-thymeleaf-2/pom.xml index 1b95cac43cbe..ddf71e2ea140 100644 --- a/spring-thymeleaf-2/pom.xml +++ b/spring-thymeleaf-2/pom.xml @@ -5,11 +5,17 @@ spring-thymeleaf-2 war + + + + + + - com.baeldung - parent-boot-2 - 0.0.1-SNAPSHOT - ../parent-boot-2 + org.springframework.boot + spring-boot-starter-parent + 2.1.6.RELEASE + @@ -21,6 +27,12 @@ org.springframework.boot spring-boot-starter-thymeleaf + + + org.springframework.boot + spring-boot-starter-test + test + diff --git a/spring-thymeleaf-2/src/main/java/com/baeldung/thymeleaf/lists/ListsController.java b/spring-thymeleaf-2/src/main/java/com/baeldung/thymeleaf/lists/ListsController.java new file mode 100644 index 000000000000..55a7f7c38ee9 --- /dev/null +++ b/spring-thymeleaf-2/src/main/java/com/baeldung/thymeleaf/lists/ListsController.java @@ -0,0 +1,64 @@ +package com.baeldung.thymeleaf.lists; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; + +@Controller +@RequestMapping("/lists") +public class ListsController { + + @GetMapping("/toList") + public String usingToList(Model model) { + List colors = getColors(); + String[] colorsArray = colors.toArray(new String[0]); + model.addAttribute("myArray", colorsArray); + return "lists/toList"; + } + + @GetMapping("/contains") + public String usingContains(Model model) { + model.addAttribute("myList", getColors()); + model.addAttribute("others", getOtherColors()); + return "lists/contains"; + } + + @GetMapping("/size") + public String usingSize(Model model) { + model.addAttribute("myList", getColors()); + return "lists/size"; + } + + @GetMapping("/isEmpty") + public String usingIsEmpty(Model model) { + model.addAttribute("myList", getColors()); + return "lists/isEmpty"; + } + + @GetMapping("/sort") + public String usingSort(Model model) { + model.addAttribute("myList", getColors()); + model.addAttribute("reverse", Comparator.reverseOrder()); + return "lists/sort"; + } + + private List getColors() { + List colors = new ArrayList<>(); + colors.add("green"); + colors.add("yellow"); + colors.add("red"); + colors.add("blue"); + return colors; + } + + private List getOtherColors() { + List colors = new ArrayList<>(); + colors.add("green"); + colors.add("blue"); + return colors; + } +} diff --git a/spring-thymeleaf-2/src/main/resources/templates/lists/contains.html b/spring-thymeleaf-2/src/main/resources/templates/lists/contains.html new file mode 100644 index 000000000000..bfa7874010a5 --- /dev/null +++ b/spring-thymeleaf-2/src/main/resources/templates/lists/contains.html @@ -0,0 +1,12 @@ + + + + + Lists Utility Class in Thymeleaf + + +myList contains red: + +myList contains red and green: + + \ No newline at end of file diff --git a/spring-thymeleaf-2/src/main/resources/templates/lists/isEmpty.html b/spring-thymeleaf-2/src/main/resources/templates/lists/isEmpty.html new file mode 100644 index 000000000000..06c66153c77a --- /dev/null +++ b/spring-thymeleaf-2/src/main/resources/templates/lists/isEmpty.html @@ -0,0 +1,14 @@ + + + + + Lists Utility Class in Thymeleaf + + + +isEmpty Check : + +List is not empty + + + \ No newline at end of file diff --git a/spring-thymeleaf-2/src/main/resources/templates/lists/size.html b/spring-thymeleaf-2/src/main/resources/templates/lists/size.html new file mode 100644 index 000000000000..594ff08467bd --- /dev/null +++ b/spring-thymeleaf-2/src/main/resources/templates/lists/size.html @@ -0,0 +1,12 @@ + + + + + Lists Utility Class in Thymeleaf + + + +size: + + + \ No newline at end of file diff --git a/spring-thymeleaf-2/src/main/resources/templates/lists/sort.html b/spring-thymeleaf-2/src/main/resources/templates/lists/sort.html new file mode 100644 index 000000000000..e23c7bccbb9b --- /dev/null +++ b/spring-thymeleaf-2/src/main/resources/templates/lists/sort.html @@ -0,0 +1,12 @@ + + + + + Lists Utility Class in Thymeleaf + + +sort: + +sort with Comparator: + + \ No newline at end of file diff --git a/spring-thymeleaf-2/src/main/resources/templates/lists/toList.html b/spring-thymeleaf-2/src/main/resources/templates/lists/toList.html new file mode 100644 index 000000000000..680c13160eb8 --- /dev/null +++ b/spring-thymeleaf-2/src/main/resources/templates/lists/toList.html @@ -0,0 +1,14 @@ + + + + + Lists Utility Class in Thymeleaf + + + + + converted list size: + + + + \ No newline at end of file diff --git a/spring-thymeleaf-2/src/test/java/com/baeldung/thymeleaf/lists/ListsControllerIntegrationTest.java b/spring-thymeleaf-2/src/test/java/com/baeldung/thymeleaf/lists/ListsControllerIntegrationTest.java new file mode 100644 index 000000000000..252ec3bef34c --- /dev/null +++ b/spring-thymeleaf-2/src/test/java/com/baeldung/thymeleaf/lists/ListsControllerIntegrationTest.java @@ -0,0 +1,60 @@ +package com.baeldung.thymeleaf.lists; + +import static org.hamcrest.CoreMatchers.containsString; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; + +@RunWith(SpringRunner.class) +@SpringBootTest +@AutoConfigureMockMvc(printOnlyOnFailure = false) +public class ListsControllerIntegrationTest { + + @Autowired + private MockMvc mockMvc; + + @Test + public void whenCalledToList_ThenConvertsToList() throws Exception { + mockMvc.perform(MockMvcRequestBuilders.get("/lists/toList")) + .andExpect(status().isOk()) + .andExpect(content().string(containsString("converted list size: 4"))); + } + + @Test + public void whenCalledContains_ThenChecksMembership() throws Exception { + mockMvc.perform(MockMvcRequestBuilders.get("/lists/contains")) + .andExpect(status().isOk()) + .andExpect(content().string(containsString("myList contains red: true"))) + .andExpect(content().string(containsString("myList contains red and green: true"))); + } + + @Test + public void whenCalledSize_ThenReturnsSize() throws Exception { + mockMvc.perform(MockMvcRequestBuilders.get("/lists/size")) + .andExpect(status().isOk()) + .andExpect(content().string(containsString("size: 4"))); + } + + @Test + public void whenCalledSort_ThenSortsItems() throws Exception { + mockMvc.perform(MockMvcRequestBuilders.get("/lists/sort")) + .andExpect(status().isOk()) + .andExpect(content().string(containsString("sort: [blue, green, red, yellow]"))) + .andExpect(content().string(containsString("sort with Comparator: [yellow, red, green, blue]"))); + } + + @Test + public void whenCalledIsEmpty_ThenChecksAnyMembers() throws Exception { + mockMvc.perform(MockMvcRequestBuilders.get("/lists/isEmpty")) + .andExpect(status().isOk()) + .andExpect(content().string(containsString("isEmpty Check : false"))); + } +} \ No newline at end of file From fd0ef02dd192bad0bf074779f4b04cd60c9c8aaf Mon Sep 17 00:00:00 2001 From: isaolmez Date: Mon, 15 Jul 2019 12:46:32 +0300 Subject: [PATCH 07/99] BAEL-3014: Added sample code for lists --- spring-thymeleaf-2/pom.xml | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/spring-thymeleaf-2/pom.xml b/spring-thymeleaf-2/pom.xml index ddf71e2ea140..d31e5fa7f67e 100644 --- a/spring-thymeleaf-2/pom.xml +++ b/spring-thymeleaf-2/pom.xml @@ -5,17 +5,11 @@ spring-thymeleaf-2 war - - - - - - - org.springframework.boot - spring-boot-starter-parent - 2.1.6.RELEASE - + com.baeldung + parent-boot-2 + 0.0.1-SNAPSHOT + ../parent-boot-2 From 195c6bf529b08eb94c52079dddb2b2c9c7cea4b5 Mon Sep 17 00:00:00 2001 From: isaolmez Date: Mon, 15 Jul 2019 17:30:23 +0300 Subject: [PATCH 08/99] BAEL-3014: Added sample code for lists --- .../src/main/resources/templates/lists/contains.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-thymeleaf-2/src/main/resources/templates/lists/contains.html b/spring-thymeleaf-2/src/main/resources/templates/lists/contains.html index bfa7874010a5..a1db0f02625d 100644 --- a/spring-thymeleaf-2/src/main/resources/templates/lists/contains.html +++ b/spring-thymeleaf-2/src/main/resources/templates/lists/contains.html @@ -9,4 +9,4 @@ myList contains red and green: - \ No newline at end of file + From bc3ed2671687b829fbdac4d1331aee1bf3811ba0 Mon Sep 17 00:00:00 2001 From: Chirag Dewan Date: Tue, 16 Jul 2019 17:20:12 +0530 Subject: [PATCH 09/99] BAEL-2990 Automatic generation of the Builder pattern with FreeBuilder --- libraries-2/pom.xml | 11 +- .../com/baeldung/freebuilder/Employee.java | 65 +++++++ .../freebuilder/builder/classic/Address.java | 25 +++ .../freebuilder/builder/classic/Employee.java | 181 ++++++++++++++++++ .../freebuilder/EmployeeBuilderUnitTest.java | 150 +++++++++++++++ .../classic/EmployeeBuilderUnitTest.java | 32 ++++ pom.xml | 2 +- 7 files changed, 463 insertions(+), 3 deletions(-) create mode 100644 libraries-2/src/main/java/com/baeldung/freebuilder/Employee.java create mode 100644 libraries-2/src/main/java/com/baeldung/freebuilder/builder/classic/Address.java create mode 100644 libraries-2/src/main/java/com/baeldung/freebuilder/builder/classic/Employee.java create mode 100644 libraries-2/src/test/java/com/baeldung/freebuilder/EmployeeBuilderUnitTest.java create mode 100644 libraries-2/src/test/java/com/baeldung/freebuilder/builder/classic/EmployeeBuilderUnitTest.java diff --git a/libraries-2/pom.xml b/libraries-2/pom.xml index ff73888b69ce..c6be8df38d67 100644 --- a/libraries-2/pom.xml +++ b/libraries-2/pom.xml @@ -142,9 +142,15 @@ org.apache.mesos mesos ${mesos.library.version} + + + org.inferred + freebuilder + ${freebuilder.version} + true - + 3.0.7 3.6.2 @@ -165,5 +171,6 @@ 2.8.5 3.14.2 4.1.2 - + 2.4.1 + diff --git a/libraries-2/src/main/java/com/baeldung/freebuilder/Employee.java b/libraries-2/src/main/java/com/baeldung/freebuilder/Employee.java new file mode 100644 index 000000000000..08470cc5cd82 --- /dev/null +++ b/libraries-2/src/main/java/com/baeldung/freebuilder/Employee.java @@ -0,0 +1,65 @@ +package com.baeldung.freebuilder; + +import com.baeldung.freebuilder.builder.classic.Address; +import org.inferred.freebuilder.FreeBuilder; + +import javax.annotation.Nullable; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.function.UnaryOperator; + +@FreeBuilder +public interface Employee { + + String getName(); + + int getAge(); + + String getDepartment(); + + String getRole(); + + String getSupervisorName(); + + String getDesignation(); + + String getEmail(); + + long getPhoneNumber(); + + Optional getPermanent(); + + Optional getDateOfJoining(); + + @Nullable + String getCurrentProject(); + + Address getAddress(); + + List getAccessTokens(); + + Map getAssetsSerialIdMapping(); + + + class Builder extends Employee_Builder { + + public Builder() { + // setting default value for department + setDepartment("Builder Pattern"); + } + + @Override + public Builder setEmail(String email) { + if (checkValidEmail(email)) + return super.setEmail(email); + else + throw new IllegalArgumentException("Invalid email"); + + } + + private boolean checkValidEmail(String email) { + return email.contains("@"); + } + } +} diff --git a/libraries-2/src/main/java/com/baeldung/freebuilder/builder/classic/Address.java b/libraries-2/src/main/java/com/baeldung/freebuilder/builder/classic/Address.java new file mode 100644 index 000000000000..8e53a9f15530 --- /dev/null +++ b/libraries-2/src/main/java/com/baeldung/freebuilder/builder/classic/Address.java @@ -0,0 +1,25 @@ +package com.baeldung.freebuilder.builder.classic; + +import org.inferred.freebuilder.FreeBuilder; + +import java.util.Optional; + +@FreeBuilder +public interface Address { + + Optional getAddressLine1(); + + Optional getAddressLine2(); + + Optional getAddressLine3(); + + String getCity(); + + Optional getState(); + + Optional getPinCode(); + + class Builder extends Address_Builder { + + } +} \ No newline at end of file diff --git a/libraries-2/src/main/java/com/baeldung/freebuilder/builder/classic/Employee.java b/libraries-2/src/main/java/com/baeldung/freebuilder/builder/classic/Employee.java new file mode 100644 index 000000000000..bd9c8b0a1742 --- /dev/null +++ b/libraries-2/src/main/java/com/baeldung/freebuilder/builder/classic/Employee.java @@ -0,0 +1,181 @@ +package com.baeldung.freebuilder.builder.classic; + +public class Employee { + + private String name; + private int age; + private String department; + private String role; + private String supervisorName; + private String designation; + private String email; + private long phoneNumber; + private boolean isPermanent; + private Address address; + + private Employee() { + + } + + private void setName(String name) { + this.name = name; + } + + private void setAge(int age) { + this.age = age; + } + + private void setDepartment(String department) { + this.department = department; + } + + private void setRole(String role) { + this.role = role; + } + + private void setSupervisorName(String supervisorName) { + this.supervisorName = supervisorName; + } + + private void setDesignation(String designation) { + this.designation = designation; + } + + private void setEmail(String email) { + this.email = email; + } + + private void setPhoneNumber(long phoneNumber) { + this.phoneNumber = phoneNumber; + } + + private void setPermanent(boolean permanent) { + isPermanent = permanent; + } + + private void setAddress(Address address) { + this.address = address; + } + + public String getName() { + return name; + } + + public int getAge() { + return age; + } + + public String getDepartment() { + return department; + } + + public String getRole() { + return role; + } + + public String getSupervisorName() { + return supervisorName; + } + + public String getDesignation() { + return designation; + } + + public String getEmail() { + return email; + } + + public long getPhoneNumber() { + return phoneNumber; + } + + public boolean isPermanent() { + return isPermanent; + } + + public Address getAddress() { + return address; + } + + public static class Builder { + + private String name; + private int age; + private String department; + private String role; + private String supervisorName; + private String designation; + private String email; + private long phoneNumber; + private boolean isPermanent; + private Address address; + + public Builder setName(String name) { + this.name = name; + return this; + } + + public Builder setAge(int age) { + this.age = age; + return this; + } + + public Builder setDepartment(String department) { + this.department = department; + return this; + } + + public Builder setRole(String role) { + this.role = role; + return this; + } + + public Builder setSupervisorName(String supervisorName) { + this.supervisorName = supervisorName; + return this; + } + + public Builder setDesignation(String designation) { + this.designation = designation; + return this; + } + + public Builder setEmail(String email) { + this.email = email; + return this; + } + + public Builder setPhoneNumber(long phoneNumber) { + this.phoneNumber = phoneNumber; + return this; + } + + public Builder setPermanent(boolean permanent) { + isPermanent = permanent; + return this; + } + + public Builder setAddress(Address address) { + this.address = address; + return this; + } + + public Employee build() { + Employee employee = new Employee(); + employee.setName(this.name); + employee.setAge(this.age); + employee.setDepartment(this.department); + employee.setAddress(this.address); + employee.setDesignation(this.designation); + employee.setEmail(this.email); + employee.setPermanent(this.isPermanent); + employee.setName(this.name); + employee.setSupervisorName(this.supervisorName); + employee.setPhoneNumber(this.phoneNumber); + + return employee; + + } + } + +} diff --git a/libraries-2/src/test/java/com/baeldung/freebuilder/EmployeeBuilderUnitTest.java b/libraries-2/src/test/java/com/baeldung/freebuilder/EmployeeBuilderUnitTest.java new file mode 100644 index 000000000000..e3a9e4963358 --- /dev/null +++ b/libraries-2/src/test/java/com/baeldung/freebuilder/EmployeeBuilderUnitTest.java @@ -0,0 +1,150 @@ +package com.baeldung.freebuilder; + +import com.baeldung.freebuilder.builder.classic.Address; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.util.Optional; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +public class EmployeeBuilderUnitTest { + + private static final int PIN_CODE = 223344; + public static final String CITY_NAME = "New York"; + + @Test + public void whenBuildEmployeeWithAddress_thenReturnEmployeeWithValidAddress() { + + // when + Address.Builder addressBuilder = new Address.Builder(); + Address address = addressBuilder.setCity(CITY_NAME).build(); + + Employee.Builder builder = new Employee.Builder(); + + Employee employee = builder.setName("baeldung").setAge(10).setDesignation("author").setEmail("abc@xyz.com").setSupervisorName("Admin").setPhoneNumber(4445566).setPermanent(true).setRole("developer").setAddress(address).build(); + + // then + assertTrue(employee.getAddress().getCity().equalsIgnoreCase(CITY_NAME)); + + } + + @Test + public void whenMapPincodeInAddress_thenReturnEmployeeWithValidAddressPincode() { + + // when + Address.Builder addressBuilder = new Address.Builder(); + Address address = addressBuilder.setCity(CITY_NAME).setPinCode(PIN_CODE).build(); + + Employee.Builder builder = new Employee.Builder(); + + Employee employee = builder.setName("baeldung").setAge(10).setDesignation("author").setEmail("abc@xyz.com").setSupervisorName("Admin").setPhoneNumber(4445566).setPermanent(true).setRole("developer").setAddress(address).build(); + + // then + assertTrue(employee.getAddress().getPinCode().get() == PIN_CODE); + + } + + @Test + public void whenOptionalFields_thenReturnEmployeeWithEmptyValues() { + + // when + Address.Builder addressBuilder = new Address.Builder(); + Address address = addressBuilder.setCity(CITY_NAME).build(); + + Employee.Builder builder = new Employee.Builder(); + + Employee employee = builder.setName("baeldung").setAge(10).setDesignation("author").setEmail("abc@xyz.com").setSupervisorName("Admin").setPhoneNumber(4445566).setNullablePermanent(null).setDateOfJoining(Optional.empty()).setRole("developer") + .setAddress(address).build(); + + // then + assertFalse(employee.getDateOfJoining().isPresent()); + + } + + @Test + public void whenNullableFields_thenReturnEmployeeWithNullValueForField() { + + // when + Address.Builder addressBuilder = new Address.Builder(); + Address address = addressBuilder.setCity(CITY_NAME).build(); + + Employee.Builder builder = new Employee.Builder(); + + Employee employee = builder.setName("baeldung").setAge(10).setDesignation("author").setEmail("abc@xyz.com").setSupervisorName("Admin").setPhoneNumber(4445566).setNullablePermanent(null).setDateOfJoining(Optional.empty()).setRole("developer") + .setAddress(address).build(); + + // then + assertNull(employee.getCurrentProject()); + + } + + @Test + public void whenCollectionFields_thenReturnEmployeeWithValues() { + + // when + Address.Builder addressBuilder = new Address.Builder(); + Address address = addressBuilder.setCity(CITY_NAME).build(); + + Employee.Builder builder = new Employee.Builder(); + + Employee employee = builder.setName("baeldung").setAge(10).setDesignation("author").setEmail("abc@xyz.com").setSupervisorName("Admin").setPhoneNumber(4445566).setNullablePermanent(null).setDateOfJoining(Optional.empty()).setRole("developer") + .addAccessTokens(1221819L).addAccessTokens(1223441L, 134567L).setAddress(address).build(); + + // then + assertTrue(employee.getAccessTokens().size() == 3); + + } + + @Test + public void whenMapFields_thenReturnEmployeeWithValues() { + + // when + Address.Builder addressBuilder = new Address.Builder(); + Address address = addressBuilder.setCity(CITY_NAME).build(); + + Employee.Builder builder = new Employee.Builder(); + + Employee employee = builder.setName("baeldung").setAge(10).setDesignation("author").setEmail("abc@xyz.com").setSupervisorName("Admin").setPhoneNumber(4445566).setNullablePermanent(null).setDateOfJoining(Optional.empty()).setRole("developer") + .addAccessTokens(1221819L).addAccessTokens(1223441L, 134567L).putAssetsSerialIdMapping("Laptop", 12345L).setAddress(address).build(); + + // then + assertTrue(employee.getAssetsSerialIdMapping().size() == 1); + + } + + @Test + public void whenNestedBuilderTypes_thenReturnEmployeeWithValues() { + + // when + Address.Builder addressBuilder = new Address.Builder(); + Address address = addressBuilder.setCity(CITY_NAME).build(); + + Employee.Builder builder = new Employee.Builder(); + + Employee employee = builder.setName("baeldung").setAge(10).setDesignation("author").setEmail("abc@xyz.com").setSupervisorName("Admin").setPhoneNumber(4445566).setNullablePermanent(null).setDateOfJoining(Optional.empty()).setRole("developer") + .addAccessTokens(1221819L).addAccessTokens(1223441L, 134567L).putAssetsSerialIdMapping("Laptop", 12345L).setAddress(address).mutateAddress(a -> a.setPinCode(112200)).build(); + + // then + assertTrue(employee.getAssetsSerialIdMapping().size() == 1); + + } + + @Test() + public void whenPartialEmployeeWithValidEmail_thenReturnEmployeeWithEmail() { + + // when + Employee.Builder builder = new Employee.Builder(); + + Employee employee = builder.setName("baeldung") + .setAge(10) + .setEmail("abc@xyz.com") + .buildPartial(); + + assertNotNull(employee.getEmail()); + } + +} diff --git a/libraries-2/src/test/java/com/baeldung/freebuilder/builder/classic/EmployeeBuilderUnitTest.java b/libraries-2/src/test/java/com/baeldung/freebuilder/builder/classic/EmployeeBuilderUnitTest.java new file mode 100644 index 000000000000..930820009c72 --- /dev/null +++ b/libraries-2/src/test/java/com/baeldung/freebuilder/builder/classic/EmployeeBuilderUnitTest.java @@ -0,0 +1,32 @@ +package com.baeldung.freebuilder.builder.classic; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + + +class EmployeeBuilderUnitTest { + + private static final String CITY = "New York"; + + @Test + public void whenBuildEmployeeWithAddress_thenReturnEmployeeWithValidAddress() { + + // when + Employee.Builder emplBuilder = new Employee.Builder(); + + Employee employee = emplBuilder + .setName("baeldung") + .setAge(12) + .setDepartment("Builder Pattern") + .setDesignation("Author") + .setEmail("abc@xyz.com") + .setPermanent(true) + .setSupervisorName("Admin") + .setPhoneNumber(4445566) + .build(); + + //then + Assertions.assertTrue(employee.getAddress().getCity().equalsIgnoreCase(CITY)); + } + +} \ No newline at end of file diff --git a/pom.xml b/pom.xml index 05c719ec7cea..90cea73a9d3a 100644 --- a/pom.xml +++ b/pom.xml @@ -1571,7 +1571,7 @@ 0.3.1 2.5.1 0.0.1 - 3.8 + 3.7 2.3 3.8 From e40946249a032155615d0e63800edb5081aa74fe Mon Sep 17 00:00:00 2001 From: Chirag Dewan Date: Wed, 17 Jul 2019 08:54:01 +0530 Subject: [PATCH 10/99] BAEL-2990 Automatic generation of the Builder pattern with FreeBuilder --- .../builder/classic/EmployeeBuilderUnitTest.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/libraries-2/src/test/java/com/baeldung/freebuilder/builder/classic/EmployeeBuilderUnitTest.java b/libraries-2/src/test/java/com/baeldung/freebuilder/builder/classic/EmployeeBuilderUnitTest.java index 930820009c72..5040bfc9e05d 100644 --- a/libraries-2/src/test/java/com/baeldung/freebuilder/builder/classic/EmployeeBuilderUnitTest.java +++ b/libraries-2/src/test/java/com/baeldung/freebuilder/builder/classic/EmployeeBuilderUnitTest.java @@ -6,16 +6,16 @@ class EmployeeBuilderUnitTest { - private static final String CITY = "New York"; + public static final String NAME = "baeldung"; @Test - public void whenBuildEmployeeWithAddress_thenReturnEmployeeWithValidAddress() { + public void whenBuildEmployee_thenReturnValidEmployee() { // when Employee.Builder emplBuilder = new Employee.Builder(); Employee employee = emplBuilder - .setName("baeldung") + .setName(NAME) .setAge(12) .setDepartment("Builder Pattern") .setDesignation("Author") @@ -26,7 +26,7 @@ public void whenBuildEmployeeWithAddress_thenReturnEmployeeWithValidAddress() { .build(); //then - Assertions.assertTrue(employee.getAddress().getCity().equalsIgnoreCase(CITY)); + Assertions.assertTrue(employee.getName().equalsIgnoreCase(NAME)); } } \ No newline at end of file From ce7c3067f2d88311981891efc55498a95bb0244b Mon Sep 17 00:00:00 2001 From: Chirag Dewan Date: Wed, 17 Jul 2019 10:19:50 +0530 Subject: [PATCH 11/99] BAEL-2990 Automatic generation of the Builder pattern with FreeBuilder --- .../freebuilder/EmployeeBuilderUnitTest.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/libraries-2/src/test/java/com/baeldung/freebuilder/EmployeeBuilderUnitTest.java b/libraries-2/src/test/java/com/baeldung/freebuilder/EmployeeBuilderUnitTest.java index e3a9e4963358..abdd213de5bb 100644 --- a/libraries-2/src/test/java/com/baeldung/freebuilder/EmployeeBuilderUnitTest.java +++ b/libraries-2/src/test/java/com/baeldung/freebuilder/EmployeeBuilderUnitTest.java @@ -1,16 +1,16 @@ package com.baeldung.freebuilder; -import com.baeldung.freebuilder.builder.classic.Address; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - -import java.util.Optional; - import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; +import java.util.Optional; + +import org.junit.jupiter.api.Test; + +import com.baeldung.freebuilder.builder.classic.Address; + public class EmployeeBuilderUnitTest { private static final int PIN_CODE = 223344; From 3671997f72973e616dfa357658c75966a9263b21 Mon Sep 17 00:00:00 2001 From: Kamlesh Kumar Date: Sun, 14 Jul 2019 14:13:41 +0530 Subject: [PATCH 12/99] BAEL-3042 DynamicUpdate annotation example --- .../dynamicupdate/AccountRepository.java | 11 +++ .../dynamicupdate/DynamicUpdateConfig.java | 80 +++++++++++++++ .../dynamicupdate/model/Account.java | 97 +++++++++++++++++++ .../src/main/resources/logback.xml | 36 +++---- .../DynamicUpdateIntegrationTest.java | 44 +++++++++ 5 files changed, 250 insertions(+), 18 deletions(-) create mode 100644 persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/hibernate/dynamicupdate/AccountRepository.java create mode 100644 persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/hibernate/dynamicupdate/DynamicUpdateConfig.java create mode 100644 persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/hibernate/dynamicupdate/model/Account.java create mode 100644 persistence-modules/spring-hibernate-5/src/test/java/com/baeldung/hibernate/dynamicupdate/DynamicUpdateIntegrationTest.java diff --git a/persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/hibernate/dynamicupdate/AccountRepository.java b/persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/hibernate/dynamicupdate/AccountRepository.java new file mode 100644 index 000000000000..2fb26c2db67d --- /dev/null +++ b/persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/hibernate/dynamicupdate/AccountRepository.java @@ -0,0 +1,11 @@ +package com.baeldung.hibernate.dynamicupdate; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import com.baeldung.hibernate.dynamicupdate.model.Account; + +@Repository +public interface AccountRepository extends JpaRepository { + +} diff --git a/persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/hibernate/dynamicupdate/DynamicUpdateConfig.java b/persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/hibernate/dynamicupdate/DynamicUpdateConfig.java new file mode 100644 index 000000000000..4871a3d1e2e0 --- /dev/null +++ b/persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/hibernate/dynamicupdate/DynamicUpdateConfig.java @@ -0,0 +1,80 @@ +package com.baeldung.hibernate.dynamicupdate; + +import java.util.Properties; + +import javax.persistence.EntityManagerFactory; +import javax.sql.DataSource; + +import org.apache.tomcat.dbcp.dbcp2.BasicDataSource; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.PropertySource; +import org.springframework.core.env.Environment; +import org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor; +import org.springframework.data.jpa.repository.config.EnableJpaRepositories; +import org.springframework.orm.jpa.JpaTransactionManager; +import org.springframework.orm.jpa.JpaVendorAdapter; +import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; +import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter; +import org.springframework.transaction.PlatformTransactionManager; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +import com.google.common.base.Preconditions; + +@EnableTransactionManagement +@Configuration +@PropertySource({ "classpath:persistence-h2.properties" }) +@EnableJpaRepositories(basePackages = { "com.baeldung.hibernate.dynamicupdate" }) +@ComponentScan({ "com.baeldung.hibernate.dynamicupdate" }) +public class DynamicUpdateConfig { + + @Autowired + private Environment env; + + @Bean + public LocalContainerEntityManagerFactoryBean entityManagerFactory() { + LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean(); + em.setDataSource(dataSource()); + em.setPackagesToScan(new String[] { "com.baeldung.hibernate.dynamicupdate.model" }); + + JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); + em.setJpaVendorAdapter(vendorAdapter); + em.setJpaProperties(additionalProperties()); + + return em; + } + + @Bean + public DataSource dataSource() { + final BasicDataSource dataSource = new BasicDataSource(); + dataSource.setDriverClassName(Preconditions.checkNotNull(env.getProperty("jdbc.driverClassName"))); + dataSource.setUrl(Preconditions.checkNotNull(env.getProperty("jdbc.url"))); + dataSource.setUsername(env.getProperty("jdbc.user")); + dataSource.setPassword(env.getProperty("jdbc.pass")); + + return dataSource; + } + + @Bean + public PlatformTransactionManager transactionManager(EntityManagerFactory emf) { + JpaTransactionManager transactionManager = new JpaTransactionManager(); + transactionManager.setEntityManagerFactory(emf); + + return transactionManager; + } + + @Bean + public PersistenceExceptionTranslationPostProcessor exceptionTranslation() { + return new PersistenceExceptionTranslationPostProcessor(); + } + + Properties additionalProperties() { + Properties properties = new Properties(); + properties.setProperty("hibernate.hbm2ddl.auto", Preconditions.checkNotNull(env.getProperty("hibernate.hbm2ddl.auto"))); + properties.setProperty("hibernate.dialect", Preconditions.checkNotNull(env.getProperty("hibernate.dialect"))); + properties.setProperty("hibernate.show_sql", "true"); + return properties; + } +} \ No newline at end of file diff --git a/persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/hibernate/dynamicupdate/model/Account.java b/persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/hibernate/dynamicupdate/model/Account.java new file mode 100644 index 000000000000..b3753112fead --- /dev/null +++ b/persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/hibernate/dynamicupdate/model/Account.java @@ -0,0 +1,97 @@ +package com.baeldung.hibernate.dynamicupdate.model; + +import java.text.MessageFormat; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; + +import org.hibernate.annotations.DynamicUpdate; + +@Entity +@DynamicUpdate +public class Account { + + @Id + private int id; + + @Column + private String name; + + @Column + private String type; + + @Column + private boolean active; + + public Account() { + } + + public Account(int id, String name, String type, boolean active) { + super(); + this.id = id; + this.name = name; + this.type = type; + this.active = active; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public boolean isActive() { + return active; + } + + public void setActive(boolean active) { + this.active = active; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + id; + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Account other = (Account) obj; + if (id != other.id) + return false; + return true; + } + + @Override + public String toString() { + return MessageFormat.format("id:{0}, name:{1}, active:{2}, type:{3}", id, name, active, type); + } + +} diff --git a/persistence-modules/spring-hibernate-5/src/main/resources/logback.xml b/persistence-modules/spring-hibernate-5/src/main/resources/logback.xml index ec0dc2469ae0..035520aa15e9 100644 --- a/persistence-modules/spring-hibernate-5/src/main/resources/logback.xml +++ b/persistence-modules/spring-hibernate-5/src/main/resources/logback.xml @@ -1,19 +1,19 @@ - - - - - web - %date [%thread] %-5level %logger{36} - %message%n - - - - - - - - - - - - - + + + + + web - %date [%thread] %-5level %logger{36} - %message%n + + + + + + + + + + + + + \ No newline at end of file diff --git a/persistence-modules/spring-hibernate-5/src/test/java/com/baeldung/hibernate/dynamicupdate/DynamicUpdateIntegrationTest.java b/persistence-modules/spring-hibernate-5/src/test/java/com/baeldung/hibernate/dynamicupdate/DynamicUpdateIntegrationTest.java new file mode 100644 index 000000000000..fc183d1f1938 --- /dev/null +++ b/persistence-modules/spring-hibernate-5/src/test/java/com/baeldung/hibernate/dynamicupdate/DynamicUpdateIntegrationTest.java @@ -0,0 +1,44 @@ +package com.baeldung.hibernate.dynamicupdate; + +import javax.transaction.Transactional; + +import org.junit.FixMethodOrder; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.MethodSorters; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.annotation.Commit; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.AnnotationConfigContextLoader; + +import com.baeldung.hibernate.dynamicupdate.model.Account; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = DynamicUpdateConfig.class, loader = AnnotationConfigContextLoader.class) +@Transactional +@FixMethodOrder(MethodSorters.NAME_ASCENDING) +public class DynamicUpdateIntegrationTest { + + private static final Integer ACCOUNT_ID = 1; + + @Autowired + private AccountRepository accountRepository; + + @Test + @Commit + public void testA_whenTestAccountIsSaved_thenSuccess() { + Account account = new Account(ACCOUNT_ID, "account1", "regional", true); + accountRepository.save(account); + } + + @Test + @Commit + // Enable Hibernate's debug logging in logback.xml to see the generated SQL statement. + public void testB_whenAccountNameUpdated_thenSuccess() { + Account account = accountRepository.findOne(ACCOUNT_ID); + account.setName("Test Account"); + accountRepository.save(account); + } + +} From 97e38d338ff145cff3f069d4de86dbc1e0fdd21d Mon Sep 17 00:00:00 2001 From: Chirag Dewan Date: Wed, 24 Jul 2019 21:32:42 +0530 Subject: [PATCH 13/99] BAEL-2990 Automatic generation of the Builder pattern with FreeBuilder --- .../com/baeldung/freebuilder/Employee.java | 2 + .../freebuilder/builder/classic/Employee.java | 138 +----------------- .../freebuilder/EmployeeBuilderUnitTest.java | 18 ++- .../classic/EmployeeBuilderUnitTest.java | 5 - 4 files changed, 23 insertions(+), 140 deletions(-) diff --git a/libraries-2/src/main/java/com/baeldung/freebuilder/Employee.java b/libraries-2/src/main/java/com/baeldung/freebuilder/Employee.java index 08470cc5cd82..d486c18a065f 100644 --- a/libraries-2/src/main/java/com/baeldung/freebuilder/Employee.java +++ b/libraries-2/src/main/java/com/baeldung/freebuilder/Employee.java @@ -41,6 +41,8 @@ public interface Employee { Map getAssetsSerialIdMapping(); + Optional getSalaryInUSD(); + class Builder extends Employee_Builder { diff --git a/libraries-2/src/main/java/com/baeldung/freebuilder/builder/classic/Employee.java b/libraries-2/src/main/java/com/baeldung/freebuilder/builder/classic/Employee.java index bd9c8b0a1742..6509676cb496 100644 --- a/libraries-2/src/main/java/com/baeldung/freebuilder/builder/classic/Employee.java +++ b/libraries-2/src/main/java/com/baeldung/freebuilder/builder/classic/Employee.java @@ -2,61 +2,16 @@ public class Employee { - private String name; - private int age; - private String department; - private String role; - private String supervisorName; - private String designation; - private String email; - private long phoneNumber; - private boolean isPermanent; - private Address address; + private final String name; + private final int age; + private final String department; - private Employee() { - - } - - private void setName(String name) { + private Employee(String name, int age, String department) { this.name = name; - } - - private void setAge(int age) { this.age = age; - } - - private void setDepartment(String department) { this.department = department; } - private void setRole(String role) { - this.role = role; - } - - private void setSupervisorName(String supervisorName) { - this.supervisorName = supervisorName; - } - - private void setDesignation(String designation) { - this.designation = designation; - } - - private void setEmail(String email) { - this.email = email; - } - - private void setPhoneNumber(long phoneNumber) { - this.phoneNumber = phoneNumber; - } - - private void setPermanent(boolean permanent) { - isPermanent = permanent; - } - - private void setAddress(Address address) { - this.address = address; - } - public String getName() { return name; } @@ -69,46 +24,11 @@ public String getDepartment() { return department; } - public String getRole() { - return role; - } - - public String getSupervisorName() { - return supervisorName; - } - - public String getDesignation() { - return designation; - } - - public String getEmail() { - return email; - } - - public long getPhoneNumber() { - return phoneNumber; - } - - public boolean isPermanent() { - return isPermanent; - } - - public Address getAddress() { - return address; - } - public static class Builder { private String name; private int age; private String department; - private String role; - private String supervisorName; - private String designation; - private String email; - private long phoneNumber; - private boolean isPermanent; - private Address address; public Builder setName(String name) { this.name = name; @@ -125,56 +45,8 @@ public Builder setDepartment(String department) { return this; } - public Builder setRole(String role) { - this.role = role; - return this; - } - - public Builder setSupervisorName(String supervisorName) { - this.supervisorName = supervisorName; - return this; - } - - public Builder setDesignation(String designation) { - this.designation = designation; - return this; - } - - public Builder setEmail(String email) { - this.email = email; - return this; - } - - public Builder setPhoneNumber(long phoneNumber) { - this.phoneNumber = phoneNumber; - return this; - } - - public Builder setPermanent(boolean permanent) { - isPermanent = permanent; - return this; - } - - public Builder setAddress(Address address) { - this.address = address; - return this; - } - public Employee build() { - Employee employee = new Employee(); - employee.setName(this.name); - employee.setAge(this.age); - employee.setDepartment(this.department); - employee.setAddress(this.address); - employee.setDesignation(this.designation); - employee.setEmail(this.email); - employee.setPermanent(this.isPermanent); - employee.setName(this.name); - employee.setSupervisorName(this.supervisorName); - employee.setPhoneNumber(this.phoneNumber); - - return employee; - + return new Employee(name, age, department); } } diff --git a/libraries-2/src/test/java/com/baeldung/freebuilder/EmployeeBuilderUnitTest.java b/libraries-2/src/test/java/com/baeldung/freebuilder/EmployeeBuilderUnitTest.java index abdd213de5bb..c73e2be8a62a 100644 --- a/libraries-2/src/test/java/com/baeldung/freebuilder/EmployeeBuilderUnitTest.java +++ b/libraries-2/src/test/java/com/baeldung/freebuilder/EmployeeBuilderUnitTest.java @@ -15,6 +15,8 @@ public class EmployeeBuilderUnitTest { private static final int PIN_CODE = 223344; public static final String CITY_NAME = "New York"; + public static final int INPUT_SALARY_EUROS = 10000; + public static final double EUROS_TO_USD_RATIO = 0.6; @Test public void whenBuildEmployeeWithAddress_thenReturnEmployeeWithValidAddress() { @@ -33,15 +35,27 @@ public void whenBuildEmployeeWithAddress_thenReturnEmployeeWithValidAddress() { } @Test - public void whenMapPincodeInAddress_thenReturnEmployeeWithValidAddressPincode() { + public void whenMapSalary_thenReturnEmployeeWithSalaryInUSD() { // when Address.Builder addressBuilder = new Address.Builder(); Address address = addressBuilder.setCity(CITY_NAME).setPinCode(PIN_CODE).build(); + long salaryInEuros = INPUT_SALARY_EUROS; Employee.Builder builder = new Employee.Builder(); - Employee employee = builder.setName("baeldung").setAge(10).setDesignation("author").setEmail("abc@xyz.com").setSupervisorName("Admin").setPhoneNumber(4445566).setPermanent(true).setRole("developer").setAddress(address).build(); + Employee employee = builder + .setName("baeldung") + .setAge(10) + .setDesignation("author") + .setEmail("abc@xyz.com") + .setSupervisorName("Admin") + .setPhoneNumber(4445566) + .setPermanent(true) + .setRole("developer") + .setAddress(address) + .mapSalaryInUSD(sal -> salaryInEuros * EUROS_TO_USD_RATIO) + .build(); // then assertTrue(employee.getAddress().getPinCode().get() == PIN_CODE); diff --git a/libraries-2/src/test/java/com/baeldung/freebuilder/builder/classic/EmployeeBuilderUnitTest.java b/libraries-2/src/test/java/com/baeldung/freebuilder/builder/classic/EmployeeBuilderUnitTest.java index 5040bfc9e05d..e54a1dbd7812 100644 --- a/libraries-2/src/test/java/com/baeldung/freebuilder/builder/classic/EmployeeBuilderUnitTest.java +++ b/libraries-2/src/test/java/com/baeldung/freebuilder/builder/classic/EmployeeBuilderUnitTest.java @@ -18,11 +18,6 @@ public void whenBuildEmployee_thenReturnValidEmployee() { .setName(NAME) .setAge(12) .setDepartment("Builder Pattern") - .setDesignation("Author") - .setEmail("abc@xyz.com") - .setPermanent(true) - .setSupervisorName("Admin") - .setPhoneNumber(4445566) .build(); //then From a49bd1ad2b2c02117be79d21d936025fa28a428c Mon Sep 17 00:00:00 2001 From: Anshul Bansal Date: Sat, 27 Jul 2019 19:25:02 +0300 Subject: [PATCH 14/99] BAEL-2781 - metaprogramming in groovy --- .../baeldung/metaprogramming/Employee.groovy | 42 +++++++ .../extension/BasicExtensions.groovy | 30 +++++ .../extension/StaticEmployeeExtension.groovy | 10 ++ ...rg.codehaus.groovy.runtime.ExtensionModule | 4 + .../MetaprogrammingUnitTest.groovy | 115 ++++++++++++++++++ 5 files changed, 201 insertions(+) create mode 100644 core-groovy-2/src/main/groovy/com/baeldung/metaprogramming/Employee.groovy create mode 100644 core-groovy-2/src/main/groovy/com/baeldung/metaprogramming/extension/BasicExtensions.groovy create mode 100644 core-groovy-2/src/main/groovy/com/baeldung/metaprogramming/extension/StaticEmployeeExtension.groovy create mode 100644 core-groovy-2/src/main/resources/META-INF/services/org.codehaus.groovy.runtime.ExtensionModule create mode 100644 core-groovy-2/src/test/groovy/com/baeldung/metaprogramming/MetaprogrammingUnitTest.groovy diff --git a/core-groovy-2/src/main/groovy/com/baeldung/metaprogramming/Employee.groovy b/core-groovy-2/src/main/groovy/com/baeldung/metaprogramming/Employee.groovy new file mode 100644 index 000000000000..34ca8014d4a6 --- /dev/null +++ b/core-groovy-2/src/main/groovy/com/baeldung/metaprogramming/Employee.groovy @@ -0,0 +1,42 @@ +package com.baeldung.metaprogramming + +import groovy.transform.AutoClone +import groovy.transform.Canonical +import groovy.transform.EqualsAndHashCode +import groovy.transform.ToString +import groovy.transform.TupleConstructor +import groovy.util.logging.* + +@Canonical +@TupleConstructor +@EqualsAndHashCode +@ToString(includePackage=false, excludes=['id']) +//@Singleton +@Log +@AutoClone +class Employee { + + long id + String firstName + String lastName + int age + + //method to catch missing property's getter + def propertyMissing(String propertyName) { + log.info "$propertyName is not available" + "property '$propertyName' is not available" + } + + //method to catch missing property's setter + def propertyMissing(String propertyName, propertyValue) { + println "property '$propertyName' is not available" + log.info "$propertyName is not available" + "property '$propertyName' is not available" + } + + def methodMissing(String methodName, def methodArgs) { + log.info "$methodName is not defined" + "method '$methodName' is not defined" + } + +} \ No newline at end of file diff --git a/core-groovy-2/src/main/groovy/com/baeldung/metaprogramming/extension/BasicExtensions.groovy b/core-groovy-2/src/main/groovy/com/baeldung/metaprogramming/extension/BasicExtensions.groovy new file mode 100644 index 000000000000..65591cae8d1c --- /dev/null +++ b/core-groovy-2/src/main/groovy/com/baeldung/metaprogramming/extension/BasicExtensions.groovy @@ -0,0 +1,30 @@ +package com.baeldung.metaprogramming.extension + +import com.baeldung.metaprogramming.Employee + +class BasicExtensions { + + static int getYearOfBirth(Employee self) { + return (new Date().getYear() + 1900) - self.age; + } + + static String capitalize(String self) { + return self.substring(0, 1).toUpperCase() + self.substring(1) + } + + static void printCounter(Integer self) { + while (self>0) { + println self + self-- + } + } + + static Long square(Long self) { + return self*self + } + + static BigDecimal cube(BigDecimal self) { + return self*self*self + } + +} \ No newline at end of file diff --git a/core-groovy-2/src/main/groovy/com/baeldung/metaprogramming/extension/StaticEmployeeExtension.groovy b/core-groovy-2/src/main/groovy/com/baeldung/metaprogramming/extension/StaticEmployeeExtension.groovy new file mode 100644 index 000000000000..ab2aac38ea61 --- /dev/null +++ b/core-groovy-2/src/main/groovy/com/baeldung/metaprogramming/extension/StaticEmployeeExtension.groovy @@ -0,0 +1,10 @@ +package com.baeldung.metaprogramming.extension + +import com.baeldung.metaprogramming.Employee + +class StaticEmployeeExtension { + + static Employee getDefaultObj(Employee self) { + return new Employee(firstName: "firstName", lastName: "lastName", age: 20) + } +} \ No newline at end of file diff --git a/core-groovy-2/src/main/resources/META-INF/services/org.codehaus.groovy.runtime.ExtensionModule b/core-groovy-2/src/main/resources/META-INF/services/org.codehaus.groovy.runtime.ExtensionModule new file mode 100644 index 000000000000..967108b84696 --- /dev/null +++ b/core-groovy-2/src/main/resources/META-INF/services/org.codehaus.groovy.runtime.ExtensionModule @@ -0,0 +1,4 @@ +moduleName=core-groovy-2 +moduleVersion=1.0-SNAPSHOT +extensionClasses=com.baeldung.metaprogramming.extension.BasicExtensions +staticExtensionClasses=com.baeldung.metaprogramming.extension.StaticEmployeeExtension diff --git a/core-groovy-2/src/test/groovy/com/baeldung/metaprogramming/MetaprogrammingUnitTest.groovy b/core-groovy-2/src/test/groovy/com/baeldung/metaprogramming/MetaprogrammingUnitTest.groovy new file mode 100644 index 000000000000..bafd1f8a6305 --- /dev/null +++ b/core-groovy-2/src/test/groovy/com/baeldung/metaprogramming/MetaprogrammingUnitTest.groovy @@ -0,0 +1,115 @@ +package com.baeldung.metaprogramming + +import groovy.time.TimeCategory + +class MetaprogrammingUnitTest extends GroovyTestCase { + + Employee emp = new Employee(firstName: "Norman", lastName: "Lewis") + + void testPropertyMissing() { + assert emp.address == "property 'address' is not available" + } + + void testMethodMissing() { + Employee emp = new Employee() + try { + emp.getFullName() + } catch(MissingMethodException e) { + println "method is not defined" + } + assert emp.getFullName() == "method 'getFullName' is not defined" + } + + void testMetaClassProperty() { + Employee.metaClass.address = "" + emp = new Employee(firstName: "Norman", lastName: "Lewis", address: "US") + assert emp.address == "US" + } + + void testMetaClassMethod() { + emp.metaClass.getFullName = { + "$lastName, $firstName" + } + assert emp.getFullName() == "Lewis, Norman" + } + + void testMetaClassConstructor() { + try { + Employee emp = new Employee("Norman") + } catch(GroovyRuntimeException e) { + assert e.message == "Could not find matching constructor for: com.baeldung.metaprogramming.Employee(String)" + } + + Employee.metaClass.constructor = { String firstName -> + new Employee(firstName: firstName) + } + + Employee norman = new Employee("Norman") + assert norman.firstName == "Norman" + assert norman.lastName == null + } + + void testJavaMetaClass() { + String.metaClass.capitalize = { String str -> + str.substring(0, 1).toUpperCase() + str.substring(1); + } + assert "norman".capitalize() == "Norman" + } + + void testEmployeeExtension() { + Employee emp = new Employee(age: 28) + assert emp.getYearOfBirth() == 1991 + } + + void testJavaClassesExtensions() { + 5.printCounter() + + assert 40l.square() == 1600l + + assert (2.98).cube() == 26.463592 + } + + void testStaticEmployeeExtension() { + assert Employee.getDefaultObj().firstName == "firstName" + assert Employee.getDefaultObj().lastName == "lastName" + assert Employee.getDefaultObj().age == 20 + } + + void testToStringAnnotation() { + Employee employee = new Employee() + employee.id = 1 + employee.firstName = "norman" + employee.lastName = "lewis" + employee.age = 28 + + assert employee.toString() == "Employee(norman, lewis, 28)" + } + + void testTupleConstructorAnnotation() { + Employee norman = new Employee(1, "norman", "lewis", 28) + assert norman.toString() == "Employee(norman, lewis, 28)" + + Employee snape = new Employee(2, "snape") + assert snape.toString() == "Employee(snape, null, 0)" + + } + + void testEqualsAndHashCodeAnnotation() { + Employee norman = new Employee(1, "norman", "lewis", 28) + Employee normanCopy = new Employee(1, "norman", "lewis", 28) + assert norman == normanCopy + assert norman.hashCode() == normanCopy.hashCode() + } + + void testAutoCloneAnnotation() { + try { + Employee norman = new Employee(1, "norman", "lewis", 28) + def normanCopy = norman.clone() + assert norman == normanCopy + } catch(CloneNotSupportedException e) { + e.printStackTrace() + } + + } + +} \ No newline at end of file From 6eb4d1088624fee518b16480cfa80b40a58fb01d Mon Sep 17 00:00:00 2001 From: Anshul Bansal Date: Sat, 27 Jul 2019 19:26:59 +0300 Subject: [PATCH 15/99] BAEL-2781 - metaprogramming in groovy --- .../src/main/groovy/com/baeldung/metaprogramming/Employee.groovy | 1 - 1 file changed, 1 deletion(-) diff --git a/core-groovy-2/src/main/groovy/com/baeldung/metaprogramming/Employee.groovy b/core-groovy-2/src/main/groovy/com/baeldung/metaprogramming/Employee.groovy index 34ca8014d4a6..d0af18fe3d10 100644 --- a/core-groovy-2/src/main/groovy/com/baeldung/metaprogramming/Employee.groovy +++ b/core-groovy-2/src/main/groovy/com/baeldung/metaprogramming/Employee.groovy @@ -11,7 +11,6 @@ import groovy.util.logging.* @TupleConstructor @EqualsAndHashCode @ToString(includePackage=false, excludes=['id']) -//@Singleton @Log @AutoClone class Employee { From 6a29eab8209128fd479544dd29cb7d7afb768805 Mon Sep 17 00:00:00 2001 From: Chirag Dewan Date: Sun, 28 Jul 2019 16:05:17 +0530 Subject: [PATCH 16/99] BAEL-2990 Automatic generation of the Builder pattern with FreeBuilder --- .../freebuilder/EmployeeBuilderUnitTest.java | 85 ++++++++++++++++--- 1 file changed, 74 insertions(+), 11 deletions(-) diff --git a/libraries-2/src/test/java/com/baeldung/freebuilder/EmployeeBuilderUnitTest.java b/libraries-2/src/test/java/com/baeldung/freebuilder/EmployeeBuilderUnitTest.java index c73e2be8a62a..fef60d9e7c7a 100644 --- a/libraries-2/src/test/java/com/baeldung/freebuilder/EmployeeBuilderUnitTest.java +++ b/libraries-2/src/test/java/com/baeldung/freebuilder/EmployeeBuilderUnitTest.java @@ -27,7 +27,16 @@ public void whenBuildEmployeeWithAddress_thenReturnEmployeeWithValidAddress() { Employee.Builder builder = new Employee.Builder(); - Employee employee = builder.setName("baeldung").setAge(10).setDesignation("author").setEmail("abc@xyz.com").setSupervisorName("Admin").setPhoneNumber(4445566).setPermanent(true).setRole("developer").setAddress(address).build(); + Employee employee = builder.setName("baeldung") + .setAge(10) + .setDesignation("author") + .setEmail("abc@xyz.com") + .setSupervisorName("Admin") + .setPhoneNumber(4445566) + .setPermanent(true) + .setRole("developer") + .setAddress(address) + .build(); // then assertTrue(employee.getAddress().getCity().equalsIgnoreCase(CITY_NAME)); @@ -71,8 +80,17 @@ public void whenOptionalFields_thenReturnEmployeeWithEmptyValues() { Employee.Builder builder = new Employee.Builder(); - Employee employee = builder.setName("baeldung").setAge(10).setDesignation("author").setEmail("abc@xyz.com").setSupervisorName("Admin").setPhoneNumber(4445566).setNullablePermanent(null).setDateOfJoining(Optional.empty()).setRole("developer") - .setAddress(address).build(); + Employee employee = builder.setName("baeldung") + .setAge(10) + .setDesignation("author") + .setEmail("abc@xyz.com") + .setSupervisorName("Admin") + .setPhoneNumber(4445566) + .setNullablePermanent(null) + .setDateOfJoining(Optional.empty()) + .setRole("developer") + .setAddress(address) + .build(); // then assertFalse(employee.getDateOfJoining().isPresent()); @@ -88,8 +106,17 @@ public void whenNullableFields_thenReturnEmployeeWithNullValueForField() { Employee.Builder builder = new Employee.Builder(); - Employee employee = builder.setName("baeldung").setAge(10).setDesignation("author").setEmail("abc@xyz.com").setSupervisorName("Admin").setPhoneNumber(4445566).setNullablePermanent(null).setDateOfJoining(Optional.empty()).setRole("developer") - .setAddress(address).build(); + Employee employee = builder.setName("baeldung") + .setAge(10) + .setDesignation("author") + .setEmail("abc@xyz.com") + .setSupervisorName("Admin") + .setPhoneNumber(4445566) + .setNullablePermanent(null) + .setDateOfJoining(Optional.empty()) + .setRole("developer") + .setAddress(address) + .build(); // then assertNull(employee.getCurrentProject()); @@ -105,8 +132,19 @@ public void whenCollectionFields_thenReturnEmployeeWithValues() { Employee.Builder builder = new Employee.Builder(); - Employee employee = builder.setName("baeldung").setAge(10).setDesignation("author").setEmail("abc@xyz.com").setSupervisorName("Admin").setPhoneNumber(4445566).setNullablePermanent(null).setDateOfJoining(Optional.empty()).setRole("developer") - .addAccessTokens(1221819L).addAccessTokens(1223441L, 134567L).setAddress(address).build(); + Employee employee = builder.setName("baeldung") + .setAge(10) + .setDesignation("author") + .setEmail("abc@xyz.com") + .setSupervisorName("Admin") + .setPhoneNumber(4445566) + .setNullablePermanent(null) + .setDateOfJoining(Optional.empty()) + .setRole("developer") + .addAccessTokens(1221819L) + .addAccessTokens(1223441L, 134567L) + .setAddress(address) + .build(); // then assertTrue(employee.getAccessTokens().size() == 3); @@ -122,8 +160,20 @@ public void whenMapFields_thenReturnEmployeeWithValues() { Employee.Builder builder = new Employee.Builder(); - Employee employee = builder.setName("baeldung").setAge(10).setDesignation("author").setEmail("abc@xyz.com").setSupervisorName("Admin").setPhoneNumber(4445566).setNullablePermanent(null).setDateOfJoining(Optional.empty()).setRole("developer") - .addAccessTokens(1221819L).addAccessTokens(1223441L, 134567L).putAssetsSerialIdMapping("Laptop", 12345L).setAddress(address).build(); + Employee employee = builder.setName("baeldung") + .setAge(10) + .setDesignation("author") + .setEmail("abc@xyz.com") + .setSupervisorName("Admin") + .setPhoneNumber(4445566) + .setNullablePermanent(null) + .setDateOfJoining(Optional.empty()) + .setRole("developer") + .addAccessTokens(1221819L) + .addAccessTokens(1223441L, 134567L) + .putAssetsSerialIdMapping("Laptop", 12345L) + .setAddress(address) + .build(); // then assertTrue(employee.getAssetsSerialIdMapping().size() == 1); @@ -139,8 +189,21 @@ public void whenNestedBuilderTypes_thenReturnEmployeeWithValues() { Employee.Builder builder = new Employee.Builder(); - Employee employee = builder.setName("baeldung").setAge(10).setDesignation("author").setEmail("abc@xyz.com").setSupervisorName("Admin").setPhoneNumber(4445566).setNullablePermanent(null).setDateOfJoining(Optional.empty()).setRole("developer") - .addAccessTokens(1221819L).addAccessTokens(1223441L, 134567L).putAssetsSerialIdMapping("Laptop", 12345L).setAddress(address).mutateAddress(a -> a.setPinCode(112200)).build(); + Employee employee = builder.setName("baeldung") + .setAge(10) + .setDesignation("author") + .setEmail("abc@xyz.com") + .setSupervisorName("Admin") + .setPhoneNumber(4445566) + .setNullablePermanent(null) + .setDateOfJoining(Optional.empty()) + .setRole("developer") + .addAccessTokens(1221819L) + .addAccessTokens(1223441L, 134567L) + .putAssetsSerialIdMapping("Laptop", 12345L) + .setAddress(address) + .mutateAddress(a -> a.setPinCode(112200)) + .build(); // then assertTrue(employee.getAssetsSerialIdMapping().size() == 1); From f71224ed2cda1ab093764347ca636c412b111ff8 Mon Sep 17 00:00:00 2001 From: Chirag Dewan Date: Mon, 29 Jul 2019 21:15:24 +0530 Subject: [PATCH 17/99] BAEL-2990 Automatic generation of the Builder pattern with FreeBuilder --- .../com/baeldung/freebuilder/EmployeeBuilderUnitTest.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/libraries-2/src/test/java/com/baeldung/freebuilder/EmployeeBuilderUnitTest.java b/libraries-2/src/test/java/com/baeldung/freebuilder/EmployeeBuilderUnitTest.java index fef60d9e7c7a..4427d3cb6956 100644 --- a/libraries-2/src/test/java/com/baeldung/freebuilder/EmployeeBuilderUnitTest.java +++ b/libraries-2/src/test/java/com/baeldung/freebuilder/EmployeeBuilderUnitTest.java @@ -86,13 +86,14 @@ public void whenOptionalFields_thenReturnEmployeeWithEmptyValues() { .setEmail("abc@xyz.com") .setSupervisorName("Admin") .setPhoneNumber(4445566) - .setNullablePermanent(null) - .setDateOfJoining(Optional.empty()) + .setPermanent(true) .setRole("developer") .setAddress(address) .build(); // then + assertTrue(employee.getPermanent().isPresent()); + assertTrue(employee.getPermanent().get()); assertFalse(employee.getDateOfJoining().isPresent()); } From 6fe2a0fdcc679e454a1231caeb55f40f543145d4 Mon Sep 17 00:00:00 2001 From: Anshul Bansal Date: Mon, 29 Jul 2019 20:57:12 +0300 Subject: [PATCH 18/99] BAEL-2781 - metaprogramming in groovy - review fixes --- .../groovy/com/baeldung/metaprogramming/Employee.groovy | 4 ++++ .../metaprogramming/MetaprogrammingUnitTest.groovy | 7 +++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/core-groovy-2/src/main/groovy/com/baeldung/metaprogramming/Employee.groovy b/core-groovy-2/src/main/groovy/com/baeldung/metaprogramming/Employee.groovy index d0af18fe3d10..f49d0f906b68 100644 --- a/core-groovy-2/src/main/groovy/com/baeldung/metaprogramming/Employee.groovy +++ b/core-groovy-2/src/main/groovy/com/baeldung/metaprogramming/Employee.groovy @@ -37,5 +37,9 @@ class Employee { log.info "$methodName is not defined" "method '$methodName' is not defined" } + + def logEmp() { + log.info "Employee: $lastName, $firstName is of $age years age" + } } \ No newline at end of file diff --git a/core-groovy-2/src/test/groovy/com/baeldung/metaprogramming/MetaprogrammingUnitTest.groovy b/core-groovy-2/src/test/groovy/com/baeldung/metaprogramming/MetaprogrammingUnitTest.groovy index bafd1f8a6305..8066b10f9b95 100644 --- a/core-groovy-2/src/test/groovy/com/baeldung/metaprogramming/MetaprogrammingUnitTest.groovy +++ b/core-groovy-2/src/test/groovy/com/baeldung/metaprogramming/MetaprogrammingUnitTest.groovy @@ -97,7 +97,7 @@ class MetaprogrammingUnitTest extends GroovyTestCase { void testEqualsAndHashCodeAnnotation() { Employee norman = new Employee(1, "norman", "lewis", 28) Employee normanCopy = new Employee(1, "norman", "lewis", 28) - assert norman == normanCopy + assert norman.equals(normanCopy) assert norman.hashCode() == normanCopy.hashCode() } @@ -109,7 +109,10 @@ class MetaprogrammingUnitTest extends GroovyTestCase { } catch(CloneNotSupportedException e) { e.printStackTrace() } - } + void testLoggingAnnotation() { + Employee employee = new Employee(1, "Norman", "Lewis", 28) + employee.logEmp() + } } \ No newline at end of file From b04073514dd57a1a2ed14e86598fae9dc02af252 Mon Sep 17 00:00:00 2001 From: isaolmez Date: Wed, 31 Jul 2019 12:09:36 +0300 Subject: [PATCH 19/99] BAEL-3014: Updated the example --- .../src/main/resources/templates/lists/contains.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-thymeleaf-2/src/main/resources/templates/lists/contains.html b/spring-thymeleaf-2/src/main/resources/templates/lists/contains.html index a1db0f02625d..2d874791d7cf 100644 --- a/spring-thymeleaf-2/src/main/resources/templates/lists/contains.html +++ b/spring-thymeleaf-2/src/main/resources/templates/lists/contains.html @@ -7,6 +7,6 @@ myList contains red: -myList contains red and green: +myList contains red and green: From b91a78aa0d4674342b147370dcaffa7d14b4cf52 Mon Sep 17 00:00:00 2001 From: dupirefr Date: Fri, 2 Aug 2019 06:32:25 +0200 Subject: [PATCH 20/99] [BAEL-2996] Moved code from libraries2 to java-math --- java-math/pom.xml | 36 +++++++++++++++++++ .../MatrixMultiplicationBenchmarking.java | 0 .../matrices/apache/RealMatrixUnitTest.java | 0 .../matrices/colt/DoubleMatrix2DUnitTest.java | 0 .../matrices/ejml/SimpleMatrixUnitTest.java | 0 .../homemade/HomemadeMatrixUnitTest.java | 0 .../matrices/la4j/Basic2DMatrixUnitTest.java | 0 .../matrices/nd4j/INDArrayUnitTest.java | 0 libraries-2/pom.xml | 36 ------------------- 9 files changed, 36 insertions(+), 36 deletions(-) rename {libraries-2 => java-math}/src/test/java/com/baeldung/matrices/MatrixMultiplicationBenchmarking.java (100%) rename {libraries-2 => java-math}/src/test/java/com/baeldung/matrices/apache/RealMatrixUnitTest.java (100%) rename {libraries-2 => java-math}/src/test/java/com/baeldung/matrices/colt/DoubleMatrix2DUnitTest.java (100%) rename {libraries-2 => java-math}/src/test/java/com/baeldung/matrices/ejml/SimpleMatrixUnitTest.java (100%) rename {libraries-2 => java-math}/src/test/java/com/baeldung/matrices/homemade/HomemadeMatrixUnitTest.java (100%) rename {libraries-2 => java-math}/src/test/java/com/baeldung/matrices/la4j/Basic2DMatrixUnitTest.java (100%) rename {libraries-2 => java-math}/src/test/java/com/baeldung/matrices/nd4j/INDArrayUnitTest.java (100%) diff --git a/java-math/pom.xml b/java-math/pom.xml index f71577b707cb..b5c31c4487cc 100644 --- a/java-math/pom.xml +++ b/java-math/pom.xml @@ -17,6 +17,26 @@ commons-math3 ${commons-math3.version} + + org.ejml + ejml-all + ${ejml.version} + + + org.nd4j + nd4j-native + ${nd4j.version} + + + org.la4j + la4j + ${la4j.version} + + + colt + colt + ${colt.version} + com.google.guava guava @@ -44,6 +64,17 @@ combinatoricslib3 ${combinatoricslib3.version} + + + org.openjdk.jmh + jmh-core + ${jmh.version} + + + org.openjdk.jmh + jmh-generator-annprocess + ${jmh.version} + @@ -64,6 +95,11 @@ 1.11 27.0.1-jre 3.3.0 + 0.38 + 1.0.0-beta4 + 1.2.0 + 0.6.0 + 1.19 \ No newline at end of file diff --git a/libraries-2/src/test/java/com/baeldung/matrices/MatrixMultiplicationBenchmarking.java b/java-math/src/test/java/com/baeldung/matrices/MatrixMultiplicationBenchmarking.java similarity index 100% rename from libraries-2/src/test/java/com/baeldung/matrices/MatrixMultiplicationBenchmarking.java rename to java-math/src/test/java/com/baeldung/matrices/MatrixMultiplicationBenchmarking.java diff --git a/libraries-2/src/test/java/com/baeldung/matrices/apache/RealMatrixUnitTest.java b/java-math/src/test/java/com/baeldung/matrices/apache/RealMatrixUnitTest.java similarity index 100% rename from libraries-2/src/test/java/com/baeldung/matrices/apache/RealMatrixUnitTest.java rename to java-math/src/test/java/com/baeldung/matrices/apache/RealMatrixUnitTest.java diff --git a/libraries-2/src/test/java/com/baeldung/matrices/colt/DoubleMatrix2DUnitTest.java b/java-math/src/test/java/com/baeldung/matrices/colt/DoubleMatrix2DUnitTest.java similarity index 100% rename from libraries-2/src/test/java/com/baeldung/matrices/colt/DoubleMatrix2DUnitTest.java rename to java-math/src/test/java/com/baeldung/matrices/colt/DoubleMatrix2DUnitTest.java diff --git a/libraries-2/src/test/java/com/baeldung/matrices/ejml/SimpleMatrixUnitTest.java b/java-math/src/test/java/com/baeldung/matrices/ejml/SimpleMatrixUnitTest.java similarity index 100% rename from libraries-2/src/test/java/com/baeldung/matrices/ejml/SimpleMatrixUnitTest.java rename to java-math/src/test/java/com/baeldung/matrices/ejml/SimpleMatrixUnitTest.java diff --git a/libraries-2/src/test/java/com/baeldung/matrices/homemade/HomemadeMatrixUnitTest.java b/java-math/src/test/java/com/baeldung/matrices/homemade/HomemadeMatrixUnitTest.java similarity index 100% rename from libraries-2/src/test/java/com/baeldung/matrices/homemade/HomemadeMatrixUnitTest.java rename to java-math/src/test/java/com/baeldung/matrices/homemade/HomemadeMatrixUnitTest.java diff --git a/libraries-2/src/test/java/com/baeldung/matrices/la4j/Basic2DMatrixUnitTest.java b/java-math/src/test/java/com/baeldung/matrices/la4j/Basic2DMatrixUnitTest.java similarity index 100% rename from libraries-2/src/test/java/com/baeldung/matrices/la4j/Basic2DMatrixUnitTest.java rename to java-math/src/test/java/com/baeldung/matrices/la4j/Basic2DMatrixUnitTest.java diff --git a/libraries-2/src/test/java/com/baeldung/matrices/nd4j/INDArrayUnitTest.java b/java-math/src/test/java/com/baeldung/matrices/nd4j/INDArrayUnitTest.java similarity index 100% rename from libraries-2/src/test/java/com/baeldung/matrices/nd4j/INDArrayUnitTest.java rename to java-math/src/test/java/com/baeldung/matrices/nd4j/INDArrayUnitTest.java diff --git a/libraries-2/pom.xml b/libraries-2/pom.xml index ff73888b69ce..83adf1e199db 100644 --- a/libraries-2/pom.xml +++ b/libraries-2/pom.xml @@ -59,26 +59,6 @@ picocli ${picocli.version} - - org.ejml - ejml-all - ${ejml.version} - - - org.nd4j - nd4j-native - ${nd4j.version} - - - org.la4j - la4j - ${la4j.version} - - - colt - colt - ${colt.version} - org.springframework.boot spring-boot-starter @@ -127,17 +107,6 @@ handlebars ${handlebars.version} - - - org.openjdk.jmh - jmh-core - ${jmh.version} - - - org.openjdk.jmh - jmh-generator-annprocess - ${jmh.version} - org.apache.mesos mesos @@ -154,11 +123,6 @@ 3.17.2 4.4.0 2.1.4.RELEASE - 0.38 - 1.0.0-beta4 - 1.2.0 - 0.6.0 - 1.19 0.28.3 1.1.0 3.14.2 From 02223e66a136acefca19fee9968cff1059ca745d Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 2 Aug 2019 21:47:18 +0800 Subject: [PATCH 21/99] Create README.md --- persistence-modules/spring-boot-mysql/README.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 persistence-modules/spring-boot-mysql/README.md diff --git a/persistence-modules/spring-boot-mysql/README.md b/persistence-modules/spring-boot-mysql/README.md new file mode 100644 index 000000000000..a5043f965deb --- /dev/null +++ b/persistence-modules/spring-boot-mysql/README.md @@ -0,0 +1,3 @@ +## Relevant Articles: + +- [Setting the MySQL JDBC Timezone Using Spring Boot Configuration](https://www.baeldung.com/mysql-jdbc-timezone-spring-boot) From 1cf79d80ffdd91e43e3ec65364c9b27d52a72d4b Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 2 Aug 2019 21:48:49 +0800 Subject: [PATCH 22/99] Update README.MD --- java-strings-2/README.MD | 1 + 1 file changed, 1 insertion(+) diff --git a/java-strings-2/README.MD b/java-strings-2/README.MD index b4b16fbaef51..5bdf5a6a90cd 100644 --- a/java-strings-2/README.MD +++ b/java-strings-2/README.MD @@ -20,3 +20,4 @@ - [Check If a String Contains Multiple Keywords](https://www.baeldung.com/string-contains-multiple-words) - [Blank and Empty Strings in Java](https://www.baeldung.com/java-blank-empty-strings) - [String Initialization in Java](https://www.baeldung.com/java-string-initialization) +- [Java Multi-line String](https://www.baeldung.com/java-multiline-string) From b024a85833192c3c684e98065d08ce95e7c41e6f Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 2 Aug 2019 21:49:32 +0800 Subject: [PATCH 23/99] Update README.MD --- java-strings-2/README.MD | 1 + 1 file changed, 1 insertion(+) diff --git a/java-strings-2/README.MD b/java-strings-2/README.MD index 5bdf5a6a90cd..44a19a3dd8a2 100644 --- a/java-strings-2/README.MD +++ b/java-strings-2/README.MD @@ -21,3 +21,4 @@ - [Blank and Empty Strings in Java](https://www.baeldung.com/java-blank-empty-strings) - [String Initialization in Java](https://www.baeldung.com/java-string-initialization) - [Java Multi-line String](https://www.baeldung.com/java-multiline-string) +- [Checking If a String Is a Repeated Substring](https://www.baeldung.com/java-repeated-substring) From 2e41eaed79e160d7da3f8d66a31d315e9f4ded18 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 2 Aug 2019 21:50:28 +0800 Subject: [PATCH 24/99] Update README.md --- libraries-2/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries-2/README.md b/libraries-2/README.md index 1b042ac3c576..cb5898d30779 100644 --- a/libraries-2/README.md +++ b/libraries-2/README.md @@ -1,4 +1,3 @@ - ### Relevant Articles: - [A Guide to jBPM with Java](https://www.baeldung.com/jbpm-java) @@ -8,3 +7,4 @@ - [Templating with Handlebars](https://www.baeldung.com/handlebars) - [A Guide to Crawler4j](https://www.baeldung.com/crawler4j) - [Decode an OkHttp JSON Response](https://www.baeldung.com/okhttp-json-response) +- [Key Value Store with Chronicle Map](https://www.baeldung.com/java-chronicle-map) From 0978e1369258031234a4ce804ea684a4915786c5 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 2 Aug 2019 21:51:57 +0800 Subject: [PATCH 25/99] Update README.md --- java-dates-2/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/java-dates-2/README.md b/java-dates-2/README.md index 35286115d4c5..b2f8319e58f8 100644 --- a/java-dates-2/README.md +++ b/java-dates-2/README.md @@ -1,3 +1,4 @@ ## Relevant Articles: - [Converting Between LocalDate and XMLGregorianCalendar](https://www.baeldung.com/java-localdate-to-xmlgregoriancalendar) - [Convert Time to Milliseconds in Java](https://www.baeldung.com/java-time-milliseconds) +- [Check If a String Is a Valid Date in Java](https://www.baeldung.com/java-string-valid-date) From 05321a2244e8cde207323b9c5cfa3ba0225483bd Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 2 Aug 2019 21:52:27 +0800 Subject: [PATCH 26/99] Update README.md --- libraries-2/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries-2/README.md b/libraries-2/README.md index cb5898d30779..6890b29f7bed 100644 --- a/libraries-2/README.md +++ b/libraries-2/README.md @@ -1,4 +1,4 @@ -### Relevant Articles: +## Relevant Articles: - [A Guide to jBPM with Java](https://www.baeldung.com/jbpm-java) - [Guide to Classgraph Library](https://www.baeldung.com/classgraph) From 6cfd5ad56420601582c5b8978a17ccd6a4f09464 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 2 Aug 2019 21:54:04 +0800 Subject: [PATCH 27/99] Update README.md --- core-java-modules/core-java-lang-syntax/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/core-java-modules/core-java-lang-syntax/README.md b/core-java-modules/core-java-lang-syntax/README.md index 81c3d6c35415..3293e9b23dee 100644 --- a/core-java-modules/core-java-lang-syntax/README.md +++ b/core-java-modules/core-java-lang-syntax/README.md @@ -18,3 +18,4 @@ - [The Modulo Operator in Java](https://www.baeldung.com/modulo-java) - [Ternary Operator In Java](https://www.baeldung.com/java-ternary-operator) - [Java instanceof Operator](https://www.baeldung.com/java-instanceof) +- [Breaking Out of Nested Loops](https://www.baeldung.com/java-breaking-out-nested-loop) From 3403f6d0903c142377673b36108aeb9ac9444dd7 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 2 Aug 2019 21:55:24 +0800 Subject: [PATCH 28/99] Create README.MD --- spring-core-2/README.MD | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 spring-core-2/README.MD diff --git a/spring-core-2/README.MD b/spring-core-2/README.MD new file mode 100644 index 000000000000..4c9e3b9ddf1d --- /dev/null +++ b/spring-core-2/README.MD @@ -0,0 +1,3 @@ +## Relevant Articles: + +- [Understanding getBean() in Spring](https://www.baeldung.com/spring-getbean) From dbf578320538b8722cde711e233bed308d608e0f Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 2 Aug 2019 21:56:28 +0800 Subject: [PATCH 29/99] Update README.md --- testing-modules/junit-5-advanced/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/testing-modules/junit-5-advanced/README.md b/testing-modules/junit-5-advanced/README.md index 7282a4efad0c..61a65b2e5a9e 100644 --- a/testing-modules/junit-5-advanced/README.md +++ b/testing-modules/junit-5-advanced/README.md @@ -1,3 +1,4 @@ -### Relevant Articles +## Relevant Articles: - [JUnit 5 TestWatcher API](https://www.baeldung.com/junit-testwatcher) +- [JUnit Custom Display Name Generator API](https://www.baeldung.com/junit-custom-display-name-generator) From 7c90eb4bb154f462b4ed52e46cad0c15f5a5af1f Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 2 Aug 2019 21:57:11 +0800 Subject: [PATCH 30/99] Update README.md --- xstream/README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/xstream/README.md b/xstream/README.md index e8302c14efcb..bf917e81fb34 100644 --- a/xstream/README.md +++ b/xstream/README.md @@ -1,4 +1,6 @@ -### Relevant Articles: +## Relevant Articles: + - [XStream User Guide: JSON](http://www.baeldung.com/xstream-json-processing) - [XStream User Guide: Converting XML to Objects](http://www.baeldung.com/xstream-deserialize-xml-to-object) - [XStream User Guide: Converting Objects to XML](http://www.baeldung.com/xstream-serialize-object-to-xml) +- [Remote Code Execution with XStream](https://www.baeldung.com/java-xstream-remote-code-execution) From 7cb114e51734659bc335cabbb93e30d9e6b3a60d Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 2 Aug 2019 21:58:47 +0800 Subject: [PATCH 31/99] Create README.MD --- .../spring-cloud-stream/spring-cloud-stream-kafka/README.MD | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 spring-cloud/spring-cloud-stream/spring-cloud-stream-kafka/README.MD diff --git a/spring-cloud/spring-cloud-stream/spring-cloud-stream-kafka/README.MD b/spring-cloud/spring-cloud-stream/spring-cloud-stream-kafka/README.MD new file mode 100644 index 000000000000..81e0ffe5c863 --- /dev/null +++ b/spring-cloud/spring-cloud-stream/spring-cloud-stream-kafka/README.MD @@ -0,0 +1,3 @@ +## Relevant Articles: + +- [Guide to Spring Cloud Stream with Kafka, Apache Avro and Confluent Schema Registry](https://www.baeldung.com/spring-cloud-stream-kafka-avro-confluent) From 68d69c702e9e307048bcb432b4f7a429b6968c08 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 2 Aug 2019 22:00:13 +0800 Subject: [PATCH 32/99] Create README.MD --- testing-modules/easy-random/README.MD | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 testing-modules/easy-random/README.MD diff --git a/testing-modules/easy-random/README.MD b/testing-modules/easy-random/README.MD new file mode 100644 index 000000000000..117d636bcc3d --- /dev/null +++ b/testing-modules/easy-random/README.MD @@ -0,0 +1,3 @@ +## Relevant Articles: + +- [Quick Guide to EasyRandom in Java](https://www.baeldung.com/java-easy-random) From 87309f94cc3190b482a873c9c57b03169e39899f Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 2 Aug 2019 22:01:20 +0800 Subject: [PATCH 33/99] Update README.md --- jackson-2/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/jackson-2/README.md b/jackson-2/README.md index d8c233a00e28..0af899d474c4 100644 --- a/jackson-2/README.md +++ b/jackson-2/README.md @@ -10,3 +10,4 @@ The "REST With Spring" Classes: http://bit.ly/restwithspring - [How to Process YAML with Jackson](https://www.baeldung.com/jackson-yaml) - [Working with Tree Model Nodes in Jackson](https://www.baeldung.com/jackson-json-node-tree-model) - [Converting JSON to CSV in Java](https://www.baeldung.com/java-converting-json-to-csv) +- [Compare Two JSON Objects with Jackson](https://www.baeldung.com/jackson-compare-two-json-objects) From bc33ce423555c8bc0b333bb60df9391410be725a Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 2 Aug 2019 22:01:37 +0800 Subject: [PATCH 34/99] Update README.md --- jackson-2/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackson-2/README.md b/jackson-2/README.md index 0af899d474c4..bb2a58483f68 100644 --- a/jackson-2/README.md +++ b/jackson-2/README.md @@ -2,7 +2,7 @@ ## Jackson Cookbooks and Examples -###The Course +### The Course The "REST With Spring" Classes: http://bit.ly/restwithspring ### Relevant Articles: From 394de10d754b482604d88d1b1263ed3ffef003c1 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 2 Aug 2019 22:02:44 +0800 Subject: [PATCH 35/99] Update README.md --- spring-boot-data/README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/spring-boot-data/README.md b/spring-boot-data/README.md index 3fd1d1799464..6f0b8c8123b6 100644 --- a/spring-boot-data/README.md +++ b/spring-boot-data/README.md @@ -1,3 +1,5 @@ -### Relevant Articles: +## Relevant Articles: + - [Formatting JSON Dates in Spring Boot](https://www.baeldung.com/spring-boot-formatting-json-dates) - [Rendering Exceptions in JSON with Spring](https://www.baeldung.com/spring-exceptions-json) +- [Disable Spring Data Auto Configuration](https://www.baeldung.com/spring-data-disable-auto-config) From 364823c9d489e6294e88e1bfd937ff0aaaa6a56b Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 2 Aug 2019 22:03:41 +0800 Subject: [PATCH 36/99] Update README.md --- libraries-2/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/libraries-2/README.md b/libraries-2/README.md index 6890b29f7bed..6b98e9572523 100644 --- a/libraries-2/README.md +++ b/libraries-2/README.md @@ -8,3 +8,4 @@ - [A Guide to Crawler4j](https://www.baeldung.com/crawler4j) - [Decode an OkHttp JSON Response](https://www.baeldung.com/okhttp-json-response) - [Key Value Store with Chronicle Map](https://www.baeldung.com/java-chronicle-map) +- [Matrix Multiplication in Java](https://www.baeldung.com/java-matrix-multiplication) From 7050b07c95bf80e8656f0473b9c5e298f56370f5 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 2 Aug 2019 22:05:01 +0800 Subject: [PATCH 37/99] Update README.md --- core-java-modules/core-java-8-2/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/core-java-modules/core-java-8-2/README.md b/core-java-modules/core-java-8-2/README.md index 245fa93ba74c..d11510b2aa30 100644 --- a/core-java-modules/core-java-8-2/README.md +++ b/core-java-modules/core-java-8-2/README.md @@ -7,3 +7,4 @@ - [How to Delay Code Execution in Java](https://www.baeldung.com/java-delay-code-execution) - [Run JAR Application With Command Line Arguments](https://www.baeldung.com/java-run-jar-with-arguments) - [Java 8 Stream skip() vs limit()](https://www.baeldung.com/java-stream-skip-vs-limit) +- [Guide to Java BiFunction Interface](https://www.baeldung.com/java-bifunction-interface) From a2ed702b3407f070968e68cf0f054fd0bacdc906 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 2 Aug 2019 22:06:10 +0800 Subject: [PATCH 38/99] Update README.md --- core-java-modules/core-java-arrays/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/core-java-modules/core-java-arrays/README.md b/core-java-modules/core-java-arrays/README.md index b5f71cc253b4..398ba5b37628 100644 --- a/core-java-modules/core-java-arrays/README.md +++ b/core-java-modules/core-java-arrays/README.md @@ -16,3 +16,4 @@ - [Sorting Arrays in Java](https://www.baeldung.com/java-sorting-arrays) - [Convert a Float to a Byte Array in Java](https://www.baeldung.com/java-convert-float-to-byte-array) - [Converting Between Stream and Array in Java](https://www.baeldung.com/java-stream-to-array) +- [Removing an Element from an Array in Java](https://www.baeldung.com/java-array-remove-element) From 0308c283a60094d922f0e1f6197e78cbcd0a36c8 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 2 Aug 2019 22:08:16 +0800 Subject: [PATCH 39/99] Update README.md --- testing-modules/spring-testing/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/testing-modules/spring-testing/README.md b/testing-modules/spring-testing/README.md index 0970eabeff78..1b06c13953ec 100644 --- a/testing-modules/spring-testing/README.md +++ b/testing-modules/spring-testing/README.md @@ -1,8 +1,8 @@ -### Relevant Articles: +## Relevant Articles: - [Mockito.mock() vs @Mock vs @MockBean](http://www.baeldung.com/java-spring-mockito-mock-mockbean) - [A Quick Guide to @TestPropertySource](https://www.baeldung.com/spring-test-property-source) - [Guide to ReflectionTestUtils for Unit Testing](https://www.baeldung.com/spring-reflection-test-utils) - [How to Test the @Scheduled Annotation](https://www.baeldung.com/spring-testing-scheduled-annotation) - [Using SpringJUnit4ClassRunner with Parameterized](https://www.baeldung.com/springjunit4classrunner-parameterized) -- [Override properties in Spring]() +- [Override Properties in Spring’s Tests](https://www.baeldung.com/spring-tests-override-properties) From d0503696a1dba231ab817ada402a20c2aa98aa35 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 2 Aug 2019 22:09:36 +0800 Subject: [PATCH 40/99] Update README.md --- spring-all/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-all/README.md b/spring-all/README.md index b5e91d8d6048..d3296bd4579b 100644 --- a/spring-all/README.md +++ b/spring-all/README.md @@ -34,3 +34,4 @@ The "REST With Spring" Classes: http://bit.ly/restwithspring - [Spring Events](https://www.baeldung.com/spring-events) - [Spring Null-Safety Annotations](https://www.baeldung.com/spring-null-safety-annotations) - [Using @Autowired in Abstract Classes](https://www.baeldung.com/spring-autowired-abstract-class) +- [The Spring @Qualifier Annotation](https://www.baeldung.com/spring-qualifier-annotation) From 8499cd16e1f7d8f4f47537620214a094b1d45b1c Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 2 Aug 2019 22:11:01 +0800 Subject: [PATCH 41/99] Update and rename README.MD to README.md --- java-strings-2/{README.MD => README.md} | 1 + 1 file changed, 1 insertion(+) rename java-strings-2/{README.MD => README.md} (96%) diff --git a/java-strings-2/README.MD b/java-strings-2/README.md similarity index 96% rename from java-strings-2/README.MD rename to java-strings-2/README.md index 44a19a3dd8a2..ad00bd5799bb 100644 --- a/java-strings-2/README.MD +++ b/java-strings-2/README.md @@ -22,3 +22,4 @@ - [String Initialization in Java](https://www.baeldung.com/java-string-initialization) - [Java Multi-line String](https://www.baeldung.com/java-multiline-string) - [Checking If a String Is a Repeated Substring](https://www.baeldung.com/java-repeated-substring) +- [How to Reverse a String in Java](https://www.baeldung.com/java-reverse-string) From 93426ca6a40feb46c92fad78b30f00097ac87367 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 2 Aug 2019 22:11:16 +0800 Subject: [PATCH 42/99] Update README.md --- java-strings-2/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-strings-2/README.md b/java-strings-2/README.md index ad00bd5799bb..ac44d06e1f34 100644 --- a/java-strings-2/README.md +++ b/java-strings-2/README.md @@ -1,4 +1,4 @@ -## Relevant Articles +## Relevant Articles: - [Java Localization – Formatting Messages](https://www.baeldung.com/java-localization-messages-formatting) - [Check If a String Contains a Substring](https://www.baeldung.com/java-string-contains-substring) From e2e5a0aa1d2534e8e2a4cf940e2b89c2bd3bcaaa Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 2 Aug 2019 22:12:33 +0800 Subject: [PATCH 43/99] Create README.md --- spring-thymeleaf-2/README.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 spring-thymeleaf-2/README.md diff --git a/spring-thymeleaf-2/README.md b/spring-thymeleaf-2/README.md new file mode 100644 index 000000000000..9bd441a6bda2 --- /dev/null +++ b/spring-thymeleaf-2/README.md @@ -0,0 +1,3 @@ +## Relevant Articles: + +- [Working with Enums in Thymeleaf](https://www.baeldung.com/thymeleaf-enums) From 928727cd17a67a33f7ede93993e08a05b5d63ecc Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 2 Aug 2019 22:14:57 +0800 Subject: [PATCH 44/99] Update README.md --- core-java-modules/core-java-security/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/core-java-modules/core-java-security/README.md b/core-java-modules/core-java-security/README.md index 9526b15be54d..a833ca30bb35 100644 --- a/core-java-modules/core-java-security/README.md +++ b/core-java-modules/core-java-security/README.md @@ -10,3 +10,4 @@ - [SSL Handshake Failures](https://www.baeldung.com/java-ssl-handshake-failures) - [SHA-256 and SHA3-256 Hashing in Java](https://www.baeldung.com/sha-256-hashing-java) - [Enabling TLS v1.2 in Java 7](https://www.baeldung.com/java-7-tls-v12) +- [The Java SecureRandom Class](https://www.baeldung.com/java-secure-random) From 7155e21b9559a6d363b323221c641483bd5a613c Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 2 Aug 2019 22:15:52 +0800 Subject: [PATCH 45/99] Update README.md --- libraries-2/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/libraries-2/README.md b/libraries-2/README.md index 6b98e9572523..349744740c21 100644 --- a/libraries-2/README.md +++ b/libraries-2/README.md @@ -9,3 +9,4 @@ - [Decode an OkHttp JSON Response](https://www.baeldung.com/okhttp-json-response) - [Key Value Store with Chronicle Map](https://www.baeldung.com/java-chronicle-map) - [Matrix Multiplication in Java](https://www.baeldung.com/java-matrix-multiplication) +- [Guide to MapDB](https://www.baeldung.com/mapdb) From 56f64b90d15ec9b9168df1f20a9ce292567ffb40 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 2 Aug 2019 22:16:42 +0800 Subject: [PATCH 46/99] Update README.md --- libraries-2/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/libraries-2/README.md b/libraries-2/README.md index 349744740c21..400aa475d109 100644 --- a/libraries-2/README.md +++ b/libraries-2/README.md @@ -10,3 +10,4 @@ - [Key Value Store with Chronicle Map](https://www.baeldung.com/java-chronicle-map) - [Matrix Multiplication in Java](https://www.baeldung.com/java-matrix-multiplication) - [Guide to MapDB](https://www.baeldung.com/mapdb) +- [A Guide to Apache Mesos](https://www.baeldung.com/apache-mesos) From cc7cd9b3d0b38700c683d0477ed0ccfe5a5b5297 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 2 Aug 2019 22:17:52 +0800 Subject: [PATCH 47/99] Update README.md --- libraries-server/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libraries-server/README.md b/libraries-server/README.md index dc6bcd071619..b5392f588328 100644 --- a/libraries-server/README.md +++ b/libraries-server/README.md @@ -1,4 +1,4 @@ -### Relevant articles +## Relevant Articles: - [Embedded Jetty Server in Java](http://www.baeldung.com/jetty-embedded) - [Introduction to Netty](http://www.baeldung.com/netty) @@ -8,3 +8,4 @@ - [Testing Netty with EmbeddedChannel](http://www.baeldung.com/testing-netty-embedded-channel) - [MQTT Client in Java](https://www.baeldung.com/java-mqtt-client) - [Guide to XMPP Smack Client](https://www.baeldung.com/xmpp-smack-chat-client) +- [A Guide to NanoHTTPD](https://www.baeldung.com/nanohttpd) From 841963c79d43f9177c9202aba26e7d1546f7605c Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 2 Aug 2019 22:19:26 +0800 Subject: [PATCH 48/99] Update README.md --- core-java-modules/core-java-arrays/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core-java-modules/core-java-arrays/README.md b/core-java-modules/core-java-arrays/README.md index 398ba5b37628..45feff3edcad 100644 --- a/core-java-modules/core-java-arrays/README.md +++ b/core-java-modules/core-java-arrays/README.md @@ -7,7 +7,7 @@ - [Check if a Java Array Contains a Value](http://www.baeldung.com/java-array-contains-value) - [Initializing Arrays in Java](http://www.baeldung.com/java-initialize-array) - [Guide to the java.util.Arrays Class](http://www.baeldung.com/java-util-arrays) -- [Jagged Arrays In Java](http://www.baeldung.com/java-jagged-arrays) +- [Multi-Dimensional Arrays In Java](http://www.baeldung.com/java-jagged-arrays) - [Find Sum and Average in a Java Array](http://www.baeldung.com/java-array-sum-average) - [Arrays in Java: A Reference Guide](https://www.baeldung.com/java-arrays-guide) - [How to Invert an Array in Java](http://www.baeldung.com/java-invert-array) From cb3d029a25adcf1c489ec6418e22d80153954ed7 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 2 Aug 2019 22:20:26 +0800 Subject: [PATCH 49/99] Update README.md --- core-java-modules/core-java-nio/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core-java-modules/core-java-nio/README.md b/core-java-modules/core-java-nio/README.md index 9034c3b3b12e..1ac3b6c08932 100644 --- a/core-java-modules/core-java-nio/README.md +++ b/core-java-modules/core-java-nio/README.md @@ -1,3 +1,3 @@ -## Relevant articles: +## Relevant Articles: -- [Determine File Creating Date in Java](https://www.baeldung.com/java-file-creation-date) +- [Determine File Creation Date in Java](https://www.baeldung.com/java-file-creation-date) From e73adef167dcc5a1f569d0c02d2757f602a7277c Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 2 Aug 2019 22:21:42 +0800 Subject: [PATCH 50/99] Update README.md --- algorithms-miscellaneous-3/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/algorithms-miscellaneous-3/README.md b/algorithms-miscellaneous-3/README.md index cd3711d5732a..6a38df484a84 100644 --- a/algorithms-miscellaneous-3/README.md +++ b/algorithms-miscellaneous-3/README.md @@ -1,4 +1,4 @@ -## Relevant articles: +## Relevant Articles: - [Java Two Pointer Technique](https://www.baeldung.com/java-two-pointer-technique) - [Implementing Simple State Machines with Java Enums](https://www.baeldung.com/java-enum-simple-state-machine) From 83458fbaaf22e5eae461ee222cccab1b72905b39 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 2 Aug 2019 22:22:40 +0800 Subject: [PATCH 51/99] Update README.md --- java-strings-2/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java-strings-2/README.md b/java-strings-2/README.md index ac44d06e1f34..55760bfac725 100644 --- a/java-strings-2/README.md +++ b/java-strings-2/README.md @@ -18,7 +18,7 @@ - [Java String Interview Questions and Answers](https://www.baeldung.com/java-string-interview-questions) - [Check if a String is a Pangram in Java](https://www.baeldung.com/java-string-pangram) - [Check If a String Contains Multiple Keywords](https://www.baeldung.com/string-contains-multiple-words) -- [Blank and Empty Strings in Java](https://www.baeldung.com/java-blank-empty-strings) +- [Checking for Empty or Blank Strings in Java](https://www.baeldung.com/java-blank-empty-strings) - [String Initialization in Java](https://www.baeldung.com/java-string-initialization) - [Java Multi-line String](https://www.baeldung.com/java-multiline-string) - [Checking If a String Is a Repeated Substring](https://www.baeldung.com/java-repeated-substring) From c05afcf7d543fe1d26a11406329be9d452c7df0e Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 2 Aug 2019 22:36:33 +0800 Subject: [PATCH 52/99] Rename README.MD to README.md --- spring-core-2/{README.MD => README.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename spring-core-2/{README.MD => README.md} (100%) diff --git a/spring-core-2/README.MD b/spring-core-2/README.md similarity index 100% rename from spring-core-2/README.MD rename to spring-core-2/README.md From d3c8e5529c05ca5aff7c7f92d66c64165a510f04 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 2 Aug 2019 22:37:13 +0800 Subject: [PATCH 53/99] Rename README.MD to README.md --- .../spring-cloud-stream-kafka/{README.MD => README.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename spring-cloud/spring-cloud-stream/spring-cloud-stream-kafka/{README.MD => README.md} (100%) diff --git a/spring-cloud/spring-cloud-stream/spring-cloud-stream-kafka/README.MD b/spring-cloud/spring-cloud-stream/spring-cloud-stream-kafka/README.md similarity index 100% rename from spring-cloud/spring-cloud-stream/spring-cloud-stream-kafka/README.MD rename to spring-cloud/spring-cloud-stream/spring-cloud-stream-kafka/README.md From 0905e07ae1cf83053e68a13454b827fa273f7f27 Mon Sep 17 00:00:00 2001 From: johnA1331 <53036378+johnA1331@users.noreply.github.com> Date: Fri, 2 Aug 2019 22:38:47 +0800 Subject: [PATCH 54/99] Rename README.MD to README.md --- testing-modules/easy-random/{README.MD => README.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename testing-modules/easy-random/{README.MD => README.md} (100%) diff --git a/testing-modules/easy-random/README.MD b/testing-modules/easy-random/README.md similarity index 100% rename from testing-modules/easy-random/README.MD rename to testing-modules/easy-random/README.md From 67d88b93b7c21f76c7a5b74de60952037c22fac5 Mon Sep 17 00:00:00 2001 From: Sjmillington Date: Fri, 2 Aug 2019 16:22:49 +0100 Subject: [PATCH 55/99] [BAEL-16003] Moving article out of libraries (& flink from libraries-data) into libraries-data-2 --- libraries-data-2/README.md | 11 ++ libraries-data-2/log4j.properties | 1 + libraries-data-2/pom.xml | 128 ++++++++++++++ .../main/com/baeldung/docx/Docx4jExample.java | 105 ++++++++++++ .../com/baeldung/flink/FlinkDataPipeline.java | 82 +++++++++ .../main/com/baeldung/flink/LineSplitter.java | 18 ++ .../main/com/baeldung/flink/WordCount.java | 18 ++ .../baeldung/flink/connector/Consumers.java | 32 ++++ .../baeldung/flink/connector/Producers.java | 17 ++ .../main/com/baeldung/flink/model/Backup.java | 27 +++ .../baeldung/flink/model/InputMessage.java | 71 ++++++++ .../flink/operator/BackupAggregator.java | 34 ++++ .../InputMessageTimestampAssigner.java | 23 +++ .../flink/operator/WordsCapitalizer.java | 11 ++ .../schema/BackupSerializationSchema.java | 33 ++++ .../InputMessageDeserializationSchema.java | 32 ++++ .../google/sheets/GoogleAuthorizeUtil.java | 34 ++++ .../google/sheets/SheetsServiceUtil.java | 20 +++ .../infinispan/CacheConfiguration.java | 70 ++++++++ .../infinispan/listener/CacheListener.java | 53 ++++++ .../repository/HelloWorldRepository.java | 15 ++ .../infinispan/service/HelloWorldService.java | 77 +++++++++ .../service/TransactionalService.java | 55 ++++++ .../com/baeldung/measurement/WaterTank.java | 26 +++ .../com/baeldung/opencsv/Application.java | 108 ++++++++++++ .../main/com/baeldung/opencsv/Constants.java | 17 ++ .../com/baeldung/opencsv/beans/CsvBean.java | 3 + .../opencsv/beans/NamedColumnBean.java | 31 ++++ .../opencsv/beans/SimplePositionBean.java | 29 ++++ .../opencsv/beans/WriteExampleBean.java | 40 +++++ .../opencsv/examples/sync/BeanExamples.java | 63 +++++++ .../examples/sync/CsvReaderExamples.java | 63 +++++++ .../examples/sync/CsvWriterExamples.java | 35 ++++ .../com/baeldung/opencsv/helpers/Helpers.java | 108 ++++++++++++ .../baeldung/opencsv/pojos/CsvTransfer.java | 38 +++++ .../smooks/converter/OrderConverter.java | 44 +++++ .../smooks/converter/OrderValidator.java | 27 +++ .../main/com/baeldung/smooks/model/Item.java | 70 ++++++++ .../main/com/baeldung/smooks/model/Order.java | 52 ++++++ .../com/baeldung/smooks/model/Status.java | 5 + .../com/baeldung/smooks/model/Supplier.java | 52 ++++++ .../test/com/baeldung/crdt/CRDTUnitTest.java | 149 ++++++++++++++++ .../flink/BackupCreatorIntegrationTest.java | 104 +++++++++++ .../flink/WordCapitalizerIntegrationTest.java | 34 ++++ .../flink/WordCountIntegrationTest.java | 161 ++++++++++++++++++ .../google/sheets/GoogleSheetsLiveTest.java | 96 +++++++++++ .../hll/HLLLongRunningManualTest.java | 59 +++++++ .../infinispan/AbstractIntegrationTest.java | 57 +++++++ .../HelloWorldServiceTemporaryLiveTest.java | 51 ++++++ .../TransactionalServiceIntegrationTest.java | 21 +++ .../measurement/WaterTankUnitTest.java | 86 ++++++++++ .../opencsv/OpenCsvIntegrationTest.java | 66 +++++++ .../converter/SmooksIntegrationTest.java | 60 +++++++ 53 files changed, 2722 insertions(+) create mode 100644 libraries-data-2/README.md create mode 100644 libraries-data-2/log4j.properties create mode 100644 libraries-data-2/pom.xml create mode 100644 libraries-data-2/src/main/com/baeldung/docx/Docx4jExample.java create mode 100644 libraries-data-2/src/main/com/baeldung/flink/FlinkDataPipeline.java create mode 100644 libraries-data-2/src/main/com/baeldung/flink/LineSplitter.java create mode 100644 libraries-data-2/src/main/com/baeldung/flink/WordCount.java create mode 100644 libraries-data-2/src/main/com/baeldung/flink/connector/Consumers.java create mode 100644 libraries-data-2/src/main/com/baeldung/flink/connector/Producers.java create mode 100644 libraries-data-2/src/main/com/baeldung/flink/model/Backup.java create mode 100644 libraries-data-2/src/main/com/baeldung/flink/model/InputMessage.java create mode 100644 libraries-data-2/src/main/com/baeldung/flink/operator/BackupAggregator.java create mode 100644 libraries-data-2/src/main/com/baeldung/flink/operator/InputMessageTimestampAssigner.java create mode 100644 libraries-data-2/src/main/com/baeldung/flink/operator/WordsCapitalizer.java create mode 100644 libraries-data-2/src/main/com/baeldung/flink/schema/BackupSerializationSchema.java create mode 100644 libraries-data-2/src/main/com/baeldung/flink/schema/InputMessageDeserializationSchema.java create mode 100644 libraries-data-2/src/main/com/baeldung/google/sheets/GoogleAuthorizeUtil.java create mode 100644 libraries-data-2/src/main/com/baeldung/google/sheets/SheetsServiceUtil.java create mode 100644 libraries-data-2/src/main/com/baeldung/infinispan/CacheConfiguration.java create mode 100644 libraries-data-2/src/main/com/baeldung/infinispan/listener/CacheListener.java create mode 100644 libraries-data-2/src/main/com/baeldung/infinispan/repository/HelloWorldRepository.java create mode 100644 libraries-data-2/src/main/com/baeldung/infinispan/service/HelloWorldService.java create mode 100644 libraries-data-2/src/main/com/baeldung/infinispan/service/TransactionalService.java create mode 100644 libraries-data-2/src/main/com/baeldung/measurement/WaterTank.java create mode 100644 libraries-data-2/src/main/com/baeldung/opencsv/Application.java create mode 100644 libraries-data-2/src/main/com/baeldung/opencsv/Constants.java create mode 100644 libraries-data-2/src/main/com/baeldung/opencsv/beans/CsvBean.java create mode 100644 libraries-data-2/src/main/com/baeldung/opencsv/beans/NamedColumnBean.java create mode 100644 libraries-data-2/src/main/com/baeldung/opencsv/beans/SimplePositionBean.java create mode 100644 libraries-data-2/src/main/com/baeldung/opencsv/beans/WriteExampleBean.java create mode 100644 libraries-data-2/src/main/com/baeldung/opencsv/examples/sync/BeanExamples.java create mode 100644 libraries-data-2/src/main/com/baeldung/opencsv/examples/sync/CsvReaderExamples.java create mode 100644 libraries-data-2/src/main/com/baeldung/opencsv/examples/sync/CsvWriterExamples.java create mode 100644 libraries-data-2/src/main/com/baeldung/opencsv/helpers/Helpers.java create mode 100644 libraries-data-2/src/main/com/baeldung/opencsv/pojos/CsvTransfer.java create mode 100644 libraries-data-2/src/main/com/baeldung/smooks/converter/OrderConverter.java create mode 100644 libraries-data-2/src/main/com/baeldung/smooks/converter/OrderValidator.java create mode 100644 libraries-data-2/src/main/com/baeldung/smooks/model/Item.java create mode 100644 libraries-data-2/src/main/com/baeldung/smooks/model/Order.java create mode 100644 libraries-data-2/src/main/com/baeldung/smooks/model/Status.java create mode 100644 libraries-data-2/src/main/com/baeldung/smooks/model/Supplier.java create mode 100644 libraries-data-2/src/test/com/baeldung/crdt/CRDTUnitTest.java create mode 100644 libraries-data-2/src/test/com/baeldung/flink/BackupCreatorIntegrationTest.java create mode 100644 libraries-data-2/src/test/com/baeldung/flink/WordCapitalizerIntegrationTest.java create mode 100644 libraries-data-2/src/test/com/baeldung/flink/WordCountIntegrationTest.java create mode 100644 libraries-data-2/src/test/com/baeldung/google/sheets/GoogleSheetsLiveTest.java create mode 100644 libraries-data-2/src/test/com/baeldung/hll/HLLLongRunningManualTest.java create mode 100644 libraries-data-2/src/test/com/baeldung/infinispan/AbstractIntegrationTest.java create mode 100644 libraries-data-2/src/test/com/baeldung/infinispan/service/HelloWorldServiceTemporaryLiveTest.java create mode 100644 libraries-data-2/src/test/com/baeldung/infinispan/service/TransactionalServiceIntegrationTest.java create mode 100644 libraries-data-2/src/test/com/baeldung/measurement/WaterTankUnitTest.java create mode 100644 libraries-data-2/src/test/com/baeldung/opencsv/OpenCsvIntegrationTest.java create mode 100644 libraries-data-2/src/test/com/baeldung/smooks/converter/SmooksIntegrationTest.java diff --git a/libraries-data-2/README.md b/libraries-data-2/README.md new file mode 100644 index 000000000000..8101138c0e7e --- /dev/null +++ b/libraries-data-2/README.md @@ -0,0 +1,11 @@ +### Relevant articles +- [Introduction to Apache Flink with Java](http://www.baeldung.com/apache-flink) +- [Guide to the HyperLogLog Algorithm](http://www.baeldung.com/java-hyperloglog) +- [Introduction to Conflict-Free Replicated Data Types](http://www.baeldung.com/java-conflict-free-replicated-data-types) +- [Introduction to javax.measure](http://www.baeldung.com/javax-measure) +- [Introduction To Docx4J](http://www.baeldung.com/docx4j) +- [Interact with Google Sheets from Java](http://www.baeldung.com/google-sheets-java-client) +- [Introduction To OpenCSV](http://www.baeldung.com/opencsv) +- [Introduction to Smooks](http://www.baeldung.com/smooks) +- [A Guide to Infinispan in Java](http://www.baeldung.com/infinispan) + diff --git a/libraries-data-2/log4j.properties b/libraries-data-2/log4j.properties new file mode 100644 index 000000000000..2173c5d96f39 --- /dev/null +++ b/libraries-data-2/log4j.properties @@ -0,0 +1 @@ +log4j.rootLogger=INFO, stdout diff --git a/libraries-data-2/pom.xml b/libraries-data-2/pom.xml new file mode 100644 index 000000000000..97820859ba36 --- /dev/null +++ b/libraries-data-2/pom.xml @@ -0,0 +1,128 @@ + + + + 4.0.0 + libraries-http + libraries-http + + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + + + + + org.apache.flink + flink-connector-kafka-0.11_2.11 + ${flink.version} + + + org.apache.flink + flink-streaming-java_2.11 + ${flink.version} + + + org.apache.flink + flink-core + ${flink.version} + + + commons-logging + commons-logging + + + + + org.apache.flink + flink-java + ${flink.version} + + + commons-logging + commons-logging + + + + + org.apache.flink + flink-test-utils_2.11 + ${flink.version} + test + + + net.agkn + hll + ${hll.version} + + + com.netopyr.wurmloch + wurmloch-crdt + ${crdt.version} + + + tec.units + unit-ri + ${unit-ri.version} + + + javax.xml.bind + jaxb-api + ${jaxb-api.version} + + + org.docx4j + docx4j + ${docx4j.version} + + + + com.google.api-client + google-api-client + ${google-api.version} + + + com.google.oauth-client + google-oauth-client-jetty + ${google-api.version} + + + com.google.apis + google-api-services-sheets + ${google-sheets.version} + + + + com.opencsv + opencsv + ${opencsv.version} + + + org.milyn + milyn-smooks-all + ${smooks.version} + + + org.infinispan + infinispan-core + ${infinispan.version} + + + + + + 1.5.0 + 1.6.0 + 0.1.0 + 1.0.3 + 3.3.5 + 2.1 + 1.23.0 + 4.1 + 1.7.0 + 9.1.5.Final + v4-rev493-1.21.0 + + \ No newline at end of file diff --git a/libraries-data-2/src/main/com/baeldung/docx/Docx4jExample.java b/libraries-data-2/src/main/com/baeldung/docx/Docx4jExample.java new file mode 100644 index 000000000000..6fe29d26e321 --- /dev/null +++ b/libraries-data-2/src/main/com/baeldung/docx/Docx4jExample.java @@ -0,0 +1,105 @@ +package com.baeldung.docx; + +import org.docx4j.dml.wordprocessingDrawing.Inline; +import org.docx4j.jaxb.Context; +import org.docx4j.model.table.TblFactory; +import org.docx4j.openpackaging.exceptions.Docx4JException; +import org.docx4j.openpackaging.packages.WordprocessingMLPackage; +import org.docx4j.openpackaging.parts.WordprocessingML.BinaryPartAbstractImage; +import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart; +import org.docx4j.wml.BooleanDefaultTrue; +import org.docx4j.wml.Color; +import org.docx4j.wml.Drawing; +import org.docx4j.wml.ObjectFactory; +import org.docx4j.wml.P; +import org.docx4j.wml.R; +import org.docx4j.wml.RPr; +import org.docx4j.wml.Tbl; +import org.docx4j.wml.Tc; +import org.docx4j.wml.Text; +import org.docx4j.wml.Tr; + +import javax.xml.bind.JAXBElement; +import javax.xml.bind.JAXBException; +import java.io.File; +import java.nio.file.Files; +import java.util.List; + +class Docx4jExample { + + void createDocumentPackage(String outputPath, String imagePath) throws Exception { + WordprocessingMLPackage wordPackage = WordprocessingMLPackage.createPackage(); + MainDocumentPart mainDocumentPart = wordPackage.getMainDocumentPart(); + mainDocumentPart.addStyledParagraphOfText("Title", "Hello World!"); + mainDocumentPart.addParagraphOfText("Welcome To Baeldung!"); + + ObjectFactory factory = Context.getWmlObjectFactory(); + P p = factory.createP(); + R r = factory.createR(); + Text t = factory.createText(); + t.setValue("Welcome To Baeldung"); + r.getContent().add(t); + p.getContent().add(r); + RPr rpr = factory.createRPr(); + BooleanDefaultTrue b = new BooleanDefaultTrue(); + rpr.setB(b); + rpr.setI(b); + rpr.setCaps(b); + Color red = factory.createColor(); + red.setVal("green"); + rpr.setColor(red); + r.setRPr(rpr); + mainDocumentPart.getContent().add(p); + + File image = new File(imagePath); + byte[] fileContent = Files.readAllBytes(image.toPath()); + BinaryPartAbstractImage imagePart = BinaryPartAbstractImage.createImagePart(wordPackage, fileContent); + Inline inline = imagePart.createImageInline("Baeldung Image", "Alt Text", 1, 2, false); + P Imageparagraph = addImageToParagraph(inline); + mainDocumentPart.getContent().add(Imageparagraph); + + int writableWidthTwips = wordPackage.getDocumentModel().getSections().get(0).getPageDimensions().getWritableWidthTwips(); + int columnNumber = 3; + Tbl tbl = TblFactory.createTable(3, 3, writableWidthTwips / columnNumber); + List rows = tbl.getContent(); + for (Object row : rows) { + Tr tr = (Tr) row; + List cells = tr.getContent(); + for (Object cell : cells) { + Tc td = (Tc) cell; + td.getContent().add(p); + } + } + + mainDocumentPart.getContent().add(tbl); + File exportFile = new File(outputPath); + wordPackage.save(exportFile); + } + + boolean isTextExist(String testText) throws Docx4JException, JAXBException { + File doc = new File("helloWorld.docx"); + WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(doc); + MainDocumentPart mainDocumentPart = wordMLPackage.getMainDocumentPart(); + String textNodesXPath = "//w:t"; + List paragraphs = mainDocumentPart.getJAXBNodesViaXPath(textNodesXPath, true); + for (Object obj : paragraphs) { + Text text = (Text) ((JAXBElement) obj).getValue(); + String textValue = text.getValue(); + if (textValue != null && textValue.contains(testText)) { + return true; + } + } + return false; + } + + private static P addImageToParagraph(Inline inline) { + ObjectFactory factory = new ObjectFactory(); + P p = factory.createP(); + R r = factory.createR(); + p.getContent().add(r); + Drawing drawing = factory.createDrawing(); + r.getContent().add(drawing); + drawing.getAnchorOrInline().add(inline); + return p; + } +} diff --git a/libraries-data-2/src/main/com/baeldung/flink/FlinkDataPipeline.java b/libraries-data-2/src/main/com/baeldung/flink/FlinkDataPipeline.java new file mode 100644 index 000000000000..d02b1bcb83db --- /dev/null +++ b/libraries-data-2/src/main/com/baeldung/flink/FlinkDataPipeline.java @@ -0,0 +1,82 @@ +package com.baeldung.flink; + + +import com.baeldung.flink.model.Backup; +import com.baeldung.flink.model.InputMessage; +import com.baeldung.flink.operator.BackupAggregator; +import com.baeldung.flink.operator.InputMessageTimestampAssigner; +import com.baeldung.flink.operator.WordsCapitalizer; +import org.apache.flink.streaming.api.TimeCharacteristic; +import org.apache.flink.streaming.api.datastream.DataStream; +import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; +import org.apache.flink.streaming.api.windowing.time.Time; +import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer011; +import org.apache.flink.streaming.connectors.kafka.FlinkKafkaProducer011; + +import static com.baeldung.flink.connector.Consumers.*; +import static com.baeldung.flink.connector.Producers.*; + +public class FlinkDataPipeline { + + public static void capitalize() throws Exception { + String inputTopic = "flink_input"; + String outputTopic = "flink_output"; + String consumerGroup = "baeldung"; + String address = "localhost:9092"; + + StreamExecutionEnvironment environment = + StreamExecutionEnvironment.getExecutionEnvironment(); + + FlinkKafkaConsumer011 flinkKafkaConsumer = + createStringConsumerForTopic(inputTopic, address, consumerGroup); + flinkKafkaConsumer.setStartFromEarliest(); + + DataStream stringInputStream = + environment.addSource(flinkKafkaConsumer); + + FlinkKafkaProducer011 flinkKafkaProducer = + createStringProducer(outputTopic, address); + + stringInputStream + .map(new WordsCapitalizer()) + .addSink(flinkKafkaProducer); + + environment.execute(); + } + +public static void createBackup () throws Exception { + String inputTopic = "flink_input"; + String outputTopic = "flink_output"; + String consumerGroup = "baeldung"; + String kafkaAddress = "localhost:9092"; + + StreamExecutionEnvironment environment = + StreamExecutionEnvironment.getExecutionEnvironment(); + + environment.setStreamTimeCharacteristic(TimeCharacteristic.EventTime); + + FlinkKafkaConsumer011 flinkKafkaConsumer = + createInputMessageConsumer(inputTopic, kafkaAddress, consumerGroup); + flinkKafkaConsumer.setStartFromEarliest(); + + flinkKafkaConsumer + .assignTimestampsAndWatermarks(new InputMessageTimestampAssigner()); + FlinkKafkaProducer011 flinkKafkaProducer = + createBackupProducer(outputTopic, kafkaAddress); + + DataStream inputMessagesStream = + environment.addSource(flinkKafkaConsumer); + + inputMessagesStream + .timeWindowAll(Time.hours(24)) + .aggregate(new BackupAggregator()) + .addSink(flinkKafkaProducer); + + environment.execute(); +} + + public static void main(String[] args) throws Exception { + createBackup(); + } + +} diff --git a/libraries-data-2/src/main/com/baeldung/flink/LineSplitter.java b/libraries-data-2/src/main/com/baeldung/flink/LineSplitter.java new file mode 100644 index 000000000000..f4e322f1e806 --- /dev/null +++ b/libraries-data-2/src/main/com/baeldung/flink/LineSplitter.java @@ -0,0 +1,18 @@ +package com.baeldung.flink; + +import org.apache.flink.api.common.functions.FlatMapFunction; +import org.apache.flink.api.java.tuple.Tuple2; +import org.apache.flink.util.Collector; + +import java.util.stream.Stream; + +@SuppressWarnings("serial") +public class LineSplitter implements FlatMapFunction> { + + @Override + public void flatMap(String value, Collector> out) { + + String[] tokens = value.toLowerCase().split("\\W+"); + Stream.of(tokens).filter(t -> t.length() > 0).forEach(token -> out.collect(new Tuple2<>(token, 1))); + } +} \ No newline at end of file diff --git a/libraries-data-2/src/main/com/baeldung/flink/WordCount.java b/libraries-data-2/src/main/com/baeldung/flink/WordCount.java new file mode 100644 index 000000000000..fc5064bafa76 --- /dev/null +++ b/libraries-data-2/src/main/com/baeldung/flink/WordCount.java @@ -0,0 +1,18 @@ +package com.baeldung.flink; + +import org.apache.flink.api.java.DataSet; +import org.apache.flink.api.java.ExecutionEnvironment; +import org.apache.flink.api.java.aggregation.Aggregations; +import org.apache.flink.api.java.tuple.Tuple2; + +import java.util.List; + +public class WordCount { + + public static DataSet> startWordCount(ExecutionEnvironment env, List lines) throws Exception { + DataSet text = env.fromCollection(lines); + + return text.flatMap(new LineSplitter()).groupBy(0).aggregate(Aggregations.SUM, 1); + + } +} \ No newline at end of file diff --git a/libraries-data-2/src/main/com/baeldung/flink/connector/Consumers.java b/libraries-data-2/src/main/com/baeldung/flink/connector/Consumers.java new file mode 100644 index 000000000000..514085f9c477 --- /dev/null +++ b/libraries-data-2/src/main/com/baeldung/flink/connector/Consumers.java @@ -0,0 +1,32 @@ +package com.baeldung.flink.connector; + +import com.baeldung.flink.model.InputMessage; +import com.baeldung.flink.schema.InputMessageDeserializationSchema; +import org.apache.flink.api.common.serialization.SimpleStringSchema; +import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer011; + +import java.util.Properties; + +public class Consumers { + +public static FlinkKafkaConsumer011 createStringConsumerForTopic( + String topic, String kafkaAddress, String kafkaGroup ) { + Properties props = new Properties(); + props.setProperty("bootstrap.servers", kafkaAddress); + props.setProperty("group.id",kafkaGroup); + FlinkKafkaConsumer011 consumer = + new FlinkKafkaConsumer011<>(topic, new SimpleStringSchema(),props); + + return consumer; +} + + public static FlinkKafkaConsumer011 createInputMessageConsumer(String topic, String kafkaAddress, String kafkaGroup ) { + Properties properties = new Properties(); + properties.setProperty("bootstrap.servers", kafkaAddress); + properties.setProperty("group.id",kafkaGroup); + FlinkKafkaConsumer011 consumer = new FlinkKafkaConsumer011( + topic, new InputMessageDeserializationSchema(),properties); + + return consumer; + } +} diff --git a/libraries-data-2/src/main/com/baeldung/flink/connector/Producers.java b/libraries-data-2/src/main/com/baeldung/flink/connector/Producers.java new file mode 100644 index 000000000000..8e6f3f8f372a --- /dev/null +++ b/libraries-data-2/src/main/com/baeldung/flink/connector/Producers.java @@ -0,0 +1,17 @@ +package com.baeldung.flink.connector; + +import com.baeldung.flink.model.Backup; +import com.baeldung.flink.schema.BackupSerializationSchema; +import org.apache.flink.api.common.serialization.SimpleStringSchema; +import org.apache.flink.streaming.connectors.kafka.FlinkKafkaProducer011; + +public class Producers { + + public static FlinkKafkaProducer011 createStringProducer(String topic, String kafkaAddress) { + return new FlinkKafkaProducer011<>(kafkaAddress, topic, new SimpleStringSchema()); + } + + public static FlinkKafkaProducer011 createBackupProducer(String topic, String kafkaAddress) { + return new FlinkKafkaProducer011(kafkaAddress, topic, new BackupSerializationSchema()); + } +} diff --git a/libraries-data-2/src/main/com/baeldung/flink/model/Backup.java b/libraries-data-2/src/main/com/baeldung/flink/model/Backup.java new file mode 100644 index 000000000000..268ceec7f349 --- /dev/null +++ b/libraries-data-2/src/main/com/baeldung/flink/model/Backup.java @@ -0,0 +1,27 @@ +package com.baeldung.flink.model; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import java.time.LocalDateTime; +import java.util.List; +import java.util.UUID; + +public class Backup { + + @JsonProperty("inputMessages") + List inputMessages; + @JsonProperty("backupTimestamp") + LocalDateTime backupTimestamp; + @JsonProperty("uuid") + UUID uuid; + + public Backup(List inputMessages, LocalDateTime backupTimestamp) { + this.inputMessages = inputMessages; + this.backupTimestamp = backupTimestamp; + this.uuid = UUID.randomUUID(); + } + + public List getInputMessages() { + return inputMessages; + } +} diff --git a/libraries-data-2/src/main/com/baeldung/flink/model/InputMessage.java b/libraries-data-2/src/main/com/baeldung/flink/model/InputMessage.java new file mode 100644 index 000000000000..b3f75256ae71 --- /dev/null +++ b/libraries-data-2/src/main/com/baeldung/flink/model/InputMessage.java @@ -0,0 +1,71 @@ +package com.baeldung.flink.model; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.google.common.base.Objects; + +import java.time.LocalDateTime; + +@JsonSerialize +public class InputMessage { + String sender; + String recipient; + LocalDateTime sentAt; + String message; + + public InputMessage() { + } + + public String getSender() { + return sender; + } + public void setSender(String sender) { + this.sender = sender; + } + + public String getRecipient() { + return recipient; + } + + public void setRecipient(String recipient) { + this.recipient = recipient; + } + + public LocalDateTime getSentAt() { + return sentAt; + } + + public void setSentAt(LocalDateTime sentAt) { + this.sentAt = sentAt; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public InputMessage(String sender, String recipient, LocalDateTime sentAt, String message) { + this.sender = sender; + this.recipient = recipient; + this.sentAt = sentAt; + this.message = message; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + InputMessage message1 = (InputMessage) o; + return Objects.equal(sender, message1.sender) && + Objects.equal(recipient, message1.recipient) && + Objects.equal(sentAt, message1.sentAt) && + Objects.equal(message, message1.message); + } + + @Override + public int hashCode() { + return Objects.hashCode(sender, recipient, sentAt, message); + } +} diff --git a/libraries-data-2/src/main/com/baeldung/flink/operator/BackupAggregator.java b/libraries-data-2/src/main/com/baeldung/flink/operator/BackupAggregator.java new file mode 100644 index 000000000000..c39b8413d120 --- /dev/null +++ b/libraries-data-2/src/main/com/baeldung/flink/operator/BackupAggregator.java @@ -0,0 +1,34 @@ +package com.baeldung.flink.operator; + +import com.baeldung.flink.model.Backup; +import com.baeldung.flink.model.InputMessage; +import org.apache.flink.api.common.functions.AggregateFunction; + +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; + + public class BackupAggregator implements AggregateFunction, Backup> { + @Override + public List createAccumulator() { + return new ArrayList<>(); + } + + @Override + public List add(InputMessage inputMessage, List inputMessages) { + inputMessages.add(inputMessage); + return inputMessages; + } + + @Override + public Backup getResult(List inputMessages) { + Backup backup = new Backup(inputMessages, LocalDateTime.now()); + return backup; + } + + @Override + public List merge(List inputMessages, List acc1) { + inputMessages.addAll(acc1); + return inputMessages; + } + } diff --git a/libraries-data-2/src/main/com/baeldung/flink/operator/InputMessageTimestampAssigner.java b/libraries-data-2/src/main/com/baeldung/flink/operator/InputMessageTimestampAssigner.java new file mode 100644 index 000000000000..05828d95883d --- /dev/null +++ b/libraries-data-2/src/main/com/baeldung/flink/operator/InputMessageTimestampAssigner.java @@ -0,0 +1,23 @@ +package com.baeldung.flink.operator; + +import com.baeldung.flink.model.InputMessage; +import org.apache.flink.streaming.api.functions.AssignerWithPunctuatedWatermarks; +import org.apache.flink.streaming.api.watermark.Watermark; + +import javax.annotation.Nullable; +import java.time.ZoneId; + +public class InputMessageTimestampAssigner implements AssignerWithPunctuatedWatermarks { + + @Override + public long extractTimestamp(InputMessage element, long previousElementTimestamp) { + ZoneId zoneId = ZoneId.systemDefault(); + return element.getSentAt().atZone(zoneId).toEpochSecond() * 1000; + } + + @Nullable + @Override + public Watermark checkAndGetNextWatermark(InputMessage lastElement, long extractedTimestamp) { + return new Watermark(extractedTimestamp - 15); + } +} diff --git a/libraries-data-2/src/main/com/baeldung/flink/operator/WordsCapitalizer.java b/libraries-data-2/src/main/com/baeldung/flink/operator/WordsCapitalizer.java new file mode 100644 index 000000000000..f9103d225c39 --- /dev/null +++ b/libraries-data-2/src/main/com/baeldung/flink/operator/WordsCapitalizer.java @@ -0,0 +1,11 @@ +package com.baeldung.flink.operator; + +import org.apache.flink.api.common.functions.MapFunction; + +public class WordsCapitalizer implements MapFunction { + + @Override + public String map(String s) { + return s.toUpperCase(); + } +} diff --git a/libraries-data-2/src/main/com/baeldung/flink/schema/BackupSerializationSchema.java b/libraries-data-2/src/main/com/baeldung/flink/schema/BackupSerializationSchema.java new file mode 100644 index 000000000000..967b266bb62e --- /dev/null +++ b/libraries-data-2/src/main/com/baeldung/flink/schema/BackupSerializationSchema.java @@ -0,0 +1,33 @@ +package com.baeldung.flink.schema; + +import com.baeldung.flink.model.Backup; +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.PropertyAccessor; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import org.apache.flink.api.common.serialization.SerializationSchema; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class BackupSerializationSchema + implements SerializationSchema { + + static ObjectMapper objectMapper = new ObjectMapper().registerModule(new JavaTimeModule()); + + Logger logger = LoggerFactory.getLogger(BackupSerializationSchema.class); + + @Override + public byte[] serialize(Backup backupMessage) { + if(objectMapper == null) { + objectMapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY); + objectMapper = new ObjectMapper().registerModule(new JavaTimeModule()); + } + try { + String json = objectMapper.writeValueAsString(backupMessage); + return json.getBytes(); + } catch (com.fasterxml.jackson.core.JsonProcessingException e) { + logger.error("Failed to parse JSON", e); + } + return new byte[0]; + } +} diff --git a/libraries-data-2/src/main/com/baeldung/flink/schema/InputMessageDeserializationSchema.java b/libraries-data-2/src/main/com/baeldung/flink/schema/InputMessageDeserializationSchema.java new file mode 100644 index 000000000000..9aaf8b987757 --- /dev/null +++ b/libraries-data-2/src/main/com/baeldung/flink/schema/InputMessageDeserializationSchema.java @@ -0,0 +1,32 @@ +package com.baeldung.flink.schema; + +import com.baeldung.flink.model.InputMessage; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import org.apache.flink.api.common.serialization.DeserializationSchema; +import org.apache.flink.api.common.typeinfo.TypeInformation; + +import java.io.IOException; + +public class InputMessageDeserializationSchema implements + DeserializationSchema { + + static ObjectMapper objectMapper = new ObjectMapper().registerModule(new JavaTimeModule()); + + + @Override + public InputMessage deserialize(byte[] bytes) throws IOException { + + return objectMapper.readValue(bytes, InputMessage.class); + } + + @Override + public boolean isEndOfStream(InputMessage inputMessage) { + return false; + } + + @Override + public TypeInformation getProducedType() { + return TypeInformation.of(InputMessage.class); + } +} diff --git a/libraries-data-2/src/main/com/baeldung/google/sheets/GoogleAuthorizeUtil.java b/libraries-data-2/src/main/com/baeldung/google/sheets/GoogleAuthorizeUtil.java new file mode 100644 index 000000000000..641fae42dd63 --- /dev/null +++ b/libraries-data-2/src/main/com/baeldung/google/sheets/GoogleAuthorizeUtil.java @@ -0,0 +1,34 @@ +package com.baeldung.google.sheets; + +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.security.GeneralSecurityException; +import java.util.Arrays; +import java.util.List; + +import com.google.api.client.auth.oauth2.Credential; +import com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp; +import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver; +import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow; +import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets; +import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; +import com.google.api.client.json.jackson2.JacksonFactory; +import com.google.api.client.util.store.MemoryDataStoreFactory; +import com.google.api.services.sheets.v4.SheetsScopes; + +public class GoogleAuthorizeUtil { + public static Credential authorize() throws IOException, GeneralSecurityException { + InputStream in = GoogleAuthorizeUtil.class.getResourceAsStream("/google-sheets-client-secret.json"); + GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JacksonFactory.getDefaultInstance(), new InputStreamReader(in)); + + List scopes = Arrays.asList(SheetsScopes.SPREADSHEETS); + + GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(GoogleNetHttpTransport.newTrustedTransport(), JacksonFactory.getDefaultInstance(), clientSecrets, scopes).setDataStoreFactory(new MemoryDataStoreFactory()) + .setAccessType("offline").build(); + Credential credential = new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("user"); + + return credential; + } + +} diff --git a/libraries-data-2/src/main/com/baeldung/google/sheets/SheetsServiceUtil.java b/libraries-data-2/src/main/com/baeldung/google/sheets/SheetsServiceUtil.java new file mode 100644 index 000000000000..8a78d50551fd --- /dev/null +++ b/libraries-data-2/src/main/com/baeldung/google/sheets/SheetsServiceUtil.java @@ -0,0 +1,20 @@ +package com.baeldung.google.sheets; + +import java.io.IOException; +import java.security.GeneralSecurityException; + +import com.google.api.client.auth.oauth2.Credential; +import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; +import com.google.api.client.json.jackson2.JacksonFactory; +import com.google.api.services.sheets.v4.Sheets; + +public class SheetsServiceUtil { + + private static final String APPLICATION_NAME = "Google Sheets Example"; + + public static Sheets getSheetsService() throws IOException, GeneralSecurityException { + Credential credential = GoogleAuthorizeUtil.authorize(); + return new Sheets.Builder(GoogleNetHttpTransport.newTrustedTransport(), JacksonFactory.getDefaultInstance(), credential).setApplicationName(APPLICATION_NAME).build(); + } + +} diff --git a/libraries-data-2/src/main/com/baeldung/infinispan/CacheConfiguration.java b/libraries-data-2/src/main/com/baeldung/infinispan/CacheConfiguration.java new file mode 100644 index 000000000000..eda511d7a700 --- /dev/null +++ b/libraries-data-2/src/main/com/baeldung/infinispan/CacheConfiguration.java @@ -0,0 +1,70 @@ +package com.baeldung.infinispan; + +import com.baeldung.infinispan.listener.CacheListener; +import org.infinispan.Cache; +import org.infinispan.configuration.cache.Configuration; +import org.infinispan.configuration.cache.ConfigurationBuilder; +import org.infinispan.eviction.EvictionType; +import org.infinispan.manager.DefaultCacheManager; +import org.infinispan.transaction.LockingMode; +import org.infinispan.transaction.TransactionMode; + +import java.util.concurrent.TimeUnit; + +public class CacheConfiguration { + + public static final String SIMPLE_HELLO_WORLD_CACHE = "simple-hello-world-cache"; + public static final String EXPIRING_HELLO_WORLD_CACHE = "expiring-hello-world-cache"; + public static final String EVICTING_HELLO_WORLD_CACHE = "evicting-hello-world-cache"; + public static final String PASSIVATING_HELLO_WORLD_CACHE = "passivating-hello-world-cache"; + public static final String TRANSACTIONAL_CACHE = "transactional-cache"; + + public DefaultCacheManager cacheManager() { + return new DefaultCacheManager(); + } + + public Cache transactionalCache(DefaultCacheManager cacheManager, CacheListener listener) { + return this.buildCache(TRANSACTIONAL_CACHE, cacheManager, listener, transactionalConfiguration()); + } + + public Cache simpleHelloWorldCache(DefaultCacheManager cacheManager, CacheListener listener) { + return this.buildCache(SIMPLE_HELLO_WORLD_CACHE, cacheManager, listener, new ConfigurationBuilder().build()); + } + + public Cache expiringHelloWorldCache(DefaultCacheManager cacheManager, CacheListener listener) { + return this.buildCache(EXPIRING_HELLO_WORLD_CACHE, cacheManager, listener, expiringConfiguration()); + } + + public Cache evictingHelloWorldCache(DefaultCacheManager cacheManager, CacheListener listener) { + return this.buildCache(EVICTING_HELLO_WORLD_CACHE, cacheManager, listener, evictingConfiguration()); + } + + public Cache passivatingHelloWorldCache(DefaultCacheManager cacheManager, CacheListener listener) { + return this.buildCache(PASSIVATING_HELLO_WORLD_CACHE, cacheManager, listener, passivatingConfiguration()); + } + + private Cache buildCache(String cacheName, DefaultCacheManager cacheManager, CacheListener listener, Configuration configuration) { + + cacheManager.defineConfiguration(cacheName, configuration); + Cache cache = cacheManager.getCache(cacheName); + cache.addListener(listener); + return cache; + } + + private Configuration expiringConfiguration() { + return new ConfigurationBuilder().expiration().lifespan(1, TimeUnit.SECONDS).build(); + } + + private Configuration evictingConfiguration() { + return new ConfigurationBuilder().memory().evictionType(EvictionType.COUNT).size(1).build(); + } + + private Configuration passivatingConfiguration() { + return new ConfigurationBuilder().memory().evictionType(EvictionType.COUNT).size(1).persistence().passivation(true).addSingleFileStore().purgeOnStartup(true).location(System.getProperty("java.io.tmpdir")).build(); + } + + private Configuration transactionalConfiguration() { + return new ConfigurationBuilder().transaction().transactionMode(TransactionMode.TRANSACTIONAL).lockingMode(LockingMode.PESSIMISTIC).build(); + } + +} diff --git a/libraries-data-2/src/main/com/baeldung/infinispan/listener/CacheListener.java b/libraries-data-2/src/main/com/baeldung/infinispan/listener/CacheListener.java new file mode 100644 index 000000000000..942a2fb62d31 --- /dev/null +++ b/libraries-data-2/src/main/com/baeldung/infinispan/listener/CacheListener.java @@ -0,0 +1,53 @@ +package com.baeldung.infinispan.listener; + +import org.infinispan.notifications.Listener; +import org.infinispan.notifications.cachelistener.annotation.*; +import org.infinispan.notifications.cachelistener.event.*; + +@Listener +public class CacheListener { + + @CacheEntryCreated + public void entryCreated(CacheEntryCreatedEvent event) { + this.printLog("Adding key '" + event.getKey() + "' to cache", event); + } + + @CacheEntryExpired + public void entryExpired(CacheEntryExpiredEvent event) { + this.printLog("Expiring key '" + event.getKey() + "' from cache", event); + } + + @CacheEntryVisited + public void entryVisited(CacheEntryVisitedEvent event) { + this.printLog("Key '" + event.getKey() + "' was visited", event); + } + + @CacheEntryActivated + public void entryActivated(CacheEntryActivatedEvent event) { + this.printLog("Activating key '" + event.getKey() + "' on cache", event); + } + + @CacheEntryPassivated + public void entryPassivated(CacheEntryPassivatedEvent event) { + this.printLog("Passivating key '" + event.getKey() + "' from cache", event); + } + + @CacheEntryLoaded + public void entryLoaded(CacheEntryLoadedEvent event) { + this.printLog("Loading key '" + event.getKey() + "' to cache", event); + } + + @CacheEntriesEvicted + public void entriesEvicted(CacheEntriesEvictedEvent event) { + final StringBuilder builder = new StringBuilder(); + event.getEntries().forEach((key, value) -> builder.append(key).append(", ")); + System.out.println("Evicting following entries from cache: " + builder.toString()); + } + + private void printLog(String log, CacheEntryEvent event) { + if (!event.isPre()) { + System.out.println(log); + } + } + +} diff --git a/libraries-data-2/src/main/com/baeldung/infinispan/repository/HelloWorldRepository.java b/libraries-data-2/src/main/com/baeldung/infinispan/repository/HelloWorldRepository.java new file mode 100644 index 000000000000..85c0d539a358 --- /dev/null +++ b/libraries-data-2/src/main/com/baeldung/infinispan/repository/HelloWorldRepository.java @@ -0,0 +1,15 @@ +package com.baeldung.infinispan.repository; + +public class HelloWorldRepository { + + public String getHelloWorld() { + try { + System.out.println("Executing some heavy query"); + Thread.sleep(1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + return "Hello World!"; + } + +} diff --git a/libraries-data-2/src/main/com/baeldung/infinispan/service/HelloWorldService.java b/libraries-data-2/src/main/com/baeldung/infinispan/service/HelloWorldService.java new file mode 100644 index 000000000000..de30cd5c8e17 --- /dev/null +++ b/libraries-data-2/src/main/com/baeldung/infinispan/service/HelloWorldService.java @@ -0,0 +1,77 @@ +package com.baeldung.infinispan.service; + +import com.baeldung.infinispan.listener.CacheListener; +import com.baeldung.infinispan.repository.HelloWorldRepository; +import org.infinispan.Cache; + +import java.util.concurrent.TimeUnit; + +public class HelloWorldService { + + private final HelloWorldRepository repository; + + private final Cache simpleHelloWorldCache; + private final Cache expiringHelloWorldCache; + private final Cache evictingHelloWorldCache; + private final Cache passivatingHelloWorldCache; + + public HelloWorldService(HelloWorldRepository repository, CacheListener listener, Cache simpleHelloWorldCache, Cache expiringHelloWorldCache, Cache evictingHelloWorldCache, + Cache passivatingHelloWorldCache) { + + this.repository = repository; + + this.simpleHelloWorldCache = simpleHelloWorldCache; + this.expiringHelloWorldCache = expiringHelloWorldCache; + this.evictingHelloWorldCache = evictingHelloWorldCache; + this.passivatingHelloWorldCache = passivatingHelloWorldCache; + } + + public String findSimpleHelloWorld() { + String cacheKey = "simple-hello"; + return simpleHelloWorldCache.computeIfAbsent(cacheKey, k -> repository.getHelloWorld()); + } + + public String findExpiringHelloWorld() { + String cacheKey = "expiring-hello"; + String helloWorld = simpleHelloWorldCache.get(cacheKey); + if (helloWorld == null) { + helloWorld = repository.getHelloWorld(); + simpleHelloWorldCache.put(cacheKey, helloWorld, 1, TimeUnit.SECONDS); + } + return helloWorld; + } + + public String findIdleHelloWorld() { + String cacheKey = "idle-hello"; + String helloWorld = simpleHelloWorldCache.get(cacheKey); + if (helloWorld == null) { + helloWorld = repository.getHelloWorld(); + simpleHelloWorldCache.put(cacheKey, helloWorld, -1, TimeUnit.SECONDS, 10, TimeUnit.SECONDS); + } + return helloWorld; + } + + public String findSimpleHelloWorldInExpiringCache() { + String cacheKey = "simple-hello"; + String helloWorld = expiringHelloWorldCache.get(cacheKey); + if (helloWorld == null) { + helloWorld = repository.getHelloWorld(); + expiringHelloWorldCache.put(cacheKey, helloWorld); + } + return helloWorld; + } + + public String findEvictingHelloWorld(String key) { + String value = evictingHelloWorldCache.get(key); + if (value == null) { + value = repository.getHelloWorld(); + evictingHelloWorldCache.put(key, value); + } + return value; + } + + public String findPassivatingHelloWorld(String key) { + return passivatingHelloWorldCache.computeIfAbsent(key, k -> repository.getHelloWorld()); + } + +} diff --git a/libraries-data-2/src/main/com/baeldung/infinispan/service/TransactionalService.java b/libraries-data-2/src/main/com/baeldung/infinispan/service/TransactionalService.java new file mode 100644 index 000000000000..26862b8d6551 --- /dev/null +++ b/libraries-data-2/src/main/com/baeldung/infinispan/service/TransactionalService.java @@ -0,0 +1,55 @@ +package com.baeldung.infinispan.service; + +import org.infinispan.Cache; +import org.springframework.util.StopWatch; + +import javax.transaction.TransactionManager; + +public class TransactionalService { + + private final Cache transactionalCache; + + private static final String KEY = "key"; + + public TransactionalService(Cache transactionalCache) { + this.transactionalCache = transactionalCache; + + transactionalCache.put(KEY, 0); + } + + public Integer getQuickHowManyVisits() { + try { + TransactionManager tm = transactionalCache.getAdvancedCache().getTransactionManager(); + tm.begin(); + Integer howManyVisits = transactionalCache.get(KEY); + howManyVisits++; + System.out.println("Ill try to set HowManyVisits to " + howManyVisits); + StopWatch watch = new StopWatch(); + watch.start(); + transactionalCache.put(KEY, howManyVisits); + watch.stop(); + System.out.println("I was able to set HowManyVisits to " + howManyVisits + " after waiting " + watch.getTotalTimeSeconds() + " seconds"); + + tm.commit(); + return howManyVisits; + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + + public void startBackgroundBatch() { + try { + TransactionManager tm = transactionalCache.getAdvancedCache().getTransactionManager(); + tm.begin(); + transactionalCache.put(KEY, 1000); + System.out.println("HowManyVisits should now be 1000, " + "but we are holding the transaction"); + Thread.sleep(1000L); + tm.rollback(); + System.out.println("The slow batch suffered a rollback"); + } catch (Exception e) { + e.printStackTrace(); + } + } + +} diff --git a/libraries-data-2/src/main/com/baeldung/measurement/WaterTank.java b/libraries-data-2/src/main/com/baeldung/measurement/WaterTank.java new file mode 100644 index 000000000000..f3675ae68930 --- /dev/null +++ b/libraries-data-2/src/main/com/baeldung/measurement/WaterTank.java @@ -0,0 +1,26 @@ +package com.baeldung.measurement; + +import javax.measure.Quantity; +import javax.measure.quantity.Volume; + +public class WaterTank { + + private Quantity capacityMeasure; + private double capacityDouble; + + public void setCapacityMeasure(Quantity capacityMeasure) { + this.capacityMeasure = capacityMeasure; + } + + public void setCapacityDouble(double capacityDouble) { + this.capacityDouble = capacityDouble; + } + + public Quantity getCapacityMeasure() { + return capacityMeasure; + } + + public double getCapacityDouble() { + return capacityDouble; + } +} diff --git a/libraries-data-2/src/main/com/baeldung/opencsv/Application.java b/libraries-data-2/src/main/com/baeldung/opencsv/Application.java new file mode 100644 index 000000000000..fd7e4d82d48d --- /dev/null +++ b/libraries-data-2/src/main/com/baeldung/opencsv/Application.java @@ -0,0 +1,108 @@ +package com.baeldung.opencsv; + +import com.baeldung.opencsv.beans.NamedColumnBean; +import com.baeldung.opencsv.beans.SimplePositionBean; +import com.baeldung.opencsv.examples.sync.BeanExamples; +import com.baeldung.opencsv.examples.sync.CsvReaderExamples; +import com.baeldung.opencsv.examples.sync.CsvWriterExamples; +import com.baeldung.opencsv.helpers.Helpers; + +import java.io.Reader; +import java.nio.file.Files; +import java.nio.file.Path; + +public class Application { + + /* + * Bean Examples. + */ + + public static String simpleSyncPositionBeanExample() { + Path path = null; + try { + path = Helpers.twoColumnCsvPath(); + } catch (Exception ex) { + Helpers.err(ex); + } + return BeanExamples.beanBuilderExample(path, SimplePositionBean.class).toString(); + } + + public static String namedSyncColumnBeanExample() { + Path path = null; + try { + path = Helpers.namedColumnCsvPath(); + } catch (Exception ex) { + Helpers.err(ex); + } + return BeanExamples.beanBuilderExample(path, NamedColumnBean.class).toString(); + } + + public static String writeSyncCsvFromBeanExample() { + Path path = null; + try { + path = Helpers.fileOutBeanPath(); + } catch (Exception ex) { + Helpers.err(ex); + } + return BeanExamples.writeCsvFromBean(path); + } + + /* + * CSV Reader Examples. + */ + + public static String oneByOneSyncExample() { + Reader reader = null; + try { + reader = Files.newBufferedReader(Helpers.twoColumnCsvPath()); + } catch (Exception ex) { + Helpers.err(ex); + } + return CsvReaderExamples.oneByOne(reader).toString(); + } + + public static String readAllSyncExample() { + Reader reader = null; + try { + reader = Files.newBufferedReader(Helpers.twoColumnCsvPath()); + } catch (Exception ex) { + Helpers.err(ex); + } + return CsvReaderExamples.readAll(reader).toString(); + } + + /* + * CSV Writer Examples. + */ + + + public static String csvWriterSyncOneByOne() { + Path path = null; + try { + path = Helpers.fileOutOnePath(); + } catch (Exception ex) { + Helpers.err(ex); + } + return CsvWriterExamples.csvWriterOneByOne(Helpers.fourColumnCsvString(), path); + } + + public static String csvWriterSyncAll() { + Path path = null; + try { + path = Helpers.fileOutAllPath(); + } catch (Exception ex) { + Helpers.err(ex); + } + return CsvWriterExamples.csvWriterAll(Helpers.fourColumnCsvString(), path); + } + + public static void main(String[] args) { + simpleSyncPositionBeanExample(); + namedSyncColumnBeanExample(); + writeSyncCsvFromBeanExample(); + oneByOneSyncExample(); + readAllSyncExample(); + csvWriterSyncOneByOne(); + csvWriterSyncAll(); + } +} diff --git a/libraries-data-2/src/main/com/baeldung/opencsv/Constants.java b/libraries-data-2/src/main/com/baeldung/opencsv/Constants.java new file mode 100644 index 000000000000..f7978acf24c1 --- /dev/null +++ b/libraries-data-2/src/main/com/baeldung/opencsv/Constants.java @@ -0,0 +1,17 @@ +package com.baeldung.opencsv; + +public class Constants { + + public static final String GENERIC_EXCEPTION = "EXCEPTION ENCOUNTERED: "; + public static final String GENERIC_SUCCESS = "SUCCESS"; + + public static final String TWO_COLUMN_CSV = "csv/twoColumn.csv"; + public static final String FOUR_COLUMN_CSV = "csv/fourColumn.csv"; + public static final String NAMED_COLUMN_CSV = "csv/namedColumn.csv"; + + public static final String CSV_All = "csv/writtenAll.csv"; + public static final String CSV_BEAN = "csv/writtenBean.csv"; + public static final String CSV_ONE = "csv/writtenOneByOne.csv"; + + +} diff --git a/libraries-data-2/src/main/com/baeldung/opencsv/beans/CsvBean.java b/libraries-data-2/src/main/com/baeldung/opencsv/beans/CsvBean.java new file mode 100644 index 000000000000..af9caaae12ea --- /dev/null +++ b/libraries-data-2/src/main/com/baeldung/opencsv/beans/CsvBean.java @@ -0,0 +1,3 @@ +package com.baeldung.opencsv.beans; + +public class CsvBean { } diff --git a/libraries-data-2/src/main/com/baeldung/opencsv/beans/NamedColumnBean.java b/libraries-data-2/src/main/com/baeldung/opencsv/beans/NamedColumnBean.java new file mode 100644 index 000000000000..d9e5f9633365 --- /dev/null +++ b/libraries-data-2/src/main/com/baeldung/opencsv/beans/NamedColumnBean.java @@ -0,0 +1,31 @@ +package com.baeldung.opencsv.beans; + +import com.opencsv.bean.CsvBindByName; + +public class NamedColumnBean extends CsvBean { + + @CsvBindByName(column = "name") + private String name; + + //Automatically infer column name as Age + @CsvBindByName + private int age; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getAge() { + return age; + } + + public void setAge(int age) { + this.age = age; + } + + +} diff --git a/libraries-data-2/src/main/com/baeldung/opencsv/beans/SimplePositionBean.java b/libraries-data-2/src/main/com/baeldung/opencsv/beans/SimplePositionBean.java new file mode 100644 index 000000000000..799006e2f9c2 --- /dev/null +++ b/libraries-data-2/src/main/com/baeldung/opencsv/beans/SimplePositionBean.java @@ -0,0 +1,29 @@ +package com.baeldung.opencsv.beans; + +import com.opencsv.bean.CsvBindByPosition; + +public class SimplePositionBean extends CsvBean { + + @CsvBindByPosition(position = 0) + private String exampleColOne; + + @CsvBindByPosition(position = 1) + private String exampleColTwo; + + public String getExampleColOne() { + return exampleColOne; + } + + private void setExampleColOne(String exampleColOne) { + this.exampleColOne = exampleColOne; + } + + public String getExampleColTwo() { + return exampleColTwo; + } + + private void setExampleCsvTwo (String exampleColTwo) { + this.exampleColTwo = exampleColTwo; + } + +} diff --git a/libraries-data-2/src/main/com/baeldung/opencsv/beans/WriteExampleBean.java b/libraries-data-2/src/main/com/baeldung/opencsv/beans/WriteExampleBean.java new file mode 100644 index 000000000000..f145f67f11ff --- /dev/null +++ b/libraries-data-2/src/main/com/baeldung/opencsv/beans/WriteExampleBean.java @@ -0,0 +1,40 @@ +package com.baeldung.opencsv.beans; + +public class WriteExampleBean extends CsvBean { + + private String colA; + + private String colB; + + private String colC; + + public WriteExampleBean(String colA, String colB, String colC) { + this.colA = colA; + this.colB = colB; + this.colC = colC; + } + + public String getColA() { + return colA; + } + + public void setColA(String colA) { + this.colA = colA; + } + + public String getColB() { + return colB; + } + + public void setColB(String colB) { + this.colB = colB; + } + + public String getColC() { + return colC; + } + + public void setColC(String colC) { + this.colC = colC; + } +} diff --git a/libraries-data-2/src/main/com/baeldung/opencsv/examples/sync/BeanExamples.java b/libraries-data-2/src/main/com/baeldung/opencsv/examples/sync/BeanExamples.java new file mode 100644 index 000000000000..086f32677e90 --- /dev/null +++ b/libraries-data-2/src/main/com/baeldung/opencsv/examples/sync/BeanExamples.java @@ -0,0 +1,63 @@ +package com.baeldung.opencsv.examples.sync; + +import com.baeldung.opencsv.beans.CsvBean; +import com.baeldung.opencsv.beans.WriteExampleBean; +import com.baeldung.opencsv.helpers.Helpers; +import com.baeldung.opencsv.pojos.CsvTransfer; +import com.opencsv.CSVWriter; +import com.opencsv.bean.*; + +import java.io.FileWriter; +import java.io.Reader; +import java.io.Writer; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; + +public class BeanExamples { + + public static List beanBuilderExample(Path path, Class clazz) { + ColumnPositionMappingStrategy ms = new ColumnPositionMappingStrategy(); + return beanBuilderExample(path, clazz, ms); + } + + public static List beanBuilderExample(Path path, Class clazz, MappingStrategy ms) { + CsvTransfer csvTransfer = new CsvTransfer(); + try { + ms.setType(clazz); + + Reader reader = Files.newBufferedReader(path); + CsvToBean cb = new CsvToBeanBuilder(reader).withType(clazz) + .withMappingStrategy(ms) + .build(); + + csvTransfer.setCsvList(cb.parse()); + reader.close(); + + } catch (Exception ex) { + Helpers.err(ex); + } + return csvTransfer.getCsvList(); + } + + public static String writeCsvFromBean(Path path) { + try { + Writer writer = new FileWriter(path.toString()); + + StatefulBeanToCsv sbc = new StatefulBeanToCsvBuilder(writer).withSeparator(CSVWriter.DEFAULT_SEPARATOR) + .build(); + + List list = new ArrayList<>(); + list.add(new WriteExampleBean("Test1", "sfdsf", "fdfd")); + list.add(new WriteExampleBean("Test2", "ipso", "facto")); + + sbc.write(list); + writer.close(); + + } catch (Exception ex) { + Helpers.err(ex); + } + return Helpers.readFile(path); + } +} \ No newline at end of file diff --git a/libraries-data-2/src/main/com/baeldung/opencsv/examples/sync/CsvReaderExamples.java b/libraries-data-2/src/main/com/baeldung/opencsv/examples/sync/CsvReaderExamples.java new file mode 100644 index 000000000000..bacfdcff3dfe --- /dev/null +++ b/libraries-data-2/src/main/com/baeldung/opencsv/examples/sync/CsvReaderExamples.java @@ -0,0 +1,63 @@ +package com.baeldung.opencsv.examples.sync; + +import com.baeldung.opencsv.helpers.Helpers; +import com.opencsv.CSVParser; +import com.opencsv.CSVParserBuilder; +import com.opencsv.CSVReader; +import com.opencsv.CSVReaderBuilder; + +import java.io.Reader; +import java.util.ArrayList; +import java.util.List; + +public class CsvReaderExamples { + + public static List readAll(Reader reader) { + + CSVParser parser = new CSVParserBuilder() + .withSeparator(',') + .withIgnoreQuotations(true) + .build(); + + CSVReader csvReader = new CSVReaderBuilder(reader) + .withSkipLines(0) + .withCSVParser(parser) + .build(); + + List list = new ArrayList<>(); + try { + list = csvReader.readAll(); + reader.close(); + csvReader.close(); + } catch (Exception ex) { + Helpers.err(ex); + } + return list; + } + + public static List oneByOne(Reader reader) { + List list = new ArrayList<>(); + try { + CSVParser parser = new CSVParserBuilder() + .withSeparator(',') + .withIgnoreQuotations(true) + .build(); + + CSVReader csvReader = new CSVReaderBuilder(reader) + .withSkipLines(0) + .withCSVParser(parser) + .build(); + + String[] line; + while ((line = csvReader.readNext()) != null) { + list.add(line); + } + reader.close(); + csvReader.close(); + } catch (Exception ex) { + Helpers.err(ex); + } + return list; + } + +} diff --git a/libraries-data-2/src/main/com/baeldung/opencsv/examples/sync/CsvWriterExamples.java b/libraries-data-2/src/main/com/baeldung/opencsv/examples/sync/CsvWriterExamples.java new file mode 100644 index 000000000000..6f52160ba865 --- /dev/null +++ b/libraries-data-2/src/main/com/baeldung/opencsv/examples/sync/CsvWriterExamples.java @@ -0,0 +1,35 @@ +package com.baeldung.opencsv.examples.sync; + +import com.baeldung.opencsv.helpers.Helpers; +import com.opencsv.CSVWriter; + +import java.io.FileWriter; +import java.nio.file.Path; +import java.util.List; + +public class CsvWriterExamples { + + public static String csvWriterOneByOne(List stringArray, Path path) { + try { + CSVWriter writer = new CSVWriter(new FileWriter(path.toString())); + for (String[] array : stringArray) { + writer.writeNext(array); + } + writer.close(); + } catch (Exception ex) { + Helpers.err(ex); + } + return Helpers.readFile(path); + } + + public static String csvWriterAll(List stringArray, Path path) { + try { + CSVWriter writer = new CSVWriter(new FileWriter(path.toString())); + writer.writeAll(stringArray); + writer.close(); + } catch (Exception ex) { + Helpers.err(ex); + } + return Helpers.readFile(path); + } +} \ No newline at end of file diff --git a/libraries-data-2/src/main/com/baeldung/opencsv/helpers/Helpers.java b/libraries-data-2/src/main/com/baeldung/opencsv/helpers/Helpers.java new file mode 100644 index 000000000000..9a46fbc49589 --- /dev/null +++ b/libraries-data-2/src/main/com/baeldung/opencsv/helpers/Helpers.java @@ -0,0 +1,108 @@ +package com.baeldung.opencsv.helpers; + +import com.baeldung.opencsv.Constants; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.net.URI; +import java.net.URISyntaxException; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.List; + +public class Helpers { + + /** + * Write Files + */ + + public static Path fileOutAllPath() throws URISyntaxException { + URI uri = ClassLoader.getSystemResource(Constants.CSV_All).toURI(); + return Paths.get(uri); + } + + public static Path fileOutBeanPath() throws URISyntaxException { + URI uri = ClassLoader.getSystemResource(Constants.CSV_BEAN).toURI(); + return Paths.get(uri); + } + + public static Path fileOutOnePath() throws URISyntaxException { + URI uri = ClassLoader.getSystemResource(Constants.CSV_ONE).toURI(); + return Paths.get(uri); + } + + /** + * Read Files + */ + + public static Path twoColumnCsvPath() throws URISyntaxException { + URI uri = ClassLoader.getSystemResource(Constants.TWO_COLUMN_CSV).toURI(); + return Paths.get(uri); + } + + public static Path fourColumnCsvPath() throws URISyntaxException { + URI uri = ClassLoader.getSystemResource(Constants.FOUR_COLUMN_CSV).toURI(); + return Paths.get(uri); + } + + public static Path namedColumnCsvPath() throws URISyntaxException { + URI uri = ClassLoader.getSystemResource(Constants.NAMED_COLUMN_CSV).toURI(); + return Paths.get(uri); + } + + /** + * Simple File Reader + */ + + public static String readFile(Path path) { + String response = ""; + try { + FileReader fr = new FileReader(path.toString()); + BufferedReader br = new BufferedReader(fr); + String strLine; + StringBuffer sb = new StringBuffer(); + while ((strLine = br.readLine()) != null) { + sb.append(strLine); + } + response = sb.toString(); + System.out.println(response); + fr.close(); + br.close(); + } catch (Exception ex) { + Helpers.err(ex); + } + return response; + } + + /** + * Dummy Data for Writing. + */ + + public static List twoColumnCsvString() { + List list = new ArrayList<>(); + list.add(new String[]{"ColA", "ColB"}); + list.add(new String[]{"A", "B"}); + return list; + } + + public static List fourColumnCsvString() { + List list = new ArrayList<>(); + list.add(new String[]{"ColA", "ColB", "ColC", "ColD"}); + list.add(new String[]{"A", "B", "A", "B"}); + list.add(new String[]{"BB", "AB", "AA", "B"}); + return list; + } + + /** + * Message Helpers + */ + + public static void print(String msg) { + System.out.println(msg); + } + + public static void err(Exception ex) { + System.out.println(Constants.GENERIC_EXCEPTION + " " + ex); + } +} diff --git a/libraries-data-2/src/main/com/baeldung/opencsv/pojos/CsvTransfer.java b/libraries-data-2/src/main/com/baeldung/opencsv/pojos/CsvTransfer.java new file mode 100644 index 000000000000..79366e3d2032 --- /dev/null +++ b/libraries-data-2/src/main/com/baeldung/opencsv/pojos/CsvTransfer.java @@ -0,0 +1,38 @@ +package com.baeldung.opencsv.pojos; + +import com.baeldung.opencsv.beans.CsvBean; + +import java.util.ArrayList; +import java.util.List; + +public class CsvTransfer { + + private List csvStringList; + + private List csvList; + + public CsvTransfer() {} + + public List getCsvStringList() { + if (csvStringList != null) return csvStringList; + return new ArrayList(); + } + + public void addLine(String[] line) { + if (this.csvList == null) this.csvStringList = new ArrayList<>(); + this.csvStringList.add(line); + } + + public void setCsvStringList(List csvStringList) { + this.csvStringList = csvStringList; + } + + public void setCsvList(List csvList) { + this.csvList = csvList; + } + + public List getCsvList() { + if (csvList != null) return csvList; + return new ArrayList(); + } +} \ No newline at end of file diff --git a/libraries-data-2/src/main/com/baeldung/smooks/converter/OrderConverter.java b/libraries-data-2/src/main/com/baeldung/smooks/converter/OrderConverter.java new file mode 100644 index 000000000000..fa317f93b71a --- /dev/null +++ b/libraries-data-2/src/main/com/baeldung/smooks/converter/OrderConverter.java @@ -0,0 +1,44 @@ +package com.baeldung.smooks.converter; + +import com.baeldung.smooks.model.Order; +import org.milyn.Smooks; +import org.milyn.payload.JavaResult; +import org.milyn.payload.StringResult; +import org.xml.sax.SAXException; + +import javax.xml.transform.stream.StreamSource; +import java.io.IOException; + +public class OrderConverter { + + public Order convertOrderXMLToOrderObject(String path) throws IOException, SAXException { + Smooks smooks = new Smooks(OrderConverter.class.getResourceAsStream("/smooks/smooks-mapping.xml")); + try { + JavaResult javaResult = new JavaResult(); + smooks.filterSource(new StreamSource(OrderConverter.class.getResourceAsStream(path)), javaResult); + return (Order) javaResult.getBean("order"); + } finally { + smooks.close(); + } + } + + public String convertOrderXMLtoEDIFACT(String path) throws IOException, SAXException { + return convertDocumentWithTempalte(path, "/smooks/smooks-transform-edi.xml"); + } + + public String convertOrderXMLtoEmailMessage(String path) throws IOException, SAXException { + return convertDocumentWithTempalte(path, "/smooks/smooks-transform-email.xml"); + } + + private String convertDocumentWithTempalte(String path, String config) throws IOException, SAXException { + Smooks smooks = new Smooks(config); + + try { + StringResult stringResult = new StringResult(); + smooks.filterSource(new StreamSource(OrderConverter.class.getResourceAsStream(path)), stringResult); + return stringResult.toString(); + } finally { + smooks.close(); + } + } +} diff --git a/libraries-data-2/src/main/com/baeldung/smooks/converter/OrderValidator.java b/libraries-data-2/src/main/com/baeldung/smooks/converter/OrderValidator.java new file mode 100644 index 000000000000..3975921da06d --- /dev/null +++ b/libraries-data-2/src/main/com/baeldung/smooks/converter/OrderValidator.java @@ -0,0 +1,27 @@ +package com.baeldung.smooks.converter; + +import org.milyn.Smooks; +import org.milyn.payload.JavaResult; +import org.milyn.payload.StringResult; +import org.milyn.validation.ValidationResult; +import org.xml.sax.SAXException; + +import javax.xml.transform.stream.StreamSource; +import java.io.IOException; + +public class OrderValidator { + + public ValidationResult validate(String path) throws IOException, SAXException { + Smooks smooks = new Smooks(OrderValidator.class.getResourceAsStream("/smooks/smooks-validation.xml")); + + try { + StringResult xmlResult = new StringResult(); + JavaResult javaResult = new JavaResult(); + ValidationResult validationResult = new ValidationResult(); + smooks.filterSource(new StreamSource(OrderValidator.class.getResourceAsStream(path)), xmlResult, javaResult, validationResult); + return validationResult; + } finally { + smooks.close(); + } + } +} diff --git a/libraries-data-2/src/main/com/baeldung/smooks/model/Item.java b/libraries-data-2/src/main/com/baeldung/smooks/model/Item.java new file mode 100644 index 000000000000..3e1f4a7ef483 --- /dev/null +++ b/libraries-data-2/src/main/com/baeldung/smooks/model/Item.java @@ -0,0 +1,70 @@ +package com.baeldung.smooks.model; + +public class Item { + + public Item() { + } + + public Item(String code, Double price, Integer quantity) { + this.code = code; + this.price = price; + this.quantity = quantity; + } + + private String code; + private Double price; + private Integer quantity; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public Double getPrice() { + return price; + } + + public void setPrice(Double price) { + this.price = price; + } + + public Integer getQuantity() { + return quantity; + } + + public void setQuantity(Integer quantity) { + this.quantity = quantity; + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + + Item item = (Item) o; + + if (code != null ? !code.equals(item.code) : item.code != null) + return false; + if (price != null ? !price.equals(item.price) : item.price != null) + return false; + return quantity != null ? quantity.equals(item.quantity) : item.quantity == null; + } + + @Override + public int hashCode() { + int result = code != null ? code.hashCode() : 0; + result = 31 * result + (price != null ? price.hashCode() : 0); + result = 31 * result + (quantity != null ? quantity.hashCode() : 0); + return result; + } + + @Override + public String toString() { + return "Item{" + "code='" + code + '\'' + ", price=" + price + ", quantity=" + quantity + '}'; + } +} diff --git a/libraries-data-2/src/main/com/baeldung/smooks/model/Order.java b/libraries-data-2/src/main/com/baeldung/smooks/model/Order.java new file mode 100644 index 000000000000..047e1fe8a389 --- /dev/null +++ b/libraries-data-2/src/main/com/baeldung/smooks/model/Order.java @@ -0,0 +1,52 @@ +package com.baeldung.smooks.model; + +import java.util.Date; +import java.util.List; + +public class Order { + private Date creationDate; + private Long number; + private Status status; + private Supplier supplier; + private List items; + + public Date getCreationDate() { + return creationDate; + } + + public void setCreationDate(Date creationDate) { + this.creationDate = creationDate; + } + + public Long getNumber() { + return number; + } + + public void setNumber(Long number) { + this.number = number; + } + + public Status getStatus() { + return status; + } + + public void setStatus(Status status) { + this.status = status; + } + + public Supplier getSupplier() { + return supplier; + } + + public void setSupplier(Supplier supplier) { + this.supplier = supplier; + } + + public List getItems() { + return items; + } + + public void setItems(List items) { + this.items = items; + } +} diff --git a/libraries-data-2/src/main/com/baeldung/smooks/model/Status.java b/libraries-data-2/src/main/com/baeldung/smooks/model/Status.java new file mode 100644 index 000000000000..53c50bdf466e --- /dev/null +++ b/libraries-data-2/src/main/com/baeldung/smooks/model/Status.java @@ -0,0 +1,5 @@ +package com.baeldung.smooks.model; + +public enum Status { + NEW, IN_PROGRESS, FINISHED +} diff --git a/libraries-data-2/src/main/com/baeldung/smooks/model/Supplier.java b/libraries-data-2/src/main/com/baeldung/smooks/model/Supplier.java new file mode 100644 index 000000000000..827a0fc9074c --- /dev/null +++ b/libraries-data-2/src/main/com/baeldung/smooks/model/Supplier.java @@ -0,0 +1,52 @@ +package com.baeldung.smooks.model; + +public class Supplier { + + private String name; + private String phoneNumber; + + public Supplier() { + } + + public Supplier(String name, String phoneNumber) { + this.name = name; + this.phoneNumber = phoneNumber; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(String phoneNumber) { + this.phoneNumber = phoneNumber; + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + + Supplier supplier = (Supplier) o; + + if (name != null ? !name.equals(supplier.name) : supplier.name != null) + return false; + return phoneNumber != null ? phoneNumber.equals(supplier.phoneNumber) : supplier.phoneNumber == null; + } + + @Override + public int hashCode() { + int result = name != null ? name.hashCode() : 0; + result = 31 * result + (phoneNumber != null ? phoneNumber.hashCode() : 0); + return result; + } +} diff --git a/libraries-data-2/src/test/com/baeldung/crdt/CRDTUnitTest.java b/libraries-data-2/src/test/com/baeldung/crdt/CRDTUnitTest.java new file mode 100644 index 000000000000..840263e430ff --- /dev/null +++ b/libraries-data-2/src/test/com/baeldung/crdt/CRDTUnitTest.java @@ -0,0 +1,149 @@ +package com.baeldung.crdt; + +import com.netopyr.wurmloch.crdt.GCounter; +import com.netopyr.wurmloch.crdt.GSet; +import com.netopyr.wurmloch.crdt.LWWRegister; +import com.netopyr.wurmloch.crdt.PNCounter; +import com.netopyr.wurmloch.store.LocalCrdtStore; +import org.junit.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +public class CRDTUnitTest { + + @Test + public void givenGrowOnlySet_whenTwoReplicasDiverge_thenShouldMergeItWithoutAConflict() { + // given + final LocalCrdtStore crdtStore1 = new LocalCrdtStore(); + final LocalCrdtStore crdtStore2 = new LocalCrdtStore(); + crdtStore1.connect(crdtStore2); + + final GSet replica1 = crdtStore1.createGSet("ID_1"); + final GSet replica2 = crdtStore2. findGSet("ID_1").get(); + + // when + replica1.add("apple"); + replica2.add("banana"); + + // then + assertThat(replica1).contains("apple", "banana"); + assertThat(replica2).contains("apple", "banana"); + + // when + crdtStore1.disconnect(crdtStore2); + + replica1.add("strawberry"); + replica2.add("pear"); + + assertThat(replica1).contains("apple", "banana", "strawberry"); + assertThat(replica2).contains("apple", "banana", "pear"); + + crdtStore1.connect(crdtStore2); + + // then + assertThat(replica1).contains("apple", "banana", "strawberry", "pear"); + assertThat(replica2).contains("apple", "banana", "strawberry", "pear"); + } + + @Test + public void givenIncrementOnlyCounter_whenTwoReplicasDiverge_thenShouldMergeIt() { + // given + final LocalCrdtStore crdtStore1 = new LocalCrdtStore(); + final LocalCrdtStore crdtStore2 = new LocalCrdtStore(); + crdtStore1.connect(crdtStore2); + + final GCounter replica1 = crdtStore1.createGCounter("ID_1"); + final GCounter replica2 = crdtStore2.findGCounter("ID_1").get(); + + // when + replica1.increment(); + replica2.increment(2L); + + // then + assertThat(replica1.get()).isEqualTo(3L); + assertThat(replica2.get()).isEqualTo(3L); + + // when + crdtStore1.disconnect(crdtStore2); + + replica1.increment(3L); + replica2.increment(5L); + + assertThat(replica1.get()).isEqualTo(6L); + assertThat(replica2.get()).isEqualTo(8L); + + crdtStore1.connect(crdtStore2); + + // then + assertThat(replica1.get()).isEqualTo(11L); + assertThat(replica2.get()).isEqualTo(11L); + } + + @Test + public void givenPNCounter_whenReplicasDiverge_thenShouldMergeWithoutAConflict() { + // given + final LocalCrdtStore crdtStore1 = new LocalCrdtStore(); + final LocalCrdtStore crdtStore2 = new LocalCrdtStore(); + crdtStore1.connect(crdtStore2); + + final PNCounter replica1 = crdtStore1.createPNCounter("ID_1"); + final PNCounter replica2 = crdtStore2.findPNCounter("ID_1").get(); + + // when + replica1.increment(); + replica2.decrement(2L); + + // then + assertThat(replica1.get()).isEqualTo(-1L); + assertThat(replica2.get()).isEqualTo(-1L); + + // when + crdtStore1.disconnect(crdtStore2); + + replica1.decrement(3L); + replica2.increment(5L); + + assertThat(replica1.get()).isEqualTo(-4L); + assertThat(replica2.get()).isEqualTo(4L); + + crdtStore1.connect(crdtStore2); + + // then + assertThat(replica1.get()).isEqualTo(1L); + assertThat(replica2.get()).isEqualTo(1L); + } + + @Test + public void givenLastWriteWinsStrategy_whenReplicasDiverge_thenAfterMergeShouldKeepOnlyLastValue() { + // given + final LocalCrdtStore crdtStore1 = new LocalCrdtStore("N_1"); + final LocalCrdtStore crdtStore2 = new LocalCrdtStore("N_2"); + crdtStore1.connect(crdtStore2); + + final LWWRegister replica1 = crdtStore1.createLWWRegister("ID_1"); + final LWWRegister replica2 = crdtStore2. findLWWRegister("ID_1").get(); + + // when + replica1.set("apple"); + replica2.set("banana"); + + // then + assertThat(replica1.get()).isEqualTo("banana"); + assertThat(replica2.get()).isEqualTo("banana"); + + // when + crdtStore1.disconnect(crdtStore2); + + replica1.set("strawberry"); + replica2.set("pear"); + + assertThat(replica1.get()).isEqualTo("strawberry"); + assertThat(replica2.get()).isEqualTo("pear"); + + crdtStore1.connect(crdtStore2); + + // then + assertThat(replica1.get()).isEqualTo("pear"); + assertThat(replica2.get()).isEqualTo("pear"); + } +} diff --git a/libraries-data-2/src/test/com/baeldung/flink/BackupCreatorIntegrationTest.java b/libraries-data-2/src/test/com/baeldung/flink/BackupCreatorIntegrationTest.java new file mode 100644 index 000000000000..f46fffbb59c1 --- /dev/null +++ b/libraries-data-2/src/test/com/baeldung/flink/BackupCreatorIntegrationTest.java @@ -0,0 +1,104 @@ +package com.baeldung.flink; + +import com.baeldung.flink.model.Backup; +import com.baeldung.flink.model.InputMessage; +import com.baeldung.flink.operator.BackupAggregator; +import com.baeldung.flink.operator.InputMessageTimestampAssigner; +import com.baeldung.flink.schema.BackupSerializationSchema; +import com.baeldung.flink.schema.InputMessageDeserializationSchema; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import org.apache.commons.collections.ListUtils; +import org.apache.flink.api.common.serialization.DeserializationSchema; +import org.apache.flink.api.common.serialization.SerializationSchema; +import org.apache.flink.streaming.api.TimeCharacteristic; +import org.apache.flink.streaming.api.datastream.DataStreamSource; +import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; +import org.apache.flink.streaming.api.functions.sink.SinkFunction; +import org.apache.flink.streaming.api.windowing.time.Time; +import org.awaitility.Awaitility; +import org.junit.Before; +import org.junit.Test; + +import java.io.IOException; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; + +public class BackupCreatorIntegrationTest { + public static ObjectMapper mapper; + + @Before + public void setup() { + mapper = new ObjectMapper().registerModule(new JavaTimeModule()); + } + + @Test + public void givenProperJson_whenDeserializeIsInvoked_thenProperObjectIsReturned() throws IOException { + InputMessage message = new InputMessage("Me", "User", LocalDateTime.now(), "Test Message"); + byte[] messageSerialized = mapper.writeValueAsBytes(message); + DeserializationSchema deserializationSchema = new InputMessageDeserializationSchema(); + InputMessage messageDeserialized = deserializationSchema.deserialize(messageSerialized); + + assertEquals(message, messageDeserialized); + } + + @Test + public void givenMultipleInputMessagesFromDifferentDays_whenBackupCreatorIsUser_thenMessagesAreGroupedProperly() throws Exception { + LocalDateTime currentTime = LocalDateTime.now(); + InputMessage message = new InputMessage("Me", "User", currentTime, "First TestMessage"); + InputMessage secondMessage = new InputMessage("Me", "User", currentTime.plusHours(1), "First TestMessage"); + InputMessage thirdMessage = new InputMessage("Me", "User", currentTime.plusHours(2), "First TestMessage"); + InputMessage fourthMessage = new InputMessage("Me", "User", currentTime.plusHours(3), "First TestMessage"); + InputMessage fifthMessage = new InputMessage("Me", "User", currentTime.plusHours(25), "First TestMessage"); + InputMessage sixthMessage = new InputMessage("Me", "User", currentTime.plusHours(26), "First TestMessage"); + + List firstBackupMessages = Arrays.asList(message, secondMessage, thirdMessage, fourthMessage); + List secondBackupMessages = Arrays.asList(fifthMessage, sixthMessage); + List inputMessages = ListUtils.union(firstBackupMessages, secondBackupMessages); + + StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); + env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime); + env.setParallelism(1); + DataStreamSource testDataSet = env.fromCollection(inputMessages); + CollectingSink sink = new CollectingSink(); + testDataSet.assignTimestampsAndWatermarks(new InputMessageTimestampAssigner()) + .timeWindowAll(Time.hours(24)) + .aggregate(new BackupAggregator()) + .addSink(sink); + + env.execute(); + + Awaitility.await().until(() -> sink.backups.size() == 2); + assertEquals(2, sink.backups.size()); + assertEquals(firstBackupMessages, sink.backups.get(0).getInputMessages()); + assertEquals(secondBackupMessages, sink.backups.get(1).getInputMessages()); + + } + + @Test + public void givenProperBackupObject_whenSerializeIsInvoked_thenObjectIsProperlySerialized() throws IOException { + InputMessage message = new InputMessage("Me", "User", LocalDateTime.now(), "Test Message"); + List messages = Arrays.asList(message); + Backup backup = new Backup(messages, LocalDateTime.now()); + byte[] backupSerialized = mapper.writeValueAsBytes(backup); + SerializationSchema serializationSchema = new BackupSerializationSchema(); + byte[] backupProcessed = serializationSchema.serialize(backup); + + assertArrayEquals(backupSerialized, backupProcessed); + } + + private static class CollectingSink implements SinkFunction { + + public static List backups = new ArrayList<>(); + + @Override + public synchronized void invoke(Backup value, Context context) throws Exception { + backups.add(value); + } + } +} diff --git a/libraries-data-2/src/test/com/baeldung/flink/WordCapitalizerIntegrationTest.java b/libraries-data-2/src/test/com/baeldung/flink/WordCapitalizerIntegrationTest.java new file mode 100644 index 000000000000..8a98dae4b5b2 --- /dev/null +++ b/libraries-data-2/src/test/com/baeldung/flink/WordCapitalizerIntegrationTest.java @@ -0,0 +1,34 @@ +package com.baeldung.flink; + +import com.baeldung.flink.operator.WordsCapitalizer; +import org.apache.flink.api.java.DataSet; +import org.apache.flink.api.java.ExecutionEnvironment; +import org.junit.Assert; +import org.junit.Test; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +public class WordCapitalizerIntegrationTest { + + @Test + public void givenDataSet_whenExecuteWordCapitalizer_thenReturnCapitalizedWords() throws Exception { + ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment(); + List data = Arrays.asList("dog", "cat", "wolf", "pig"); + + DataSet testDataSet = env.fromCollection(data); + + + List dataProcessed = testDataSet + .map(new WordsCapitalizer()) + .collect(); + + List testDataCapitalized = data.stream() + .map(String::toUpperCase) + .collect(Collectors.toList()); + + Assert.assertEquals(testDataCapitalized, dataProcessed); + } + +} diff --git a/libraries-data-2/src/test/com/baeldung/flink/WordCountIntegrationTest.java b/libraries-data-2/src/test/com/baeldung/flink/WordCountIntegrationTest.java new file mode 100644 index 000000000000..5c788e86d625 --- /dev/null +++ b/libraries-data-2/src/test/com/baeldung/flink/WordCountIntegrationTest.java @@ -0,0 +1,161 @@ +package com.baeldung.flink; + +import org.apache.flink.api.common.operators.Order; +import org.apache.flink.api.java.DataSet; +import org.apache.flink.api.java.ExecutionEnvironment; +import org.apache.flink.api.java.functions.KeySelector; +import org.apache.flink.api.java.tuple.Tuple2; +import org.apache.flink.api.java.tuple.Tuple3; +import org.apache.flink.streaming.api.datastream.DataStream; +import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator; +import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; +import org.apache.flink.streaming.api.functions.timestamps.BoundedOutOfOrdernessTimestampExtractor; +import org.apache.flink.streaming.api.windowing.assigners.TumblingEventTimeWindows; +import org.apache.flink.streaming.api.windowing.time.Time; +import org.junit.Test; + +import java.time.ZonedDateTime; +import java.util.Arrays; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +public class WordCountIntegrationTest { + private final ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment(); + + @Test + public void givenDataSet_whenExecuteWordCount_thenReturnWordCount() throws Exception { + // given + List lines = Arrays.asList("This is a first sentence", "This is a second sentence with a one word"); + + // when + DataSet> result = WordCount.startWordCount(env, lines); + + // then + List> collect = result.collect(); + assertThat(collect).containsExactlyInAnyOrder(new Tuple2<>("a", 3), new Tuple2<>("sentence", 2), new Tuple2<>("word", 1), new Tuple2<>("is", 2), new Tuple2<>("this", 2), new Tuple2<>("second", 1), new Tuple2<>("first", 1), new Tuple2<>("with", 1), + new Tuple2<>("one", 1)); + } + + @Test + public void givenListOfAmounts_whenUseMapReduce_thenSumAmountsThatAreOnlyAboveThreshold() throws Exception { + // given + DataSet amounts = env.fromElements(1, 29, 40, 50); + int threshold = 30; + + // when + List collect = amounts.filter(a -> a > threshold).reduce((integer, t1) -> integer + t1).collect(); + + // then + assertThat(collect.get(0)).isEqualTo(90); + } + + @Test + public void givenDataSetOfComplexObjects_whenMapToGetOneField_thenReturnedListHaveProperElements() throws Exception { + // given + DataSet personDataSource = env.fromCollection(Arrays.asList(new Person(23, "Tom"), new Person(75, "Michael"))); + + // when + List ages = personDataSource.map(p -> p.age).collect(); + + // then + assertThat(ages).hasSize(2); + assertThat(ages).contains(23, 75); + + } + + @Test + public void givenDataSet_whenSortItByOneField_thenShouldReturnSortedDataSet() throws Exception { + // given + Tuple2 secondPerson = new Tuple2<>(4, "Tom"); + Tuple2 thirdPerson = new Tuple2<>(5, "Scott"); + Tuple2 fourthPerson = new Tuple2<>(200, "Michael"); + Tuple2 firstPerson = new Tuple2<>(1, "Jack"); + DataSet> transactions = env.fromElements(fourthPerson, secondPerson, thirdPerson, firstPerson); + + // when + List> sorted = transactions.sortPartition(new IdKeySelectorTransaction(), Order.ASCENDING).collect(); + + // then + assertThat(sorted).containsExactly(firstPerson, secondPerson, thirdPerson, fourthPerson); + } + + @Test + public void giveTwoDataSets_whenJoinUsingId_thenProduceJoinedData() throws Exception { + // given + Tuple3 address = new Tuple3<>(1, "5th Avenue", "London"); + DataSet> addresses = env.fromElements(address); + + Tuple2 firstTransaction = new Tuple2<>(1, "Transaction_1"); + DataSet> transactions = env.fromElements(firstTransaction, new Tuple2<>(12, "Transaction_2")); + + // when + List, Tuple3>> joined = transactions.join(addresses).where(new IdKeySelectorTransaction()).equalTo(new IdKeySelectorAddress()).collect(); + + // then + assertThat(joined).hasSize(1); + assertThat(joined).contains(new Tuple2<>(firstTransaction, address)); + + } + + @Test + public void givenStreamOfEvents_whenProcessEvents_thenShouldPrintResultsOnSinkOperation() throws Exception { + // given + final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); + + DataStream text = env.fromElements("This is a first sentence", "This is a second sentence with a one word"); + + SingleOutputStreamOperator upperCase = text.map(String::toUpperCase); + + upperCase.print(); + + // when + env.execute(); + } + + @Test + public void givenStreamOfEvents_whenProcessEvents_thenShouldApplyWindowingOnTransformation() throws Exception { + // given + final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); + + SingleOutputStreamOperator> windowed = env.fromElements(new Tuple2<>(16, ZonedDateTime.now().plusMinutes(25).toInstant().getEpochSecond()), new Tuple2<>(15, ZonedDateTime.now().plusMinutes(2).toInstant().getEpochSecond())) + .assignTimestampsAndWatermarks(new BoundedOutOfOrdernessTimestampExtractor>(Time.seconds(20)) { + @Override + public long extractTimestamp(Tuple2 element) { + return element.f1 * 1000; + } + }); + + SingleOutputStreamOperator> reduced = windowed.windowAll(TumblingEventTimeWindows.of(Time.seconds(5))).maxBy(0, true); + + reduced.print(); + + // when + env.execute(); + } + + private static class IdKeySelectorTransaction implements KeySelector, Integer> { + @Override + public Integer getKey(Tuple2 value) { + return value.f0; + } + } + + private static class IdKeySelectorAddress implements KeySelector, Integer> { + @Override + public Integer getKey(Tuple3 value) { + return value.f0; + } + } + + private static class Person { + private final int age; + private final String name; + + private Person(int age, String name) { + this.age = age; + this.name = name; + } + } + +} \ No newline at end of file diff --git a/libraries-data-2/src/test/com/baeldung/google/sheets/GoogleSheetsLiveTest.java b/libraries-data-2/src/test/com/baeldung/google/sheets/GoogleSheetsLiveTest.java new file mode 100644 index 000000000000..358b3390f9b5 --- /dev/null +++ b/libraries-data-2/src/test/com/baeldung/google/sheets/GoogleSheetsLiveTest.java @@ -0,0 +1,96 @@ +package com.baeldung.google.sheets; + +import java.io.IOException; +import java.security.GeneralSecurityException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import org.junit.BeforeClass; +import org.junit.Test; + +import com.google.api.services.sheets.v4.Sheets; +import com.google.api.services.sheets.v4.model.AppendValuesResponse; +import com.google.api.services.sheets.v4.model.BatchGetValuesResponse; +import com.google.api.services.sheets.v4.model.BatchUpdateSpreadsheetRequest; +import com.google.api.services.sheets.v4.model.BatchUpdateValuesRequest; +import com.google.api.services.sheets.v4.model.BatchUpdateValuesResponse; +import com.google.api.services.sheets.v4.model.CopyPasteRequest; +import com.google.api.services.sheets.v4.model.GridRange; +import com.google.api.services.sheets.v4.model.Request; +import com.google.api.services.sheets.v4.model.Spreadsheet; +import com.google.api.services.sheets.v4.model.SpreadsheetProperties; +import com.google.api.services.sheets.v4.model.UpdateSpreadsheetPropertiesRequest; +import com.google.api.services.sheets.v4.model.UpdateValuesResponse; +import com.google.api.services.sheets.v4.model.ValueRange; + +import static org.assertj.core.api.Assertions.*; + +public class GoogleSheetsLiveTest { + + private static Sheets sheetsService; + + // this id can be replaced with your spreadsheet id + // otherwise be advised that multiple people may run this test and update the public spreadsheet + private static final String SPREADSHEET_ID = "1sILuxZUnyl_7-MlNThjt765oWshN3Xs-PPLfqYe4DhI"; + + @BeforeClass + public static void setup() throws GeneralSecurityException, IOException { + sheetsService = SheetsServiceUtil.getSheetsService(); + } + + @Test + public void whenWriteSheet_thenReadSheetOk() throws IOException { + ValueRange body = new ValueRange().setValues(Arrays.asList(Arrays.asList("Expenses January"), Arrays.asList("books", "30"), Arrays.asList("pens", "10"), Arrays.asList("Expenses February"), Arrays.asList("clothes", "20"), Arrays.asList("shoes", "5"))); + UpdateValuesResponse result = sheetsService.spreadsheets().values().update(SPREADSHEET_ID, "A1", body).setValueInputOption("RAW").execute(); + + List data = new ArrayList<>(); + data.add(new ValueRange().setRange("D1").setValues(Arrays.asList(Arrays.asList("January Total", "=B2+B3")))); + data.add(new ValueRange().setRange("D4").setValues(Arrays.asList(Arrays.asList("February Total", "=B5+B6")))); + + BatchUpdateValuesRequest batchBody = new BatchUpdateValuesRequest().setValueInputOption("USER_ENTERED").setData(data); + BatchUpdateValuesResponse batchResult = sheetsService.spreadsheets().values().batchUpdate(SPREADSHEET_ID, batchBody).execute(); + + List ranges = Arrays.asList("E1", "E4"); + BatchGetValuesResponse readResult = sheetsService.spreadsheets().values().batchGet(SPREADSHEET_ID).setRanges(ranges).execute(); + + ValueRange januaryTotal = readResult.getValueRanges().get(0); + assertThat(januaryTotal.getValues().get(0).get(0)).isEqualTo("40"); + + ValueRange febTotal = readResult.getValueRanges().get(1); + assertThat(febTotal.getValues().get(0).get(0)).isEqualTo("25"); + + ValueRange appendBody = new ValueRange().setValues(Arrays.asList(Arrays.asList("Total", "=E1+E4"))); + AppendValuesResponse appendResult = sheetsService.spreadsheets().values().append(SPREADSHEET_ID, "A1", appendBody).setValueInputOption("USER_ENTERED").setInsertDataOption("INSERT_ROWS").setIncludeValuesInResponse(true).execute(); + + ValueRange total = appendResult.getUpdates().getUpdatedData(); + assertThat(total.getValues().get(0).get(1)).isEqualTo("65"); + } + + @Test + public void whenUpdateSpreadSheetTitle_thenOk() throws IOException { + + UpdateSpreadsheetPropertiesRequest updateRequest = new UpdateSpreadsheetPropertiesRequest().setFields("*").setProperties(new SpreadsheetProperties().setTitle("Expenses")); + + CopyPasteRequest copyRequest = new CopyPasteRequest().setSource(new GridRange().setSheetId(0).setStartColumnIndex(0).setEndColumnIndex(2).setStartRowIndex(0).setEndRowIndex(1)) + .setDestination(new GridRange().setSheetId(1).setStartColumnIndex(0).setEndColumnIndex(2).setStartRowIndex(0).setEndRowIndex(1)).setPasteType("PASTE_VALUES"); + + List requests = new ArrayList<>(); + + requests.add(new Request().setCopyPaste(copyRequest)); + requests.add(new Request().setUpdateSpreadsheetProperties(updateRequest)); + + BatchUpdateSpreadsheetRequest body = new BatchUpdateSpreadsheetRequest().setRequests(requests); + + sheetsService.spreadsheets().batchUpdate(SPREADSHEET_ID, body).execute(); + } + + @Test + public void whenCreateSpreadSheet_thenIdOk() throws IOException { + Spreadsheet spreadSheet = new Spreadsheet().setProperties(new SpreadsheetProperties().setTitle("My Spreadsheet")); + Spreadsheet result = sheetsService.spreadsheets().create(spreadSheet).execute(); + + assertThat(result.getSpreadsheetId()).isNotNull(); + } + +} diff --git a/libraries-data-2/src/test/com/baeldung/hll/HLLLongRunningManualTest.java b/libraries-data-2/src/test/com/baeldung/hll/HLLLongRunningManualTest.java new file mode 100644 index 000000000000..2c8113771e26 --- /dev/null +++ b/libraries-data-2/src/test/com/baeldung/hll/HLLLongRunningManualTest.java @@ -0,0 +1,59 @@ +package com.baeldung.hll; + +import com.google.common.hash.HashFunction; +import com.google.common.hash.Hashing; +import net.agkn.hll.HLL; +import org.assertj.core.data.Offset; +import org.junit.Test; + +import java.util.stream.LongStream; + +import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat; + +public class HLLLongRunningManualTest { + + @Test + public void givenHLL_whenAddHugeAmountOfNumbers_thenShouldReturnEstimatedCardinality() { + // given + long numberOfElements = 100_000_000; + long toleratedDifference = 1_000_000; + HashFunction hashFunction = Hashing.murmur3_128(); + HLL hll = new HLL(14, 5); + + // when + LongStream.range(0, numberOfElements).forEach(element -> { + long hashedValue = hashFunction.newHasher().putLong(element).hash().asLong(); + hll.addRaw(hashedValue); + }); + + // then + long cardinality = hll.cardinality(); + assertThat(cardinality).isCloseTo(numberOfElements, Offset.offset(toleratedDifference)); + } + + @Test + public void givenTwoHLLs_whenAddHugeAmountOfNumbers_thenShouldReturnEstimatedCardinalityForUnionOfHLLs() { + // given + long numberOfElements = 100_000_000; + long toleratedDifference = 1_000_000; + HashFunction hashFunction = Hashing.murmur3_128(); + HLL firstHll = new HLL(15, 5); + HLL secondHLL = new HLL(15, 5); + + // when + LongStream.range(0, numberOfElements).forEach(element -> { + long hashedValue = hashFunction.newHasher().putLong(element).hash().asLong(); + firstHll.addRaw(hashedValue); + }); + + LongStream.range(numberOfElements, numberOfElements * 2).forEach(element -> { + long hashedValue = hashFunction.newHasher().putLong(element).hash().asLong(); + secondHLL.addRaw(hashedValue); + }); + + // then + firstHll.union(secondHLL); + long cardinality = firstHll.cardinality(); + assertThat(cardinality).isCloseTo(numberOfElements * 2, Offset.offset(toleratedDifference * 2)); + } +} diff --git a/libraries-data-2/src/test/com/baeldung/infinispan/AbstractIntegrationTest.java b/libraries-data-2/src/test/com/baeldung/infinispan/AbstractIntegrationTest.java new file mode 100644 index 000000000000..2a9d43043056 --- /dev/null +++ b/libraries-data-2/src/test/com/baeldung/infinispan/AbstractIntegrationTest.java @@ -0,0 +1,57 @@ +package com.baeldung.infinispan; + +import com.baeldung.infinispan.listener.CacheListener; +import com.baeldung.infinispan.repository.HelloWorldRepository; +import com.baeldung.infinispan.service.HelloWorldService; +import com.baeldung.infinispan.service.TransactionalService; +import org.infinispan.Cache; +import org.infinispan.manager.DefaultCacheManager; +import org.junit.After; +import org.junit.Before; +import org.junit.Ignore; + +import java.util.function.Supplier; + +@Ignore +public abstract class AbstractIntegrationTest { + + private DefaultCacheManager cacheManager; + + private HelloWorldRepository repository = new HelloWorldRepository(); + + protected HelloWorldService helloWorldService; + protected TransactionalService transactionalService; + + @Before + public void setup() { + CacheConfiguration configuration = new CacheConfiguration(); + CacheListener listener = new CacheListener(); + + cacheManager = configuration.cacheManager(); + + Cache transactionalCache = configuration.transactionalCache(cacheManager, listener); + + Cache simpleHelloWorldCache = configuration.simpleHelloWorldCache(cacheManager, listener); + + Cache expiringHelloWorldCache = configuration.expiringHelloWorldCache(cacheManager, listener); + + Cache evictingHelloWorldCache = configuration.evictingHelloWorldCache(cacheManager, listener); + + Cache passivatingHelloWorldCache = configuration.passivatingHelloWorldCache(cacheManager, listener); + + this.helloWorldService = new HelloWorldService(repository, listener, simpleHelloWorldCache, expiringHelloWorldCache, evictingHelloWorldCache, passivatingHelloWorldCache); + + this.transactionalService = new TransactionalService(transactionalCache); + } + + @After + public void tearDown() { + cacheManager.stop(); + } + + protected long timeThis(Supplier supplier) { + long millis = System.currentTimeMillis(); + supplier.get(); + return System.currentTimeMillis() - millis; + } +} diff --git a/libraries-data-2/src/test/com/baeldung/infinispan/service/HelloWorldServiceTemporaryLiveTest.java b/libraries-data-2/src/test/com/baeldung/infinispan/service/HelloWorldServiceTemporaryLiveTest.java new file mode 100644 index 000000000000..46cc77cbbaba --- /dev/null +++ b/libraries-data-2/src/test/com/baeldung/infinispan/service/HelloWorldServiceTemporaryLiveTest.java @@ -0,0 +1,51 @@ +package com.baeldung.infinispan.service; + +import com.baeldung.infinispan.AbstractIntegrationTest; +import org.junit.Test; + +import static org.assertj.core.api.Java6Assertions.assertThat; + +public class HelloWorldServiceTemporaryLiveTest extends AbstractIntegrationTest { + + @Test + public void whenGetIsCalledTwoTimes_thenTheSecondShouldHitTheCache() { + assertThat(timeThis(() -> helloWorldService.findSimpleHelloWorld())).isGreaterThanOrEqualTo(1000); + + assertThat(timeThis(() -> helloWorldService.findSimpleHelloWorld())).isLessThan(100); + } + + @Test + public void whenGetIsCalledTwoTimesQuickly_thenTheSecondShouldHitTheCache() { + assertThat(timeThis(() -> helloWorldService.findExpiringHelloWorld())).isGreaterThanOrEqualTo(1000); + + assertThat(timeThis(() -> helloWorldService.findExpiringHelloWorld())).isLessThan(100); + } + + @Test + public void whenGetIsCalledTwoTimesSparsely_thenNeitherShouldHitTheCache() throws InterruptedException { + assertThat(timeThis(() -> helloWorldService.findExpiringHelloWorld())).isGreaterThanOrEqualTo(1000); + + Thread.sleep(1100); + + assertThat(timeThis(() -> helloWorldService.findExpiringHelloWorld())).isGreaterThanOrEqualTo(1000); + } + + @Test + public void givenOneEntryIsConfigured_whenTwoAreAdded_thenFirstShouldntBeAvailable() { + assertThat(timeThis(() -> helloWorldService.findEvictingHelloWorld("key 1"))).isGreaterThanOrEqualTo(1000); + + assertThat(timeThis(() -> helloWorldService.findEvictingHelloWorld("key 2"))).isGreaterThanOrEqualTo(1000); + + assertThat(timeThis(() -> helloWorldService.findEvictingHelloWorld("key 1"))).isGreaterThanOrEqualTo(1000); + } + + @Test + public void givenOneEntryIsConfigured_whenTwoAreAdded_thenTheFirstShouldBeAvailable() { + assertThat(timeThis(() -> helloWorldService.findPassivatingHelloWorld("key 1"))).isGreaterThanOrEqualTo(1000); + + assertThat(timeThis(() -> helloWorldService.findPassivatingHelloWorld("key 2"))).isGreaterThanOrEqualTo(1000); + + assertThat(timeThis(() -> helloWorldService.findPassivatingHelloWorld("key 1"))).isLessThan(100); + } + +} diff --git a/libraries-data-2/src/test/com/baeldung/infinispan/service/TransactionalServiceIntegrationTest.java b/libraries-data-2/src/test/com/baeldung/infinispan/service/TransactionalServiceIntegrationTest.java new file mode 100644 index 000000000000..800c6c2775a4 --- /dev/null +++ b/libraries-data-2/src/test/com/baeldung/infinispan/service/TransactionalServiceIntegrationTest.java @@ -0,0 +1,21 @@ +package com.baeldung.infinispan.service; + +import com.baeldung.infinispan.AbstractIntegrationTest; +import org.junit.Test; + +import static org.assertj.core.api.Java6Assertions.assertThat; + +public class TransactionalServiceIntegrationTest extends AbstractIntegrationTest { + + @Test + public void whenLockingAnEntry_thenItShouldBeInaccessible() throws InterruptedException { + Runnable backGroundJob = () -> transactionalService.startBackgroundBatch(); + Thread backgroundThread = new Thread(backGroundJob); + transactionalService.getQuickHowManyVisits(); + backgroundThread.start(); + Thread.sleep(100); // lets wait our thread warm up + + assertThat(timeThis(() -> transactionalService.getQuickHowManyVisits())).isGreaterThan(500).isLessThan(1000); + } + +} diff --git a/libraries-data-2/src/test/com/baeldung/measurement/WaterTankUnitTest.java b/libraries-data-2/src/test/com/baeldung/measurement/WaterTankUnitTest.java new file mode 100644 index 000000000000..e23eea1714f5 --- /dev/null +++ b/libraries-data-2/src/test/com/baeldung/measurement/WaterTankUnitTest.java @@ -0,0 +1,86 @@ +package com.baeldung.measurement; + +import javax.measure.Quantity; +import javax.measure.quantity.Area; +import javax.measure.quantity.Length; +import javax.measure.quantity.Pressure; +import javax.measure.quantity.Volume; + +import javax.measure.Unit; +import javax.measure.UnitConverter; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import org.junit.Test; + +import com.baeldung.measurement.WaterTank; + +import tec.units.ri.format.SimpleUnitFormat; +import tec.units.ri.quantity.Quantities; +import tec.units.ri.unit.MetricPrefix; +import static tec.units.ri.unit.Units.*; + +public class WaterTankUnitTest { + + @Test + public void givenQuantity_whenGetUnitAndConvertValue_thenSuccess() { + WaterTank waterTank = new WaterTank(); + waterTank.setCapacityMeasure(Quantities.getQuantity(9.2, LITRE)); + assertEquals(LITRE, waterTank.getCapacityMeasure().getUnit()); + + Quantity waterCapacity = waterTank.getCapacityMeasure(); + double volumeInLitre = waterCapacity.getValue().doubleValue(); + assertEquals(9.2, volumeInLitre, 0.0f); + + double volumeInMilliLitre = waterCapacity.to(MetricPrefix.MILLI(LITRE)).getValue().doubleValue(); + assertEquals(9200.0, volumeInMilliLitre, 0.0f); + + // compilation error + // volumeInMilliLitre = waterCapacity.to(MetricPrefix.MILLI(KILOGRAM)); + + Unit Kilometer = MetricPrefix.KILO(METRE); + + // compilation error + // Unit Centimeter = MetricPrefix.CENTI(LITRE); + } + + @Test + public void givenUnit_whenAlternateUnit_ThenGetAlternateUnit() { + + Unit PASCAL = NEWTON.divide(METRE.pow(2)).alternate("Pa").asType(Pressure.class); + assertTrue(SimpleUnitFormat.getInstance().parse("Pa").equals(PASCAL)); + } + + @Test + public void givenUnit_whenProduct_ThenGetProductUnit() { + Unit squareMetre = METRE.multiply(METRE).asType(Area.class); + Quantity line = Quantities.getQuantity(2, METRE); + assertEquals(line.multiply(line).getUnit(), squareMetre); + } + + @Test + public void givenMeters_whenConvertToKilometer_ThenConverted() { + double distanceInMeters = 50.0; + UnitConverter metreToKilometre = METRE.getConverterTo(MetricPrefix.KILO(METRE)); + double distanceInKilometers = metreToKilometre.convert(distanceInMeters); + assertEquals(0.05, distanceInKilometers, 0.00f); + } + + @Test + public void givenSymbol_WhenCompareToSystemUnit_ThenSuccess() { + assertTrue(SimpleUnitFormat.getInstance().parse("kW").equals(MetricPrefix.KILO(WATT))); + assertTrue(SimpleUnitFormat.getInstance().parse("ms").equals(SECOND.divide(1000))); + } + + @Test + public void givenUnits_WhenAdd_ThenSuccess() { + Quantity total = Quantities.getQuantity(2, METRE).add(Quantities.getQuantity(3, METRE)); + assertEquals(total.getValue().intValue(), 5); + + // compilation error + // Quantity total = Quantities.getQuantity(2, METRE).add(Quantities.getQuantity(3, LITRE)); + + Quantity totalKm = Quantities.getQuantity(2, METRE).add(Quantities.getQuantity(3, MetricPrefix.KILO(METRE))); + assertEquals(totalKm.getValue().intValue(), 3002); + } +} diff --git a/libraries-data-2/src/test/com/baeldung/opencsv/OpenCsvIntegrationTest.java b/libraries-data-2/src/test/com/baeldung/opencsv/OpenCsvIntegrationTest.java new file mode 100644 index 000000000000..fca96684ad9f --- /dev/null +++ b/libraries-data-2/src/test/com/baeldung/opencsv/OpenCsvIntegrationTest.java @@ -0,0 +1,66 @@ +package com.baeldung.opencsv; + +import com.baeldung.opencsv.helpers.Helpers; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +public class OpenCsvIntegrationTest { + + private Object testReadCsv(Object result) { + assert (result != null); + assert (result instanceof String); + assert (!((String) result).isEmpty()); + System.out.println(result); + return result; + } + + private Object testWriteCsv(Object result) { + assert (result instanceof String); + assert (!((String) result).isEmpty()); + return result; + } + + @Before + public void setup() { + } + + @Test + public void positionExampleTest() { + testReadCsv(Application.simpleSyncPositionBeanExample()); + } + + @Test + public void namedColumnExampleTest() { + testReadCsv(Application.namedSyncColumnBeanExample()); + } + + @Test + public void writeCsvUsingBeanBuilderTest() { + testWriteCsv(Application.writeSyncCsvFromBeanExample()); + } + + @Test + public void oneByOneExampleTest() { + testReadCsv(Application.oneByOneSyncExample()); + } + + @Test + public void readAllExampleTest() { + testReadCsv(Application.readAllSyncExample()); + } + + @Test + public void csvWriterOneByOneTest() { + testWriteCsv(Application.csvWriterSyncOneByOne()); + } + + @Test + public void csvWriterAllTest() { + testWriteCsv(Application.csvWriterSyncAll()); + } + + @After + public void close() { + } +} \ No newline at end of file diff --git a/libraries-data-2/src/test/com/baeldung/smooks/converter/SmooksIntegrationTest.java b/libraries-data-2/src/test/com/baeldung/smooks/converter/SmooksIntegrationTest.java new file mode 100644 index 000000000000..df7fea58f80a --- /dev/null +++ b/libraries-data-2/src/test/com/baeldung/smooks/converter/SmooksIntegrationTest.java @@ -0,0 +1,60 @@ +package com.baeldung.smooks.converter; + +import com.baeldung.smooks.model.Item; +import com.baeldung.smooks.model.Order; +import com.baeldung.smooks.model.Status; +import com.baeldung.smooks.model.Supplier; +import org.junit.Test; +import org.milyn.validation.ValidationResult; +import java.text.SimpleDateFormat; +import static org.hamcrest.Matchers.*; +import static org.junit.Assert.*; + +public class SmooksIntegrationTest { + + private static final String EDIFACT_MESSAGE = "UNA:+.? '" + System.lineSeparator() + "UNH+771+IN_PROGRESS+2018-01-14'" + System.lineSeparator() + "CTA+CompanyX+1234567'" + System.lineSeparator() + "LIN+1+PX1234+9.99'" + System.lineSeparator() + + "LIN+2+RX990+120.32'" + System.lineSeparator(); + private static final String EMAIL_MESSAGE = "Hi," + System.lineSeparator() + "Order number #771 created on 2018-01-14 is currently in IN_PROGRESS status." + System.lineSeparator() + "Consider contact supplier \"CompanyX\" with phone number: \"1234567\"." + + System.lineSeparator() + "Order items:" + System.lineSeparator() + "1 X PX1234 (total price 9.99)" + System.lineSeparator() + "2 X RX990 (total price 240.64)" + System.lineSeparator(); + + @Test + public void givenOrderXML_whenConvert_thenPOJOsConstructedCorrectly() throws Exception { + + OrderConverter xmlToJavaOrderConverter = new OrderConverter(); + Order order = xmlToJavaOrderConverter.convertOrderXMLToOrderObject("/smooks/order.xml"); + + assertThat(order.getNumber(), is(771L)); + assertThat(order.getStatus(), is(Status.IN_PROGRESS)); + assertThat(order.getCreationDate(), is(new SimpleDateFormat("yyyy-MM-dd").parse("2018-01-14"))); + assertThat(order.getSupplier(), is(new Supplier("CompanyX", "1234567"))); + assertThat(order.getItems(), containsInAnyOrder(new Item("PX1234", 9.99, 1), new Item("RX990", 120.32, 2))); + + } + + @Test + public void givenIncorrectOrderXML_whenValidate_thenExpectValidationErrors() throws Exception { + OrderValidator orderValidator = new OrderValidator(); + ValidationResult validationResult = orderValidator.validate("/smooks/order.xml"); + + assertThat(validationResult.getErrors(), hasSize(1)); + // 1234567 didn't match ^[0-9\\-\\+]{9,15}$ + assertThat(validationResult.getErrors() + .get(0) + .getFailRuleResult() + .getRuleName(), is("supplierPhone")); + } + + @Test + public void givenOrderXML_whenApplyEDITemplate_thenConvertedToEDIFACT() throws Exception { + OrderConverter orderConverter = new OrderConverter(); + String edifact = orderConverter.convertOrderXMLtoEDIFACT("/smooks/order.xml"); + assertThat(edifact, is(EDIFACT_MESSAGE)); + } + + @Test + public void givenOrderXML_whenApplyEmailTemplate_thenConvertedToEmailMessage() throws Exception { + OrderConverter orderConverter = new OrderConverter(); + String emailMessage = orderConverter.convertOrderXMLtoEmailMessage("/smooks/order.xml"); + assertThat(emailMessage, is(EMAIL_MESSAGE)); + } +} \ No newline at end of file From 2096feb825cb7205549807a8f2a1ffd24e287311 Mon Sep 17 00:00:00 2001 From: Sjmillington Date: Fri, 2 Aug 2019 16:29:20 +0100 Subject: [PATCH 56/99] remove live test change from this branch --- .../{ApplicationLiveTest.java => ApplicationIntegrationTest.java} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename twitter4j/src/test/java/com/baeldung/{ApplicationLiveTest.java => ApplicationIntegrationTest.java} (100%) diff --git a/twitter4j/src/test/java/com/baeldung/ApplicationLiveTest.java b/twitter4j/src/test/java/com/baeldung/ApplicationIntegrationTest.java similarity index 100% rename from twitter4j/src/test/java/com/baeldung/ApplicationLiveTest.java rename to twitter4j/src/test/java/com/baeldung/ApplicationIntegrationTest.java From 0f06cd46cae11eaf27f84c1e11cbd1c237c75d3b Mon Sep 17 00:00:00 2001 From: Sjmillington Date: Fri, 2 Aug 2019 16:30:39 +0100 Subject: [PATCH 57/99] remove live test change from this branch --- .../src/test/java/com/baeldung/ApplicationIntegrationTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/twitter4j/src/test/java/com/baeldung/ApplicationIntegrationTest.java b/twitter4j/src/test/java/com/baeldung/ApplicationIntegrationTest.java index 0d4114e72dc5..4696283faa18 100644 --- a/twitter4j/src/test/java/com/baeldung/ApplicationIntegrationTest.java +++ b/twitter4j/src/test/java/com/baeldung/ApplicationIntegrationTest.java @@ -9,7 +9,7 @@ import twitter4j.TwitterException; -public class ApplicationLiveTest { +public class ApplicationIntegrationTest { /** * In order run this jUnit test you need to configure your API details in the twitter4j.properties From 4f948b26f8b6367f133c183838b6253ea755c3e7 Mon Sep 17 00:00:00 2001 From: pcoates Date: Fri, 2 Aug 2019 16:43:35 +0100 Subject: [PATCH 58/99] BAEL-2688 Moved example code from spring-amqp-simple to spring-amqp project. Also updated for Spring Boot. --- parent-boot-2/pom.xml | 12 ------- .../springamqpsimple/SpringAmqpConfig.java | 1 - .../broadcast/BroadcastConfig.java | 19 ++++------ .../org/baeldung/SpringContextManualTest.java | 3 +- spring-amqp/README.md | 3 +- spring-amqp/pom.xml | 23 +++--------- .../springamqp/consumer/Consumer.java | 7 ---- .../springamqp/producer/Producer.java | 17 --------- spring-amqp/src/main/resources/beans.xml | 35 ------------------- spring-amqp/src/main/resources/logback.xml | 13 ------- 10 files changed, 13 insertions(+), 120 deletions(-) delete mode 100644 spring-amqp/src/main/java/com/baeldung/springamqp/consumer/Consumer.java delete mode 100644 spring-amqp/src/main/java/com/baeldung/springamqp/producer/Producer.java delete mode 100644 spring-amqp/src/main/resources/beans.xml delete mode 100644 spring-amqp/src/main/resources/logback.xml diff --git a/parent-boot-2/pom.xml b/parent-boot-2/pom.xml index f0e921bf37eb..a91766f7721e 100644 --- a/parent-boot-2/pom.xml +++ b/parent-boot-2/pom.xml @@ -43,10 +43,6 @@ org.springframework.boot spring-boot-maven-plugin ${spring-boot.version} - - ${start-class} - - @@ -60,14 +56,6 @@ org.springframework.boot spring-boot-maven-plugin - - - - org.springframework.boot.experimental - spring-boot-thin-layout - ${thin.version} - - diff --git a/spring-amqp-simple/src/main/java/com/baeldung/springamqpsimple/SpringAmqpConfig.java b/spring-amqp-simple/src/main/java/com/baeldung/springamqpsimple/SpringAmqpConfig.java index 92fa28ed6f4e..5a2f6e4c963e 100644 --- a/spring-amqp-simple/src/main/java/com/baeldung/springamqpsimple/SpringAmqpConfig.java +++ b/spring-amqp-simple/src/main/java/com/baeldung/springamqpsimple/SpringAmqpConfig.java @@ -13,7 +13,6 @@ import org.springframework.context.annotation.Profile; @Configuration -@Profile("!test") public class SpringAmqpConfig { public final static String queueName = "com.baeldung.spring-amqp-simple.queue"; diff --git a/spring-amqp-simple/src/main/java/com/baeldung/springamqpsimple/broadcast/BroadcastConfig.java b/spring-amqp-simple/src/main/java/com/baeldung/springamqpsimple/broadcast/BroadcastConfig.java index 868cfff0ac26..35f906a7fc63 100644 --- a/spring-amqp-simple/src/main/java/com/baeldung/springamqpsimple/broadcast/BroadcastConfig.java +++ b/spring-amqp-simple/src/main/java/com/baeldung/springamqpsimple/broadcast/BroadcastConfig.java @@ -1,11 +1,6 @@ package com.baeldung.springamqpsimple.broadcast; -import org.springframework.amqp.core.BindingBuilder; -import org.springframework.amqp.core.Declarable; -import org.springframework.amqp.core.DirectExchange; -import org.springframework.amqp.core.FanoutExchange; -import org.springframework.amqp.core.Queue; -import org.springframework.amqp.core.TopicExchange; +import org.springframework.amqp.core.*; import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory; import org.springframework.amqp.rabbit.connection.ConnectionFactory; import org.springframework.boot.autoconfigure.amqp.SimpleRabbitListenerContainerFactoryConfigurer; @@ -17,7 +12,6 @@ import java.util.List; @Configuration -@Profile("!test") public class BroadcastConfig { public final static String fanoutQueue1Name = "com.baeldung.spring-amqp-simple.fanout.queue1"; @@ -29,29 +23,28 @@ public class BroadcastConfig { public final static String topicExchangeName = "com.baeldung.spring-amql-simple.topic.exchange"; @Bean - public List topicBindings() { + public Declarables topicBindings() { Queue topicQueue1 = new Queue(topicQueue1Name, false); Queue topicQueue2 = new Queue(topicQueue2Name, false); TopicExchange topicExchange = new TopicExchange(topicExchangeName); - return Arrays.asList( + return new Declarables( topicQueue1, topicQueue2, topicExchange, BindingBuilder.bind(topicQueue1).to(topicExchange).with("*.important.*"), - BindingBuilder.bind(topicQueue2).to(topicExchange).with("user.#") - ); + BindingBuilder.bind(topicQueue2).to(topicExchange).with("user.#")); } @Bean - public List fanoutBindings() { + public Declarables fanoutBindings() { Queue fanoutQueue1 = new Queue(fanoutQueue1Name, false); Queue fanoutQueue2 = new Queue(fanoutQueue2Name, false); FanoutExchange fanoutExchange = new FanoutExchange(fanoutExchangeName); - return Arrays.asList( + return new Declarables( fanoutQueue1, fanoutQueue2, fanoutExchange, diff --git a/spring-amqp-simple/src/test/java/org/baeldung/SpringContextManualTest.java b/spring-amqp-simple/src/test/java/org/baeldung/SpringContextManualTest.java index 03cb34eeb520..d51017d07a5d 100644 --- a/spring-amqp-simple/src/test/java/org/baeldung/SpringContextManualTest.java +++ b/spring-amqp-simple/src/test/java/org/baeldung/SpringContextManualTest.java @@ -1,12 +1,11 @@ package org.baeldung; +import com.baeldung.springamqpsimple.SpringAmqpApplication; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; -import com.baeldung.springamqpsimple.SpringAmqpApplication; - @RunWith(SpringRunner.class) @SpringBootTest(classes = SpringAmqpApplication.class) public class SpringContextManualTest { diff --git a/spring-amqp/README.md b/spring-amqp/README.md index b0d16c9305b9..5e2901199548 100644 --- a/spring-amqp/README.md +++ b/spring-amqp/README.md @@ -1,3 +1,4 @@ ## Relevant articles: -- [Messaging With Spring AMQP](http://www.baeldung.com/spring-amqp) +- [Messaging With Spring AMQP](https://www.baeldung.com/spring-amqp) +- [RabbitMQ Message Dispatching with Spring AMQP](https://www.baeldung.com/rabbitmq-spring-amqp) \ No newline at end of file diff --git a/spring-amqp/pom.xml b/spring-amqp/pom.xml index c021bd49ffa0..642d35b44e17 100755 --- a/spring-amqp/pom.xml +++ b/spring-amqp/pom.xml @@ -9,31 +9,16 @@ Introduction to Spring-AMQP + parent-boot-2 com.baeldung - parent-modules - 1.0.0-SNAPSHOT + 0.0.1-SNAPSHOT - org.springframework.amqp - spring-rabbit - ${spring-rabbit} - - - commons-logging - commons-logging - - + org.springframework.boot + spring-boot-starter-amqp - - spring-amqp - - - - 1.6.6.RELEASE - - diff --git a/spring-amqp/src/main/java/com/baeldung/springamqp/consumer/Consumer.java b/spring-amqp/src/main/java/com/baeldung/springamqp/consumer/Consumer.java deleted file mode 100644 index 42d7e88cbd12..000000000000 --- a/spring-amqp/src/main/java/com/baeldung/springamqp/consumer/Consumer.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.baeldung.springamqp.consumer; - -public class Consumer { - public void listen(String foo) { - System.out.println(foo); - } -} \ No newline at end of file diff --git a/spring-amqp/src/main/java/com/baeldung/springamqp/producer/Producer.java b/spring-amqp/src/main/java/com/baeldung/springamqp/producer/Producer.java deleted file mode 100644 index b4067ed79582..000000000000 --- a/spring-amqp/src/main/java/com/baeldung/springamqp/producer/Producer.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.baeldung.springamqp.producer; - -import org.springframework.amqp.core.AmqpTemplate; -import org.springframework.amqp.rabbit.core.RabbitTemplate; -import org.springframework.context.support.AbstractApplicationContext; -import org.springframework.context.support.ClassPathXmlApplicationContext; - -public class Producer { - - public static void main(String[] args) throws InterruptedException { - AbstractApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml"); - AmqpTemplate template = ctx.getBean(RabbitTemplate.class); - template.convertAndSend("Hello, world!"); - Thread.sleep(1000); - ctx.destroy(); - } -} \ No newline at end of file diff --git a/spring-amqp/src/main/resources/beans.xml b/spring-amqp/src/main/resources/beans.xml deleted file mode 100644 index f6a966b0f6ad..000000000000 --- a/spring-amqp/src/main/resources/beans.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/spring-amqp/src/main/resources/logback.xml b/spring-amqp/src/main/resources/logback.xml deleted file mode 100644 index 7d900d8ea884..000000000000 --- a/spring-amqp/src/main/resources/logback.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - - \ No newline at end of file From e3b4b5f5523dcb96bf83aad20181bd0dd5b05e81 Mon Sep 17 00:00:00 2001 From: pcoates Date: Fri, 2 Aug 2019 16:43:55 +0100 Subject: [PATCH 59/99] BAEL-2688 Moved example code from spring-amqp-simple to spring-amqp project. Also updated for Spring Boot. --- .../springamqp/broadcast/BroadcastConfig.java | 52 +++++++++++++++++++ .../broadcast/BroadcastMessageApp.java | 51 ++++++++++++++++++ .../simple/HelloWorldMessageApp.java | 38 ++++++++++++++ 3 files changed, 141 insertions(+) create mode 100644 spring-amqp/src/main/java/com/baeldung/springamqp/broadcast/BroadcastConfig.java create mode 100644 spring-amqp/src/main/java/com/baeldung/springamqp/broadcast/BroadcastMessageApp.java create mode 100644 spring-amqp/src/main/java/com/baeldung/springamqp/simple/HelloWorldMessageApp.java diff --git a/spring-amqp/src/main/java/com/baeldung/springamqp/broadcast/BroadcastConfig.java b/spring-amqp/src/main/java/com/baeldung/springamqp/broadcast/BroadcastConfig.java new file mode 100644 index 000000000000..12c5987cc4da --- /dev/null +++ b/spring-amqp/src/main/java/com/baeldung/springamqp/broadcast/BroadcastConfig.java @@ -0,0 +1,52 @@ +package com.baeldung.springamqp.broadcast; + +import org.springframework.amqp.core.*; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class BroadcastConfig { + + private static final boolean NON_DURABLE = false; + + public final static String FANOUT_QUEUE_1_NAME = "com.baeldung.spring-amqp-simple.fanout.queue1"; + public final static String FANOUT_QUEUE_2_NAME = "com.baeldung.spring-amqp-simple.fanout.queue2"; + public final static String FANOUT_EXCHANGE_NAME = "com.baeldung.spring-amqp-simple.fanout.exchange"; + + public final static String TOPIC_QUEUE_1_NAME = "com.baeldung.spring-amqp-simple.topic.queue1"; + public final static String TOPIC_QUEUE_2_NAME = "com.baeldung.spring-amqp-simple.topic.queue2"; + public final static String TOPIC_EXCHANGE_NAME = "com.baeldung.spring-amqp-simple.topic.exchange"; + public static final String BINDING_PATTERN_IMPORTANT = "*.important.*"; + public static final String BINDING_PATTERN_ERROR = "#.error"; + + @Bean + public Declarables topicBindings() { + Queue topicQueue1 = new Queue(TOPIC_QUEUE_1_NAME, NON_DURABLE); + Queue topicQueue2 = new Queue(TOPIC_QUEUE_2_NAME, NON_DURABLE); + + TopicExchange topicExchange = new TopicExchange(TOPIC_EXCHANGE_NAME, NON_DURABLE, false); + + return new Declarables(topicQueue1, topicQueue2, topicExchange, BindingBuilder + .bind(topicQueue1) + .to(topicExchange) + .with(BINDING_PATTERN_IMPORTANT), BindingBuilder + .bind(topicQueue2) + .to(topicExchange) + .with(BINDING_PATTERN_ERROR)); + } + + @Bean + public Declarables fanoutBindings() { + Queue fanoutQueue1 = new Queue(FANOUT_QUEUE_1_NAME, NON_DURABLE); + Queue fanoutQueue2 = new Queue(FANOUT_QUEUE_2_NAME, NON_DURABLE); + + FanoutExchange fanoutExchange = new FanoutExchange(FANOUT_EXCHANGE_NAME, NON_DURABLE, false); + + return new Declarables(fanoutQueue1, fanoutQueue2, fanoutExchange, BindingBuilder + .bind(fanoutQueue1) + .to(fanoutExchange), BindingBuilder + .bind(fanoutQueue2) + .to(fanoutExchange)); + } + +} diff --git a/spring-amqp/src/main/java/com/baeldung/springamqp/broadcast/BroadcastMessageApp.java b/spring-amqp/src/main/java/com/baeldung/springamqp/broadcast/BroadcastMessageApp.java new file mode 100644 index 000000000000..d90087ec5c3f --- /dev/null +++ b/spring-amqp/src/main/java/com/baeldung/springamqp/broadcast/BroadcastMessageApp.java @@ -0,0 +1,51 @@ +package com.baeldung.springamqp.broadcast; + +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.boot.ApplicationRunner; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Bean; + +import static com.baeldung.springamqp.broadcast.BroadcastConfig.*; + +@SpringBootApplication +public class BroadcastMessageApp { + + private static String ROUTING_KEY_USER_IMPORTANT_WARN = "user.important.warn"; + private static String ROUTING_KEY_USER_IMPORTANT_ERROR = "user.important.error"; + + public static void main(String[] args) { + SpringApplication.run(BroadcastMessageApp.class, args); + } + + @Bean + public ApplicationRunner runner(RabbitTemplate rabbitTemplate) { + String message = " payload is broadcast"; + return args -> { + rabbitTemplate.convertAndSend(BroadcastConfig.FANOUT_EXCHANGE_NAME, "", "fanout" + message); + rabbitTemplate.convertAndSend(BroadcastConfig.TOPIC_EXCHANGE_NAME, ROUTING_KEY_USER_IMPORTANT_WARN, "topic important warn" + message); + rabbitTemplate.convertAndSend(BroadcastConfig.TOPIC_EXCHANGE_NAME, ROUTING_KEY_USER_IMPORTANT_ERROR, "topic important error" + message); + }; + } + + @RabbitListener(queues = { FANOUT_QUEUE_1_NAME }) + public void receiveMessageFromFanout1(String message) { + System.out.println("Received fanout 1 message: " + message); + } + + @RabbitListener(queues = { FANOUT_QUEUE_2_NAME }) + public void receiveMessageFromFanout2(String message) { + System.out.println("Received fanout 2 message: " + message); + } + + @RabbitListener(queues = { TOPIC_QUEUE_1_NAME }) + public void receiveMessageFromTopic1(String message) { + System.out.println("Received topic 1 (" + BINDING_PATTERN_IMPORTANT + ") message: " + message); + } + + @RabbitListener(queues = { TOPIC_QUEUE_2_NAME }) + public void receiveMessageFromTopic2(String message) { + System.out.println("Received topic 2 (" + BINDING_PATTERN_ERROR + ") message: " + message); + } +} diff --git a/spring-amqp/src/main/java/com/baeldung/springamqp/simple/HelloWorldMessageApp.java b/spring-amqp/src/main/java/com/baeldung/springamqp/simple/HelloWorldMessageApp.java new file mode 100644 index 000000000000..25dcdf29c18b --- /dev/null +++ b/spring-amqp/src/main/java/com/baeldung/springamqp/simple/HelloWorldMessageApp.java @@ -0,0 +1,38 @@ +package com.baeldung.springamqp.simple; + +import org.springframework.amqp.core.Queue; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.boot.ApplicationRunner; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Bean; + +@SpringBootApplication +public class HelloWorldMessageApp { + + private static final boolean NON_DURABLE = false; + private static final String MY_QUEUE_NAME = "myQueue"; + + public static void main(String[] args) { + SpringApplication.run(HelloWorldMessageApp.class, args); + } + + @Bean + public ApplicationRunner runner(RabbitTemplate template) { + return args -> { + template.convertAndSend("myQueue", "Hello, world!"); + }; + } + + @Bean + public Queue myQueue() { + return new Queue(MY_QUEUE_NAME, NON_DURABLE); + } + + @RabbitListener(queues = MY_QUEUE_NAME) + public void listen(String in) { + System.out.println("Message read from myQueue : " + in); + } + +} From 76c0918b4962c63325f86c05f9353b97ed44cc75 Mon Sep 17 00:00:00 2001 From: pcoates Date: Fri, 2 Aug 2019 16:50:56 +0100 Subject: [PATCH 60/99] BAEL-2688 Add relative path to parent module ot pom.xml --- spring-amqp/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-amqp/pom.xml b/spring-amqp/pom.xml index 642d35b44e17..b84279a3b240 100755 --- a/spring-amqp/pom.xml +++ b/spring-amqp/pom.xml @@ -3,15 +3,15 @@ 4.0.0 com.baeldung spring-amqp - 0.1-SNAPSHOT + 1.0.0-SNAPSHOT spring-amqp - jar Introduction to Spring-AMQP parent-boot-2 com.baeldung 0.0.1-SNAPSHOT + ../parent-boot-2 From 168cd4a0a417e469c533bdeebfc26aeac35fe477 Mon Sep 17 00:00:00 2001 From: pcoates Date: Fri, 2 Aug 2019 16:51:23 +0100 Subject: [PATCH 61/99] BAEL-2688 Remove spring-amqp-simple project --- spring-amqp-simple/README.md | 2 - spring-amqp-simple/pom.xml | 28 --------- .../springamqpsimple/MessageConsumer.java | 17 ----- .../springamqpsimple/MessageController.java | 26 -------- .../springamqpsimple/MessageProducer.java | 20 ------ .../SpringAmqpApplication.java | 12 ---- .../springamqpsimple/SpringAmqpConfig.java | 50 --------------- .../broadcast/BroadcastConfig.java | 63 ------------------- .../broadcast/BroadcastMessageConsumers.java | 32 ---------- .../broadcast/BroadcastMessageController.java | 26 -------- .../broadcast/BroadcastMessageProducer.java | 22 ------- .../src/main/resources/application.yaml | 5 -- .../src/main/resources/logback.xml | 13 ---- .../org/baeldung/SpringContextManualTest.java | 16 ----- .../src/test/resources/application.yaml | 5 -- 15 files changed, 337 deletions(-) delete mode 100644 spring-amqp-simple/README.md delete mode 100644 spring-amqp-simple/pom.xml delete mode 100644 spring-amqp-simple/src/main/java/com/baeldung/springamqpsimple/MessageConsumer.java delete mode 100644 spring-amqp-simple/src/main/java/com/baeldung/springamqpsimple/MessageController.java delete mode 100644 spring-amqp-simple/src/main/java/com/baeldung/springamqpsimple/MessageProducer.java delete mode 100644 spring-amqp-simple/src/main/java/com/baeldung/springamqpsimple/SpringAmqpApplication.java delete mode 100644 spring-amqp-simple/src/main/java/com/baeldung/springamqpsimple/SpringAmqpConfig.java delete mode 100644 spring-amqp-simple/src/main/java/com/baeldung/springamqpsimple/broadcast/BroadcastConfig.java delete mode 100644 spring-amqp-simple/src/main/java/com/baeldung/springamqpsimple/broadcast/BroadcastMessageConsumers.java delete mode 100644 spring-amqp-simple/src/main/java/com/baeldung/springamqpsimple/broadcast/BroadcastMessageController.java delete mode 100644 spring-amqp-simple/src/main/java/com/baeldung/springamqpsimple/broadcast/BroadcastMessageProducer.java delete mode 100644 spring-amqp-simple/src/main/resources/application.yaml delete mode 100644 spring-amqp-simple/src/main/resources/logback.xml delete mode 100644 spring-amqp-simple/src/test/java/org/baeldung/SpringContextManualTest.java delete mode 100644 spring-amqp-simple/src/test/resources/application.yaml diff --git a/spring-amqp-simple/README.md b/spring-amqp-simple/README.md deleted file mode 100644 index a176247d4c08..000000000000 --- a/spring-amqp-simple/README.md +++ /dev/null @@ -1,2 +0,0 @@ -### Relevant Articles: -- [RabbitMQ Message Dispatching with Spring AMQP](http://www.baeldung.com/rabbitmq-spring-amqp) diff --git a/spring-amqp-simple/pom.xml b/spring-amqp-simple/pom.xml deleted file mode 100644 index 45cdc066a0f5..000000000000 --- a/spring-amqp-simple/pom.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - 4.0.0 - com.baeldung - spring-amqp-simple - 1.0.0-SNAPSHOT - spring-amqp-simple - - - parent-boot-2 - com.baeldung - 0.0.1-SNAPSHOT - ../parent-boot-2 - - - - - org.springframework.boot - spring-boot-starter-amqp - - - org.springframework.boot - spring-boot-starter-web - - - - \ No newline at end of file diff --git a/spring-amqp-simple/src/main/java/com/baeldung/springamqpsimple/MessageConsumer.java b/spring-amqp-simple/src/main/java/com/baeldung/springamqpsimple/MessageConsumer.java deleted file mode 100644 index 6eb13c18f68d..000000000000 --- a/spring-amqp-simple/src/main/java/com/baeldung/springamqpsimple/MessageConsumer.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.baeldung.springamqpsimple; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.amqp.rabbit.annotation.RabbitListener; -import org.springframework.stereotype.Component; - -@Component -public class MessageConsumer { - - private static final Logger logger = LoggerFactory.getLogger(MessageConsumer.class); - - @RabbitListener(queues = {SpringAmqpConfig.queueName}) - public void receiveMessage(String message) { - logger.info("Received Message: " + message); - } -} \ No newline at end of file diff --git a/spring-amqp-simple/src/main/java/com/baeldung/springamqpsimple/MessageController.java b/spring-amqp-simple/src/main/java/com/baeldung/springamqpsimple/MessageController.java deleted file mode 100644 index deef22c4d65f..000000000000 --- a/spring-amqp-simple/src/main/java/com/baeldung/springamqpsimple/MessageController.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.baeldung.springamqpsimple; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpStatus; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.ResponseStatus; - -@Controller -public class MessageController { - - private final MessageProducer messageProducer; - - @Autowired - public MessageController(MessageProducer messageProducer) { - this.messageProducer = messageProducer; - } - - @RequestMapping(value="/messages", method= RequestMethod.POST) - @ResponseStatus(value= HttpStatus.CREATED) - public void sendMessage(@RequestBody String message) { - messageProducer.sendMessage(message); - } -} diff --git a/spring-amqp-simple/src/main/java/com/baeldung/springamqpsimple/MessageProducer.java b/spring-amqp-simple/src/main/java/com/baeldung/springamqpsimple/MessageProducer.java deleted file mode 100644 index 225f37bdd0f8..000000000000 --- a/spring-amqp-simple/src/main/java/com/baeldung/springamqpsimple/MessageProducer.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.baeldung.springamqpsimple; - -import org.springframework.amqp.rabbit.core.RabbitTemplate; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -@Component -public class MessageProducer { - - private final RabbitTemplate rabbitTemplate; - - @Autowired - public MessageProducer(RabbitTemplate rabbitTemplate) { - this.rabbitTemplate = rabbitTemplate; - } - - public void sendMessage(String message) { - rabbitTemplate.convertAndSend(SpringAmqpConfig.queueName, message); - } -} diff --git a/spring-amqp-simple/src/main/java/com/baeldung/springamqpsimple/SpringAmqpApplication.java b/spring-amqp-simple/src/main/java/com/baeldung/springamqpsimple/SpringAmqpApplication.java deleted file mode 100644 index b84a49a23028..000000000000 --- a/spring-amqp-simple/src/main/java/com/baeldung/springamqpsimple/SpringAmqpApplication.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.baeldung.springamqpsimple; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -@SpringBootApplication -public class SpringAmqpApplication { - - public static void main(String[] args) throws InterruptedException { - SpringApplication.run(SpringAmqpApplication.class, args); - } -} diff --git a/spring-amqp-simple/src/main/java/com/baeldung/springamqpsimple/SpringAmqpConfig.java b/spring-amqp-simple/src/main/java/com/baeldung/springamqpsimple/SpringAmqpConfig.java deleted file mode 100644 index 5a2f6e4c963e..000000000000 --- a/spring-amqp-simple/src/main/java/com/baeldung/springamqpsimple/SpringAmqpConfig.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.baeldung.springamqpsimple; - -import org.springframework.amqp.core.Binding; -import org.springframework.amqp.core.BindingBuilder; -import org.springframework.amqp.core.DirectExchange; -import org.springframework.amqp.core.Exchange; -import org.springframework.amqp.core.Queue; -import org.springframework.amqp.rabbit.connection.ConnectionFactory; -import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer; -import org.springframework.amqp.rabbit.listener.adapter.MessageListenerAdapter; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Profile; - -@Configuration -public class SpringAmqpConfig { - - public final static String queueName = "com.baeldung.spring-amqp-simple.queue"; - public final static String exchangeName = "com.baeldung.spring-amqp-simple.exchange"; - - @Bean - Queue queue() { - return new Queue(queueName, false); - } - - @Bean - Exchange exchange() { - return new DirectExchange(exchangeName); - } - - @Bean - Binding binding(Queue queue, DirectExchange exchange) { - return BindingBuilder.bind(queue).to(exchange).with(queueName); - } - - @Bean - SimpleMessageListenerContainer springAmqpContainer(ConnectionFactory connectionFactory, - MessageListenerAdapter listenerAdapter) { - SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(); - container.setConnectionFactory(connectionFactory); - container.setQueueNames(queueName); - container.setMessageListener(listenerAdapter); - return container; - } - - @Bean - MessageListenerAdapter listenerAdapter(MessageConsumer messageReceiver) { - return new MessageListenerAdapter(messageReceiver, "receiveMessage"); - } -} diff --git a/spring-amqp-simple/src/main/java/com/baeldung/springamqpsimple/broadcast/BroadcastConfig.java b/spring-amqp-simple/src/main/java/com/baeldung/springamqpsimple/broadcast/BroadcastConfig.java deleted file mode 100644 index 35f906a7fc63..000000000000 --- a/spring-amqp-simple/src/main/java/com/baeldung/springamqpsimple/broadcast/BroadcastConfig.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.baeldung.springamqpsimple.broadcast; - -import org.springframework.amqp.core.*; -import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory; -import org.springframework.amqp.rabbit.connection.ConnectionFactory; -import org.springframework.boot.autoconfigure.amqp.SimpleRabbitListenerContainerFactoryConfigurer; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Profile; - -import java.util.Arrays; -import java.util.List; - -@Configuration -public class BroadcastConfig { - - public final static String fanoutQueue1Name = "com.baeldung.spring-amqp-simple.fanout.queue1"; - public final static String fanoutQueue2Name = "com.baeldung.spring-amqp-simple.fanout.queue2"; - public final static String fanoutExchangeName = "com.baeldung.spring-amqp-simple.fanout.exchange"; - - public final static String topicQueue1Name = "com.baeldung.spring-amqp-simple.topic.queue1"; - public final static String topicQueue2Name = "com.baeldung.spring-amqp-simple.topic.queue2"; - public final static String topicExchangeName = "com.baeldung.spring-amql-simple.topic.exchange"; - - @Bean - public Declarables topicBindings() { - Queue topicQueue1 = new Queue(topicQueue1Name, false); - Queue topicQueue2 = new Queue(topicQueue2Name, false); - - TopicExchange topicExchange = new TopicExchange(topicExchangeName); - - return new Declarables( - topicQueue1, - topicQueue2, - topicExchange, - BindingBuilder.bind(topicQueue1).to(topicExchange).with("*.important.*"), - BindingBuilder.bind(topicQueue2).to(topicExchange).with("user.#")); - } - - @Bean - public Declarables fanoutBindings() { - Queue fanoutQueue1 = new Queue(fanoutQueue1Name, false); - Queue fanoutQueue2 = new Queue(fanoutQueue2Name, false); - - FanoutExchange fanoutExchange = new FanoutExchange(fanoutExchangeName); - - return new Declarables( - fanoutQueue1, - fanoutQueue2, - fanoutExchange, - BindingBuilder.bind(fanoutQueue1).to(fanoutExchange), - BindingBuilder.bind(fanoutQueue2).to(fanoutExchange) - ); - } - - @Bean - public SimpleRabbitListenerContainerFactory broadcastContainer(ConnectionFactory connectionFactory, SimpleRabbitListenerContainerFactoryConfigurer configurer) { - SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory(); - configurer.configure(factory, connectionFactory); - return factory; - } - -} diff --git a/spring-amqp-simple/src/main/java/com/baeldung/springamqpsimple/broadcast/BroadcastMessageConsumers.java b/spring-amqp-simple/src/main/java/com/baeldung/springamqpsimple/broadcast/BroadcastMessageConsumers.java deleted file mode 100644 index 0ae04ea09200..000000000000 --- a/spring-amqp-simple/src/main/java/com/baeldung/springamqpsimple/broadcast/BroadcastMessageConsumers.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.baeldung.springamqpsimple.broadcast; - -import com.baeldung.springamqpsimple.MessageConsumer; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.amqp.rabbit.annotation.RabbitListener; -import org.springframework.stereotype.Component; - -@Component -public class BroadcastMessageConsumers { - private static final Logger logger = LoggerFactory.getLogger(MessageConsumer.class); - - @RabbitListener(queues = {BroadcastConfig.fanoutQueue1Name}) - public void receiveMessageFromFanout1(String message) { - logger.info("Received fanout 1 message: " + message); - } - - @RabbitListener(queues = {BroadcastConfig.fanoutQueue2Name}) - public void receiveMessageFromFanout2(String message) { - logger.info("Received fanout 2 message: " + message); - } - - @RabbitListener(queues = {BroadcastConfig.topicQueue1Name}) - public void receiveMessageFromTopic1(String message) { - logger.info("Received topic 1 message: " + message); - } - - @RabbitListener(queues = {BroadcastConfig.topicQueue2Name}) - public void receiveMessageFromTopic2(String message) { - logger.info("Received topic 2 message: " + message); - } -} diff --git a/spring-amqp-simple/src/main/java/com/baeldung/springamqpsimple/broadcast/BroadcastMessageController.java b/spring-amqp-simple/src/main/java/com/baeldung/springamqpsimple/broadcast/BroadcastMessageController.java deleted file mode 100644 index 75d4d20e552d..000000000000 --- a/spring-amqp-simple/src/main/java/com/baeldung/springamqpsimple/broadcast/BroadcastMessageController.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.baeldung.springamqpsimple.broadcast; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpStatus; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.ResponseStatus; - -@Controller -public class BroadcastMessageController { - - private final BroadcastMessageProducer messageProducer; - - @Autowired - public BroadcastMessageController(BroadcastMessageProducer messageProducer) { - this.messageProducer = messageProducer; - } - - @RequestMapping(value="/broadcast", method= RequestMethod.POST) - @ResponseStatus(value= HttpStatus.CREATED) - public void sendMessage(@RequestBody String message) { - messageProducer.sendMessages(message); - } -} diff --git a/spring-amqp-simple/src/main/java/com/baeldung/springamqpsimple/broadcast/BroadcastMessageProducer.java b/spring-amqp-simple/src/main/java/com/baeldung/springamqpsimple/broadcast/BroadcastMessageProducer.java deleted file mode 100644 index 590da249620f..000000000000 --- a/spring-amqp-simple/src/main/java/com/baeldung/springamqpsimple/broadcast/BroadcastMessageProducer.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.baeldung.springamqpsimple.broadcast; - -import org.springframework.amqp.rabbit.core.RabbitTemplate; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -@Component -public class BroadcastMessageProducer { - - private final RabbitTemplate rabbitTemplate; - - @Autowired - public BroadcastMessageProducer(RabbitTemplate rabbitTemplate) { - this.rabbitTemplate = rabbitTemplate; - } - - public void sendMessages(String message) { - rabbitTemplate.convertAndSend(BroadcastConfig.fanoutExchangeName, "", message); - rabbitTemplate.convertAndSend(BroadcastConfig.topicExchangeName, "user.not-important.info", message); - rabbitTemplate.convertAndSend(BroadcastConfig.topicExchangeName, "user.important.error", message); - } -} diff --git a/spring-amqp-simple/src/main/resources/application.yaml b/spring-amqp-simple/src/main/resources/application.yaml deleted file mode 100644 index 47e7a3b9e087..000000000000 --- a/spring-amqp-simple/src/main/resources/application.yaml +++ /dev/null @@ -1,5 +0,0 @@ -spring: - rabbitmq: - username: guest - password: guest - host: 10.10.10.105 \ No newline at end of file diff --git a/spring-amqp-simple/src/main/resources/logback.xml b/spring-amqp-simple/src/main/resources/logback.xml deleted file mode 100644 index 7d900d8ea884..000000000000 --- a/spring-amqp-simple/src/main/resources/logback.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - - \ No newline at end of file diff --git a/spring-amqp-simple/src/test/java/org/baeldung/SpringContextManualTest.java b/spring-amqp-simple/src/test/java/org/baeldung/SpringContextManualTest.java deleted file mode 100644 index d51017d07a5d..000000000000 --- a/spring-amqp-simple/src/test/java/org/baeldung/SpringContextManualTest.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.baeldung; - -import com.baeldung.springamqpsimple.SpringAmqpApplication; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = SpringAmqpApplication.class) -public class SpringContextManualTest { - - @Test - public void whenSpringContextIsBootstrapped_thenNoExceptions() { - } -} diff --git a/spring-amqp-simple/src/test/resources/application.yaml b/spring-amqp-simple/src/test/resources/application.yaml deleted file mode 100644 index aa7a91bac5fc..000000000000 --- a/spring-amqp-simple/src/test/resources/application.yaml +++ /dev/null @@ -1,5 +0,0 @@ -spring: - rabbitmq: - username: guest - password: guest - host: localhost \ No newline at end of file From 67356a316f00928d6d5c61c36d5854b075d2800c Mon Sep 17 00:00:00 2001 From: pcoates Date: Fri, 2 Aug 2019 17:40:28 +0100 Subject: [PATCH 62/99] BAEL-2688 Allow specific app to be run from mvn --- spring-amqp/pom.xml | 16 ++++++++++++++++ .../broadcast/BroadcastMessageApp.java | 8 ++++++++ 2 files changed, 24 insertions(+) diff --git a/spring-amqp/pom.xml b/spring-amqp/pom.xml index b84279a3b240..3dcad69d97a5 100755 --- a/spring-amqp/pom.xml +++ b/spring-amqp/pom.xml @@ -21,4 +21,20 @@ + + com.baeldung.springamqp.simple.HelloWorldMessageApp + + + + + + org.springframework.boot + spring-boot-maven-plugin + + ${start-class} + + + + + diff --git a/spring-amqp/src/main/java/com/baeldung/springamqp/broadcast/BroadcastMessageApp.java b/spring-amqp/src/main/java/com/baeldung/springamqp/broadcast/BroadcastMessageApp.java index d90087ec5c3f..64bf3ffb9330 100644 --- a/spring-amqp/src/main/java/com/baeldung/springamqp/broadcast/BroadcastMessageApp.java +++ b/spring-amqp/src/main/java/com/baeldung/springamqp/broadcast/BroadcastMessageApp.java @@ -9,6 +9,14 @@ import static com.baeldung.springamqp.broadcast.BroadcastConfig.*; +/** + * Simple test application to send messages to rabbitMQ. + * + *

To run this particular application with mvn you use the following command:

+ * {@code + * mvn spring-boot:run -Dstart-class=com.baeldung.springamqp.broadcast.BroadcastMessageApp + * } + */ @SpringBootApplication public class BroadcastMessageApp { From 22c2e6b8c64ba64832c6d5003a3d020b10692163 Mon Sep 17 00:00:00 2001 From: pcoates Date: Fri, 2 Aug 2019 17:49:00 +0100 Subject: [PATCH 63/99] BAEL-2688 Revert changes made to parent pom --- parent-boot-2/pom.xml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/parent-boot-2/pom.xml b/parent-boot-2/pom.xml index a91766f7721e..f0e921bf37eb 100644 --- a/parent-boot-2/pom.xml +++ b/parent-boot-2/pom.xml @@ -43,6 +43,10 @@ org.springframework.boot spring-boot-maven-plugin ${spring-boot.version} + + ${start-class} + + @@ -56,6 +60,14 @@ org.springframework.boot spring-boot-maven-plugin + + + + org.springframework.boot.experimental + spring-boot-thin-layout + ${thin.version} + + From 7b7ae4e472a3c4b877a745f98647c59a378e1ca3 Mon Sep 17 00:00:00 2001 From: pcoates Date: Fri, 2 Aug 2019 17:51:42 +0100 Subject: [PATCH 64/99] BAEL-2688 Remove springboot plugin which is duplicated in parent --- spring-amqp/pom.xml | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/spring-amqp/pom.xml b/spring-amqp/pom.xml index 3dcad69d97a5..3e6789dcb612 100755 --- a/spring-amqp/pom.xml +++ b/spring-amqp/pom.xml @@ -25,16 +25,4 @@ com.baeldung.springamqp.simple.HelloWorldMessageApp - - - - org.springframework.boot - spring-boot-maven-plugin - - ${start-class} - - - - - From 21d18c61630d5b4694a9410114c3eb8ac3bc530b Mon Sep 17 00:00:00 2001 From: pcoates Date: Fri, 2 Aug 2019 18:16:58 +0100 Subject: [PATCH 65/99] BAEL-2688 Remove references to spring-amqp-simple --- pom.xml | 2 -- 1 file changed, 2 deletions(-) diff --git a/pom.xml b/pom.xml index 352da33feed8..c351d4ded2bb 100644 --- a/pom.xml +++ b/pom.xml @@ -624,7 +624,6 @@ spring-akka spring-all spring-amqp - spring-amqp-simple spring-aop spring-apache-camel spring-batch @@ -1301,7 +1300,6 @@ spring-akka spring-all spring-amqp - spring-amqp-simple spring-aop spring-apache-camel spring-batch From e6a38aada17da71d2de8763f934af4aa83a5dfbd Mon Sep 17 00:00:00 2001 From: DOHA Date: Sat, 3 Aug 2019 15:24:39 +0300 Subject: [PATCH 66/99] add scheduled async example --- .../scheduling/ScheduledFixedRateExample.java | 18 ++++++++++++++++++ .../SpringSchedulingFixedRateConfig.java | 12 ++++++++++++ ...heduledFixedRateExampleIntegrationTest.java | 17 +++++++++++++++++ 3 files changed, 47 insertions(+) create mode 100644 spring-all/src/main/java/com/baeldung/scheduling/ScheduledFixedRateExample.java create mode 100644 spring-all/src/main/java/com/baeldung/scheduling/SpringSchedulingFixedRateConfig.java create mode 100644 spring-all/src/test/java/com/baeldung/scheduling/ScheduledFixedRateExampleIntegrationTest.java diff --git a/spring-all/src/main/java/com/baeldung/scheduling/ScheduledFixedRateExample.java b/spring-all/src/main/java/com/baeldung/scheduling/ScheduledFixedRateExample.java new file mode 100644 index 000000000000..8ccd2c773b44 --- /dev/null +++ b/spring-all/src/main/java/com/baeldung/scheduling/ScheduledFixedRateExample.java @@ -0,0 +1,18 @@ +package com.baeldung.scheduling; + +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +@Component +@EnableAsync +public class ScheduledFixedRateExample { + @Async + @Scheduled(fixedRate = 1000) + public void scheduleFixedRateTaskAsync() throws InterruptedException { + System.out.println("Fixed rate task async - " + System.currentTimeMillis() / 1000); + Thread.sleep(2000); + } + +} diff --git a/spring-all/src/main/java/com/baeldung/scheduling/SpringSchedulingFixedRateConfig.java b/spring-all/src/main/java/com/baeldung/scheduling/SpringSchedulingFixedRateConfig.java new file mode 100644 index 000000000000..6000f75ec295 --- /dev/null +++ b/spring-all/src/main/java/com/baeldung/scheduling/SpringSchedulingFixedRateConfig.java @@ -0,0 +1,12 @@ +package com.baeldung.scheduling; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.EnableScheduling; + +@Configuration +@EnableScheduling +@ComponentScan("com.baeldung.scheduling") +public class SpringSchedulingFixedRateConfig { + +} \ No newline at end of file diff --git a/spring-all/src/test/java/com/baeldung/scheduling/ScheduledFixedRateExampleIntegrationTest.java b/spring-all/src/test/java/com/baeldung/scheduling/ScheduledFixedRateExampleIntegrationTest.java new file mode 100644 index 000000000000..ef7c7c68fd13 --- /dev/null +++ b/spring-all/src/test/java/com/baeldung/scheduling/ScheduledFixedRateExampleIntegrationTest.java @@ -0,0 +1,17 @@ +package com.baeldung.scheduling; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.AnnotationConfigContextLoader; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = { SpringSchedulingFixedRateConfig.class }, loader = AnnotationConfigContextLoader.class) +public class ScheduledFixedRateExampleIntegrationTest { + + @Test + public void testScheduledFixedRateAnnotation() throws InterruptedException { + Thread.sleep(5000); + } +} From d45e50fa995ac298da4e0b5c294a6520cb0eea70 Mon Sep 17 00:00:00 2001 From: Chirag Dewan Date: Sun, 4 Aug 2019 13:21:06 +0530 Subject: [PATCH 67/99] BAEL-2990 Automatic generation of the Builder pattern with FreeBuilder --- patterns/design-patterns-2/pom.xml | 13 +++++++++++++ .../java/com/baeldung/freebuilder}/Address.java | 2 +- .../java/com/baeldung/freebuilder/Employee.java | 2 -- .../com/baeldung/freebuilder/builder}/Employee.java | 2 +- .../freebuilder/EmployeeBuilderUnitTest.java | 10 ++++------ .../builder}/EmployeeBuilderUnitTest.java | 2 +- 6 files changed, 20 insertions(+), 11 deletions(-) rename {libraries-2/src/main/java/com/baeldung/freebuilder/builder/classic => patterns/design-patterns-2/src/main/java/com/baeldung/freebuilder}/Address.java (88%) rename {libraries-2 => patterns/design-patterns-2}/src/main/java/com/baeldung/freebuilder/Employee.java (92%) rename {libraries-2/src/main/java/com/baeldung/freebuilder/builder/classic => patterns/design-patterns-2/src/main/java/com/baeldung/freebuilder/builder}/Employee.java (95%) rename {libraries-2 => patterns/design-patterns-2}/src/test/java/com/baeldung/freebuilder/EmployeeBuilderUnitTest.java (99%) rename {libraries-2/src/test/java/com/baeldung/freebuilder/builder/classic => patterns/design-patterns-2/src/test/java/com/baeldung/freebuilder/builder}/EmployeeBuilderUnitTest.java (91%) diff --git a/patterns/design-patterns-2/pom.xml b/patterns/design-patterns-2/pom.xml index 392035ab84c7..17afff87aec8 100644 --- a/patterns/design-patterns-2/pom.xml +++ b/patterns/design-patterns-2/pom.xml @@ -30,6 +30,17 @@ org.apache.commons commons-lang3 ${commons-lang3.version} + + + org.inferred + freebuilder + ${freebuilder.version} + true + + + com.google.code.findbugs + jsr305 + ${javax.annotations.version} @@ -38,5 +49,7 @@ 1.8 1.8 16.0.2 + 2.4.1 + 3.0.2 diff --git a/libraries-2/src/main/java/com/baeldung/freebuilder/builder/classic/Address.java b/patterns/design-patterns-2/src/main/java/com/baeldung/freebuilder/Address.java similarity index 88% rename from libraries-2/src/main/java/com/baeldung/freebuilder/builder/classic/Address.java rename to patterns/design-patterns-2/src/main/java/com/baeldung/freebuilder/Address.java index 8e53a9f15530..6d727f6d9fcb 100644 --- a/libraries-2/src/main/java/com/baeldung/freebuilder/builder/classic/Address.java +++ b/patterns/design-patterns-2/src/main/java/com/baeldung/freebuilder/Address.java @@ -1,4 +1,4 @@ -package com.baeldung.freebuilder.builder.classic; +package com.baeldung.freebuilder; import org.inferred.freebuilder.FreeBuilder; diff --git a/libraries-2/src/main/java/com/baeldung/freebuilder/Employee.java b/patterns/design-patterns-2/src/main/java/com/baeldung/freebuilder/Employee.java similarity index 92% rename from libraries-2/src/main/java/com/baeldung/freebuilder/Employee.java rename to patterns/design-patterns-2/src/main/java/com/baeldung/freebuilder/Employee.java index d486c18a065f..06558dde0b48 100644 --- a/libraries-2/src/main/java/com/baeldung/freebuilder/Employee.java +++ b/patterns/design-patterns-2/src/main/java/com/baeldung/freebuilder/Employee.java @@ -1,13 +1,11 @@ package com.baeldung.freebuilder; -import com.baeldung.freebuilder.builder.classic.Address; import org.inferred.freebuilder.FreeBuilder; import javax.annotation.Nullable; import java.util.List; import java.util.Map; import java.util.Optional; -import java.util.function.UnaryOperator; @FreeBuilder public interface Employee { diff --git a/libraries-2/src/main/java/com/baeldung/freebuilder/builder/classic/Employee.java b/patterns/design-patterns-2/src/main/java/com/baeldung/freebuilder/builder/Employee.java similarity index 95% rename from libraries-2/src/main/java/com/baeldung/freebuilder/builder/classic/Employee.java rename to patterns/design-patterns-2/src/main/java/com/baeldung/freebuilder/builder/Employee.java index 6509676cb496..141d734c4395 100644 --- a/libraries-2/src/main/java/com/baeldung/freebuilder/builder/classic/Employee.java +++ b/patterns/design-patterns-2/src/main/java/com/baeldung/freebuilder/builder/Employee.java @@ -1,4 +1,4 @@ -package com.baeldung.freebuilder.builder.classic; +package com.baeldung.freebuilder.builder; public class Employee { diff --git a/libraries-2/src/test/java/com/baeldung/freebuilder/EmployeeBuilderUnitTest.java b/patterns/design-patterns-2/src/test/java/com/baeldung/freebuilder/EmployeeBuilderUnitTest.java similarity index 99% rename from libraries-2/src/test/java/com/baeldung/freebuilder/EmployeeBuilderUnitTest.java rename to patterns/design-patterns-2/src/test/java/com/baeldung/freebuilder/EmployeeBuilderUnitTest.java index 4427d3cb6956..d28edfcf3d15 100644 --- a/libraries-2/src/test/java/com/baeldung/freebuilder/EmployeeBuilderUnitTest.java +++ b/patterns/design-patterns-2/src/test/java/com/baeldung/freebuilder/EmployeeBuilderUnitTest.java @@ -1,16 +1,14 @@ package com.baeldung.freebuilder; +import org.junit.jupiter.api.Test; + +import java.util.Optional; + import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; -import java.util.Optional; - -import org.junit.jupiter.api.Test; - -import com.baeldung.freebuilder.builder.classic.Address; - public class EmployeeBuilderUnitTest { private static final int PIN_CODE = 223344; diff --git a/libraries-2/src/test/java/com/baeldung/freebuilder/builder/classic/EmployeeBuilderUnitTest.java b/patterns/design-patterns-2/src/test/java/com/baeldung/freebuilder/builder/EmployeeBuilderUnitTest.java similarity index 91% rename from libraries-2/src/test/java/com/baeldung/freebuilder/builder/classic/EmployeeBuilderUnitTest.java rename to patterns/design-patterns-2/src/test/java/com/baeldung/freebuilder/builder/EmployeeBuilderUnitTest.java index e54a1dbd7812..1394f851b606 100644 --- a/libraries-2/src/test/java/com/baeldung/freebuilder/builder/classic/EmployeeBuilderUnitTest.java +++ b/patterns/design-patterns-2/src/test/java/com/baeldung/freebuilder/builder/EmployeeBuilderUnitTest.java @@ -1,4 +1,4 @@ -package com.baeldung.freebuilder.builder.classic; +package com.baeldung.freebuilder.builder; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; From 1cfdd27226982c3c376ff0f1f7658a2f83d3bf0f Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Sun, 4 Aug 2019 13:20:40 +0300 Subject: [PATCH 68/99] Update README.md --- libraries/README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/libraries/README.md b/libraries/README.md index c7b40e3c94db..649e83177b76 100644 --- a/libraries/README.md +++ b/libraries/README.md @@ -52,7 +52,6 @@ - [Java Concurrency Utility with JCTools](http://www.baeldung.com/java-concurrency-jc-tools) - [Creating REST Microservices with Javalin](http://www.baeldung.com/javalin-rest-microservices) - [Introduction to JavaPoet](http://www.baeldung.com/java-poet) -- [Introduction to Joda-Time](http://www.baeldung.com/joda-time) - [Convert String to Date in Java](http://www.baeldung.com/java-string-to-date) - [Guide to Resilience4j](http://www.baeldung.com/resilience4j) - [Parsing YAML with SnakeYAML](http://www.baeldung.com/java-snake-yaml) From 3ceaa2579db1ccb9b521dc998ff1706c0ca1b44d Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Sun, 4 Aug 2019 13:20:55 +0300 Subject: [PATCH 69/99] Update README.md --- java-dates/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/java-dates/README.md b/java-dates/README.md index 8171e5def97d..7da309924d30 100644 --- a/java-dates/README.md +++ b/java-dates/README.md @@ -29,3 +29,4 @@ - [A Guide to SimpleDateFormat](https://www.baeldung.com/java-simple-date-format) - [ZoneOffset in Java](https://www.baeldung.com/java-zone-offset) - [Differences Between ZonedDateTime and OffsetDateTime](https://www.baeldung.com/java-zoneddatetime-offsetdatetime) +- [Introduction to Joda-Time](http://www.baeldung.com/joda-time) From 143aff917b4e0a888f861278f2c683dbb5560da5 Mon Sep 17 00:00:00 2001 From: Loredana Date: Sun, 4 Aug 2019 13:37:14 +0300 Subject: [PATCH 70/99] remove obsolete modules; appears to be from issue BAEL-119 which was not published --- pom.xml | 6 -- spring-security-client/README.MD | 11 --- spring-security-client/pom.xml | 25 ------ .../pom.xml | 47 ---------- .../java/org/baeldung/config/Application.java | 21 ----- .../java/org/baeldung/config/MvcConfig.java | 23 ----- .../org/baeldung/config/SecurityConfig.java | 40 --------- .../src/main/resources/application.properties | 3 - .../src/main/resources/logback.xml | 13 --- .../src/main/webapp/WEB-INF/jsp/index.jsp | 24 ----- .../SpringContextIntegrationTest.java | 16 ---- .../java/org/baeldung/SpringContextTest.java | 16 ---- .../spring-security-jsp-authorize/pom.xml | 47 ---------- .../java/org/baeldung/config/Application.java | 21 ----- .../java/org/baeldung/config/MvcConfig.java | 23 ----- .../org/baeldung/config/SecurityConfig.java | 40 --------- .../src/main/resources/application.properties | 3 - .../src/main/resources/logback.xml | 13 --- .../src/main/webapp/WEB-INF/jsp/index.jsp | 33 ------- .../SpringContextIntegrationTest.java | 16 ---- .../java/org/baeldung/SpringContextTest.java | 16 ---- .../spring-security-jsp-config/pom.xml | 47 ---------- .../java/org/baeldung/config/Application.java | 21 ----- .../java/org/baeldung/config/MvcConfig.java | 23 ----- .../org/baeldung/config/SecurityConfig.java | 40 --------- .../src/main/resources/application.properties | 3 - .../src/main/resources/logback.xml | 13 --- .../src/main/webapp/WEB-INF/jsp/index.jsp | 21 ----- .../SpringContextIntegrationTest.java | 16 ---- .../java/org/baeldung/SpringContextTest.java | 16 ---- .../spring-security-mvc/pom.xml | 30 ------- .../java/org/baeldung/config/Application.java | 20 ----- .../org/baeldung/config/SecurityConfig.java | 40 --------- .../src/main/resources/application.properties | 1 - .../src/main/resources/logback.xml | 13 --- .../SpringContextIntegrationTest.java | 16 ---- .../java/org/baeldung/SpringContextTest.java | 16 ---- .../pom.xml | 43 --------- .../java/org/baeldung/config/Application.java | 14 --- .../java/org/baeldung/config/MvcConfig.java | 44 --------- .../org/baeldung/config/MvcConfigManual.java | 22 ----- .../config/RegistrationController.java | 89 ------------------- .../org/baeldung/config/SecurityConfig.java | 42 --------- .../config/WebSecurityConfigManual.java | 35 -------- .../src/main/resources/application.properties | 1 - .../src/main/resources/logback.xml | 13 --- .../src/main/resources/templates/hello.html | 15 ---- .../src/main/resources/templates/home.html | 15 ---- .../src/main/resources/templates/index.html | 23 ----- .../src/main/resources/templates/login.html | 21 ----- .../templates/registrationError.html | 1 - .../templates/registrationSuccess.html | 15 ---- .../SpringContextIntegrationTest.java | 16 ---- .../java/org/baeldung/SpringContextTest.java | 16 ---- .../pom.xml | 43 --------- .../java/org/baeldung/config/Application.java | 14 --- .../java/org/baeldung/config/MvcConfig.java | 42 --------- .../org/baeldung/config/SecurityConfig.java | 40 --------- .../src/main/resources/application.properties | 1 - .../src/main/resources/logback.xml | 13 --- .../src/main/resources/templates/index.html | 32 ------- .../SpringContextIntegrationTest.java | 16 ---- .../java/org/baeldung/SpringContextTest.java | 16 ---- .../spring-security-thymeleaf-config/pom.xml | 42 --------- .../java/org/baeldung/config/Application.java | 14 --- .../java/org/baeldung/config/MvcConfig.java | 42 --------- .../org/baeldung/config/SecurityConfig.java | 40 --------- .../src/main/resources/application.properties | 1 - .../src/main/resources/logback.xml | 13 --- .../src/main/resources/templates/index.html | 21 ----- .../SpringContextIntegrationTest.java | 16 ---- .../java/org/baeldung/SpringContextTest.java | 16 ---- 72 files changed, 1640 deletions(-) delete mode 100644 spring-security-client/README.MD delete mode 100644 spring-security-client/pom.xml delete mode 100644 spring-security-client/spring-security-jsp-authentication/pom.xml delete mode 100644 spring-security-client/spring-security-jsp-authentication/src/main/java/org/baeldung/config/Application.java delete mode 100644 spring-security-client/spring-security-jsp-authentication/src/main/java/org/baeldung/config/MvcConfig.java delete mode 100644 spring-security-client/spring-security-jsp-authentication/src/main/java/org/baeldung/config/SecurityConfig.java delete mode 100644 spring-security-client/spring-security-jsp-authentication/src/main/resources/application.properties delete mode 100644 spring-security-client/spring-security-jsp-authentication/src/main/resources/logback.xml delete mode 100644 spring-security-client/spring-security-jsp-authentication/src/main/webapp/WEB-INF/jsp/index.jsp delete mode 100644 spring-security-client/spring-security-jsp-authentication/src/test/java/org/baeldung/SpringContextIntegrationTest.java delete mode 100644 spring-security-client/spring-security-jsp-authentication/src/test/java/org/baeldung/SpringContextTest.java delete mode 100644 spring-security-client/spring-security-jsp-authorize/pom.xml delete mode 100644 spring-security-client/spring-security-jsp-authorize/src/main/java/org/baeldung/config/Application.java delete mode 100644 spring-security-client/spring-security-jsp-authorize/src/main/java/org/baeldung/config/MvcConfig.java delete mode 100644 spring-security-client/spring-security-jsp-authorize/src/main/java/org/baeldung/config/SecurityConfig.java delete mode 100644 spring-security-client/spring-security-jsp-authorize/src/main/resources/application.properties delete mode 100644 spring-security-client/spring-security-jsp-authorize/src/main/resources/logback.xml delete mode 100644 spring-security-client/spring-security-jsp-authorize/src/main/webapp/WEB-INF/jsp/index.jsp delete mode 100644 spring-security-client/spring-security-jsp-authorize/src/test/java/org/baeldung/SpringContextIntegrationTest.java delete mode 100644 spring-security-client/spring-security-jsp-authorize/src/test/java/org/baeldung/SpringContextTest.java delete mode 100644 spring-security-client/spring-security-jsp-config/pom.xml delete mode 100644 spring-security-client/spring-security-jsp-config/src/main/java/org/baeldung/config/Application.java delete mode 100644 spring-security-client/spring-security-jsp-config/src/main/java/org/baeldung/config/MvcConfig.java delete mode 100644 spring-security-client/spring-security-jsp-config/src/main/java/org/baeldung/config/SecurityConfig.java delete mode 100644 spring-security-client/spring-security-jsp-config/src/main/resources/application.properties delete mode 100644 spring-security-client/spring-security-jsp-config/src/main/resources/logback.xml delete mode 100644 spring-security-client/spring-security-jsp-config/src/main/webapp/WEB-INF/jsp/index.jsp delete mode 100644 spring-security-client/spring-security-jsp-config/src/test/java/org/baeldung/SpringContextIntegrationTest.java delete mode 100644 spring-security-client/spring-security-jsp-config/src/test/java/org/baeldung/SpringContextTest.java delete mode 100644 spring-security-client/spring-security-mvc/pom.xml delete mode 100644 spring-security-client/spring-security-mvc/src/main/java/org/baeldung/config/Application.java delete mode 100644 spring-security-client/spring-security-mvc/src/main/java/org/baeldung/config/SecurityConfig.java delete mode 100644 spring-security-client/spring-security-mvc/src/main/resources/application.properties delete mode 100644 spring-security-client/spring-security-mvc/src/main/resources/logback.xml delete mode 100644 spring-security-client/spring-security-mvc/src/test/java/org/baeldung/SpringContextIntegrationTest.java delete mode 100644 spring-security-client/spring-security-mvc/src/test/java/org/baeldung/SpringContextTest.java delete mode 100644 spring-security-client/spring-security-thymeleaf-authentication/pom.xml delete mode 100644 spring-security-client/spring-security-thymeleaf-authentication/src/main/java/org/baeldung/config/Application.java delete mode 100644 spring-security-client/spring-security-thymeleaf-authentication/src/main/java/org/baeldung/config/MvcConfig.java delete mode 100644 spring-security-client/spring-security-thymeleaf-authentication/src/main/java/org/baeldung/config/MvcConfigManual.java delete mode 100644 spring-security-client/spring-security-thymeleaf-authentication/src/main/java/org/baeldung/config/RegistrationController.java delete mode 100644 spring-security-client/spring-security-thymeleaf-authentication/src/main/java/org/baeldung/config/SecurityConfig.java delete mode 100644 spring-security-client/spring-security-thymeleaf-authentication/src/main/java/org/baeldung/config/WebSecurityConfigManual.java delete mode 100644 spring-security-client/spring-security-thymeleaf-authentication/src/main/resources/application.properties delete mode 100644 spring-security-client/spring-security-thymeleaf-authentication/src/main/resources/logback.xml delete mode 100644 spring-security-client/spring-security-thymeleaf-authentication/src/main/resources/templates/hello.html delete mode 100644 spring-security-client/spring-security-thymeleaf-authentication/src/main/resources/templates/home.html delete mode 100644 spring-security-client/spring-security-thymeleaf-authentication/src/main/resources/templates/index.html delete mode 100644 spring-security-client/spring-security-thymeleaf-authentication/src/main/resources/templates/login.html delete mode 100644 spring-security-client/spring-security-thymeleaf-authentication/src/main/resources/templates/registrationError.html delete mode 100644 spring-security-client/spring-security-thymeleaf-authentication/src/main/resources/templates/registrationSuccess.html delete mode 100644 spring-security-client/spring-security-thymeleaf-authentication/src/test/java/org/baeldung/SpringContextIntegrationTest.java delete mode 100644 spring-security-client/spring-security-thymeleaf-authentication/src/test/java/org/baeldung/SpringContextTest.java delete mode 100644 spring-security-client/spring-security-thymeleaf-authorize/pom.xml delete mode 100644 spring-security-client/spring-security-thymeleaf-authorize/src/main/java/org/baeldung/config/Application.java delete mode 100644 spring-security-client/spring-security-thymeleaf-authorize/src/main/java/org/baeldung/config/MvcConfig.java delete mode 100644 spring-security-client/spring-security-thymeleaf-authorize/src/main/java/org/baeldung/config/SecurityConfig.java delete mode 100644 spring-security-client/spring-security-thymeleaf-authorize/src/main/resources/application.properties delete mode 100644 spring-security-client/spring-security-thymeleaf-authorize/src/main/resources/logback.xml delete mode 100644 spring-security-client/spring-security-thymeleaf-authorize/src/main/resources/templates/index.html delete mode 100644 spring-security-client/spring-security-thymeleaf-authorize/src/test/java/org/baeldung/SpringContextIntegrationTest.java delete mode 100644 spring-security-client/spring-security-thymeleaf-authorize/src/test/java/org/baeldung/SpringContextTest.java delete mode 100644 spring-security-client/spring-security-thymeleaf-config/pom.xml delete mode 100644 spring-security-client/spring-security-thymeleaf-config/src/main/java/org/baeldung/config/Application.java delete mode 100644 spring-security-client/spring-security-thymeleaf-config/src/main/java/org/baeldung/config/MvcConfig.java delete mode 100644 spring-security-client/spring-security-thymeleaf-config/src/main/java/org/baeldung/config/SecurityConfig.java delete mode 100644 spring-security-client/spring-security-thymeleaf-config/src/main/resources/application.properties delete mode 100644 spring-security-client/spring-security-thymeleaf-config/src/main/resources/logback.xml delete mode 100644 spring-security-client/spring-security-thymeleaf-config/src/main/resources/templates/index.html delete mode 100644 spring-security-client/spring-security-thymeleaf-config/src/test/java/org/baeldung/SpringContextIntegrationTest.java delete mode 100644 spring-security-client/spring-security-thymeleaf-config/src/test/java/org/baeldung/SpringContextTest.java diff --git a/pom.xml b/pom.xml index 352da33feed8..451b5b496150 100644 --- a/pom.xml +++ b/pom.xml @@ -731,8 +731,6 @@ spring-security-angular/server spring-security-cache-control - spring-security-client - spring-security-core spring-security-mvc-boot spring-security-mvc-custom @@ -910,7 +908,6 @@ spring-security-acl spring-security-angular spring-security-cache-control - spring-security-client spring-security-core spring-security-mvc-boot spring-security-mvc-custom @@ -1403,9 +1400,6 @@ spring-security-acl spring-security-angular/server spring-security-cache-control - - spring-security-client - spring-security-core spring-security-mvc-boot spring-security-mvc-custom diff --git a/spring-security-client/README.MD b/spring-security-client/README.MD deleted file mode 100644 index 0b0af7ffe14f..000000000000 --- a/spring-security-client/README.MD +++ /dev/null @@ -1,11 +0,0 @@ -========= -## Spring Security Authentication/Authorization Example Project - -##The Course -The "REST With Spring" Classes: http://github.learnspringsecurity.com - -### Relevant Articles: -- [Spring Security Manual Authentication](http://www.baeldung.com/spring-security-authentication) - -### Build the Project -mvn clean install diff --git a/spring-security-client/pom.xml b/spring-security-client/pom.xml deleted file mode 100644 index 96ac837a09bb..000000000000 --- a/spring-security-client/pom.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - 4.0.0 - spring-security-client - spring-security-client - pom - - - com.baeldung - parent-modules - 1.0.0-SNAPSHOT - .. - - - - spring-security-jsp-authentication - spring-security-jsp-authorize - spring-security-jsp-config - spring-security-mvc - spring-security-thymeleaf-authentication - spring-security-thymeleaf-authorize - spring-security-thymeleaf-config - - diff --git a/spring-security-client/spring-security-jsp-authentication/pom.xml b/spring-security-client/spring-security-jsp-authentication/pom.xml deleted file mode 100644 index 9cb2a453317a..000000000000 --- a/spring-security-client/spring-security-jsp-authentication/pom.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - 4.0.0 - com.baeldung - spring-security-jsp-authentication - 0.0.1-SNAPSHOT - spring-security-jsp-authentication - war - Spring Security JSP Authentication tag sample - - - parent-boot-1 - com.baeldung - 0.0.1-SNAPSHOT - ../../parent-boot-1 - - - - - org.springframework.boot - spring-boot-starter-security - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-tomcat - - - org.apache.tomcat.embed - tomcat-embed-jasper - provided - - - javax.servlet - jstl - - - org.springframework.security - spring-security-taglibs - - - - diff --git a/spring-security-client/spring-security-jsp-authentication/src/main/java/org/baeldung/config/Application.java b/spring-security-client/spring-security-jsp-authentication/src/main/java/org/baeldung/config/Application.java deleted file mode 100644 index c2c59396760f..000000000000 --- a/spring-security-client/spring-security-jsp-authentication/src/main/java/org/baeldung/config/Application.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.baeldung.config; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.support.SpringBootServletInitializer; - -@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class }) -public class Application extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(Application.class); - } - - public static void main(String[] args) { - SpringApplication.run(Application.class, args); - } - -} diff --git a/spring-security-client/spring-security-jsp-authentication/src/main/java/org/baeldung/config/MvcConfig.java b/spring-security-client/spring-security-jsp-authentication/src/main/java/org/baeldung/config/MvcConfig.java deleted file mode 100644 index fa2a324146a8..000000000000 --- a/spring-security-client/spring-security-jsp-authentication/src/main/java/org/baeldung/config/MvcConfig.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.baeldung.config; - -import org.springframework.context.annotation.Configuration; -import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; - -@Configuration -public class MvcConfig extends WebMvcConfigurerAdapter { - - public MvcConfig() { - super(); - } - - // - - @Override - public void addViewControllers(final ViewControllerRegistry registry) { - super.addViewControllers(registry); - registry.addViewController("/").setViewName("forward:/index"); - registry.addViewController("/index"); - } - -} \ No newline at end of file diff --git a/spring-security-client/spring-security-jsp-authentication/src/main/java/org/baeldung/config/SecurityConfig.java b/spring-security-client/spring-security-jsp-authentication/src/main/java/org/baeldung/config/SecurityConfig.java deleted file mode 100644 index bd6c56d38af1..000000000000 --- a/spring-security-client/spring-security-jsp-authentication/src/main/java/org/baeldung/config/SecurityConfig.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.baeldung.config; - -import org.springframework.context.annotation.Configuration; -import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; -import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.config.annotation.web.builders.WebSecurity; -import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; - -@Configuration -@EnableWebSecurity -public class SecurityConfig extends WebSecurityConfigurerAdapter { - - @Override - protected void configure(final AuthenticationManagerBuilder auth) throws Exception { - // @formatter:off - auth.inMemoryAuthentication() - .withUser("john").password("123").roles("USER") - .and() - .withUser("tom").password("111").roles("ADMIN"); - // @formatter:on - } - - @Override - public void configure(WebSecurity web) throws Exception { - web.ignoring().antMatchers("/resources/**"); - } - - @Override - protected void configure(final HttpSecurity http) throws Exception { - // @formatter:off - http.authorizeRequests() - .antMatchers("/login").permitAll() - .antMatchers("/admin").hasRole("ADMIN") - .anyRequest().authenticated() - .and().formLogin().permitAll() - ; - // @formatter:on - } -} \ No newline at end of file diff --git a/spring-security-client/spring-security-jsp-authentication/src/main/resources/application.properties b/spring-security-client/spring-security-jsp-authentication/src/main/resources/application.properties deleted file mode 100644 index 26a80c79f3a7..000000000000 --- a/spring-security-client/spring-security-jsp-authentication/src/main/resources/application.properties +++ /dev/null @@ -1,3 +0,0 @@ -server.port: 8081 -spring.mvc.view.prefix: /WEB-INF/jsp/ -spring.mvc.view.suffix: .jsp \ No newline at end of file diff --git a/spring-security-client/spring-security-jsp-authentication/src/main/resources/logback.xml b/spring-security-client/spring-security-jsp-authentication/src/main/resources/logback.xml deleted file mode 100644 index 7d900d8ea884..000000000000 --- a/spring-security-client/spring-security-jsp-authentication/src/main/resources/logback.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - - \ No newline at end of file diff --git a/spring-security-client/spring-security-jsp-authentication/src/main/webapp/WEB-INF/jsp/index.jsp b/spring-security-client/spring-security-jsp-authentication/src/main/webapp/WEB-INF/jsp/index.jsp deleted file mode 100644 index 90c00e980ae8..000000000000 --- a/spring-security-client/spring-security-jsp-authentication/src/main/webapp/WEB-INF/jsp/index.jsp +++ /dev/null @@ -1,24 +0,0 @@ - <%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %> - - - - -Spring Security JSP Authorize - - - - - -
- Current user name: -
- Current user roles: -
- - \ No newline at end of file diff --git a/spring-security-client/spring-security-jsp-authentication/src/test/java/org/baeldung/SpringContextIntegrationTest.java b/spring-security-client/spring-security-jsp-authentication/src/test/java/org/baeldung/SpringContextIntegrationTest.java deleted file mode 100644 index 66243ef00d45..000000000000 --- a/spring-security-client/spring-security-jsp-authentication/src/test/java/org/baeldung/SpringContextIntegrationTest.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.baeldung; - -import org.baeldung.config.Application; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = Application.class) -public class SpringContextIntegrationTest { - - @Test - public void whenSpringContextIsBootstrapped_thenNoExceptions() { - } -} diff --git a/spring-security-client/spring-security-jsp-authentication/src/test/java/org/baeldung/SpringContextTest.java b/spring-security-client/spring-security-jsp-authentication/src/test/java/org/baeldung/SpringContextTest.java deleted file mode 100644 index 0afb3899db52..000000000000 --- a/spring-security-client/spring-security-jsp-authentication/src/test/java/org/baeldung/SpringContextTest.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.baeldung; - -import org.baeldung.config.Application; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = Application.class) -public class SpringContextTest { - - @Test - public void whenSpringContextIsBootstrapped_thenNoExceptions() { - } -} diff --git a/spring-security-client/spring-security-jsp-authorize/pom.xml b/spring-security-client/spring-security-jsp-authorize/pom.xml deleted file mode 100644 index ad4c9d105bd9..000000000000 --- a/spring-security-client/spring-security-jsp-authorize/pom.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - 4.0.0 - com.baeldung - spring-security-jsp-authorize - 0.0.1-SNAPSHOT - spring-security-jsp-authorize - Spring Security JSP Authorize tag sample - war - - - parent-boot-1 - com.baeldung - 0.0.1-SNAPSHOT - ../../parent-boot-1 - - - - - org.springframework.boot - spring-boot-starter-security - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-tomcat - - - org.apache.tomcat.embed - tomcat-embed-jasper - provided - - - javax.servlet - jstl - - - org.springframework.security - spring-security-taglibs - - - - diff --git a/spring-security-client/spring-security-jsp-authorize/src/main/java/org/baeldung/config/Application.java b/spring-security-client/spring-security-jsp-authorize/src/main/java/org/baeldung/config/Application.java deleted file mode 100644 index c2c59396760f..000000000000 --- a/spring-security-client/spring-security-jsp-authorize/src/main/java/org/baeldung/config/Application.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.baeldung.config; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.support.SpringBootServletInitializer; - -@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class }) -public class Application extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(Application.class); - } - - public static void main(String[] args) { - SpringApplication.run(Application.class, args); - } - -} diff --git a/spring-security-client/spring-security-jsp-authorize/src/main/java/org/baeldung/config/MvcConfig.java b/spring-security-client/spring-security-jsp-authorize/src/main/java/org/baeldung/config/MvcConfig.java deleted file mode 100644 index fa2a324146a8..000000000000 --- a/spring-security-client/spring-security-jsp-authorize/src/main/java/org/baeldung/config/MvcConfig.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.baeldung.config; - -import org.springframework.context.annotation.Configuration; -import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; - -@Configuration -public class MvcConfig extends WebMvcConfigurerAdapter { - - public MvcConfig() { - super(); - } - - // - - @Override - public void addViewControllers(final ViewControllerRegistry registry) { - super.addViewControllers(registry); - registry.addViewController("/").setViewName("forward:/index"); - registry.addViewController("/index"); - } - -} \ No newline at end of file diff --git a/spring-security-client/spring-security-jsp-authorize/src/main/java/org/baeldung/config/SecurityConfig.java b/spring-security-client/spring-security-jsp-authorize/src/main/java/org/baeldung/config/SecurityConfig.java deleted file mode 100644 index bd6c56d38af1..000000000000 --- a/spring-security-client/spring-security-jsp-authorize/src/main/java/org/baeldung/config/SecurityConfig.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.baeldung.config; - -import org.springframework.context.annotation.Configuration; -import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; -import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.config.annotation.web.builders.WebSecurity; -import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; - -@Configuration -@EnableWebSecurity -public class SecurityConfig extends WebSecurityConfigurerAdapter { - - @Override - protected void configure(final AuthenticationManagerBuilder auth) throws Exception { - // @formatter:off - auth.inMemoryAuthentication() - .withUser("john").password("123").roles("USER") - .and() - .withUser("tom").password("111").roles("ADMIN"); - // @formatter:on - } - - @Override - public void configure(WebSecurity web) throws Exception { - web.ignoring().antMatchers("/resources/**"); - } - - @Override - protected void configure(final HttpSecurity http) throws Exception { - // @formatter:off - http.authorizeRequests() - .antMatchers("/login").permitAll() - .antMatchers("/admin").hasRole("ADMIN") - .anyRequest().authenticated() - .and().formLogin().permitAll() - ; - // @formatter:on - } -} \ No newline at end of file diff --git a/spring-security-client/spring-security-jsp-authorize/src/main/resources/application.properties b/spring-security-client/spring-security-jsp-authorize/src/main/resources/application.properties deleted file mode 100644 index 26a80c79f3a7..000000000000 --- a/spring-security-client/spring-security-jsp-authorize/src/main/resources/application.properties +++ /dev/null @@ -1,3 +0,0 @@ -server.port: 8081 -spring.mvc.view.prefix: /WEB-INF/jsp/ -spring.mvc.view.suffix: .jsp \ No newline at end of file diff --git a/spring-security-client/spring-security-jsp-authorize/src/main/resources/logback.xml b/spring-security-client/spring-security-jsp-authorize/src/main/resources/logback.xml deleted file mode 100644 index 7d900d8ea884..000000000000 --- a/spring-security-client/spring-security-jsp-authorize/src/main/resources/logback.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - - \ No newline at end of file diff --git a/spring-security-client/spring-security-jsp-authorize/src/main/webapp/WEB-INF/jsp/index.jsp b/spring-security-client/spring-security-jsp-authorize/src/main/webapp/WEB-INF/jsp/index.jsp deleted file mode 100644 index 08af845bd43d..000000000000 --- a/spring-security-client/spring-security-jsp-authorize/src/main/webapp/WEB-INF/jsp/index.jsp +++ /dev/null @@ -1,33 +0,0 @@ - <%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %> - - - - -Spring Security JSP Authorize - - - - - -
- - Only admins can see this message - - - - Only users can see this message - -
- - - Only users who can call "/admin" URL can see this message - -
- - \ No newline at end of file diff --git a/spring-security-client/spring-security-jsp-authorize/src/test/java/org/baeldung/SpringContextIntegrationTest.java b/spring-security-client/spring-security-jsp-authorize/src/test/java/org/baeldung/SpringContextIntegrationTest.java deleted file mode 100644 index 66243ef00d45..000000000000 --- a/spring-security-client/spring-security-jsp-authorize/src/test/java/org/baeldung/SpringContextIntegrationTest.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.baeldung; - -import org.baeldung.config.Application; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = Application.class) -public class SpringContextIntegrationTest { - - @Test - public void whenSpringContextIsBootstrapped_thenNoExceptions() { - } -} diff --git a/spring-security-client/spring-security-jsp-authorize/src/test/java/org/baeldung/SpringContextTest.java b/spring-security-client/spring-security-jsp-authorize/src/test/java/org/baeldung/SpringContextTest.java deleted file mode 100644 index 0afb3899db52..000000000000 --- a/spring-security-client/spring-security-jsp-authorize/src/test/java/org/baeldung/SpringContextTest.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.baeldung; - -import org.baeldung.config.Application; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = Application.class) -public class SpringContextTest { - - @Test - public void whenSpringContextIsBootstrapped_thenNoExceptions() { - } -} diff --git a/spring-security-client/spring-security-jsp-config/pom.xml b/spring-security-client/spring-security-jsp-config/pom.xml deleted file mode 100644 index 02ea206738b2..000000000000 --- a/spring-security-client/spring-security-jsp-config/pom.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - 4.0.0 - com.baeldung - spring-security-jsp-config - 0.0.1-SNAPSHOT - spring-security-jsp-config - Spring Security JSP configuration - war - - - parent-boot-1 - com.baeldung - 0.0.1-SNAPSHOT - ../../parent-boot-1 - - - - - org.springframework.boot - spring-boot-starter-security - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-tomcat - - - org.apache.tomcat.embed - tomcat-embed-jasper - provided - - - javax.servlet - jstl - - - org.springframework.security - spring-security-taglibs - - - - diff --git a/spring-security-client/spring-security-jsp-config/src/main/java/org/baeldung/config/Application.java b/spring-security-client/spring-security-jsp-config/src/main/java/org/baeldung/config/Application.java deleted file mode 100644 index c2c59396760f..000000000000 --- a/spring-security-client/spring-security-jsp-config/src/main/java/org/baeldung/config/Application.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.baeldung.config; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.support.SpringBootServletInitializer; - -@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class }) -public class Application extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(Application.class); - } - - public static void main(String[] args) { - SpringApplication.run(Application.class, args); - } - -} diff --git a/spring-security-client/spring-security-jsp-config/src/main/java/org/baeldung/config/MvcConfig.java b/spring-security-client/spring-security-jsp-config/src/main/java/org/baeldung/config/MvcConfig.java deleted file mode 100644 index fa2a324146a8..000000000000 --- a/spring-security-client/spring-security-jsp-config/src/main/java/org/baeldung/config/MvcConfig.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.baeldung.config; - -import org.springframework.context.annotation.Configuration; -import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; - -@Configuration -public class MvcConfig extends WebMvcConfigurerAdapter { - - public MvcConfig() { - super(); - } - - // - - @Override - public void addViewControllers(final ViewControllerRegistry registry) { - super.addViewControllers(registry); - registry.addViewController("/").setViewName("forward:/index"); - registry.addViewController("/index"); - } - -} \ No newline at end of file diff --git a/spring-security-client/spring-security-jsp-config/src/main/java/org/baeldung/config/SecurityConfig.java b/spring-security-client/spring-security-jsp-config/src/main/java/org/baeldung/config/SecurityConfig.java deleted file mode 100644 index bd6c56d38af1..000000000000 --- a/spring-security-client/spring-security-jsp-config/src/main/java/org/baeldung/config/SecurityConfig.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.baeldung.config; - -import org.springframework.context.annotation.Configuration; -import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; -import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.config.annotation.web.builders.WebSecurity; -import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; - -@Configuration -@EnableWebSecurity -public class SecurityConfig extends WebSecurityConfigurerAdapter { - - @Override - protected void configure(final AuthenticationManagerBuilder auth) throws Exception { - // @formatter:off - auth.inMemoryAuthentication() - .withUser("john").password("123").roles("USER") - .and() - .withUser("tom").password("111").roles("ADMIN"); - // @formatter:on - } - - @Override - public void configure(WebSecurity web) throws Exception { - web.ignoring().antMatchers("/resources/**"); - } - - @Override - protected void configure(final HttpSecurity http) throws Exception { - // @formatter:off - http.authorizeRequests() - .antMatchers("/login").permitAll() - .antMatchers("/admin").hasRole("ADMIN") - .anyRequest().authenticated() - .and().formLogin().permitAll() - ; - // @formatter:on - } -} \ No newline at end of file diff --git a/spring-security-client/spring-security-jsp-config/src/main/resources/application.properties b/spring-security-client/spring-security-jsp-config/src/main/resources/application.properties deleted file mode 100644 index 26a80c79f3a7..000000000000 --- a/spring-security-client/spring-security-jsp-config/src/main/resources/application.properties +++ /dev/null @@ -1,3 +0,0 @@ -server.port: 8081 -spring.mvc.view.prefix: /WEB-INF/jsp/ -spring.mvc.view.suffix: .jsp \ No newline at end of file diff --git a/spring-security-client/spring-security-jsp-config/src/main/resources/logback.xml b/spring-security-client/spring-security-jsp-config/src/main/resources/logback.xml deleted file mode 100644 index 7d900d8ea884..000000000000 --- a/spring-security-client/spring-security-jsp-config/src/main/resources/logback.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - - \ No newline at end of file diff --git a/spring-security-client/spring-security-jsp-config/src/main/webapp/WEB-INF/jsp/index.jsp b/spring-security-client/spring-security-jsp-config/src/main/webapp/WEB-INF/jsp/index.jsp deleted file mode 100644 index bd5ccb0c78a0..000000000000 --- a/spring-security-client/spring-security-jsp-config/src/main/webapp/WEB-INF/jsp/index.jsp +++ /dev/null @@ -1,21 +0,0 @@ - - - - -Spring Security JSP - - - - - -
- Welcome -
- - \ No newline at end of file diff --git a/spring-security-client/spring-security-jsp-config/src/test/java/org/baeldung/SpringContextIntegrationTest.java b/spring-security-client/spring-security-jsp-config/src/test/java/org/baeldung/SpringContextIntegrationTest.java deleted file mode 100644 index 66243ef00d45..000000000000 --- a/spring-security-client/spring-security-jsp-config/src/test/java/org/baeldung/SpringContextIntegrationTest.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.baeldung; - -import org.baeldung.config.Application; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = Application.class) -public class SpringContextIntegrationTest { - - @Test - public void whenSpringContextIsBootstrapped_thenNoExceptions() { - } -} diff --git a/spring-security-client/spring-security-jsp-config/src/test/java/org/baeldung/SpringContextTest.java b/spring-security-client/spring-security-jsp-config/src/test/java/org/baeldung/SpringContextTest.java deleted file mode 100644 index 0afb3899db52..000000000000 --- a/spring-security-client/spring-security-jsp-config/src/test/java/org/baeldung/SpringContextTest.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.baeldung; - -import org.baeldung.config.Application; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = Application.class) -public class SpringContextTest { - - @Test - public void whenSpringContextIsBootstrapped_thenNoExceptions() { - } -} diff --git a/spring-security-client/spring-security-mvc/pom.xml b/spring-security-client/spring-security-mvc/pom.xml deleted file mode 100644 index 75298026a880..000000000000 --- a/spring-security-client/spring-security-mvc/pom.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - 4.0.0 - com.baeldung - spring-security-mvc - 0.0.1-SNAPSHOT - spring-security-mvc - Spring Security MVC - war - - - parent-boot-1 - com.baeldung - 0.0.1-SNAPSHOT - ../../parent-boot-1 - - - - - org.springframework.boot - spring-boot-starter-security - - - org.springframework.boot - spring-boot-starter-web - - - - diff --git a/spring-security-client/spring-security-mvc/src/main/java/org/baeldung/config/Application.java b/spring-security-client/spring-security-mvc/src/main/java/org/baeldung/config/Application.java deleted file mode 100644 index 34c43fbe5a01..000000000000 --- a/spring-security-client/spring-security-mvc/src/main/java/org/baeldung/config/Application.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.baeldung.config; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.support.SpringBootServletInitializer; - -@SpringBootApplication -public class Application extends SpringBootServletInitializer { - - @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { - return application.sources(Application.class); - } - - public static void main(String[] args) { - SpringApplication.run(Application.class, args); - } - -} diff --git a/spring-security-client/spring-security-mvc/src/main/java/org/baeldung/config/SecurityConfig.java b/spring-security-client/spring-security-mvc/src/main/java/org/baeldung/config/SecurityConfig.java deleted file mode 100644 index bd6c56d38af1..000000000000 --- a/spring-security-client/spring-security-mvc/src/main/java/org/baeldung/config/SecurityConfig.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.baeldung.config; - -import org.springframework.context.annotation.Configuration; -import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; -import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.config.annotation.web.builders.WebSecurity; -import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; - -@Configuration -@EnableWebSecurity -public class SecurityConfig extends WebSecurityConfigurerAdapter { - - @Override - protected void configure(final AuthenticationManagerBuilder auth) throws Exception { - // @formatter:off - auth.inMemoryAuthentication() - .withUser("john").password("123").roles("USER") - .and() - .withUser("tom").password("111").roles("ADMIN"); - // @formatter:on - } - - @Override - public void configure(WebSecurity web) throws Exception { - web.ignoring().antMatchers("/resources/**"); - } - - @Override - protected void configure(final HttpSecurity http) throws Exception { - // @formatter:off - http.authorizeRequests() - .antMatchers("/login").permitAll() - .antMatchers("/admin").hasRole("ADMIN") - .anyRequest().authenticated() - .and().formLogin().permitAll() - ; - // @formatter:on - } -} \ No newline at end of file diff --git a/spring-security-client/spring-security-mvc/src/main/resources/application.properties b/spring-security-client/spring-security-mvc/src/main/resources/application.properties deleted file mode 100644 index c2eee0d931df..000000000000 --- a/spring-security-client/spring-security-mvc/src/main/resources/application.properties +++ /dev/null @@ -1 +0,0 @@ -server.port: 8081 \ No newline at end of file diff --git a/spring-security-client/spring-security-mvc/src/main/resources/logback.xml b/spring-security-client/spring-security-mvc/src/main/resources/logback.xml deleted file mode 100644 index 7d900d8ea884..000000000000 --- a/spring-security-client/spring-security-mvc/src/main/resources/logback.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - - \ No newline at end of file diff --git a/spring-security-client/spring-security-mvc/src/test/java/org/baeldung/SpringContextIntegrationTest.java b/spring-security-client/spring-security-mvc/src/test/java/org/baeldung/SpringContextIntegrationTest.java deleted file mode 100644 index 66243ef00d45..000000000000 --- a/spring-security-client/spring-security-mvc/src/test/java/org/baeldung/SpringContextIntegrationTest.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.baeldung; - -import org.baeldung.config.Application; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = Application.class) -public class SpringContextIntegrationTest { - - @Test - public void whenSpringContextIsBootstrapped_thenNoExceptions() { - } -} diff --git a/spring-security-client/spring-security-mvc/src/test/java/org/baeldung/SpringContextTest.java b/spring-security-client/spring-security-mvc/src/test/java/org/baeldung/SpringContextTest.java deleted file mode 100644 index 0afb3899db52..000000000000 --- a/spring-security-client/spring-security-mvc/src/test/java/org/baeldung/SpringContextTest.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.baeldung; - -import org.baeldung.config.Application; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = Application.class) -public class SpringContextTest { - - @Test - public void whenSpringContextIsBootstrapped_thenNoExceptions() { - } -} diff --git a/spring-security-client/spring-security-thymeleaf-authentication/pom.xml b/spring-security-client/spring-security-thymeleaf-authentication/pom.xml deleted file mode 100644 index 01d2c6bdbec0..000000000000 --- a/spring-security-client/spring-security-thymeleaf-authentication/pom.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - 4.0.0 - - com.baeldung - spring-security-thymeleaf-authentication - 0.0.1-SNAPSHOT - spring-security-thymeleaf-authentication - Spring Security thymeleaf authentication tag sample - war - - - parent-boot-1 - com.baeldung - 0.0.1-SNAPSHOT - ../../parent-boot-1 - - - - - org.springframework.boot - spring-boot-starter-security - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-tomcat - - - org.springframework.boot - spring-boot-starter-thymeleaf - - - org.thymeleaf.extras - thymeleaf-extras-springsecurity4 - - - - diff --git a/spring-security-client/spring-security-thymeleaf-authentication/src/main/java/org/baeldung/config/Application.java b/spring-security-client/spring-security-thymeleaf-authentication/src/main/java/org/baeldung/config/Application.java deleted file mode 100644 index 329b1041437b..000000000000 --- a/spring-security-client/spring-security-thymeleaf-authentication/src/main/java/org/baeldung/config/Application.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.baeldung.config; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.support.SpringBootServletInitializer; - -@SpringBootApplication -public class Application extends SpringBootServletInitializer { - - public static void main(String[] args) { - SpringApplication.run(Application.class, args); - } - -} diff --git a/spring-security-client/spring-security-thymeleaf-authentication/src/main/java/org/baeldung/config/MvcConfig.java b/spring-security-client/spring-security-thymeleaf-authentication/src/main/java/org/baeldung/config/MvcConfig.java deleted file mode 100644 index 259433f6aecb..000000000000 --- a/spring-security-client/spring-security-thymeleaf-authentication/src/main/java/org/baeldung/config/MvcConfig.java +++ /dev/null @@ -1,44 +0,0 @@ -package org.baeldung.config; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; -import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer; -import org.springframework.web.servlet.config.annotation.EnableWebMvc; -import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; -import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; -import org.springframework.context.annotation.Profile; - -@Configuration -@EnableWebMvc -@Profile("!manual") -public class MvcConfig extends WebMvcConfigurerAdapter { - - public MvcConfig() { - super(); - } - - // - @Bean - public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { - return new PropertySourcesPlaceholderConfigurer(); - } - - @Override - public void configureDefaultServletHandling(final DefaultServletHandlerConfigurer configurer) { - configurer.enable(); - } - - @Override - public void addViewControllers(final ViewControllerRegistry registry) { - super.addViewControllers(registry); - registry.addViewController("/").setViewName("forward:/index"); - registry.addViewController("/index"); - } - - @Override - public void addResourceHandlers(final ResourceHandlerRegistry registry) { - registry.addResourceHandler("/resources/**").addResourceLocations("/resources/"); - } -} \ No newline at end of file diff --git a/spring-security-client/spring-security-thymeleaf-authentication/src/main/java/org/baeldung/config/MvcConfigManual.java b/spring-security-client/spring-security-thymeleaf-authentication/src/main/java/org/baeldung/config/MvcConfigManual.java deleted file mode 100644 index d80527c30a68..000000000000 --- a/spring-security-client/spring-security-thymeleaf-authentication/src/main/java/org/baeldung/config/MvcConfigManual.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.baeldung.config; - -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Profile; -import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; -import org.springframework.web.servlet.config.annotation.EnableWebMvc; - -@Configuration -@EnableWebMvc -@Profile("manual") -public class MvcConfigManual extends WebMvcConfigurerAdapter { - - @Override - public void addViewControllers(ViewControllerRegistry registry) { - registry.addViewController("/home").setViewName("home"); - registry.addViewController("/").setViewName("home"); - registry.addViewController("/hello").setViewName("hello"); - registry.addViewController("/login").setViewName("login"); - } - -} diff --git a/spring-security-client/spring-security-thymeleaf-authentication/src/main/java/org/baeldung/config/RegistrationController.java b/spring-security-client/spring-security-thymeleaf-authentication/src/main/java/org/baeldung/config/RegistrationController.java deleted file mode 100644 index 2414ff9cacfb..000000000000 --- a/spring-security-client/spring-security-thymeleaf-authentication/src/main/java/org/baeldung/config/RegistrationController.java +++ /dev/null @@ -1,89 +0,0 @@ -package org.baeldung.config; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Profile; -import org.springframework.security.authentication.AbstractAuthenticationToken; -import org.springframework.security.authentication.AuthenticationManager; -import org.springframework.security.authentication.BadCredentialsException; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.web.authentication.WebAuthenticationDetails; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -/** - * Manually authenticate a user using Spring Security / Spring Web MVC' (upon successful account registration) - * (http://stackoverflow.com/questions/4664893/how-to-manually-set-an-authenticated-user-in-spring-security-springmvc) - * - * @author jim clayson - */ -@Controller -@Profile("manual") -public class RegistrationController { - private static final Logger logger = LoggerFactory.getLogger(RegistrationController.class); - - @Autowired - private AuthenticationManager authenticationManager; - - /** - * For demo purposes this need only be a GET request method - * - * @param request - * @param response - * @return The view. Page confirming either successful registration (and/or - * successful authentication) or failed registration. - */ - @GetMapping("/register") - public String registerAndAuthenticate(HttpServletRequest request, HttpServletResponse response) { - logger.debug("registerAndAuthenticate: attempt to register, application should manually authenticate."); - - // Mocked values. Potentially could come from an HTML registration form, - // in which case this mapping would match on an HTTP POST, rather than a GET - String username = "user"; - String password = "password"; - - if (requestQualifiesForManualAuthentication()) { - try { - authenticate(username, password, request, response); - logger.debug("registerAndAuthenticate: authentication completed."); - } catch (BadCredentialsException bce) { - logger.debug("Authentication failure: bad credentials"); - bce.printStackTrace(); - return "systemError"; // assume a low-level error, since the registration - // form would have been successfully validated - } - } - - return "registrationSuccess"; - } - - private boolean requestQualifiesForManualAuthentication() { - // Some processing to determine that the user requires a Spring Security-recognized, - // application-directed login e.g. successful account registration. - return true; - } - - private void authenticate(String username, String password, HttpServletRequest request, HttpServletResponse response) throws BadCredentialsException { - logger.debug("attempting to authenticated, manually ... "); - - // create and populate the token - AbstractAuthenticationToken authToken = new UsernamePasswordAuthenticationToken(username, password); - authToken.setDetails(new WebAuthenticationDetails(request)); - - // This call returns an authentication object, which holds principle and user credentials - Authentication authentication = this.authenticationManager.authenticate(authToken); - - // The security context holds the authentication object, and is stored - // in thread local scope. - SecurityContextHolder.getContext().setAuthentication(authentication); - - logger.debug("User should now be authenticated."); - } - -} \ No newline at end of file diff --git a/spring-security-client/spring-security-thymeleaf-authentication/src/main/java/org/baeldung/config/SecurityConfig.java b/spring-security-client/spring-security-thymeleaf-authentication/src/main/java/org/baeldung/config/SecurityConfig.java deleted file mode 100644 index 153cc67661b7..000000000000 --- a/spring-security-client/spring-security-thymeleaf-authentication/src/main/java/org/baeldung/config/SecurityConfig.java +++ /dev/null @@ -1,42 +0,0 @@ -package org.baeldung.config; - -import org.springframework.context.annotation.Configuration; -import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; -import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.config.annotation.web.builders.WebSecurity; -import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; -import org.springframework.context.annotation.Profile; - -@Configuration -@EnableWebSecurity -@Profile("!manual") -public class SecurityConfig extends WebSecurityConfigurerAdapter { - - @Override - protected void configure(final AuthenticationManagerBuilder auth) throws Exception { - // @formatter:off - auth.inMemoryAuthentication() - .withUser("john").password("123").roles("USER") - .and() - .withUser("tom").password("111").roles("ADMIN"); - // @formatter:on - } - - @Override - public void configure(WebSecurity web) throws Exception { - web.ignoring().antMatchers("/resources/**"); - } - - @Override - protected void configure(final HttpSecurity http) throws Exception { - // @formatter:off - http.authorizeRequests() - .antMatchers("/login").permitAll() - .antMatchers("/admin").hasRole("ADMIN") - .anyRequest().authenticated() - .and().formLogin().permitAll() - ; - // @formatter:on - } -} \ No newline at end of file diff --git a/spring-security-client/spring-security-thymeleaf-authentication/src/main/java/org/baeldung/config/WebSecurityConfigManual.java b/spring-security-client/spring-security-thymeleaf-authentication/src/main/java/org/baeldung/config/WebSecurityConfigManual.java deleted file mode 100644 index 180a53debac0..000000000000 --- a/spring-security-client/spring-security-thymeleaf-authentication/src/main/java/org/baeldung/config/WebSecurityConfigManual.java +++ /dev/null @@ -1,35 +0,0 @@ -package org.baeldung.config; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Profile; -import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; -import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; - -@Configuration -@EnableWebSecurity -@Profile("manual") -public class WebSecurityConfigManual extends WebSecurityConfigurerAdapter { - - @Override - protected void configure(HttpSecurity http) throws Exception { - // @formatter:off - http - .authorizeRequests() - .antMatchers("/", "/home", "/register").permitAll() - .anyRequest().authenticated() - .and() - .formLogin() - .loginPage("/login").permitAll() - .and() - .logout().permitAll(); - // @formatter:on - } - - @Autowired - public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { - auth.inMemoryAuthentication().withUser("user").password("password").roles("USER"); - } -} diff --git a/spring-security-client/spring-security-thymeleaf-authentication/src/main/resources/application.properties b/spring-security-client/spring-security-thymeleaf-authentication/src/main/resources/application.properties deleted file mode 100644 index bafddced850a..000000000000 --- a/spring-security-client/spring-security-thymeleaf-authentication/src/main/resources/application.properties +++ /dev/null @@ -1 +0,0 @@ -server.port=8081 \ No newline at end of file diff --git a/spring-security-client/spring-security-thymeleaf-authentication/src/main/resources/logback.xml b/spring-security-client/spring-security-thymeleaf-authentication/src/main/resources/logback.xml deleted file mode 100644 index 7d900d8ea884..000000000000 --- a/spring-security-client/spring-security-thymeleaf-authentication/src/main/resources/logback.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - - \ No newline at end of file diff --git a/spring-security-client/spring-security-thymeleaf-authentication/src/main/resources/templates/hello.html b/spring-security-client/spring-security-thymeleaf-authentication/src/main/resources/templates/hello.html deleted file mode 100644 index b37731b0edbd..000000000000 --- a/spring-security-client/spring-security-thymeleaf-authentication/src/main/resources/templates/hello.html +++ /dev/null @@ -1,15 +0,0 @@ - - - - Hello World! - - -

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

-
- -
-

Click here to go to the home page.

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

Welcome!

- -

Click here to see a greeting.

-

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

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

Click here to go to the home page.

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

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

-
- -
-

Click here to go to the home page.

- - - \ No newline at end of file diff --git a/spring-security-client/spring-security-thymeleaf-authentication/src/test/java/org/baeldung/SpringContextIntegrationTest.java b/spring-security-client/spring-security-thymeleaf-authentication/src/test/java/org/baeldung/SpringContextIntegrationTest.java deleted file mode 100644 index 66243ef00d45..000000000000 --- a/spring-security-client/spring-security-thymeleaf-authentication/src/test/java/org/baeldung/SpringContextIntegrationTest.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.baeldung; - -import org.baeldung.config.Application; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = Application.class) -public class SpringContextIntegrationTest { - - @Test - public void whenSpringContextIsBootstrapped_thenNoExceptions() { - } -} diff --git a/spring-security-client/spring-security-thymeleaf-authentication/src/test/java/org/baeldung/SpringContextTest.java b/spring-security-client/spring-security-thymeleaf-authentication/src/test/java/org/baeldung/SpringContextTest.java deleted file mode 100644 index 0afb3899db52..000000000000 --- a/spring-security-client/spring-security-thymeleaf-authentication/src/test/java/org/baeldung/SpringContextTest.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.baeldung; - -import org.baeldung.config.Application; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = Application.class) -public class SpringContextTest { - - @Test - public void whenSpringContextIsBootstrapped_thenNoExceptions() { - } -} diff --git a/spring-security-client/spring-security-thymeleaf-authorize/pom.xml b/spring-security-client/spring-security-thymeleaf-authorize/pom.xml deleted file mode 100644 index 8c600c1f8116..000000000000 --- a/spring-security-client/spring-security-thymeleaf-authorize/pom.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - 4.0.0 - - com.baeldung - spring-security-thymeleaf-authorize - 0.0.1-SNAPSHOT - spring-security-thymeleaf-authorize - Spring Security thymeleaf authorize tag sample - war - - - parent-boot-1 - com.baeldung - 0.0.1-SNAPSHOT - ../../parent-boot-1 - - - - - org.springframework.boot - spring-boot-starter-security - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-tomcat - - - org.springframework.boot - spring-boot-starter-thymeleaf - - - org.thymeleaf.extras - thymeleaf-extras-springsecurity4 - - - - diff --git a/spring-security-client/spring-security-thymeleaf-authorize/src/main/java/org/baeldung/config/Application.java b/spring-security-client/spring-security-thymeleaf-authorize/src/main/java/org/baeldung/config/Application.java deleted file mode 100644 index 329b1041437b..000000000000 --- a/spring-security-client/spring-security-thymeleaf-authorize/src/main/java/org/baeldung/config/Application.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.baeldung.config; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.support.SpringBootServletInitializer; - -@SpringBootApplication -public class Application extends SpringBootServletInitializer { - - public static void main(String[] args) { - SpringApplication.run(Application.class, args); - } - -} diff --git a/spring-security-client/spring-security-thymeleaf-authorize/src/main/java/org/baeldung/config/MvcConfig.java b/spring-security-client/spring-security-thymeleaf-authorize/src/main/java/org/baeldung/config/MvcConfig.java deleted file mode 100644 index 9ade60e54cc6..000000000000 --- a/spring-security-client/spring-security-thymeleaf-authorize/src/main/java/org/baeldung/config/MvcConfig.java +++ /dev/null @@ -1,42 +0,0 @@ -package org.baeldung.config; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; -import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer; -import org.springframework.web.servlet.config.annotation.EnableWebMvc; -import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; -import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; - -@Configuration -@EnableWebMvc -public class MvcConfig extends WebMvcConfigurerAdapter { - - public MvcConfig() { - super(); - } - - // - @Bean - public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { - return new PropertySourcesPlaceholderConfigurer(); - } - - @Override - public void configureDefaultServletHandling(final DefaultServletHandlerConfigurer configurer) { - configurer.enable(); - } - - @Override - public void addViewControllers(final ViewControllerRegistry registry) { - super.addViewControllers(registry); - registry.addViewController("/").setViewName("forward:/index"); - registry.addViewController("/index"); - } - - @Override - public void addResourceHandlers(final ResourceHandlerRegistry registry) { - registry.addResourceHandler("/resources/**").addResourceLocations("/resources/"); - } -} \ No newline at end of file diff --git a/spring-security-client/spring-security-thymeleaf-authorize/src/main/java/org/baeldung/config/SecurityConfig.java b/spring-security-client/spring-security-thymeleaf-authorize/src/main/java/org/baeldung/config/SecurityConfig.java deleted file mode 100644 index bd6c56d38af1..000000000000 --- a/spring-security-client/spring-security-thymeleaf-authorize/src/main/java/org/baeldung/config/SecurityConfig.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.baeldung.config; - -import org.springframework.context.annotation.Configuration; -import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; -import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.config.annotation.web.builders.WebSecurity; -import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; - -@Configuration -@EnableWebSecurity -public class SecurityConfig extends WebSecurityConfigurerAdapter { - - @Override - protected void configure(final AuthenticationManagerBuilder auth) throws Exception { - // @formatter:off - auth.inMemoryAuthentication() - .withUser("john").password("123").roles("USER") - .and() - .withUser("tom").password("111").roles("ADMIN"); - // @formatter:on - } - - @Override - public void configure(WebSecurity web) throws Exception { - web.ignoring().antMatchers("/resources/**"); - } - - @Override - protected void configure(final HttpSecurity http) throws Exception { - // @formatter:off - http.authorizeRequests() - .antMatchers("/login").permitAll() - .antMatchers("/admin").hasRole("ADMIN") - .anyRequest().authenticated() - .and().formLogin().permitAll() - ; - // @formatter:on - } -} \ No newline at end of file diff --git a/spring-security-client/spring-security-thymeleaf-authorize/src/main/resources/application.properties b/spring-security-client/spring-security-thymeleaf-authorize/src/main/resources/application.properties deleted file mode 100644 index bafddced850a..000000000000 --- a/spring-security-client/spring-security-thymeleaf-authorize/src/main/resources/application.properties +++ /dev/null @@ -1 +0,0 @@ -server.port=8081 \ No newline at end of file diff --git a/spring-security-client/spring-security-thymeleaf-authorize/src/main/resources/logback.xml b/spring-security-client/spring-security-thymeleaf-authorize/src/main/resources/logback.xml deleted file mode 100644 index 7d900d8ea884..000000000000 --- a/spring-security-client/spring-security-thymeleaf-authorize/src/main/resources/logback.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - - \ No newline at end of file diff --git a/spring-security-client/spring-security-thymeleaf-authorize/src/main/resources/templates/index.html b/spring-security-client/spring-security-thymeleaf-authorize/src/main/resources/templates/index.html deleted file mode 100644 index fcbbfb495726..000000000000 --- a/spring-security-client/spring-security-thymeleaf-authorize/src/main/resources/templates/index.html +++ /dev/null @@ -1,32 +0,0 @@ - - - - -Spring Security Thymeleaf - - - - - -
-
- Only admins can see this message -
- -
- Only users can see this message -
-
- -
- Only users who can call "/admin" URL can see this message -
-
- - \ No newline at end of file diff --git a/spring-security-client/spring-security-thymeleaf-authorize/src/test/java/org/baeldung/SpringContextIntegrationTest.java b/spring-security-client/spring-security-thymeleaf-authorize/src/test/java/org/baeldung/SpringContextIntegrationTest.java deleted file mode 100644 index 66243ef00d45..000000000000 --- a/spring-security-client/spring-security-thymeleaf-authorize/src/test/java/org/baeldung/SpringContextIntegrationTest.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.baeldung; - -import org.baeldung.config.Application; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = Application.class) -public class SpringContextIntegrationTest { - - @Test - public void whenSpringContextIsBootstrapped_thenNoExceptions() { - } -} diff --git a/spring-security-client/spring-security-thymeleaf-authorize/src/test/java/org/baeldung/SpringContextTest.java b/spring-security-client/spring-security-thymeleaf-authorize/src/test/java/org/baeldung/SpringContextTest.java deleted file mode 100644 index 0afb3899db52..000000000000 --- a/spring-security-client/spring-security-thymeleaf-authorize/src/test/java/org/baeldung/SpringContextTest.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.baeldung; - -import org.baeldung.config.Application; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = Application.class) -public class SpringContextTest { - - @Test - public void whenSpringContextIsBootstrapped_thenNoExceptions() { - } -} diff --git a/spring-security-client/spring-security-thymeleaf-config/pom.xml b/spring-security-client/spring-security-thymeleaf-config/pom.xml deleted file mode 100644 index aeda999405c2..000000000000 --- a/spring-security-client/spring-security-thymeleaf-config/pom.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - 4.0.0 - com.baeldung - spring-security-thymeleaf-config - 0.0.1-SNAPSHOT - spring-security-thymeleaf-config - Spring Security thymeleaf configuration sample project - war - - - parent-boot-1 - com.baeldung - 0.0.1-SNAPSHOT - ../../parent-boot-1 - - - - - org.springframework.boot - spring-boot-starter-security - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-tomcat - - - org.springframework.boot - spring-boot-starter-thymeleaf - - - org.thymeleaf.extras - thymeleaf-extras-springsecurity4 - - - - diff --git a/spring-security-client/spring-security-thymeleaf-config/src/main/java/org/baeldung/config/Application.java b/spring-security-client/spring-security-thymeleaf-config/src/main/java/org/baeldung/config/Application.java deleted file mode 100644 index 329b1041437b..000000000000 --- a/spring-security-client/spring-security-thymeleaf-config/src/main/java/org/baeldung/config/Application.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.baeldung.config; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.support.SpringBootServletInitializer; - -@SpringBootApplication -public class Application extends SpringBootServletInitializer { - - public static void main(String[] args) { - SpringApplication.run(Application.class, args); - } - -} diff --git a/spring-security-client/spring-security-thymeleaf-config/src/main/java/org/baeldung/config/MvcConfig.java b/spring-security-client/spring-security-thymeleaf-config/src/main/java/org/baeldung/config/MvcConfig.java deleted file mode 100644 index 9ade60e54cc6..000000000000 --- a/spring-security-client/spring-security-thymeleaf-config/src/main/java/org/baeldung/config/MvcConfig.java +++ /dev/null @@ -1,42 +0,0 @@ -package org.baeldung.config; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; -import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer; -import org.springframework.web.servlet.config.annotation.EnableWebMvc; -import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; -import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; - -@Configuration -@EnableWebMvc -public class MvcConfig extends WebMvcConfigurerAdapter { - - public MvcConfig() { - super(); - } - - // - @Bean - public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { - return new PropertySourcesPlaceholderConfigurer(); - } - - @Override - public void configureDefaultServletHandling(final DefaultServletHandlerConfigurer configurer) { - configurer.enable(); - } - - @Override - public void addViewControllers(final ViewControllerRegistry registry) { - super.addViewControllers(registry); - registry.addViewController("/").setViewName("forward:/index"); - registry.addViewController("/index"); - } - - @Override - public void addResourceHandlers(final ResourceHandlerRegistry registry) { - registry.addResourceHandler("/resources/**").addResourceLocations("/resources/"); - } -} \ No newline at end of file diff --git a/spring-security-client/spring-security-thymeleaf-config/src/main/java/org/baeldung/config/SecurityConfig.java b/spring-security-client/spring-security-thymeleaf-config/src/main/java/org/baeldung/config/SecurityConfig.java deleted file mode 100644 index bd6c56d38af1..000000000000 --- a/spring-security-client/spring-security-thymeleaf-config/src/main/java/org/baeldung/config/SecurityConfig.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.baeldung.config; - -import org.springframework.context.annotation.Configuration; -import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; -import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.config.annotation.web.builders.WebSecurity; -import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; - -@Configuration -@EnableWebSecurity -public class SecurityConfig extends WebSecurityConfigurerAdapter { - - @Override - protected void configure(final AuthenticationManagerBuilder auth) throws Exception { - // @formatter:off - auth.inMemoryAuthentication() - .withUser("john").password("123").roles("USER") - .and() - .withUser("tom").password("111").roles("ADMIN"); - // @formatter:on - } - - @Override - public void configure(WebSecurity web) throws Exception { - web.ignoring().antMatchers("/resources/**"); - } - - @Override - protected void configure(final HttpSecurity http) throws Exception { - // @formatter:off - http.authorizeRequests() - .antMatchers("/login").permitAll() - .antMatchers("/admin").hasRole("ADMIN") - .anyRequest().authenticated() - .and().formLogin().permitAll() - ; - // @formatter:on - } -} \ No newline at end of file diff --git a/spring-security-client/spring-security-thymeleaf-config/src/main/resources/application.properties b/spring-security-client/spring-security-thymeleaf-config/src/main/resources/application.properties deleted file mode 100644 index bafddced850a..000000000000 --- a/spring-security-client/spring-security-thymeleaf-config/src/main/resources/application.properties +++ /dev/null @@ -1 +0,0 @@ -server.port=8081 \ No newline at end of file diff --git a/spring-security-client/spring-security-thymeleaf-config/src/main/resources/logback.xml b/spring-security-client/spring-security-thymeleaf-config/src/main/resources/logback.xml deleted file mode 100644 index 7d900d8ea884..000000000000 --- a/spring-security-client/spring-security-thymeleaf-config/src/main/resources/logback.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - - - - - - \ No newline at end of file diff --git a/spring-security-client/spring-security-thymeleaf-config/src/main/resources/templates/index.html b/spring-security-client/spring-security-thymeleaf-config/src/main/resources/templates/index.html deleted file mode 100644 index 8e7394ad6ade..000000000000 --- a/spring-security-client/spring-security-thymeleaf-config/src/main/resources/templates/index.html +++ /dev/null @@ -1,21 +0,0 @@ - - - - -Spring Security Thymeleaf - - - - - -
- Welcome -
- - \ No newline at end of file diff --git a/spring-security-client/spring-security-thymeleaf-config/src/test/java/org/baeldung/SpringContextIntegrationTest.java b/spring-security-client/spring-security-thymeleaf-config/src/test/java/org/baeldung/SpringContextIntegrationTest.java deleted file mode 100644 index 66243ef00d45..000000000000 --- a/spring-security-client/spring-security-thymeleaf-config/src/test/java/org/baeldung/SpringContextIntegrationTest.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.baeldung; - -import org.baeldung.config.Application; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = Application.class) -public class SpringContextIntegrationTest { - - @Test - public void whenSpringContextIsBootstrapped_thenNoExceptions() { - } -} diff --git a/spring-security-client/spring-security-thymeleaf-config/src/test/java/org/baeldung/SpringContextTest.java b/spring-security-client/spring-security-thymeleaf-config/src/test/java/org/baeldung/SpringContextTest.java deleted file mode 100644 index 0afb3899db52..000000000000 --- a/spring-security-client/spring-security-thymeleaf-config/src/test/java/org/baeldung/SpringContextTest.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.baeldung; - -import org.baeldung.config.Application; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = Application.class) -public class SpringContextTest { - - @Test - public void whenSpringContextIsBootstrapped_thenNoExceptions() { - } -} From f1e0397dc072899ae360438431bba62fc7073346 Mon Sep 17 00:00:00 2001 From: Loredana Date: Sun, 4 Aug 2019 14:19:42 +0300 Subject: [PATCH 71/99] update links in readmes --- jenkins/README.md | 3 +- jenkins/hello-world/README.md | 3 + jhipster-5/README.md | 3 +- jhipster-5/bookstore-monolith/README.md | 180 +----------------- spring-cloud-data-flow/README.MD | 6 +- .../apache-spark-job/README.MD | 3 + spring-cloud-data-flow/batch-job/README.MD | 3 + spring-cloud-data-flow/pom.xml | 8 +- .../README.MD | 0 .../customer-mongodb-sink/pom.xml | 0 .../customermongodbsink/Customer.java | 0 .../customermongodbsink/CustomerListener.java | 0 .../CustomerMongodbSinkApplication.java | 0 .../CustomerRepository.java | 0 .../src/main/resources/application.properties | 0 .../customer-transform/pom.xml | 0 .../customer/customertransform/Customer.java | 0 .../CustomerProcessorConfiguration.java | 0 .../CustomerTransformApplication.java | 0 .../src/main/resources/application.properties | 0 .../pom.xml | 2 +- .../README.MD | 4 + .../data-flow-server/pom.xml | 0 .../cloud/DataFlowServerApplication.java | 0 .../src/main/resources/logback.xml | 0 .../SpringContextIntegrationTest.java | 0 .../java/org/baeldung/SpringContextTest.java | 0 ...aFlowServerApplicationIntegrationTest.java | 0 .../data-flow-shell/pom.xml | 0 .../data-flow-shell/spring-shell.log | 0 .../cloud/DataFlowShellApplication.java | 0 .../src/main/resources/logback.xml | 0 .../SpringContextIntegrationTest.java | 0 .../java/org/baeldung/SpringContextTest.java | 0 .../log-sink/pom.xml | 0 .../spring/cloud/LogSinkApplication.java | 0 .../log-sink/src/main/resources/logback.xml | 0 .../SpringContextIntegrationTest.java | 0 .../java/org/baeldung/SpringContextTest.java | 0 .../pom.xml | 23 +++ .../time-processor/pom.xml | 0 .../cloud/TimeProcessorApplication.java | 0 .../src/main/resources/logback.xml | 0 .../SpringContextIntegrationTest.java | 0 .../java/org/baeldung/SpringContextTest.java | 0 .../time-source/pom.xml | 0 .../spring/cloud/TimeSourceApplication.java | 0 .../src/main/resources/logback.xml | 0 .../SpringContextIntegrationTest.java | 0 .../java/org/baeldung/SpringContextTest.java | 0 testing-modules/README.md | 12 +- testing-modules/junit-5/README.md | 1 + testing-modules/mockito/README.md | 4 + testing-modules/rest-assured/README.md | 4 + testing-modules/testing/README.md | 1 + 55 files changed, 56 insertions(+), 204 deletions(-) create mode 100644 jenkins/hello-world/README.md create mode 100644 spring-cloud-data-flow/apache-spark-job/README.MD create mode 100644 spring-cloud-data-flow/batch-job/README.MD rename spring-cloud-data-flow/{etl => spring-cloud-data-flow-etl}/README.MD (100%) rename spring-cloud-data-flow/{etl => spring-cloud-data-flow-etl}/customer-mongodb-sink/pom.xml (100%) rename spring-cloud-data-flow/{etl => spring-cloud-data-flow-etl}/customer-mongodb-sink/src/main/java/com/customer/customermongodbsink/Customer.java (100%) rename spring-cloud-data-flow/{etl => spring-cloud-data-flow-etl}/customer-mongodb-sink/src/main/java/com/customer/customermongodbsink/CustomerListener.java (100%) rename spring-cloud-data-flow/{etl => spring-cloud-data-flow-etl}/customer-mongodb-sink/src/main/java/com/customer/customermongodbsink/CustomerMongodbSinkApplication.java (100%) rename spring-cloud-data-flow/{etl => spring-cloud-data-flow-etl}/customer-mongodb-sink/src/main/java/com/customer/customermongodbsink/CustomerRepository.java (100%) rename spring-cloud-data-flow/{etl => spring-cloud-data-flow-etl}/customer-mongodb-sink/src/main/resources/application.properties (100%) rename spring-cloud-data-flow/{etl => spring-cloud-data-flow-etl}/customer-transform/pom.xml (100%) rename spring-cloud-data-flow/{etl => spring-cloud-data-flow-etl}/customer-transform/src/main/java/com/customer/customertransform/Customer.java (100%) rename spring-cloud-data-flow/{etl => spring-cloud-data-flow-etl}/customer-transform/src/main/java/com/customer/customertransform/CustomerProcessorConfiguration.java (100%) rename spring-cloud-data-flow/{etl => spring-cloud-data-flow-etl}/customer-transform/src/main/java/com/customer/customertransform/CustomerTransformApplication.java (100%) rename spring-cloud-data-flow/{etl => spring-cloud-data-flow-etl}/customer-transform/src/main/resources/application.properties (100%) rename spring-cloud-data-flow/{etl => spring-cloud-data-flow-etl}/pom.xml (91%) create mode 100644 spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/README.MD rename spring-cloud-data-flow/{ => spring-cloud-data-flow-stream-processing}/data-flow-server/pom.xml (100%) rename spring-cloud-data-flow/{ => spring-cloud-data-flow-stream-processing}/data-flow-server/src/main/java/org/baeldung/spring/cloud/DataFlowServerApplication.java (100%) rename spring-cloud-data-flow/{ => spring-cloud-data-flow-stream-processing}/data-flow-server/src/main/resources/logback.xml (100%) rename spring-cloud-data-flow/{ => spring-cloud-data-flow-stream-processing}/data-flow-server/src/test/java/org/baeldung/SpringContextIntegrationTest.java (100%) rename spring-cloud-data-flow/{ => spring-cloud-data-flow-stream-processing}/data-flow-server/src/test/java/org/baeldung/SpringContextTest.java (100%) rename spring-cloud-data-flow/{ => spring-cloud-data-flow-stream-processing}/data-flow-server/src/test/java/org/baeldung/spring/cloud/DataFlowServerApplicationIntegrationTest.java (100%) rename spring-cloud-data-flow/{ => spring-cloud-data-flow-stream-processing}/data-flow-shell/pom.xml (100%) rename spring-cloud-data-flow/{ => spring-cloud-data-flow-stream-processing}/data-flow-shell/spring-shell.log (100%) rename spring-cloud-data-flow/{ => spring-cloud-data-flow-stream-processing}/data-flow-shell/src/main/java/org/baeldung/spring/cloud/DataFlowShellApplication.java (100%) rename spring-cloud-data-flow/{ => spring-cloud-data-flow-stream-processing}/data-flow-shell/src/main/resources/logback.xml (100%) rename spring-cloud-data-flow/{ => spring-cloud-data-flow-stream-processing}/data-flow-shell/src/test/java/org/baeldung/SpringContextIntegrationTest.java (100%) rename spring-cloud-data-flow/{ => spring-cloud-data-flow-stream-processing}/data-flow-shell/src/test/java/org/baeldung/SpringContextTest.java (100%) rename spring-cloud-data-flow/{ => spring-cloud-data-flow-stream-processing}/log-sink/pom.xml (100%) rename spring-cloud-data-flow/{ => spring-cloud-data-flow-stream-processing}/log-sink/src/main/java/org/baeldung/spring/cloud/LogSinkApplication.java (100%) rename spring-cloud-data-flow/{ => spring-cloud-data-flow-stream-processing}/log-sink/src/main/resources/logback.xml (100%) rename spring-cloud-data-flow/{ => spring-cloud-data-flow-stream-processing}/log-sink/src/test/java/org/baeldung/SpringContextIntegrationTest.java (100%) rename spring-cloud-data-flow/{ => spring-cloud-data-flow-stream-processing}/log-sink/src/test/java/org/baeldung/SpringContextTest.java (100%) create mode 100644 spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/pom.xml rename spring-cloud-data-flow/{ => spring-cloud-data-flow-stream-processing}/time-processor/pom.xml (100%) rename spring-cloud-data-flow/{ => spring-cloud-data-flow-stream-processing}/time-processor/src/main/java/org/baeldung/spring/cloud/TimeProcessorApplication.java (100%) rename spring-cloud-data-flow/{ => spring-cloud-data-flow-stream-processing}/time-processor/src/main/resources/logback.xml (100%) rename spring-cloud-data-flow/{ => spring-cloud-data-flow-stream-processing}/time-processor/src/test/java/org/baeldung/SpringContextIntegrationTest.java (100%) rename spring-cloud-data-flow/{ => spring-cloud-data-flow-stream-processing}/time-processor/src/test/java/org/baeldung/SpringContextTest.java (100%) rename spring-cloud-data-flow/{ => spring-cloud-data-flow-stream-processing}/time-source/pom.xml (100%) rename spring-cloud-data-flow/{ => spring-cloud-data-flow-stream-processing}/time-source/src/main/java/org/baeldung/spring/cloud/TimeSourceApplication.java (100%) rename spring-cloud-data-flow/{ => spring-cloud-data-flow-stream-processing}/time-source/src/main/resources/logback.xml (100%) rename spring-cloud-data-flow/{ => spring-cloud-data-flow-stream-processing}/time-source/src/test/java/org/baeldung/SpringContextIntegrationTest.java (100%) rename spring-cloud-data-flow/{ => spring-cloud-data-flow-stream-processing}/time-source/src/test/java/org/baeldung/SpringContextTest.java (100%) diff --git a/jenkins/README.md b/jenkins/README.md index da60e556dfdd..6b28b61277d1 100644 --- a/jenkins/README.md +++ b/jenkins/README.md @@ -1,3 +1,2 @@ -## Relevant articles: -- [Writing a Jenkins Plugin](http://www.baeldung.com/jenkins-custom-plugin) +This is an aggregator modules for Jenkins-related modules. diff --git a/jenkins/hello-world/README.md b/jenkins/hello-world/README.md new file mode 100644 index 000000000000..da60e556dfdd --- /dev/null +++ b/jenkins/hello-world/README.md @@ -0,0 +1,3 @@ +## Relevant articles: + +- [Writing a Jenkins Plugin](http://www.baeldung.com/jenkins-custom-plugin) diff --git a/jhipster-5/README.md b/jhipster-5/README.md index 0537f5b1a5c8..2731281b3e78 100644 --- a/jhipster-5/README.md +++ b/jhipster-5/README.md @@ -1,3 +1,2 @@ -## Relevant articles: -- [Creating New APIs and Views in JHipster](https://www.baeldung.com/jhipster-new-apis-and-views) +This is an aggregator module for JHipster 5 modules. diff --git a/jhipster-5/bookstore-monolith/README.md b/jhipster-5/bookstore-monolith/README.md index 1387b82163b5..0537f5b1a5c8 100644 --- a/jhipster-5/bookstore-monolith/README.md +++ b/jhipster-5/bookstore-monolith/README.md @@ -1,179 +1,3 @@ -# Bookstore +## Relevant articles: -This application was generated using JHipster 5.8.2, you can find documentation and help at [https://www.jhipster.tech/documentation-archive/v5.8.2](https://www.jhipster.tech/documentation-archive/v5.8.2). - -## Development - -Before you can build this project, you must install and configure the following dependencies on your machine: - -1. [Node.js][]: We use Node to run a development web server and build the project. - Depending on your system, you can install Node either from source or as a pre-packaged bundle. - -After installing Node, you should be able to run the following command to install development tools. -You will only need to run this command when dependencies change in [package.json](package.json). - - npm install - -We use npm scripts and [Webpack][] as our build system. - -Run the following commands in two separate terminals to create a blissful development experience where your browser -auto-refreshes when files change on your hard drive. - - ./mvnw - npm start - -Npm is also used to manage CSS and JavaScript dependencies used in this application. You can upgrade dependencies by -specifying a newer version in [package.json](package.json). You can also run `npm update` and `npm install` to manage dependencies. -Add the `help` flag on any command to see how you can use it. For example, `npm help update`. - -The `npm run` command will list all of the scripts available to run for this project. - -### Service workers - -Service workers are commented by default, to enable them please uncomment the following code. - -- The service worker registering script in index.html - -```html - -``` - -Note: workbox creates the respective service worker and dynamically generate the `service-worker.js` - -### Managing dependencies - -For example, to add [Leaflet][] library as a runtime dependency of your application, you would run following command: - - npm install --save --save-exact leaflet - -To benefit from TypeScript type definitions from [DefinitelyTyped][] repository in development, you would run following command: - - npm install --save-dev --save-exact @types/leaflet - -Then you would import the JS and CSS files specified in library's installation instructions so that [Webpack][] knows about them: -Edit [src/main/webapp/app/vendor.ts](src/main/webapp/app/vendor.ts) file: - -``` -import 'leaflet/dist/leaflet.js'; -``` - -Edit [src/main/webapp/content/css/vendor.css](src/main/webapp/content/css/vendor.css) file: - -``` -@import '~leaflet/dist/leaflet.css'; -``` - -Note: there are still few other things remaining to do for Leaflet that we won't detail here. - -For further instructions on how to develop with JHipster, have a look at [Using JHipster in development][]. - -### Using angular-cli - -You can also use [Angular CLI][] to generate some custom client code. - -For example, the following command: - - ng generate component my-component - -will generate few files: - - create src/main/webapp/app/my-component/my-component.component.html - create src/main/webapp/app/my-component/my-component.component.ts - update src/main/webapp/app/app.module.ts - -## Building for production - -To optimize the Bookstore application for production, run: - - ./mvnw -Pprod clean package - -This will concatenate and minify the client CSS and JavaScript files. It will also modify `index.html` so it references these new files. -To ensure everything worked, run: - - java -jar target/*.war - -Then navigate to [http://localhost:8080](http://localhost:8080) in your browser. - -Refer to [Using JHipster in production][] for more details. - -## Testing - -To launch your application's tests, run: - - ./mvnw clean test - -### Client tests - -Unit tests are run by [Jest][] and written with [Jasmine][]. They're located in [src/test/javascript/](src/test/javascript/) and can be run with: - - npm test - -For more information, refer to the [Running tests page][]. - -### Code quality - -Sonar is used to analyse code quality. You can start a local Sonar server (accessible on http://localhost:9001) with: - -``` -docker-compose -f src/main/docker/sonar.yml up -d -``` - -Then, run a Sonar analysis: - -``` -./mvnw -Pprod clean test sonar:sonar -``` - -For more information, refer to the [Code quality page][]. - -## Using Docker to simplify development (optional) - -You can use Docker to improve your JHipster development experience. A number of docker-compose configuration are available in the [src/main/docker](src/main/docker) folder to launch required third party services. - -For example, to start a mysql database in a docker container, run: - - docker-compose -f src/main/docker/mysql.yml up -d - -To stop it and remove the container, run: - - docker-compose -f src/main/docker/mysql.yml down - -You can also fully dockerize your application and all the services that it depends on. -To achieve this, first build a docker image of your app by running: - - ./mvnw package -Pprod verify jib:dockerBuild - -Then run: - - docker-compose -f src/main/docker/app.yml up -d - -For more information refer to [Using Docker and Docker-Compose][], this page also contains information on the docker-compose sub-generator (`jhipster docker-compose`), which is able to generate docker configurations for one or several JHipster applications. - -## Continuous Integration (optional) - -To configure CI for your project, run the ci-cd sub-generator (`jhipster ci-cd`), this will let you generate configuration files for a number of Continuous Integration systems. Consult the [Setting up Continuous Integration][] page for more information. - -[jhipster homepage and latest documentation]: https://www.jhipster.tech -[jhipster 5.8.2 archive]: https://www.jhipster.tech/documentation-archive/v5.8.2 -[using jhipster in development]: https://www.jhipster.tech/documentation-archive/v5.8.2/development/ -[using docker and docker-compose]: https://www.jhipster.tech/documentation-archive/v5.8.2/docker-compose -[using jhipster in production]: https://www.jhipster.tech/documentation-archive/v5.8.2/production/ -[running tests page]: https://www.jhipster.tech/documentation-archive/v5.8.2/running-tests/ -[code quality page]: https://www.jhipster.tech/documentation-archive/v5.8.2/code-quality/ -[setting up continuous integration]: https://www.jhipster.tech/documentation-archive/v5.8.2/setting-up-ci/ -[node.js]: https://nodejs.org/ -[yarn]: https://yarnpkg.org/ -[webpack]: https://webpack.github.io/ -[angular cli]: https://cli.angular.io/ -[browsersync]: http://www.browsersync.io/ -[jest]: https://facebook.github.io/jest/ -[jasmine]: http://jasmine.github.io/2.0/introduction.html -[protractor]: https://angular.github.io/protractor/ -[leaflet]: http://leafletjs.com/ -[definitelytyped]: http://definitelytyped.org/ +- [Creating New APIs and Views in JHipster](https://www.baeldung.com/jhipster-new-apis-and-views) diff --git a/spring-cloud-data-flow/README.MD b/spring-cloud-data-flow/README.MD index 9e5cef19afe7..f2ab96de2c5f 100644 --- a/spring-cloud-data-flow/README.MD +++ b/spring-cloud-data-flow/README.MD @@ -1,4 +1,2 @@ -### Relevant Articles: -- [Batch Processing with Spring Cloud Data Flow](http://www.baeldung.com/spring-cloud-data-flow-batch-processing) -- [Getting Started with Stream Processing with Spring Cloud Data Flow](http://www.baeldung.com/spring-cloud-data-flow-stream-processing) -- [Spring Cloud Data Flow With Apache Spark](https://www.baeldung.com/spring-cloud-data-flow-spark) + +This is an aggregator module for Spring Cloud Data Flow modules. diff --git a/spring-cloud-data-flow/apache-spark-job/README.MD b/spring-cloud-data-flow/apache-spark-job/README.MD new file mode 100644 index 000000000000..ac554f10bc60 --- /dev/null +++ b/spring-cloud-data-flow/apache-spark-job/README.MD @@ -0,0 +1,3 @@ +### Relevant Articles: + +- [Spring Cloud Data Flow With Apache Spark](https://www.baeldung.com/spring-cloud-data-flow-spark) diff --git a/spring-cloud-data-flow/batch-job/README.MD b/spring-cloud-data-flow/batch-job/README.MD new file mode 100644 index 000000000000..898f85dbb2d7 --- /dev/null +++ b/spring-cloud-data-flow/batch-job/README.MD @@ -0,0 +1,3 @@ +### Relevant Articles: +- [Batch Processing with Spring Cloud Data Flow](http://www.baeldung.com/spring-cloud-data-flow-batch-processing) + diff --git a/spring-cloud-data-flow/pom.xml b/spring-cloud-data-flow/pom.xml index 36a780c28df6..f3382067f9ac 100644 --- a/spring-cloud-data-flow/pom.xml +++ b/spring-cloud-data-flow/pom.xml @@ -13,13 +13,9 @@ - data-flow-server - - time-source - time-processor - log-sink + spring-cloud-data-flow-stream + spring-cloud-data-flow-etl batch-job - etl apache-spark-job diff --git a/spring-cloud-data-flow/etl/README.MD b/spring-cloud-data-flow/spring-cloud-data-flow-etl/README.MD similarity index 100% rename from spring-cloud-data-flow/etl/README.MD rename to spring-cloud-data-flow/spring-cloud-data-flow-etl/README.MD diff --git a/spring-cloud-data-flow/etl/customer-mongodb-sink/pom.xml b/spring-cloud-data-flow/spring-cloud-data-flow-etl/customer-mongodb-sink/pom.xml similarity index 100% rename from spring-cloud-data-flow/etl/customer-mongodb-sink/pom.xml rename to spring-cloud-data-flow/spring-cloud-data-flow-etl/customer-mongodb-sink/pom.xml diff --git a/spring-cloud-data-flow/etl/customer-mongodb-sink/src/main/java/com/customer/customermongodbsink/Customer.java b/spring-cloud-data-flow/spring-cloud-data-flow-etl/customer-mongodb-sink/src/main/java/com/customer/customermongodbsink/Customer.java similarity index 100% rename from spring-cloud-data-flow/etl/customer-mongodb-sink/src/main/java/com/customer/customermongodbsink/Customer.java rename to spring-cloud-data-flow/spring-cloud-data-flow-etl/customer-mongodb-sink/src/main/java/com/customer/customermongodbsink/Customer.java diff --git a/spring-cloud-data-flow/etl/customer-mongodb-sink/src/main/java/com/customer/customermongodbsink/CustomerListener.java b/spring-cloud-data-flow/spring-cloud-data-flow-etl/customer-mongodb-sink/src/main/java/com/customer/customermongodbsink/CustomerListener.java similarity index 100% rename from spring-cloud-data-flow/etl/customer-mongodb-sink/src/main/java/com/customer/customermongodbsink/CustomerListener.java rename to spring-cloud-data-flow/spring-cloud-data-flow-etl/customer-mongodb-sink/src/main/java/com/customer/customermongodbsink/CustomerListener.java diff --git a/spring-cloud-data-flow/etl/customer-mongodb-sink/src/main/java/com/customer/customermongodbsink/CustomerMongodbSinkApplication.java b/spring-cloud-data-flow/spring-cloud-data-flow-etl/customer-mongodb-sink/src/main/java/com/customer/customermongodbsink/CustomerMongodbSinkApplication.java similarity index 100% rename from spring-cloud-data-flow/etl/customer-mongodb-sink/src/main/java/com/customer/customermongodbsink/CustomerMongodbSinkApplication.java rename to spring-cloud-data-flow/spring-cloud-data-flow-etl/customer-mongodb-sink/src/main/java/com/customer/customermongodbsink/CustomerMongodbSinkApplication.java diff --git a/spring-cloud-data-flow/etl/customer-mongodb-sink/src/main/java/com/customer/customermongodbsink/CustomerRepository.java b/spring-cloud-data-flow/spring-cloud-data-flow-etl/customer-mongodb-sink/src/main/java/com/customer/customermongodbsink/CustomerRepository.java similarity index 100% rename from spring-cloud-data-flow/etl/customer-mongodb-sink/src/main/java/com/customer/customermongodbsink/CustomerRepository.java rename to spring-cloud-data-flow/spring-cloud-data-flow-etl/customer-mongodb-sink/src/main/java/com/customer/customermongodbsink/CustomerRepository.java diff --git a/spring-cloud-data-flow/etl/customer-mongodb-sink/src/main/resources/application.properties b/spring-cloud-data-flow/spring-cloud-data-flow-etl/customer-mongodb-sink/src/main/resources/application.properties similarity index 100% rename from spring-cloud-data-flow/etl/customer-mongodb-sink/src/main/resources/application.properties rename to spring-cloud-data-flow/spring-cloud-data-flow-etl/customer-mongodb-sink/src/main/resources/application.properties diff --git a/spring-cloud-data-flow/etl/customer-transform/pom.xml b/spring-cloud-data-flow/spring-cloud-data-flow-etl/customer-transform/pom.xml similarity index 100% rename from spring-cloud-data-flow/etl/customer-transform/pom.xml rename to spring-cloud-data-flow/spring-cloud-data-flow-etl/customer-transform/pom.xml diff --git a/spring-cloud-data-flow/etl/customer-transform/src/main/java/com/customer/customertransform/Customer.java b/spring-cloud-data-flow/spring-cloud-data-flow-etl/customer-transform/src/main/java/com/customer/customertransform/Customer.java similarity index 100% rename from spring-cloud-data-flow/etl/customer-transform/src/main/java/com/customer/customertransform/Customer.java rename to spring-cloud-data-flow/spring-cloud-data-flow-etl/customer-transform/src/main/java/com/customer/customertransform/Customer.java diff --git a/spring-cloud-data-flow/etl/customer-transform/src/main/java/com/customer/customertransform/CustomerProcessorConfiguration.java b/spring-cloud-data-flow/spring-cloud-data-flow-etl/customer-transform/src/main/java/com/customer/customertransform/CustomerProcessorConfiguration.java similarity index 100% rename from spring-cloud-data-flow/etl/customer-transform/src/main/java/com/customer/customertransform/CustomerProcessorConfiguration.java rename to spring-cloud-data-flow/spring-cloud-data-flow-etl/customer-transform/src/main/java/com/customer/customertransform/CustomerProcessorConfiguration.java diff --git a/spring-cloud-data-flow/etl/customer-transform/src/main/java/com/customer/customertransform/CustomerTransformApplication.java b/spring-cloud-data-flow/spring-cloud-data-flow-etl/customer-transform/src/main/java/com/customer/customertransform/CustomerTransformApplication.java similarity index 100% rename from spring-cloud-data-flow/etl/customer-transform/src/main/java/com/customer/customertransform/CustomerTransformApplication.java rename to spring-cloud-data-flow/spring-cloud-data-flow-etl/customer-transform/src/main/java/com/customer/customertransform/CustomerTransformApplication.java diff --git a/spring-cloud-data-flow/etl/customer-transform/src/main/resources/application.properties b/spring-cloud-data-flow/spring-cloud-data-flow-etl/customer-transform/src/main/resources/application.properties similarity index 100% rename from spring-cloud-data-flow/etl/customer-transform/src/main/resources/application.properties rename to spring-cloud-data-flow/spring-cloud-data-flow-etl/customer-transform/src/main/resources/application.properties diff --git a/spring-cloud-data-flow/etl/pom.xml b/spring-cloud-data-flow/spring-cloud-data-flow-etl/pom.xml similarity index 91% rename from spring-cloud-data-flow/etl/pom.xml rename to spring-cloud-data-flow/spring-cloud-data-flow-etl/pom.xml index 55b2f342895a..ab34271273b5 100644 --- a/spring-cloud-data-flow/etl/pom.xml +++ b/spring-cloud-data-flow/spring-cloud-data-flow-etl/pom.xml @@ -1,7 +1,7 @@ 4.0.0 - etl + spring-cloud-data-flow-etl 0.0.1-SNAPSHOT etl pom diff --git a/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/README.MD b/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/README.MD new file mode 100644 index 000000000000..522c43252f84 --- /dev/null +++ b/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/README.MD @@ -0,0 +1,4 @@ +### Relevant Articles: + +- [Getting Started with Stream Processing with Spring Cloud Data Flow](http://www.baeldung.com/spring-cloud-data-flow-stream-processing) + diff --git a/spring-cloud-data-flow/data-flow-server/pom.xml b/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/data-flow-server/pom.xml similarity index 100% rename from spring-cloud-data-flow/data-flow-server/pom.xml rename to spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/data-flow-server/pom.xml diff --git a/spring-cloud-data-flow/data-flow-server/src/main/java/org/baeldung/spring/cloud/DataFlowServerApplication.java b/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/data-flow-server/src/main/java/org/baeldung/spring/cloud/DataFlowServerApplication.java similarity index 100% rename from spring-cloud-data-flow/data-flow-server/src/main/java/org/baeldung/spring/cloud/DataFlowServerApplication.java rename to spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/data-flow-server/src/main/java/org/baeldung/spring/cloud/DataFlowServerApplication.java diff --git a/spring-cloud-data-flow/data-flow-server/src/main/resources/logback.xml b/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/data-flow-server/src/main/resources/logback.xml similarity index 100% rename from spring-cloud-data-flow/data-flow-server/src/main/resources/logback.xml rename to spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/data-flow-server/src/main/resources/logback.xml diff --git a/spring-cloud-data-flow/data-flow-server/src/test/java/org/baeldung/SpringContextIntegrationTest.java b/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/data-flow-server/src/test/java/org/baeldung/SpringContextIntegrationTest.java similarity index 100% rename from spring-cloud-data-flow/data-flow-server/src/test/java/org/baeldung/SpringContextIntegrationTest.java rename to spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/data-flow-server/src/test/java/org/baeldung/SpringContextIntegrationTest.java diff --git a/spring-cloud-data-flow/data-flow-server/src/test/java/org/baeldung/SpringContextTest.java b/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/data-flow-server/src/test/java/org/baeldung/SpringContextTest.java similarity index 100% rename from spring-cloud-data-flow/data-flow-server/src/test/java/org/baeldung/SpringContextTest.java rename to spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/data-flow-server/src/test/java/org/baeldung/SpringContextTest.java diff --git a/spring-cloud-data-flow/data-flow-server/src/test/java/org/baeldung/spring/cloud/DataFlowServerApplicationIntegrationTest.java b/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/data-flow-server/src/test/java/org/baeldung/spring/cloud/DataFlowServerApplicationIntegrationTest.java similarity index 100% rename from spring-cloud-data-flow/data-flow-server/src/test/java/org/baeldung/spring/cloud/DataFlowServerApplicationIntegrationTest.java rename to spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/data-flow-server/src/test/java/org/baeldung/spring/cloud/DataFlowServerApplicationIntegrationTest.java diff --git a/spring-cloud-data-flow/data-flow-shell/pom.xml b/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/data-flow-shell/pom.xml similarity index 100% rename from spring-cloud-data-flow/data-flow-shell/pom.xml rename to spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/data-flow-shell/pom.xml diff --git a/spring-cloud-data-flow/data-flow-shell/spring-shell.log b/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/data-flow-shell/spring-shell.log similarity index 100% rename from spring-cloud-data-flow/data-flow-shell/spring-shell.log rename to spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/data-flow-shell/spring-shell.log diff --git a/spring-cloud-data-flow/data-flow-shell/src/main/java/org/baeldung/spring/cloud/DataFlowShellApplication.java b/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/data-flow-shell/src/main/java/org/baeldung/spring/cloud/DataFlowShellApplication.java similarity index 100% rename from spring-cloud-data-flow/data-flow-shell/src/main/java/org/baeldung/spring/cloud/DataFlowShellApplication.java rename to spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/data-flow-shell/src/main/java/org/baeldung/spring/cloud/DataFlowShellApplication.java diff --git a/spring-cloud-data-flow/data-flow-shell/src/main/resources/logback.xml b/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/data-flow-shell/src/main/resources/logback.xml similarity index 100% rename from spring-cloud-data-flow/data-flow-shell/src/main/resources/logback.xml rename to spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/data-flow-shell/src/main/resources/logback.xml diff --git a/spring-cloud-data-flow/data-flow-shell/src/test/java/org/baeldung/SpringContextIntegrationTest.java b/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/data-flow-shell/src/test/java/org/baeldung/SpringContextIntegrationTest.java similarity index 100% rename from spring-cloud-data-flow/data-flow-shell/src/test/java/org/baeldung/SpringContextIntegrationTest.java rename to spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/data-flow-shell/src/test/java/org/baeldung/SpringContextIntegrationTest.java diff --git a/spring-cloud-data-flow/data-flow-shell/src/test/java/org/baeldung/SpringContextTest.java b/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/data-flow-shell/src/test/java/org/baeldung/SpringContextTest.java similarity index 100% rename from spring-cloud-data-flow/data-flow-shell/src/test/java/org/baeldung/SpringContextTest.java rename to spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/data-flow-shell/src/test/java/org/baeldung/SpringContextTest.java diff --git a/spring-cloud-data-flow/log-sink/pom.xml b/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/log-sink/pom.xml similarity index 100% rename from spring-cloud-data-flow/log-sink/pom.xml rename to spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/log-sink/pom.xml diff --git a/spring-cloud-data-flow/log-sink/src/main/java/org/baeldung/spring/cloud/LogSinkApplication.java b/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/log-sink/src/main/java/org/baeldung/spring/cloud/LogSinkApplication.java similarity index 100% rename from spring-cloud-data-flow/log-sink/src/main/java/org/baeldung/spring/cloud/LogSinkApplication.java rename to spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/log-sink/src/main/java/org/baeldung/spring/cloud/LogSinkApplication.java diff --git a/spring-cloud-data-flow/log-sink/src/main/resources/logback.xml b/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/log-sink/src/main/resources/logback.xml similarity index 100% rename from spring-cloud-data-flow/log-sink/src/main/resources/logback.xml rename to spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/log-sink/src/main/resources/logback.xml diff --git a/spring-cloud-data-flow/log-sink/src/test/java/org/baeldung/SpringContextIntegrationTest.java b/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/log-sink/src/test/java/org/baeldung/SpringContextIntegrationTest.java similarity index 100% rename from spring-cloud-data-flow/log-sink/src/test/java/org/baeldung/SpringContextIntegrationTest.java rename to spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/log-sink/src/test/java/org/baeldung/SpringContextIntegrationTest.java diff --git a/spring-cloud-data-flow/log-sink/src/test/java/org/baeldung/SpringContextTest.java b/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/log-sink/src/test/java/org/baeldung/SpringContextTest.java similarity index 100% rename from spring-cloud-data-flow/log-sink/src/test/java/org/baeldung/SpringContextTest.java rename to spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/log-sink/src/test/java/org/baeldung/SpringContextTest.java diff --git a/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/pom.xml b/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/pom.xml new file mode 100644 index 000000000000..e5c683039317 --- /dev/null +++ b/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/pom.xml @@ -0,0 +1,23 @@ + + 4.0.0 + spring-cloud-data-flow-stream + 0.0.1-SNAPSHOT + spring-cloud-data-flow-stream + pom + + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + + + + data-flow-server + data-flow-shell + time-source + time-processor + log-sink + + + diff --git a/spring-cloud-data-flow/time-processor/pom.xml b/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/time-processor/pom.xml similarity index 100% rename from spring-cloud-data-flow/time-processor/pom.xml rename to spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/time-processor/pom.xml diff --git a/spring-cloud-data-flow/time-processor/src/main/java/org/baeldung/spring/cloud/TimeProcessorApplication.java b/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/time-processor/src/main/java/org/baeldung/spring/cloud/TimeProcessorApplication.java similarity index 100% rename from spring-cloud-data-flow/time-processor/src/main/java/org/baeldung/spring/cloud/TimeProcessorApplication.java rename to spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/time-processor/src/main/java/org/baeldung/spring/cloud/TimeProcessorApplication.java diff --git a/spring-cloud-data-flow/time-processor/src/main/resources/logback.xml b/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/time-processor/src/main/resources/logback.xml similarity index 100% rename from spring-cloud-data-flow/time-processor/src/main/resources/logback.xml rename to spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/time-processor/src/main/resources/logback.xml diff --git a/spring-cloud-data-flow/time-processor/src/test/java/org/baeldung/SpringContextIntegrationTest.java b/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/time-processor/src/test/java/org/baeldung/SpringContextIntegrationTest.java similarity index 100% rename from spring-cloud-data-flow/time-processor/src/test/java/org/baeldung/SpringContextIntegrationTest.java rename to spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/time-processor/src/test/java/org/baeldung/SpringContextIntegrationTest.java diff --git a/spring-cloud-data-flow/time-processor/src/test/java/org/baeldung/SpringContextTest.java b/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/time-processor/src/test/java/org/baeldung/SpringContextTest.java similarity index 100% rename from spring-cloud-data-flow/time-processor/src/test/java/org/baeldung/SpringContextTest.java rename to spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/time-processor/src/test/java/org/baeldung/SpringContextTest.java diff --git a/spring-cloud-data-flow/time-source/pom.xml b/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/time-source/pom.xml similarity index 100% rename from spring-cloud-data-flow/time-source/pom.xml rename to spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/time-source/pom.xml diff --git a/spring-cloud-data-flow/time-source/src/main/java/org/baeldung/spring/cloud/TimeSourceApplication.java b/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/time-source/src/main/java/org/baeldung/spring/cloud/TimeSourceApplication.java similarity index 100% rename from spring-cloud-data-flow/time-source/src/main/java/org/baeldung/spring/cloud/TimeSourceApplication.java rename to spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/time-source/src/main/java/org/baeldung/spring/cloud/TimeSourceApplication.java diff --git a/spring-cloud-data-flow/time-source/src/main/resources/logback.xml b/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/time-source/src/main/resources/logback.xml similarity index 100% rename from spring-cloud-data-flow/time-source/src/main/resources/logback.xml rename to spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/time-source/src/main/resources/logback.xml diff --git a/spring-cloud-data-flow/time-source/src/test/java/org/baeldung/SpringContextIntegrationTest.java b/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/time-source/src/test/java/org/baeldung/SpringContextIntegrationTest.java similarity index 100% rename from spring-cloud-data-flow/time-source/src/test/java/org/baeldung/SpringContextIntegrationTest.java rename to spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/time-source/src/test/java/org/baeldung/SpringContextIntegrationTest.java diff --git a/spring-cloud-data-flow/time-source/src/test/java/org/baeldung/SpringContextTest.java b/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/time-source/src/test/java/org/baeldung/SpringContextTest.java similarity index 100% rename from spring-cloud-data-flow/time-source/src/test/java/org/baeldung/SpringContextTest.java rename to spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/time-source/src/test/java/org/baeldung/SpringContextTest.java diff --git a/testing-modules/README.md b/testing-modules/README.md index b269f547ecb2..d534e5cea6d6 100644 --- a/testing-modules/README.md +++ b/testing-modules/README.md @@ -1,15 +1,5 @@ ## Testing Modules -### Relevant Articles: +This is a aggregator module containing several modules focused on testing libraries. -- [Quick Guide to BDDMockito](http://www.baeldung.com/bdd-mockito) -- [AssertJ Exception Assertions](http://www.baeldung.com/assertj-exception-assertion) -- [Using Hamcrest Number Matchers](http://www.baeldung.com/hamcrest-number-matchers) -- [Assertions in JUnit 4 and JUnit 5](http://www.baeldung.com/junit-assertions) -- [REST-assured with Groovy](http://www.baeldung.com/rest-assured-groovy) -- [Hamcrest Bean Matchers](http://www.baeldung.com/hamcrest-bean-matchers) -- [Hamcrest Object Matchers](http://www.baeldung.com/hamcrest-object-matchers) -- [Headers, Cookies and Parameters with REST-assured](http://www.baeldung.com/rest-assured-header-cookie-parameter) -- [JSON Schema Validation with REST-assured](http://www.baeldung.com/rest-assured-json-schema) -- [Testing Callbacks with Mockito](http://www.baeldung.com/mockito-callbacks) diff --git a/testing-modules/junit-5/README.md b/testing-modules/junit-5/README.md index d543b9b09bee..14e018a5f958 100644 --- a/testing-modules/junit-5/README.md +++ b/testing-modules/junit-5/README.md @@ -11,3 +11,4 @@ - [A Quick JUnit vs TestNG Comparison](http://www.baeldung.com/junit-vs-testng) - [Guide to JUnit 5 Parameterized Tests](https://www.baeldung.com/parameterized-tests-junit-5) - [JUnit 5 Conditional Test Execution with Annotations](https://www.baeldung.com/junit-5-conditional-test-execution) +- [Assertions in JUnit 4 and JUnit 5](http://www.baeldung.com/junit-assertions) diff --git a/testing-modules/mockito/README.md b/testing-modules/mockito/README.md index 59954784f936..8fe57016e320 100644 --- a/testing-modules/mockito/README.md +++ b/testing-modules/mockito/README.md @@ -18,3 +18,7 @@ - [Hamcrest Common Core Matchers](http://www.baeldung.com/hamcrest-core-matchers) - [Testing Callbacks with Mockito](http://www.baeldung.com/mockito-callbacks) - [Using Hamcrest Number Matchers](https://www.baeldung.com/hamcrest-number-matchers) +- [Quick Guide to BDDMockito](http://www.baeldung.com/bdd-mockito) +- [Hamcrest Bean Matchers](http://www.baeldung.com/hamcrest-bean-matchers) +- [Hamcrest Object Matchers](http://www.baeldung.com/hamcrest-object-matchers) +- [Testing Callbacks with Mockito](http://www.baeldung.com/mockito-callbacks) diff --git a/testing-modules/rest-assured/README.md b/testing-modules/rest-assured/README.md index ec108353a01a..0012a63012d2 100644 --- a/testing-modules/rest-assured/README.md +++ b/testing-modules/rest-assured/README.md @@ -3,3 +3,7 @@ - [REST-assured Support for Spring MockMvc](https://www.baeldung.com/spring-mock-mvc-rest-assured) - [Getting and Verifying Response Data with REST-assured](https://www.baeldung.com/rest-assured-response) - [REST Assured Authentication](https://www.baeldung.com/rest-assured-authentication) +- [REST-assured with Groovy](http://www.baeldung.com/rest-assured-groovy) +- [Headers, Cookies and Parameters with REST-assured](http://www.baeldung.com/rest-assured-header-cookie-parameter) +- [JSON Schema Validation with REST-assured](http://www.baeldung.com/rest-assured-json-schema) + diff --git a/testing-modules/testing/README.md b/testing-modules/testing/README.md index 4a7829e8671f..135ef1054acd 100644 --- a/testing-modules/testing/README.md +++ b/testing-modules/testing/README.md @@ -21,3 +21,4 @@ - [Using Conditions with AssertJ Assertions](http://www.baeldung.com/assertj-conditions) - [A Guide to JavaFaker](https://www.baeldung.com/java-faker) - [Running JUnit Tests Programmatically, from a Java Application](https://www.baeldung.com/junit-tests-run-programmatically-from-java) +- [AssertJ Exception Assertions](http://www.baeldung.com/assertj-exception-assertion) From 2a4adf293579f3d8a9b13e18a6a95cda69c75fb7 Mon Sep 17 00:00:00 2001 From: glopez Date: Sun, 4 Aug 2019 21:39:46 -0300 Subject: [PATCH 72/99] BAEL-2804 JPA Query Parameters Usage - formatting issues fixed I fixed some formatting issues as requested since the eclipse formatter does not support 4 spaces for blocks a 2 for continuations hence it has to be resolved manually. Additionally I've applied formatting to the logback.xml file. --- .../java-jpa-2/src/main/resources/logback.xml | 19 ++++++++++--------- .../queryparams/JPAQueryParamsUnitTest.java | 14 +++++++------- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/persistence-modules/java-jpa-2/src/main/resources/logback.xml b/persistence-modules/java-jpa-2/src/main/resources/logback.xml index 7d900d8ea884..e0098e7c7e95 100644 --- a/persistence-modules/java-jpa-2/src/main/resources/logback.xml +++ b/persistence-modules/java-jpa-2/src/main/resources/logback.xml @@ -1,13 +1,14 @@ - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n + + + - - - + + + \ No newline at end of file diff --git a/persistence-modules/java-jpa-2/src/test/java/com/baeldung/jpa/queryparams/JPAQueryParamsUnitTest.java b/persistence-modules/java-jpa-2/src/test/java/com/baeldung/jpa/queryparams/JPAQueryParamsUnitTest.java index 4f320935cf62..55ee0e6e59cf 100644 --- a/persistence-modules/java-jpa-2/src/test/java/com/baeldung/jpa/queryparams/JPAQueryParamsUnitTest.java +++ b/persistence-modules/java-jpa-2/src/test/java/com/baeldung/jpa/queryparams/JPAQueryParamsUnitTest.java @@ -36,7 +36,7 @@ public void givenEmpNumber_whenUsingPositionalParameter_thenReturnExpectedEmploy TypedQuery query = entityManager.createQuery("SELECT e FROM Employee e WHERE e.empNumber = ?1", Employee.class); String empNumber = "A123"; Employee employee = query.setParameter(1, empNumber) - .getSingleResult(); + .getSingleResult(); Assert.assertNotNull("Employee not found", employee); } @@ -45,7 +45,7 @@ public void givenEmpNumberList_whenUsingPositionalParameter_thenReturnExpectedEm TypedQuery query = entityManager.createQuery("SELECT e FROM Employee e WHERE e.empNumber IN (?1)", Employee.class); List empNumbers = Arrays.asList("A123", "A124"); List employees = query.setParameter(1, empNumbers) - .getResultList(); + .getResultList(); Assert.assertNotNull("Employees not found", employees); Assert.assertFalse("Employees not found", employees.isEmpty()); } @@ -55,7 +55,7 @@ public void givenEmpNumber_whenUsingNamedParameter_thenReturnExpectedEmployee() TypedQuery query = entityManager.createQuery("SELECT e FROM Employee e WHERE e.empNumber = :number", Employee.class); String empNumber = "A123"; Employee employee = query.setParameter("number", empNumber) - .getSingleResult(); + .getSingleResult(); Assert.assertNotNull("Employee not found", employee); } @@ -64,7 +64,7 @@ public void givenEmpNumberList_whenUsingNamedParameter_thenReturnExpectedEmploye TypedQuery query = entityManager.createQuery("SELECT e FROM Employee e WHERE e.empNumber IN (:numbers)", Employee.class); List empNumbers = Arrays.asList("A123", "A124"); List employees = query.setParameter("numbers", empNumbers) - .getResultList(); + .getResultList(); Assert.assertNotNull("Employees not found", employees); Assert.assertFalse("Employees not found", employees.isEmpty()); } @@ -75,8 +75,8 @@ public void givenEmpNameAndEmpAge_whenUsingTwoNamedParameters_thenReturnExpected String empName = "John Doe"; int empAge = 55; List employees = query.setParameter("name", empName) - .setParameter("empAge", empAge) - .getResultList(); + .setParameter("empAge", empAge) + .getResultList(); Assert.assertNotNull("Employees not found!", employees); Assert.assertTrue("Employees not found!", !employees.isEmpty()); } @@ -89,7 +89,7 @@ public void givenEmpNumber_whenUsingCriteriaQuery_thenReturnExpectedEmployee() { Root c = cQuery.from(Employee.class); ParameterExpression paramEmpNumber = cb.parameter(String.class); cQuery.select(c) - .where(cb.equal(c.get(Employee_.empNumber), paramEmpNumber)); + .where(cb.equal(c.get(Employee_.empNumber), paramEmpNumber)); TypedQuery query = entityManager.createQuery(cQuery); String empNumber = "A123"; From f767e462f5f88d1f50edd181dfdf8b68a1ee801f Mon Sep 17 00:00:00 2001 From: vatsalgosar Date: Mon, 5 Aug 2019 11:24:57 +0530 Subject: [PATCH 73/99] BAEL-3184 (#7505) - Moved operator related modules from core-java-lang-syntax to core-java-lang-operators --- .../java/com/baeldung/keyword/Circle.java | 0 .../main/java/com/baeldung/keyword/Ring.java | 0 .../main/java/com/baeldung/keyword/Round.java | 0 .../main/java/com/baeldung/keyword/Shape.java | 0 .../java/com/baeldung/keyword/Triangle.java | 0 .../java/com/baeldung/java/diamond/Car.java | 0 .../java/diamond/DiamondOperatorUnitTest.java | 0 .../com/baeldung/java/diamond/Diesel.java | 0 .../com/baeldung/java/diamond/Engine.java | 0 .../com/baeldung/java/diamond/Vehicle.java | 0 .../java/doublebrace/DoubleBraceUnitTest.java | 0 .../keyword/test/InstanceOfUnitTest.java | 0 .../com/baeldung/modulo/ModuloUnitTest.java | 0 .../TernaryOperatorUnitTest.java | 0 ...crementDecrementUnaryOperatorUnitTest.java | 63 ------------------- 15 files changed, 63 deletions(-) rename core-java-modules/{core-java-lang-syntax => core-java-lang-operators}/src/main/java/com/baeldung/keyword/Circle.java (100%) rename core-java-modules/{core-java-lang-syntax => core-java-lang-operators}/src/main/java/com/baeldung/keyword/Ring.java (100%) rename core-java-modules/{core-java-lang-syntax => core-java-lang-operators}/src/main/java/com/baeldung/keyword/Round.java (100%) rename core-java-modules/{core-java-lang-syntax => core-java-lang-operators}/src/main/java/com/baeldung/keyword/Shape.java (100%) rename core-java-modules/{core-java-lang-syntax => core-java-lang-operators}/src/main/java/com/baeldung/keyword/Triangle.java (100%) rename core-java-modules/{core-java-lang-syntax => core-java-lang-operators}/src/test/java/com/baeldung/java/diamond/Car.java (100%) rename core-java-modules/{core-java-lang-syntax => core-java-lang-operators}/src/test/java/com/baeldung/java/diamond/DiamondOperatorUnitTest.java (100%) rename core-java-modules/{core-java-lang-syntax => core-java-lang-operators}/src/test/java/com/baeldung/java/diamond/Diesel.java (100%) rename core-java-modules/{core-java-lang-syntax => core-java-lang-operators}/src/test/java/com/baeldung/java/diamond/Engine.java (100%) rename core-java-modules/{core-java-lang-syntax => core-java-lang-operators}/src/test/java/com/baeldung/java/diamond/Vehicle.java (100%) rename core-java-modules/{core-java-lang-syntax => core-java-lang-operators}/src/test/java/com/baeldung/java/doublebrace/DoubleBraceUnitTest.java (100%) rename core-java-modules/{core-java-lang-syntax => core-java-lang-operators}/src/test/java/com/baeldung/keyword/test/InstanceOfUnitTest.java (100%) rename core-java-modules/{core-java-lang-syntax => core-java-lang-operators}/src/test/java/com/baeldung/modulo/ModuloUnitTest.java (100%) rename core-java-modules/{core-java-lang-syntax => core-java-lang-operators}/src/test/java/com/baeldung/ternaryoperator/TernaryOperatorUnitTest.java (100%) delete mode 100644 core-java-modules/core-java-lang-syntax/src/test/java/com/baeldung/incrementdecrementunaryoperator/IncrementDecrementUnaryOperatorUnitTest.java diff --git a/core-java-modules/core-java-lang-syntax/src/main/java/com/baeldung/keyword/Circle.java b/core-java-modules/core-java-lang-operators/src/main/java/com/baeldung/keyword/Circle.java similarity index 100% rename from core-java-modules/core-java-lang-syntax/src/main/java/com/baeldung/keyword/Circle.java rename to core-java-modules/core-java-lang-operators/src/main/java/com/baeldung/keyword/Circle.java diff --git a/core-java-modules/core-java-lang-syntax/src/main/java/com/baeldung/keyword/Ring.java b/core-java-modules/core-java-lang-operators/src/main/java/com/baeldung/keyword/Ring.java similarity index 100% rename from core-java-modules/core-java-lang-syntax/src/main/java/com/baeldung/keyword/Ring.java rename to core-java-modules/core-java-lang-operators/src/main/java/com/baeldung/keyword/Ring.java diff --git a/core-java-modules/core-java-lang-syntax/src/main/java/com/baeldung/keyword/Round.java b/core-java-modules/core-java-lang-operators/src/main/java/com/baeldung/keyword/Round.java similarity index 100% rename from core-java-modules/core-java-lang-syntax/src/main/java/com/baeldung/keyword/Round.java rename to core-java-modules/core-java-lang-operators/src/main/java/com/baeldung/keyword/Round.java diff --git a/core-java-modules/core-java-lang-syntax/src/main/java/com/baeldung/keyword/Shape.java b/core-java-modules/core-java-lang-operators/src/main/java/com/baeldung/keyword/Shape.java similarity index 100% rename from core-java-modules/core-java-lang-syntax/src/main/java/com/baeldung/keyword/Shape.java rename to core-java-modules/core-java-lang-operators/src/main/java/com/baeldung/keyword/Shape.java diff --git a/core-java-modules/core-java-lang-syntax/src/main/java/com/baeldung/keyword/Triangle.java b/core-java-modules/core-java-lang-operators/src/main/java/com/baeldung/keyword/Triangle.java similarity index 100% rename from core-java-modules/core-java-lang-syntax/src/main/java/com/baeldung/keyword/Triangle.java rename to core-java-modules/core-java-lang-operators/src/main/java/com/baeldung/keyword/Triangle.java diff --git a/core-java-modules/core-java-lang-syntax/src/test/java/com/baeldung/java/diamond/Car.java b/core-java-modules/core-java-lang-operators/src/test/java/com/baeldung/java/diamond/Car.java similarity index 100% rename from core-java-modules/core-java-lang-syntax/src/test/java/com/baeldung/java/diamond/Car.java rename to core-java-modules/core-java-lang-operators/src/test/java/com/baeldung/java/diamond/Car.java diff --git a/core-java-modules/core-java-lang-syntax/src/test/java/com/baeldung/java/diamond/DiamondOperatorUnitTest.java b/core-java-modules/core-java-lang-operators/src/test/java/com/baeldung/java/diamond/DiamondOperatorUnitTest.java similarity index 100% rename from core-java-modules/core-java-lang-syntax/src/test/java/com/baeldung/java/diamond/DiamondOperatorUnitTest.java rename to core-java-modules/core-java-lang-operators/src/test/java/com/baeldung/java/diamond/DiamondOperatorUnitTest.java diff --git a/core-java-modules/core-java-lang-syntax/src/test/java/com/baeldung/java/diamond/Diesel.java b/core-java-modules/core-java-lang-operators/src/test/java/com/baeldung/java/diamond/Diesel.java similarity index 100% rename from core-java-modules/core-java-lang-syntax/src/test/java/com/baeldung/java/diamond/Diesel.java rename to core-java-modules/core-java-lang-operators/src/test/java/com/baeldung/java/diamond/Diesel.java diff --git a/core-java-modules/core-java-lang-syntax/src/test/java/com/baeldung/java/diamond/Engine.java b/core-java-modules/core-java-lang-operators/src/test/java/com/baeldung/java/diamond/Engine.java similarity index 100% rename from core-java-modules/core-java-lang-syntax/src/test/java/com/baeldung/java/diamond/Engine.java rename to core-java-modules/core-java-lang-operators/src/test/java/com/baeldung/java/diamond/Engine.java diff --git a/core-java-modules/core-java-lang-syntax/src/test/java/com/baeldung/java/diamond/Vehicle.java b/core-java-modules/core-java-lang-operators/src/test/java/com/baeldung/java/diamond/Vehicle.java similarity index 100% rename from core-java-modules/core-java-lang-syntax/src/test/java/com/baeldung/java/diamond/Vehicle.java rename to core-java-modules/core-java-lang-operators/src/test/java/com/baeldung/java/diamond/Vehicle.java diff --git a/core-java-modules/core-java-lang-syntax/src/test/java/com/baeldung/java/doublebrace/DoubleBraceUnitTest.java b/core-java-modules/core-java-lang-operators/src/test/java/com/baeldung/java/doublebrace/DoubleBraceUnitTest.java similarity index 100% rename from core-java-modules/core-java-lang-syntax/src/test/java/com/baeldung/java/doublebrace/DoubleBraceUnitTest.java rename to core-java-modules/core-java-lang-operators/src/test/java/com/baeldung/java/doublebrace/DoubleBraceUnitTest.java diff --git a/core-java-modules/core-java-lang-syntax/src/test/java/com/baeldung/keyword/test/InstanceOfUnitTest.java b/core-java-modules/core-java-lang-operators/src/test/java/com/baeldung/keyword/test/InstanceOfUnitTest.java similarity index 100% rename from core-java-modules/core-java-lang-syntax/src/test/java/com/baeldung/keyword/test/InstanceOfUnitTest.java rename to core-java-modules/core-java-lang-operators/src/test/java/com/baeldung/keyword/test/InstanceOfUnitTest.java diff --git a/core-java-modules/core-java-lang-syntax/src/test/java/com/baeldung/modulo/ModuloUnitTest.java b/core-java-modules/core-java-lang-operators/src/test/java/com/baeldung/modulo/ModuloUnitTest.java similarity index 100% rename from core-java-modules/core-java-lang-syntax/src/test/java/com/baeldung/modulo/ModuloUnitTest.java rename to core-java-modules/core-java-lang-operators/src/test/java/com/baeldung/modulo/ModuloUnitTest.java diff --git a/core-java-modules/core-java-lang-syntax/src/test/java/com/baeldung/ternaryoperator/TernaryOperatorUnitTest.java b/core-java-modules/core-java-lang-operators/src/test/java/com/baeldung/ternaryoperator/TernaryOperatorUnitTest.java similarity index 100% rename from core-java-modules/core-java-lang-syntax/src/test/java/com/baeldung/ternaryoperator/TernaryOperatorUnitTest.java rename to core-java-modules/core-java-lang-operators/src/test/java/com/baeldung/ternaryoperator/TernaryOperatorUnitTest.java diff --git a/core-java-modules/core-java-lang-syntax/src/test/java/com/baeldung/incrementdecrementunaryoperator/IncrementDecrementUnaryOperatorUnitTest.java b/core-java-modules/core-java-lang-syntax/src/test/java/com/baeldung/incrementdecrementunaryoperator/IncrementDecrementUnaryOperatorUnitTest.java deleted file mode 100644 index ee17c1e8ea88..000000000000 --- a/core-java-modules/core-java-lang-syntax/src/test/java/com/baeldung/incrementdecrementunaryoperator/IncrementDecrementUnaryOperatorUnitTest.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.baeldung.incrementdecrementunaryoperator; - -import static org.assertj.core.api.Assertions.assertThat; -import org.junit.Test; - -public class IncrementDecrementUnaryOperatorUnitTest { - - @Test - public void givenAnOperand_whenUsingPreIncrementUnaryOperator_thenOperandIsIncrementedByOne() { - int operand = 1; - ++operand; - assertThat(operand).isEqualTo(2); - } - - @Test - public void givenANumber_whenUsingPreIncrementUnaryOperatorInEvaluation_thenNumberIsIncrementedByOne() { - int operand = 1; - int number = ++operand; - assertThat(number).isEqualTo(2); - } - - @Test - public void givenAnOperand_whenUsingPreDecrementUnaryOperator_thenOperandIsDecrementedByOne() { - int operand = 1; - --operand; - assertThat(operand).isEqualTo(0); - } - - @Test - public void givenANumber_whenUsingPreDecrementUnaryOperatorInEvaluation_thenNumberIsDecrementedByOne() { - int operand = 1; - int number = --operand; - assertThat(number).isEqualTo(0); - } - - @Test - public void givenAnOperand_whenUsingPostIncrementUnaryOperator_thenOperandIsIncrementedByOne() { - int operand = 1; - operand++; - assertThat(operand).isEqualTo(2); - } - - @Test - public void givenANumber_whenUsingPostIncrementUnaryOperatorInEvaluation_thenNumberIsSameAsOldValue() { - int operand = 1; - int number = operand++; - assertThat(number).isEqualTo(1); - } - - @Test - public void givenAnOperand_whenUsingPostDecrementUnaryOperator_thenOperandIsDecrementedByOne() { - int operand = 1; - operand--; - assertThat(operand).isEqualTo(0); - } - - @Test - public void givenANumber_whenUsingPostDecrementUnaryOperatorInEvaluation_thenNumberIsSameAsOldValue() { - int operand = 1; - int number = operand--; - assertThat(number).isEqualTo(1); - } -} From c366657efab882eeb24e7a6823a3ad40172d3b77 Mon Sep 17 00:00:00 2001 From: fejera Date: Mon, 5 Aug 2019 11:34:56 +0200 Subject: [PATCH 74/99] BAEL-16622 - updating intellij formatting rules --- intelliJ/intelliJ-formatter.xml | 29 ++++++++++++----------------- 1 file changed, 12 insertions(+), 17 deletions(-) diff --git a/intelliJ/intelliJ-formatter.xml b/intelliJ/intelliJ-formatter.xml index 6dd1ae67f3a4..9b1d12a3bea2 100644 --- a/intelliJ/intelliJ-formatter.xml +++ b/intelliJ/intelliJ-formatter.xml @@ -1,19 +1,15 @@ - + \ No newline at end of file From 4dbeacad35ae759259271888d80c4a8e6a445703 Mon Sep 17 00:00:00 2001 From: Sjmillington Date: Mon, 5 Aug 2019 16:50:34 +0100 Subject: [PATCH 75/99] [BAEL-16003] renamed artifactId. Removed specified articles from libraries module. Added smooks + google sheets resources into libraries-data-2. Tidied up libraries pom, removing unused dependencies. --- libraries-data-2/pom.xml | 4 +- .../com/baeldung/docx/Docx4jExample.java | 0 .../com/baeldung/flink/FlinkDataPipeline.java | 0 .../com/baeldung/flink/LineSplitter.java | 0 .../com/baeldung/flink/WordCount.java | 0 .../baeldung/flink/connector/Consumers.java | 0 .../baeldung/flink/connector/Producers.java | 0 .../com/baeldung/flink/model/Backup.java | 0 .../baeldung/flink/model/InputMessage.java | 0 .../flink/operator/BackupAggregator.java | 0 .../InputMessageTimestampAssigner.java | 0 .../flink/operator/WordsCapitalizer.java | 0 .../schema/BackupSerializationSchema.java | 0 .../InputMessageDeserializationSchema.java | 0 .../google/sheets/GoogleAuthorizeUtil.java | 0 .../google/sheets/SheetsServiceUtil.java | 0 .../infinispan/CacheConfiguration.java | 0 .../infinispan/listener/CacheListener.java | 0 .../repository/HelloWorldRepository.java | 0 .../infinispan/service/HelloWorldService.java | 0 .../service/TransactionalService.java | 0 .../com/baeldung/measurement/WaterTank.java | 0 .../com/baeldung/opencsv/Application.java | 0 .../com/baeldung/opencsv/Constants.java | 0 .../com/baeldung/opencsv/beans/CsvBean.java | 0 .../opencsv/beans/NamedColumnBean.java | 0 .../opencsv/beans/SimplePositionBean.java | 0 .../opencsv/beans/WriteExampleBean.java | 0 .../opencsv/examples/sync/BeanExamples.java | 0 .../examples/sync/CsvReaderExamples.java | 0 .../examples/sync/CsvWriterExamples.java | 0 .../com/baeldung/opencsv/helpers/Helpers.java | 0 .../baeldung/opencsv/pojos/CsvTransfer.java | 0 .../smooks/converter/OrderConverter.java | 0 .../smooks/converter/OrderValidator.java | 0 .../com/baeldung/smooks/model/Item.java | 0 .../com/baeldung/smooks/model/Order.java | 0 .../com/baeldung/smooks/model/Status.java | 0 .../com/baeldung/smooks/model/Supplier.java | 0 .../google-sheets-client-secret.json | 0 .../src/main/resources/smooks/email.ftl | 0 .../src/main/resources/smooks/item-rules.csv | 0 .../src/main/resources/smooks/order.ftl | 0 .../src/main/resources/smooks/order.json | 0 .../src/main/resources/smooks/order.xml | 0 .../main/resources/smooks/smooks-mapping.xml | 0 .../resources/smooks/smooks-transform-edi.xml | 0 .../smooks/smooks-transform-email.xml | 0 .../resources/smooks/smooks-validation.xml | 0 .../main/resources/smooks/supplier.properties | 0 .../com/baeldung/flink/FlinkDataPipeline.java | 82 --------- .../java/com/baeldung/flink/LineSplitter.java | 18 -- .../java/com/baeldung/flink/WordCount.java | 18 -- .../baeldung/flink/connector/Consumers.java | 32 ---- .../baeldung/flink/connector/Producers.java | 17 -- .../java/com/baeldung/flink/model/Backup.java | 27 --- .../baeldung/flink/model/InputMessage.java | 71 -------- .../flink/operator/BackupAggregator.java | 34 ---- .../InputMessageTimestampAssigner.java | 23 --- .../flink/operator/WordsCapitalizer.java | 11 -- .../schema/BackupSerializationSchema.java | 33 ---- .../InputMessageDeserializationSchema.java | 32 ---- .../flink/BackupCreatorIntegrationTest.java | 104 ----------- .../flink/WordCapitalizerIntegrationTest.java | 34 ---- .../flink/WordCountIntegrationTest.java | 161 ------------------ libraries/pom.xml | 55 ------ .../google/sheets/GoogleAuthorizeUtil.java | 34 ---- .../google/sheets/SheetsServiceUtil.java | 20 --- .../infinispan/CacheConfiguration.java | 70 -------- .../infinispan/listener/CacheListener.java | 53 ------ .../repository/HelloWorldRepository.java | 15 -- .../infinispan/service/HelloWorldService.java | 77 --------- .../service/TransactionalService.java | 55 ------ .../com/baeldung/measurement/WaterTank.java | 26 --- .../com/baeldung/opencsv/Application.java | 108 ------------ .../java/com/baeldung/opencsv/Constants.java | 17 -- .../com/baeldung/opencsv/beans/CsvBean.java | 3 - .../opencsv/beans/NamedColumnBean.java | 31 ---- .../opencsv/beans/SimplePositionBean.java | 29 ---- .../opencsv/beans/WriteExampleBean.java | 40 ----- .../opencsv/examples/sync/BeanExamples.java | 63 ------- .../examples/sync/CsvReaderExamples.java | 63 ------- .../examples/sync/CsvWriterExamples.java | 35 ---- .../com/baeldung/opencsv/helpers/Helpers.java | 108 ------------ .../baeldung/opencsv/pojos/CsvTransfer.java | 38 ----- .../smooks/converter/OrderConverter.java | 44 ----- .../smooks/converter/OrderValidator.java | 27 --- .../java/com/baeldung/smooks/model/Item.java | 70 -------- .../java/com/baeldung/smooks/model/Order.java | 52 ------ .../com/baeldung/smooks/model/Status.java | 5 - .../com/baeldung/smooks/model/Supplier.java | 52 ------ .../java/com/baeldung/crdt/CRDTUnitTest.java | 149 ---------------- .../google/sheets/GoogleSheetsLiveTest.java | 96 ----------- .../hll/HLLLongRunningManualTest.java | 59 ------- .../infinispan/AbstractIntegrationTest.java | 57 ------- .../HelloWorldServiceTemporaryLiveTest.java | 51 ------ .../TransactionalServiceIntegrationTest.java | 21 --- .../measurement/WaterTankUnitTest.java | 86 ---------- .../opencsv/OpenCsvIntegrationTest.java | 66 ------- .../converter/SmooksIntegrationTest.java | 60 ------- 100 files changed, 2 insertions(+), 2534 deletions(-) rename libraries-data-2/src/main/{ => java}/com/baeldung/docx/Docx4jExample.java (100%) rename libraries-data-2/src/main/{ => java}/com/baeldung/flink/FlinkDataPipeline.java (100%) rename libraries-data-2/src/main/{ => java}/com/baeldung/flink/LineSplitter.java (100%) rename libraries-data-2/src/main/{ => java}/com/baeldung/flink/WordCount.java (100%) rename libraries-data-2/src/main/{ => java}/com/baeldung/flink/connector/Consumers.java (100%) rename libraries-data-2/src/main/{ => java}/com/baeldung/flink/connector/Producers.java (100%) rename libraries-data-2/src/main/{ => java}/com/baeldung/flink/model/Backup.java (100%) rename libraries-data-2/src/main/{ => java}/com/baeldung/flink/model/InputMessage.java (100%) rename libraries-data-2/src/main/{ => java}/com/baeldung/flink/operator/BackupAggregator.java (100%) rename libraries-data-2/src/main/{ => java}/com/baeldung/flink/operator/InputMessageTimestampAssigner.java (100%) rename libraries-data-2/src/main/{ => java}/com/baeldung/flink/operator/WordsCapitalizer.java (100%) rename libraries-data-2/src/main/{ => java}/com/baeldung/flink/schema/BackupSerializationSchema.java (100%) rename libraries-data-2/src/main/{ => java}/com/baeldung/flink/schema/InputMessageDeserializationSchema.java (100%) rename libraries-data-2/src/main/{ => java}/com/baeldung/google/sheets/GoogleAuthorizeUtil.java (100%) rename libraries-data-2/src/main/{ => java}/com/baeldung/google/sheets/SheetsServiceUtil.java (100%) rename libraries-data-2/src/main/{ => java}/com/baeldung/infinispan/CacheConfiguration.java (100%) rename libraries-data-2/src/main/{ => java}/com/baeldung/infinispan/listener/CacheListener.java (100%) rename libraries-data-2/src/main/{ => java}/com/baeldung/infinispan/repository/HelloWorldRepository.java (100%) rename libraries-data-2/src/main/{ => java}/com/baeldung/infinispan/service/HelloWorldService.java (100%) rename libraries-data-2/src/main/{ => java}/com/baeldung/infinispan/service/TransactionalService.java (100%) rename libraries-data-2/src/main/{ => java}/com/baeldung/measurement/WaterTank.java (100%) rename libraries-data-2/src/main/{ => java}/com/baeldung/opencsv/Application.java (100%) rename libraries-data-2/src/main/{ => java}/com/baeldung/opencsv/Constants.java (100%) rename libraries-data-2/src/main/{ => java}/com/baeldung/opencsv/beans/CsvBean.java (100%) rename libraries-data-2/src/main/{ => java}/com/baeldung/opencsv/beans/NamedColumnBean.java (100%) rename libraries-data-2/src/main/{ => java}/com/baeldung/opencsv/beans/SimplePositionBean.java (100%) rename libraries-data-2/src/main/{ => java}/com/baeldung/opencsv/beans/WriteExampleBean.java (100%) rename libraries-data-2/src/main/{ => java}/com/baeldung/opencsv/examples/sync/BeanExamples.java (100%) rename libraries-data-2/src/main/{ => java}/com/baeldung/opencsv/examples/sync/CsvReaderExamples.java (100%) rename libraries-data-2/src/main/{ => java}/com/baeldung/opencsv/examples/sync/CsvWriterExamples.java (100%) rename libraries-data-2/src/main/{ => java}/com/baeldung/opencsv/helpers/Helpers.java (100%) rename libraries-data-2/src/main/{ => java}/com/baeldung/opencsv/pojos/CsvTransfer.java (100%) rename libraries-data-2/src/main/{ => java}/com/baeldung/smooks/converter/OrderConverter.java (100%) rename libraries-data-2/src/main/{ => java}/com/baeldung/smooks/converter/OrderValidator.java (100%) rename libraries-data-2/src/main/{ => java}/com/baeldung/smooks/model/Item.java (100%) rename libraries-data-2/src/main/{ => java}/com/baeldung/smooks/model/Order.java (100%) rename libraries-data-2/src/main/{ => java}/com/baeldung/smooks/model/Status.java (100%) rename libraries-data-2/src/main/{ => java}/com/baeldung/smooks/model/Supplier.java (100%) rename {libraries => libraries-data-2}/src/main/resources/google-sheets-client-secret.json (100%) rename {libraries => libraries-data-2}/src/main/resources/smooks/email.ftl (100%) rename {libraries => libraries-data-2}/src/main/resources/smooks/item-rules.csv (100%) rename {libraries => libraries-data-2}/src/main/resources/smooks/order.ftl (100%) rename {libraries => libraries-data-2}/src/main/resources/smooks/order.json (100%) rename {libraries => libraries-data-2}/src/main/resources/smooks/order.xml (100%) rename {libraries => libraries-data-2}/src/main/resources/smooks/smooks-mapping.xml (100%) rename {libraries => libraries-data-2}/src/main/resources/smooks/smooks-transform-edi.xml (100%) rename {libraries => libraries-data-2}/src/main/resources/smooks/smooks-transform-email.xml (100%) rename {libraries => libraries-data-2}/src/main/resources/smooks/smooks-validation.xml (100%) rename {libraries => libraries-data-2}/src/main/resources/smooks/supplier.properties (100%) delete mode 100644 libraries-data/src/main/java/com/baeldung/flink/FlinkDataPipeline.java delete mode 100644 libraries-data/src/main/java/com/baeldung/flink/LineSplitter.java delete mode 100644 libraries-data/src/main/java/com/baeldung/flink/WordCount.java delete mode 100644 libraries-data/src/main/java/com/baeldung/flink/connector/Consumers.java delete mode 100644 libraries-data/src/main/java/com/baeldung/flink/connector/Producers.java delete mode 100644 libraries-data/src/main/java/com/baeldung/flink/model/Backup.java delete mode 100644 libraries-data/src/main/java/com/baeldung/flink/model/InputMessage.java delete mode 100644 libraries-data/src/main/java/com/baeldung/flink/operator/BackupAggregator.java delete mode 100644 libraries-data/src/main/java/com/baeldung/flink/operator/InputMessageTimestampAssigner.java delete mode 100644 libraries-data/src/main/java/com/baeldung/flink/operator/WordsCapitalizer.java delete mode 100644 libraries-data/src/main/java/com/baeldung/flink/schema/BackupSerializationSchema.java delete mode 100644 libraries-data/src/main/java/com/baeldung/flink/schema/InputMessageDeserializationSchema.java delete mode 100644 libraries-data/src/test/java/com/baeldung/flink/BackupCreatorIntegrationTest.java delete mode 100644 libraries-data/src/test/java/com/baeldung/flink/WordCapitalizerIntegrationTest.java delete mode 100644 libraries-data/src/test/java/com/baeldung/flink/WordCountIntegrationTest.java delete mode 100644 libraries/src/main/java/com/baeldung/google/sheets/GoogleAuthorizeUtil.java delete mode 100644 libraries/src/main/java/com/baeldung/google/sheets/SheetsServiceUtil.java delete mode 100644 libraries/src/main/java/com/baeldung/infinispan/CacheConfiguration.java delete mode 100644 libraries/src/main/java/com/baeldung/infinispan/listener/CacheListener.java delete mode 100644 libraries/src/main/java/com/baeldung/infinispan/repository/HelloWorldRepository.java delete mode 100644 libraries/src/main/java/com/baeldung/infinispan/service/HelloWorldService.java delete mode 100644 libraries/src/main/java/com/baeldung/infinispan/service/TransactionalService.java delete mode 100644 libraries/src/main/java/com/baeldung/measurement/WaterTank.java delete mode 100644 libraries/src/main/java/com/baeldung/opencsv/Application.java delete mode 100644 libraries/src/main/java/com/baeldung/opencsv/Constants.java delete mode 100644 libraries/src/main/java/com/baeldung/opencsv/beans/CsvBean.java delete mode 100644 libraries/src/main/java/com/baeldung/opencsv/beans/NamedColumnBean.java delete mode 100644 libraries/src/main/java/com/baeldung/opencsv/beans/SimplePositionBean.java delete mode 100644 libraries/src/main/java/com/baeldung/opencsv/beans/WriteExampleBean.java delete mode 100644 libraries/src/main/java/com/baeldung/opencsv/examples/sync/BeanExamples.java delete mode 100644 libraries/src/main/java/com/baeldung/opencsv/examples/sync/CsvReaderExamples.java delete mode 100644 libraries/src/main/java/com/baeldung/opencsv/examples/sync/CsvWriterExamples.java delete mode 100644 libraries/src/main/java/com/baeldung/opencsv/helpers/Helpers.java delete mode 100644 libraries/src/main/java/com/baeldung/opencsv/pojos/CsvTransfer.java delete mode 100644 libraries/src/main/java/com/baeldung/smooks/converter/OrderConverter.java delete mode 100644 libraries/src/main/java/com/baeldung/smooks/converter/OrderValidator.java delete mode 100644 libraries/src/main/java/com/baeldung/smooks/model/Item.java delete mode 100644 libraries/src/main/java/com/baeldung/smooks/model/Order.java delete mode 100644 libraries/src/main/java/com/baeldung/smooks/model/Status.java delete mode 100644 libraries/src/main/java/com/baeldung/smooks/model/Supplier.java delete mode 100644 libraries/src/test/java/com/baeldung/crdt/CRDTUnitTest.java delete mode 100644 libraries/src/test/java/com/baeldung/google/sheets/GoogleSheetsLiveTest.java delete mode 100644 libraries/src/test/java/com/baeldung/hll/HLLLongRunningManualTest.java delete mode 100644 libraries/src/test/java/com/baeldung/infinispan/AbstractIntegrationTest.java delete mode 100644 libraries/src/test/java/com/baeldung/infinispan/service/HelloWorldServiceTemporaryLiveTest.java delete mode 100644 libraries/src/test/java/com/baeldung/infinispan/service/TransactionalServiceIntegrationTest.java delete mode 100644 libraries/src/test/java/com/baeldung/measurement/WaterTankUnitTest.java delete mode 100644 libraries/src/test/java/com/baeldung/opencsv/OpenCsvIntegrationTest.java delete mode 100644 libraries/src/test/java/com/baeldung/smooks/converter/SmooksIntegrationTest.java diff --git a/libraries-data-2/pom.xml b/libraries-data-2/pom.xml index 97820859ba36..5570761d91ec 100644 --- a/libraries-data-2/pom.xml +++ b/libraries-data-2/pom.xml @@ -4,8 +4,8 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - libraries-http - libraries-http + libraries-data-2 + libraries-data-2 com.baeldung diff --git a/libraries-data-2/src/main/com/baeldung/docx/Docx4jExample.java b/libraries-data-2/src/main/java/com/baeldung/docx/Docx4jExample.java similarity index 100% rename from libraries-data-2/src/main/com/baeldung/docx/Docx4jExample.java rename to libraries-data-2/src/main/java/com/baeldung/docx/Docx4jExample.java diff --git a/libraries-data-2/src/main/com/baeldung/flink/FlinkDataPipeline.java b/libraries-data-2/src/main/java/com/baeldung/flink/FlinkDataPipeline.java similarity index 100% rename from libraries-data-2/src/main/com/baeldung/flink/FlinkDataPipeline.java rename to libraries-data-2/src/main/java/com/baeldung/flink/FlinkDataPipeline.java diff --git a/libraries-data-2/src/main/com/baeldung/flink/LineSplitter.java b/libraries-data-2/src/main/java/com/baeldung/flink/LineSplitter.java similarity index 100% rename from libraries-data-2/src/main/com/baeldung/flink/LineSplitter.java rename to libraries-data-2/src/main/java/com/baeldung/flink/LineSplitter.java diff --git a/libraries-data-2/src/main/com/baeldung/flink/WordCount.java b/libraries-data-2/src/main/java/com/baeldung/flink/WordCount.java similarity index 100% rename from libraries-data-2/src/main/com/baeldung/flink/WordCount.java rename to libraries-data-2/src/main/java/com/baeldung/flink/WordCount.java diff --git a/libraries-data-2/src/main/com/baeldung/flink/connector/Consumers.java b/libraries-data-2/src/main/java/com/baeldung/flink/connector/Consumers.java similarity index 100% rename from libraries-data-2/src/main/com/baeldung/flink/connector/Consumers.java rename to libraries-data-2/src/main/java/com/baeldung/flink/connector/Consumers.java diff --git a/libraries-data-2/src/main/com/baeldung/flink/connector/Producers.java b/libraries-data-2/src/main/java/com/baeldung/flink/connector/Producers.java similarity index 100% rename from libraries-data-2/src/main/com/baeldung/flink/connector/Producers.java rename to libraries-data-2/src/main/java/com/baeldung/flink/connector/Producers.java diff --git a/libraries-data-2/src/main/com/baeldung/flink/model/Backup.java b/libraries-data-2/src/main/java/com/baeldung/flink/model/Backup.java similarity index 100% rename from libraries-data-2/src/main/com/baeldung/flink/model/Backup.java rename to libraries-data-2/src/main/java/com/baeldung/flink/model/Backup.java diff --git a/libraries-data-2/src/main/com/baeldung/flink/model/InputMessage.java b/libraries-data-2/src/main/java/com/baeldung/flink/model/InputMessage.java similarity index 100% rename from libraries-data-2/src/main/com/baeldung/flink/model/InputMessage.java rename to libraries-data-2/src/main/java/com/baeldung/flink/model/InputMessage.java diff --git a/libraries-data-2/src/main/com/baeldung/flink/operator/BackupAggregator.java b/libraries-data-2/src/main/java/com/baeldung/flink/operator/BackupAggregator.java similarity index 100% rename from libraries-data-2/src/main/com/baeldung/flink/operator/BackupAggregator.java rename to libraries-data-2/src/main/java/com/baeldung/flink/operator/BackupAggregator.java diff --git a/libraries-data-2/src/main/com/baeldung/flink/operator/InputMessageTimestampAssigner.java b/libraries-data-2/src/main/java/com/baeldung/flink/operator/InputMessageTimestampAssigner.java similarity index 100% rename from libraries-data-2/src/main/com/baeldung/flink/operator/InputMessageTimestampAssigner.java rename to libraries-data-2/src/main/java/com/baeldung/flink/operator/InputMessageTimestampAssigner.java diff --git a/libraries-data-2/src/main/com/baeldung/flink/operator/WordsCapitalizer.java b/libraries-data-2/src/main/java/com/baeldung/flink/operator/WordsCapitalizer.java similarity index 100% rename from libraries-data-2/src/main/com/baeldung/flink/operator/WordsCapitalizer.java rename to libraries-data-2/src/main/java/com/baeldung/flink/operator/WordsCapitalizer.java diff --git a/libraries-data-2/src/main/com/baeldung/flink/schema/BackupSerializationSchema.java b/libraries-data-2/src/main/java/com/baeldung/flink/schema/BackupSerializationSchema.java similarity index 100% rename from libraries-data-2/src/main/com/baeldung/flink/schema/BackupSerializationSchema.java rename to libraries-data-2/src/main/java/com/baeldung/flink/schema/BackupSerializationSchema.java diff --git a/libraries-data-2/src/main/com/baeldung/flink/schema/InputMessageDeserializationSchema.java b/libraries-data-2/src/main/java/com/baeldung/flink/schema/InputMessageDeserializationSchema.java similarity index 100% rename from libraries-data-2/src/main/com/baeldung/flink/schema/InputMessageDeserializationSchema.java rename to libraries-data-2/src/main/java/com/baeldung/flink/schema/InputMessageDeserializationSchema.java diff --git a/libraries-data-2/src/main/com/baeldung/google/sheets/GoogleAuthorizeUtil.java b/libraries-data-2/src/main/java/com/baeldung/google/sheets/GoogleAuthorizeUtil.java similarity index 100% rename from libraries-data-2/src/main/com/baeldung/google/sheets/GoogleAuthorizeUtil.java rename to libraries-data-2/src/main/java/com/baeldung/google/sheets/GoogleAuthorizeUtil.java diff --git a/libraries-data-2/src/main/com/baeldung/google/sheets/SheetsServiceUtil.java b/libraries-data-2/src/main/java/com/baeldung/google/sheets/SheetsServiceUtil.java similarity index 100% rename from libraries-data-2/src/main/com/baeldung/google/sheets/SheetsServiceUtil.java rename to libraries-data-2/src/main/java/com/baeldung/google/sheets/SheetsServiceUtil.java diff --git a/libraries-data-2/src/main/com/baeldung/infinispan/CacheConfiguration.java b/libraries-data-2/src/main/java/com/baeldung/infinispan/CacheConfiguration.java similarity index 100% rename from libraries-data-2/src/main/com/baeldung/infinispan/CacheConfiguration.java rename to libraries-data-2/src/main/java/com/baeldung/infinispan/CacheConfiguration.java diff --git a/libraries-data-2/src/main/com/baeldung/infinispan/listener/CacheListener.java b/libraries-data-2/src/main/java/com/baeldung/infinispan/listener/CacheListener.java similarity index 100% rename from libraries-data-2/src/main/com/baeldung/infinispan/listener/CacheListener.java rename to libraries-data-2/src/main/java/com/baeldung/infinispan/listener/CacheListener.java diff --git a/libraries-data-2/src/main/com/baeldung/infinispan/repository/HelloWorldRepository.java b/libraries-data-2/src/main/java/com/baeldung/infinispan/repository/HelloWorldRepository.java similarity index 100% rename from libraries-data-2/src/main/com/baeldung/infinispan/repository/HelloWorldRepository.java rename to libraries-data-2/src/main/java/com/baeldung/infinispan/repository/HelloWorldRepository.java diff --git a/libraries-data-2/src/main/com/baeldung/infinispan/service/HelloWorldService.java b/libraries-data-2/src/main/java/com/baeldung/infinispan/service/HelloWorldService.java similarity index 100% rename from libraries-data-2/src/main/com/baeldung/infinispan/service/HelloWorldService.java rename to libraries-data-2/src/main/java/com/baeldung/infinispan/service/HelloWorldService.java diff --git a/libraries-data-2/src/main/com/baeldung/infinispan/service/TransactionalService.java b/libraries-data-2/src/main/java/com/baeldung/infinispan/service/TransactionalService.java similarity index 100% rename from libraries-data-2/src/main/com/baeldung/infinispan/service/TransactionalService.java rename to libraries-data-2/src/main/java/com/baeldung/infinispan/service/TransactionalService.java diff --git a/libraries-data-2/src/main/com/baeldung/measurement/WaterTank.java b/libraries-data-2/src/main/java/com/baeldung/measurement/WaterTank.java similarity index 100% rename from libraries-data-2/src/main/com/baeldung/measurement/WaterTank.java rename to libraries-data-2/src/main/java/com/baeldung/measurement/WaterTank.java diff --git a/libraries-data-2/src/main/com/baeldung/opencsv/Application.java b/libraries-data-2/src/main/java/com/baeldung/opencsv/Application.java similarity index 100% rename from libraries-data-2/src/main/com/baeldung/opencsv/Application.java rename to libraries-data-2/src/main/java/com/baeldung/opencsv/Application.java diff --git a/libraries-data-2/src/main/com/baeldung/opencsv/Constants.java b/libraries-data-2/src/main/java/com/baeldung/opencsv/Constants.java similarity index 100% rename from libraries-data-2/src/main/com/baeldung/opencsv/Constants.java rename to libraries-data-2/src/main/java/com/baeldung/opencsv/Constants.java diff --git a/libraries-data-2/src/main/com/baeldung/opencsv/beans/CsvBean.java b/libraries-data-2/src/main/java/com/baeldung/opencsv/beans/CsvBean.java similarity index 100% rename from libraries-data-2/src/main/com/baeldung/opencsv/beans/CsvBean.java rename to libraries-data-2/src/main/java/com/baeldung/opencsv/beans/CsvBean.java diff --git a/libraries-data-2/src/main/com/baeldung/opencsv/beans/NamedColumnBean.java b/libraries-data-2/src/main/java/com/baeldung/opencsv/beans/NamedColumnBean.java similarity index 100% rename from libraries-data-2/src/main/com/baeldung/opencsv/beans/NamedColumnBean.java rename to libraries-data-2/src/main/java/com/baeldung/opencsv/beans/NamedColumnBean.java diff --git a/libraries-data-2/src/main/com/baeldung/opencsv/beans/SimplePositionBean.java b/libraries-data-2/src/main/java/com/baeldung/opencsv/beans/SimplePositionBean.java similarity index 100% rename from libraries-data-2/src/main/com/baeldung/opencsv/beans/SimplePositionBean.java rename to libraries-data-2/src/main/java/com/baeldung/opencsv/beans/SimplePositionBean.java diff --git a/libraries-data-2/src/main/com/baeldung/opencsv/beans/WriteExampleBean.java b/libraries-data-2/src/main/java/com/baeldung/opencsv/beans/WriteExampleBean.java similarity index 100% rename from libraries-data-2/src/main/com/baeldung/opencsv/beans/WriteExampleBean.java rename to libraries-data-2/src/main/java/com/baeldung/opencsv/beans/WriteExampleBean.java diff --git a/libraries-data-2/src/main/com/baeldung/opencsv/examples/sync/BeanExamples.java b/libraries-data-2/src/main/java/com/baeldung/opencsv/examples/sync/BeanExamples.java similarity index 100% rename from libraries-data-2/src/main/com/baeldung/opencsv/examples/sync/BeanExamples.java rename to libraries-data-2/src/main/java/com/baeldung/opencsv/examples/sync/BeanExamples.java diff --git a/libraries-data-2/src/main/com/baeldung/opencsv/examples/sync/CsvReaderExamples.java b/libraries-data-2/src/main/java/com/baeldung/opencsv/examples/sync/CsvReaderExamples.java similarity index 100% rename from libraries-data-2/src/main/com/baeldung/opencsv/examples/sync/CsvReaderExamples.java rename to libraries-data-2/src/main/java/com/baeldung/opencsv/examples/sync/CsvReaderExamples.java diff --git a/libraries-data-2/src/main/com/baeldung/opencsv/examples/sync/CsvWriterExamples.java b/libraries-data-2/src/main/java/com/baeldung/opencsv/examples/sync/CsvWriterExamples.java similarity index 100% rename from libraries-data-2/src/main/com/baeldung/opencsv/examples/sync/CsvWriterExamples.java rename to libraries-data-2/src/main/java/com/baeldung/opencsv/examples/sync/CsvWriterExamples.java diff --git a/libraries-data-2/src/main/com/baeldung/opencsv/helpers/Helpers.java b/libraries-data-2/src/main/java/com/baeldung/opencsv/helpers/Helpers.java similarity index 100% rename from libraries-data-2/src/main/com/baeldung/opencsv/helpers/Helpers.java rename to libraries-data-2/src/main/java/com/baeldung/opencsv/helpers/Helpers.java diff --git a/libraries-data-2/src/main/com/baeldung/opencsv/pojos/CsvTransfer.java b/libraries-data-2/src/main/java/com/baeldung/opencsv/pojos/CsvTransfer.java similarity index 100% rename from libraries-data-2/src/main/com/baeldung/opencsv/pojos/CsvTransfer.java rename to libraries-data-2/src/main/java/com/baeldung/opencsv/pojos/CsvTransfer.java diff --git a/libraries-data-2/src/main/com/baeldung/smooks/converter/OrderConverter.java b/libraries-data-2/src/main/java/com/baeldung/smooks/converter/OrderConverter.java similarity index 100% rename from libraries-data-2/src/main/com/baeldung/smooks/converter/OrderConverter.java rename to libraries-data-2/src/main/java/com/baeldung/smooks/converter/OrderConverter.java diff --git a/libraries-data-2/src/main/com/baeldung/smooks/converter/OrderValidator.java b/libraries-data-2/src/main/java/com/baeldung/smooks/converter/OrderValidator.java similarity index 100% rename from libraries-data-2/src/main/com/baeldung/smooks/converter/OrderValidator.java rename to libraries-data-2/src/main/java/com/baeldung/smooks/converter/OrderValidator.java diff --git a/libraries-data-2/src/main/com/baeldung/smooks/model/Item.java b/libraries-data-2/src/main/java/com/baeldung/smooks/model/Item.java similarity index 100% rename from libraries-data-2/src/main/com/baeldung/smooks/model/Item.java rename to libraries-data-2/src/main/java/com/baeldung/smooks/model/Item.java diff --git a/libraries-data-2/src/main/com/baeldung/smooks/model/Order.java b/libraries-data-2/src/main/java/com/baeldung/smooks/model/Order.java similarity index 100% rename from libraries-data-2/src/main/com/baeldung/smooks/model/Order.java rename to libraries-data-2/src/main/java/com/baeldung/smooks/model/Order.java diff --git a/libraries-data-2/src/main/com/baeldung/smooks/model/Status.java b/libraries-data-2/src/main/java/com/baeldung/smooks/model/Status.java similarity index 100% rename from libraries-data-2/src/main/com/baeldung/smooks/model/Status.java rename to libraries-data-2/src/main/java/com/baeldung/smooks/model/Status.java diff --git a/libraries-data-2/src/main/com/baeldung/smooks/model/Supplier.java b/libraries-data-2/src/main/java/com/baeldung/smooks/model/Supplier.java similarity index 100% rename from libraries-data-2/src/main/com/baeldung/smooks/model/Supplier.java rename to libraries-data-2/src/main/java/com/baeldung/smooks/model/Supplier.java diff --git a/libraries/src/main/resources/google-sheets-client-secret.json b/libraries-data-2/src/main/resources/google-sheets-client-secret.json similarity index 100% rename from libraries/src/main/resources/google-sheets-client-secret.json rename to libraries-data-2/src/main/resources/google-sheets-client-secret.json diff --git a/libraries/src/main/resources/smooks/email.ftl b/libraries-data-2/src/main/resources/smooks/email.ftl similarity index 100% rename from libraries/src/main/resources/smooks/email.ftl rename to libraries-data-2/src/main/resources/smooks/email.ftl diff --git a/libraries/src/main/resources/smooks/item-rules.csv b/libraries-data-2/src/main/resources/smooks/item-rules.csv similarity index 100% rename from libraries/src/main/resources/smooks/item-rules.csv rename to libraries-data-2/src/main/resources/smooks/item-rules.csv diff --git a/libraries/src/main/resources/smooks/order.ftl b/libraries-data-2/src/main/resources/smooks/order.ftl similarity index 100% rename from libraries/src/main/resources/smooks/order.ftl rename to libraries-data-2/src/main/resources/smooks/order.ftl diff --git a/libraries/src/main/resources/smooks/order.json b/libraries-data-2/src/main/resources/smooks/order.json similarity index 100% rename from libraries/src/main/resources/smooks/order.json rename to libraries-data-2/src/main/resources/smooks/order.json diff --git a/libraries/src/main/resources/smooks/order.xml b/libraries-data-2/src/main/resources/smooks/order.xml similarity index 100% rename from libraries/src/main/resources/smooks/order.xml rename to libraries-data-2/src/main/resources/smooks/order.xml diff --git a/libraries/src/main/resources/smooks/smooks-mapping.xml b/libraries-data-2/src/main/resources/smooks/smooks-mapping.xml similarity index 100% rename from libraries/src/main/resources/smooks/smooks-mapping.xml rename to libraries-data-2/src/main/resources/smooks/smooks-mapping.xml diff --git a/libraries/src/main/resources/smooks/smooks-transform-edi.xml b/libraries-data-2/src/main/resources/smooks/smooks-transform-edi.xml similarity index 100% rename from libraries/src/main/resources/smooks/smooks-transform-edi.xml rename to libraries-data-2/src/main/resources/smooks/smooks-transform-edi.xml diff --git a/libraries/src/main/resources/smooks/smooks-transform-email.xml b/libraries-data-2/src/main/resources/smooks/smooks-transform-email.xml similarity index 100% rename from libraries/src/main/resources/smooks/smooks-transform-email.xml rename to libraries-data-2/src/main/resources/smooks/smooks-transform-email.xml diff --git a/libraries/src/main/resources/smooks/smooks-validation.xml b/libraries-data-2/src/main/resources/smooks/smooks-validation.xml similarity index 100% rename from libraries/src/main/resources/smooks/smooks-validation.xml rename to libraries-data-2/src/main/resources/smooks/smooks-validation.xml diff --git a/libraries/src/main/resources/smooks/supplier.properties b/libraries-data-2/src/main/resources/smooks/supplier.properties similarity index 100% rename from libraries/src/main/resources/smooks/supplier.properties rename to libraries-data-2/src/main/resources/smooks/supplier.properties diff --git a/libraries-data/src/main/java/com/baeldung/flink/FlinkDataPipeline.java b/libraries-data/src/main/java/com/baeldung/flink/FlinkDataPipeline.java deleted file mode 100644 index d02b1bcb83db..000000000000 --- a/libraries-data/src/main/java/com/baeldung/flink/FlinkDataPipeline.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.baeldung.flink; - - -import com.baeldung.flink.model.Backup; -import com.baeldung.flink.model.InputMessage; -import com.baeldung.flink.operator.BackupAggregator; -import com.baeldung.flink.operator.InputMessageTimestampAssigner; -import com.baeldung.flink.operator.WordsCapitalizer; -import org.apache.flink.streaming.api.TimeCharacteristic; -import org.apache.flink.streaming.api.datastream.DataStream; -import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; -import org.apache.flink.streaming.api.windowing.time.Time; -import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer011; -import org.apache.flink.streaming.connectors.kafka.FlinkKafkaProducer011; - -import static com.baeldung.flink.connector.Consumers.*; -import static com.baeldung.flink.connector.Producers.*; - -public class FlinkDataPipeline { - - public static void capitalize() throws Exception { - String inputTopic = "flink_input"; - String outputTopic = "flink_output"; - String consumerGroup = "baeldung"; - String address = "localhost:9092"; - - StreamExecutionEnvironment environment = - StreamExecutionEnvironment.getExecutionEnvironment(); - - FlinkKafkaConsumer011 flinkKafkaConsumer = - createStringConsumerForTopic(inputTopic, address, consumerGroup); - flinkKafkaConsumer.setStartFromEarliest(); - - DataStream stringInputStream = - environment.addSource(flinkKafkaConsumer); - - FlinkKafkaProducer011 flinkKafkaProducer = - createStringProducer(outputTopic, address); - - stringInputStream - .map(new WordsCapitalizer()) - .addSink(flinkKafkaProducer); - - environment.execute(); - } - -public static void createBackup () throws Exception { - String inputTopic = "flink_input"; - String outputTopic = "flink_output"; - String consumerGroup = "baeldung"; - String kafkaAddress = "localhost:9092"; - - StreamExecutionEnvironment environment = - StreamExecutionEnvironment.getExecutionEnvironment(); - - environment.setStreamTimeCharacteristic(TimeCharacteristic.EventTime); - - FlinkKafkaConsumer011 flinkKafkaConsumer = - createInputMessageConsumer(inputTopic, kafkaAddress, consumerGroup); - flinkKafkaConsumer.setStartFromEarliest(); - - flinkKafkaConsumer - .assignTimestampsAndWatermarks(new InputMessageTimestampAssigner()); - FlinkKafkaProducer011 flinkKafkaProducer = - createBackupProducer(outputTopic, kafkaAddress); - - DataStream inputMessagesStream = - environment.addSource(flinkKafkaConsumer); - - inputMessagesStream - .timeWindowAll(Time.hours(24)) - .aggregate(new BackupAggregator()) - .addSink(flinkKafkaProducer); - - environment.execute(); -} - - public static void main(String[] args) throws Exception { - createBackup(); - } - -} diff --git a/libraries-data/src/main/java/com/baeldung/flink/LineSplitter.java b/libraries-data/src/main/java/com/baeldung/flink/LineSplitter.java deleted file mode 100644 index f4e322f1e806..000000000000 --- a/libraries-data/src/main/java/com/baeldung/flink/LineSplitter.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.baeldung.flink; - -import org.apache.flink.api.common.functions.FlatMapFunction; -import org.apache.flink.api.java.tuple.Tuple2; -import org.apache.flink.util.Collector; - -import java.util.stream.Stream; - -@SuppressWarnings("serial") -public class LineSplitter implements FlatMapFunction> { - - @Override - public void flatMap(String value, Collector> out) { - - String[] tokens = value.toLowerCase().split("\\W+"); - Stream.of(tokens).filter(t -> t.length() > 0).forEach(token -> out.collect(new Tuple2<>(token, 1))); - } -} \ No newline at end of file diff --git a/libraries-data/src/main/java/com/baeldung/flink/WordCount.java b/libraries-data/src/main/java/com/baeldung/flink/WordCount.java deleted file mode 100644 index fc5064bafa76..000000000000 --- a/libraries-data/src/main/java/com/baeldung/flink/WordCount.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.baeldung.flink; - -import org.apache.flink.api.java.DataSet; -import org.apache.flink.api.java.ExecutionEnvironment; -import org.apache.flink.api.java.aggregation.Aggregations; -import org.apache.flink.api.java.tuple.Tuple2; - -import java.util.List; - -public class WordCount { - - public static DataSet> startWordCount(ExecutionEnvironment env, List lines) throws Exception { - DataSet text = env.fromCollection(lines); - - return text.flatMap(new LineSplitter()).groupBy(0).aggregate(Aggregations.SUM, 1); - - } -} \ No newline at end of file diff --git a/libraries-data/src/main/java/com/baeldung/flink/connector/Consumers.java b/libraries-data/src/main/java/com/baeldung/flink/connector/Consumers.java deleted file mode 100644 index 514085f9c477..000000000000 --- a/libraries-data/src/main/java/com/baeldung/flink/connector/Consumers.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.baeldung.flink.connector; - -import com.baeldung.flink.model.InputMessage; -import com.baeldung.flink.schema.InputMessageDeserializationSchema; -import org.apache.flink.api.common.serialization.SimpleStringSchema; -import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer011; - -import java.util.Properties; - -public class Consumers { - -public static FlinkKafkaConsumer011 createStringConsumerForTopic( - String topic, String kafkaAddress, String kafkaGroup ) { - Properties props = new Properties(); - props.setProperty("bootstrap.servers", kafkaAddress); - props.setProperty("group.id",kafkaGroup); - FlinkKafkaConsumer011 consumer = - new FlinkKafkaConsumer011<>(topic, new SimpleStringSchema(),props); - - return consumer; -} - - public static FlinkKafkaConsumer011 createInputMessageConsumer(String topic, String kafkaAddress, String kafkaGroup ) { - Properties properties = new Properties(); - properties.setProperty("bootstrap.servers", kafkaAddress); - properties.setProperty("group.id",kafkaGroup); - FlinkKafkaConsumer011 consumer = new FlinkKafkaConsumer011( - topic, new InputMessageDeserializationSchema(),properties); - - return consumer; - } -} diff --git a/libraries-data/src/main/java/com/baeldung/flink/connector/Producers.java b/libraries-data/src/main/java/com/baeldung/flink/connector/Producers.java deleted file mode 100644 index 8e6f3f8f372a..000000000000 --- a/libraries-data/src/main/java/com/baeldung/flink/connector/Producers.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.baeldung.flink.connector; - -import com.baeldung.flink.model.Backup; -import com.baeldung.flink.schema.BackupSerializationSchema; -import org.apache.flink.api.common.serialization.SimpleStringSchema; -import org.apache.flink.streaming.connectors.kafka.FlinkKafkaProducer011; - -public class Producers { - - public static FlinkKafkaProducer011 createStringProducer(String topic, String kafkaAddress) { - return new FlinkKafkaProducer011<>(kafkaAddress, topic, new SimpleStringSchema()); - } - - public static FlinkKafkaProducer011 createBackupProducer(String topic, String kafkaAddress) { - return new FlinkKafkaProducer011(kafkaAddress, topic, new BackupSerializationSchema()); - } -} diff --git a/libraries-data/src/main/java/com/baeldung/flink/model/Backup.java b/libraries-data/src/main/java/com/baeldung/flink/model/Backup.java deleted file mode 100644 index 268ceec7f349..000000000000 --- a/libraries-data/src/main/java/com/baeldung/flink/model/Backup.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.baeldung.flink.model; - -import com.fasterxml.jackson.annotation.JsonProperty; - -import java.time.LocalDateTime; -import java.util.List; -import java.util.UUID; - -public class Backup { - - @JsonProperty("inputMessages") - List inputMessages; - @JsonProperty("backupTimestamp") - LocalDateTime backupTimestamp; - @JsonProperty("uuid") - UUID uuid; - - public Backup(List inputMessages, LocalDateTime backupTimestamp) { - this.inputMessages = inputMessages; - this.backupTimestamp = backupTimestamp; - this.uuid = UUID.randomUUID(); - } - - public List getInputMessages() { - return inputMessages; - } -} diff --git a/libraries-data/src/main/java/com/baeldung/flink/model/InputMessage.java b/libraries-data/src/main/java/com/baeldung/flink/model/InputMessage.java deleted file mode 100644 index b3f75256ae71..000000000000 --- a/libraries-data/src/main/java/com/baeldung/flink/model/InputMessage.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.baeldung.flink.model; - -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import com.google.common.base.Objects; - -import java.time.LocalDateTime; - -@JsonSerialize -public class InputMessage { - String sender; - String recipient; - LocalDateTime sentAt; - String message; - - public InputMessage() { - } - - public String getSender() { - return sender; - } - public void setSender(String sender) { - this.sender = sender; - } - - public String getRecipient() { - return recipient; - } - - public void setRecipient(String recipient) { - this.recipient = recipient; - } - - public LocalDateTime getSentAt() { - return sentAt; - } - - public void setSentAt(LocalDateTime sentAt) { - this.sentAt = sentAt; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public InputMessage(String sender, String recipient, LocalDateTime sentAt, String message) { - this.sender = sender; - this.recipient = recipient; - this.sentAt = sentAt; - this.message = message; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - InputMessage message1 = (InputMessage) o; - return Objects.equal(sender, message1.sender) && - Objects.equal(recipient, message1.recipient) && - Objects.equal(sentAt, message1.sentAt) && - Objects.equal(message, message1.message); - } - - @Override - public int hashCode() { - return Objects.hashCode(sender, recipient, sentAt, message); - } -} diff --git a/libraries-data/src/main/java/com/baeldung/flink/operator/BackupAggregator.java b/libraries-data/src/main/java/com/baeldung/flink/operator/BackupAggregator.java deleted file mode 100644 index c39b8413d120..000000000000 --- a/libraries-data/src/main/java/com/baeldung/flink/operator/BackupAggregator.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.baeldung.flink.operator; - -import com.baeldung.flink.model.Backup; -import com.baeldung.flink.model.InputMessage; -import org.apache.flink.api.common.functions.AggregateFunction; - -import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.List; - - public class BackupAggregator implements AggregateFunction, Backup> { - @Override - public List createAccumulator() { - return new ArrayList<>(); - } - - @Override - public List add(InputMessage inputMessage, List inputMessages) { - inputMessages.add(inputMessage); - return inputMessages; - } - - @Override - public Backup getResult(List inputMessages) { - Backup backup = new Backup(inputMessages, LocalDateTime.now()); - return backup; - } - - @Override - public List merge(List inputMessages, List acc1) { - inputMessages.addAll(acc1); - return inputMessages; - } - } diff --git a/libraries-data/src/main/java/com/baeldung/flink/operator/InputMessageTimestampAssigner.java b/libraries-data/src/main/java/com/baeldung/flink/operator/InputMessageTimestampAssigner.java deleted file mode 100644 index 05828d95883d..000000000000 --- a/libraries-data/src/main/java/com/baeldung/flink/operator/InputMessageTimestampAssigner.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.baeldung.flink.operator; - -import com.baeldung.flink.model.InputMessage; -import org.apache.flink.streaming.api.functions.AssignerWithPunctuatedWatermarks; -import org.apache.flink.streaming.api.watermark.Watermark; - -import javax.annotation.Nullable; -import java.time.ZoneId; - -public class InputMessageTimestampAssigner implements AssignerWithPunctuatedWatermarks { - - @Override - public long extractTimestamp(InputMessage element, long previousElementTimestamp) { - ZoneId zoneId = ZoneId.systemDefault(); - return element.getSentAt().atZone(zoneId).toEpochSecond() * 1000; - } - - @Nullable - @Override - public Watermark checkAndGetNextWatermark(InputMessage lastElement, long extractedTimestamp) { - return new Watermark(extractedTimestamp - 15); - } -} diff --git a/libraries-data/src/main/java/com/baeldung/flink/operator/WordsCapitalizer.java b/libraries-data/src/main/java/com/baeldung/flink/operator/WordsCapitalizer.java deleted file mode 100644 index f9103d225c39..000000000000 --- a/libraries-data/src/main/java/com/baeldung/flink/operator/WordsCapitalizer.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.baeldung.flink.operator; - -import org.apache.flink.api.common.functions.MapFunction; - -public class WordsCapitalizer implements MapFunction { - - @Override - public String map(String s) { - return s.toUpperCase(); - } -} diff --git a/libraries-data/src/main/java/com/baeldung/flink/schema/BackupSerializationSchema.java b/libraries-data/src/main/java/com/baeldung/flink/schema/BackupSerializationSchema.java deleted file mode 100644 index 967b266bb62e..000000000000 --- a/libraries-data/src/main/java/com/baeldung/flink/schema/BackupSerializationSchema.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.baeldung.flink.schema; - -import com.baeldung.flink.model.Backup; -import com.fasterxml.jackson.annotation.JsonAutoDetect; -import com.fasterxml.jackson.annotation.PropertyAccessor; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; -import org.apache.flink.api.common.serialization.SerializationSchema; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class BackupSerializationSchema - implements SerializationSchema { - - static ObjectMapper objectMapper = new ObjectMapper().registerModule(new JavaTimeModule()); - - Logger logger = LoggerFactory.getLogger(BackupSerializationSchema.class); - - @Override - public byte[] serialize(Backup backupMessage) { - if(objectMapper == null) { - objectMapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY); - objectMapper = new ObjectMapper().registerModule(new JavaTimeModule()); - } - try { - String json = objectMapper.writeValueAsString(backupMessage); - return json.getBytes(); - } catch (com.fasterxml.jackson.core.JsonProcessingException e) { - logger.error("Failed to parse JSON", e); - } - return new byte[0]; - } -} diff --git a/libraries-data/src/main/java/com/baeldung/flink/schema/InputMessageDeserializationSchema.java b/libraries-data/src/main/java/com/baeldung/flink/schema/InputMessageDeserializationSchema.java deleted file mode 100644 index 9aaf8b987757..000000000000 --- a/libraries-data/src/main/java/com/baeldung/flink/schema/InputMessageDeserializationSchema.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.baeldung.flink.schema; - -import com.baeldung.flink.model.InputMessage; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; -import org.apache.flink.api.common.serialization.DeserializationSchema; -import org.apache.flink.api.common.typeinfo.TypeInformation; - -import java.io.IOException; - -public class InputMessageDeserializationSchema implements - DeserializationSchema { - - static ObjectMapper objectMapper = new ObjectMapper().registerModule(new JavaTimeModule()); - - - @Override - public InputMessage deserialize(byte[] bytes) throws IOException { - - return objectMapper.readValue(bytes, InputMessage.class); - } - - @Override - public boolean isEndOfStream(InputMessage inputMessage) { - return false; - } - - @Override - public TypeInformation getProducedType() { - return TypeInformation.of(InputMessage.class); - } -} diff --git a/libraries-data/src/test/java/com/baeldung/flink/BackupCreatorIntegrationTest.java b/libraries-data/src/test/java/com/baeldung/flink/BackupCreatorIntegrationTest.java deleted file mode 100644 index f46fffbb59c1..000000000000 --- a/libraries-data/src/test/java/com/baeldung/flink/BackupCreatorIntegrationTest.java +++ /dev/null @@ -1,104 +0,0 @@ -package com.baeldung.flink; - -import com.baeldung.flink.model.Backup; -import com.baeldung.flink.model.InputMessage; -import com.baeldung.flink.operator.BackupAggregator; -import com.baeldung.flink.operator.InputMessageTimestampAssigner; -import com.baeldung.flink.schema.BackupSerializationSchema; -import com.baeldung.flink.schema.InputMessageDeserializationSchema; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; -import org.apache.commons.collections.ListUtils; -import org.apache.flink.api.common.serialization.DeserializationSchema; -import org.apache.flink.api.common.serialization.SerializationSchema; -import org.apache.flink.streaming.api.TimeCharacteristic; -import org.apache.flink.streaming.api.datastream.DataStreamSource; -import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; -import org.apache.flink.streaming.api.functions.sink.SinkFunction; -import org.apache.flink.streaming.api.windowing.time.Time; -import org.awaitility.Awaitility; -import org.junit.Before; -import org.junit.Test; - -import java.io.IOException; -import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import static org.junit.Assert.assertArrayEquals; -import static org.junit.Assert.assertEquals; - -public class BackupCreatorIntegrationTest { - public static ObjectMapper mapper; - - @Before - public void setup() { - mapper = new ObjectMapper().registerModule(new JavaTimeModule()); - } - - @Test - public void givenProperJson_whenDeserializeIsInvoked_thenProperObjectIsReturned() throws IOException { - InputMessage message = new InputMessage("Me", "User", LocalDateTime.now(), "Test Message"); - byte[] messageSerialized = mapper.writeValueAsBytes(message); - DeserializationSchema deserializationSchema = new InputMessageDeserializationSchema(); - InputMessage messageDeserialized = deserializationSchema.deserialize(messageSerialized); - - assertEquals(message, messageDeserialized); - } - - @Test - public void givenMultipleInputMessagesFromDifferentDays_whenBackupCreatorIsUser_thenMessagesAreGroupedProperly() throws Exception { - LocalDateTime currentTime = LocalDateTime.now(); - InputMessage message = new InputMessage("Me", "User", currentTime, "First TestMessage"); - InputMessage secondMessage = new InputMessage("Me", "User", currentTime.plusHours(1), "First TestMessage"); - InputMessage thirdMessage = new InputMessage("Me", "User", currentTime.plusHours(2), "First TestMessage"); - InputMessage fourthMessage = new InputMessage("Me", "User", currentTime.plusHours(3), "First TestMessage"); - InputMessage fifthMessage = new InputMessage("Me", "User", currentTime.plusHours(25), "First TestMessage"); - InputMessage sixthMessage = new InputMessage("Me", "User", currentTime.plusHours(26), "First TestMessage"); - - List firstBackupMessages = Arrays.asList(message, secondMessage, thirdMessage, fourthMessage); - List secondBackupMessages = Arrays.asList(fifthMessage, sixthMessage); - List inputMessages = ListUtils.union(firstBackupMessages, secondBackupMessages); - - StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); - env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime); - env.setParallelism(1); - DataStreamSource testDataSet = env.fromCollection(inputMessages); - CollectingSink sink = new CollectingSink(); - testDataSet.assignTimestampsAndWatermarks(new InputMessageTimestampAssigner()) - .timeWindowAll(Time.hours(24)) - .aggregate(new BackupAggregator()) - .addSink(sink); - - env.execute(); - - Awaitility.await().until(() -> sink.backups.size() == 2); - assertEquals(2, sink.backups.size()); - assertEquals(firstBackupMessages, sink.backups.get(0).getInputMessages()); - assertEquals(secondBackupMessages, sink.backups.get(1).getInputMessages()); - - } - - @Test - public void givenProperBackupObject_whenSerializeIsInvoked_thenObjectIsProperlySerialized() throws IOException { - InputMessage message = new InputMessage("Me", "User", LocalDateTime.now(), "Test Message"); - List messages = Arrays.asList(message); - Backup backup = new Backup(messages, LocalDateTime.now()); - byte[] backupSerialized = mapper.writeValueAsBytes(backup); - SerializationSchema serializationSchema = new BackupSerializationSchema(); - byte[] backupProcessed = serializationSchema.serialize(backup); - - assertArrayEquals(backupSerialized, backupProcessed); - } - - private static class CollectingSink implements SinkFunction { - - public static List backups = new ArrayList<>(); - - @Override - public synchronized void invoke(Backup value, Context context) throws Exception { - backups.add(value); - } - } -} diff --git a/libraries-data/src/test/java/com/baeldung/flink/WordCapitalizerIntegrationTest.java b/libraries-data/src/test/java/com/baeldung/flink/WordCapitalizerIntegrationTest.java deleted file mode 100644 index 8a98dae4b5b2..000000000000 --- a/libraries-data/src/test/java/com/baeldung/flink/WordCapitalizerIntegrationTest.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.baeldung.flink; - -import com.baeldung.flink.operator.WordsCapitalizer; -import org.apache.flink.api.java.DataSet; -import org.apache.flink.api.java.ExecutionEnvironment; -import org.junit.Assert; -import org.junit.Test; - -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; - -public class WordCapitalizerIntegrationTest { - - @Test - public void givenDataSet_whenExecuteWordCapitalizer_thenReturnCapitalizedWords() throws Exception { - ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment(); - List data = Arrays.asList("dog", "cat", "wolf", "pig"); - - DataSet testDataSet = env.fromCollection(data); - - - List dataProcessed = testDataSet - .map(new WordsCapitalizer()) - .collect(); - - List testDataCapitalized = data.stream() - .map(String::toUpperCase) - .collect(Collectors.toList()); - - Assert.assertEquals(testDataCapitalized, dataProcessed); - } - -} diff --git a/libraries-data/src/test/java/com/baeldung/flink/WordCountIntegrationTest.java b/libraries-data/src/test/java/com/baeldung/flink/WordCountIntegrationTest.java deleted file mode 100644 index 5c788e86d625..000000000000 --- a/libraries-data/src/test/java/com/baeldung/flink/WordCountIntegrationTest.java +++ /dev/null @@ -1,161 +0,0 @@ -package com.baeldung.flink; - -import org.apache.flink.api.common.operators.Order; -import org.apache.flink.api.java.DataSet; -import org.apache.flink.api.java.ExecutionEnvironment; -import org.apache.flink.api.java.functions.KeySelector; -import org.apache.flink.api.java.tuple.Tuple2; -import org.apache.flink.api.java.tuple.Tuple3; -import org.apache.flink.streaming.api.datastream.DataStream; -import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator; -import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; -import org.apache.flink.streaming.api.functions.timestamps.BoundedOutOfOrdernessTimestampExtractor; -import org.apache.flink.streaming.api.windowing.assigners.TumblingEventTimeWindows; -import org.apache.flink.streaming.api.windowing.time.Time; -import org.junit.Test; - -import java.time.ZonedDateTime; -import java.util.Arrays; -import java.util.List; - -import static org.assertj.core.api.Assertions.assertThat; - -public class WordCountIntegrationTest { - private final ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment(); - - @Test - public void givenDataSet_whenExecuteWordCount_thenReturnWordCount() throws Exception { - // given - List lines = Arrays.asList("This is a first sentence", "This is a second sentence with a one word"); - - // when - DataSet> result = WordCount.startWordCount(env, lines); - - // then - List> collect = result.collect(); - assertThat(collect).containsExactlyInAnyOrder(new Tuple2<>("a", 3), new Tuple2<>("sentence", 2), new Tuple2<>("word", 1), new Tuple2<>("is", 2), new Tuple2<>("this", 2), new Tuple2<>("second", 1), new Tuple2<>("first", 1), new Tuple2<>("with", 1), - new Tuple2<>("one", 1)); - } - - @Test - public void givenListOfAmounts_whenUseMapReduce_thenSumAmountsThatAreOnlyAboveThreshold() throws Exception { - // given - DataSet amounts = env.fromElements(1, 29, 40, 50); - int threshold = 30; - - // when - List collect = amounts.filter(a -> a > threshold).reduce((integer, t1) -> integer + t1).collect(); - - // then - assertThat(collect.get(0)).isEqualTo(90); - } - - @Test - public void givenDataSetOfComplexObjects_whenMapToGetOneField_thenReturnedListHaveProperElements() throws Exception { - // given - DataSet personDataSource = env.fromCollection(Arrays.asList(new Person(23, "Tom"), new Person(75, "Michael"))); - - // when - List ages = personDataSource.map(p -> p.age).collect(); - - // then - assertThat(ages).hasSize(2); - assertThat(ages).contains(23, 75); - - } - - @Test - public void givenDataSet_whenSortItByOneField_thenShouldReturnSortedDataSet() throws Exception { - // given - Tuple2 secondPerson = new Tuple2<>(4, "Tom"); - Tuple2 thirdPerson = new Tuple2<>(5, "Scott"); - Tuple2 fourthPerson = new Tuple2<>(200, "Michael"); - Tuple2 firstPerson = new Tuple2<>(1, "Jack"); - DataSet> transactions = env.fromElements(fourthPerson, secondPerson, thirdPerson, firstPerson); - - // when - List> sorted = transactions.sortPartition(new IdKeySelectorTransaction(), Order.ASCENDING).collect(); - - // then - assertThat(sorted).containsExactly(firstPerson, secondPerson, thirdPerson, fourthPerson); - } - - @Test - public void giveTwoDataSets_whenJoinUsingId_thenProduceJoinedData() throws Exception { - // given - Tuple3 address = new Tuple3<>(1, "5th Avenue", "London"); - DataSet> addresses = env.fromElements(address); - - Tuple2 firstTransaction = new Tuple2<>(1, "Transaction_1"); - DataSet> transactions = env.fromElements(firstTransaction, new Tuple2<>(12, "Transaction_2")); - - // when - List, Tuple3>> joined = transactions.join(addresses).where(new IdKeySelectorTransaction()).equalTo(new IdKeySelectorAddress()).collect(); - - // then - assertThat(joined).hasSize(1); - assertThat(joined).contains(new Tuple2<>(firstTransaction, address)); - - } - - @Test - public void givenStreamOfEvents_whenProcessEvents_thenShouldPrintResultsOnSinkOperation() throws Exception { - // given - final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); - - DataStream text = env.fromElements("This is a first sentence", "This is a second sentence with a one word"); - - SingleOutputStreamOperator upperCase = text.map(String::toUpperCase); - - upperCase.print(); - - // when - env.execute(); - } - - @Test - public void givenStreamOfEvents_whenProcessEvents_thenShouldApplyWindowingOnTransformation() throws Exception { - // given - final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); - - SingleOutputStreamOperator> windowed = env.fromElements(new Tuple2<>(16, ZonedDateTime.now().plusMinutes(25).toInstant().getEpochSecond()), new Tuple2<>(15, ZonedDateTime.now().plusMinutes(2).toInstant().getEpochSecond())) - .assignTimestampsAndWatermarks(new BoundedOutOfOrdernessTimestampExtractor>(Time.seconds(20)) { - @Override - public long extractTimestamp(Tuple2 element) { - return element.f1 * 1000; - } - }); - - SingleOutputStreamOperator> reduced = windowed.windowAll(TumblingEventTimeWindows.of(Time.seconds(5))).maxBy(0, true); - - reduced.print(); - - // when - env.execute(); - } - - private static class IdKeySelectorTransaction implements KeySelector, Integer> { - @Override - public Integer getKey(Tuple2 value) { - return value.f0; - } - } - - private static class IdKeySelectorAddress implements KeySelector, Integer> { - @Override - public Integer getKey(Tuple3 value) { - return value.f0; - } - } - - private static class Person { - private final int age; - private final String name; - - private Person(int age, String name) { - this.age = age; - this.name = name; - } - } - -} \ No newline at end of file diff --git a/libraries/pom.xml b/libraries/pom.xml index e8ffde5f99d6..438fe6a519df 100644 --- a/libraries/pom.xml +++ b/libraries/pom.xml @@ -36,12 +36,6 @@ cglib ${cglib.version} - - - com.opencsv - opencsv - ${opencsv.version} - org.apache.commons commons-lang3 @@ -52,11 +46,6 @@ commons-net ${commons-net.version} - - tec.units - unit-ri - ${unit-ri.version} - org.jasypt jasypt @@ -347,11 +336,6 @@ ${org.hamcrest.java-hamcrest.version} test - - net.agkn - hll - ${hll.version} - net.bytebuddy byte-buddy @@ -464,21 +448,6 @@ jgrapht-core ${jgrapht.version} - - com.netopyr.wurmloch - wurmloch-crdt - ${crdt.version} - - - org.docx4j - docx4j - ${docx4j.version} - - - javax.xml.bind - jaxb-api - ${jaxb-api.version} - com.github.ben-manes.caffeine caffeine @@ -509,11 +478,6 @@ google-http-client-gson ${googleclient.version} - - org.infinispan - infinispan-core - ${infinispan.version} - @@ -553,11 +517,6 @@ google-oauth-client-jetty ${google-api.version} - - com.google.apis - google-api-services-sheets - ${google-sheets.version} - org.apache.kafka kafka-streams @@ -581,12 +540,6 @@ test test - - - org.milyn - milyn-smooks-all - ${smooks.version} - com.mashape.unirest unirest-java @@ -815,7 +768,6 @@ 4.0.0 1.21 1.23.0 - 0.1.0 0.7.0 3.2.7 1.9.2 @@ -839,7 +791,6 @@ 3.5.0 3.0.0 2.0.0.0 - 1.6.0 1.7.1 2.1.2 1.0 @@ -852,17 +803,13 @@ 2.10 1.5.1 1.15 - 1.0.3 1.0.0 3.10.2 2.5.5 1.23.0 v4-rev493-1.21.0 2.0.0 - 1.7.0 3.0.14 - 9.1.5.Final - 4.1 1.4.9 2.1.2 1.10.L001 @@ -893,8 +840,6 @@ 1.2.6 4.8.1 1.0.1 - 3.3.5 - 2.1 1.58 1.19.4 1.6.0 diff --git a/libraries/src/main/java/com/baeldung/google/sheets/GoogleAuthorizeUtil.java b/libraries/src/main/java/com/baeldung/google/sheets/GoogleAuthorizeUtil.java deleted file mode 100644 index 641fae42dd63..000000000000 --- a/libraries/src/main/java/com/baeldung/google/sheets/GoogleAuthorizeUtil.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.baeldung.google.sheets; - -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.security.GeneralSecurityException; -import java.util.Arrays; -import java.util.List; - -import com.google.api.client.auth.oauth2.Credential; -import com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp; -import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver; -import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow; -import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets; -import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; -import com.google.api.client.json.jackson2.JacksonFactory; -import com.google.api.client.util.store.MemoryDataStoreFactory; -import com.google.api.services.sheets.v4.SheetsScopes; - -public class GoogleAuthorizeUtil { - public static Credential authorize() throws IOException, GeneralSecurityException { - InputStream in = GoogleAuthorizeUtil.class.getResourceAsStream("/google-sheets-client-secret.json"); - GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JacksonFactory.getDefaultInstance(), new InputStreamReader(in)); - - List scopes = Arrays.asList(SheetsScopes.SPREADSHEETS); - - GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(GoogleNetHttpTransport.newTrustedTransport(), JacksonFactory.getDefaultInstance(), clientSecrets, scopes).setDataStoreFactory(new MemoryDataStoreFactory()) - .setAccessType("offline").build(); - Credential credential = new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("user"); - - return credential; - } - -} diff --git a/libraries/src/main/java/com/baeldung/google/sheets/SheetsServiceUtil.java b/libraries/src/main/java/com/baeldung/google/sheets/SheetsServiceUtil.java deleted file mode 100644 index 8a78d50551fd..000000000000 --- a/libraries/src/main/java/com/baeldung/google/sheets/SheetsServiceUtil.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.baeldung.google.sheets; - -import java.io.IOException; -import java.security.GeneralSecurityException; - -import com.google.api.client.auth.oauth2.Credential; -import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; -import com.google.api.client.json.jackson2.JacksonFactory; -import com.google.api.services.sheets.v4.Sheets; - -public class SheetsServiceUtil { - - private static final String APPLICATION_NAME = "Google Sheets Example"; - - public static Sheets getSheetsService() throws IOException, GeneralSecurityException { - Credential credential = GoogleAuthorizeUtil.authorize(); - return new Sheets.Builder(GoogleNetHttpTransport.newTrustedTransport(), JacksonFactory.getDefaultInstance(), credential).setApplicationName(APPLICATION_NAME).build(); - } - -} diff --git a/libraries/src/main/java/com/baeldung/infinispan/CacheConfiguration.java b/libraries/src/main/java/com/baeldung/infinispan/CacheConfiguration.java deleted file mode 100644 index eda511d7a700..000000000000 --- a/libraries/src/main/java/com/baeldung/infinispan/CacheConfiguration.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.baeldung.infinispan; - -import com.baeldung.infinispan.listener.CacheListener; -import org.infinispan.Cache; -import org.infinispan.configuration.cache.Configuration; -import org.infinispan.configuration.cache.ConfigurationBuilder; -import org.infinispan.eviction.EvictionType; -import org.infinispan.manager.DefaultCacheManager; -import org.infinispan.transaction.LockingMode; -import org.infinispan.transaction.TransactionMode; - -import java.util.concurrent.TimeUnit; - -public class CacheConfiguration { - - public static final String SIMPLE_HELLO_WORLD_CACHE = "simple-hello-world-cache"; - public static final String EXPIRING_HELLO_WORLD_CACHE = "expiring-hello-world-cache"; - public static final String EVICTING_HELLO_WORLD_CACHE = "evicting-hello-world-cache"; - public static final String PASSIVATING_HELLO_WORLD_CACHE = "passivating-hello-world-cache"; - public static final String TRANSACTIONAL_CACHE = "transactional-cache"; - - public DefaultCacheManager cacheManager() { - return new DefaultCacheManager(); - } - - public Cache transactionalCache(DefaultCacheManager cacheManager, CacheListener listener) { - return this.buildCache(TRANSACTIONAL_CACHE, cacheManager, listener, transactionalConfiguration()); - } - - public Cache simpleHelloWorldCache(DefaultCacheManager cacheManager, CacheListener listener) { - return this.buildCache(SIMPLE_HELLO_WORLD_CACHE, cacheManager, listener, new ConfigurationBuilder().build()); - } - - public Cache expiringHelloWorldCache(DefaultCacheManager cacheManager, CacheListener listener) { - return this.buildCache(EXPIRING_HELLO_WORLD_CACHE, cacheManager, listener, expiringConfiguration()); - } - - public Cache evictingHelloWorldCache(DefaultCacheManager cacheManager, CacheListener listener) { - return this.buildCache(EVICTING_HELLO_WORLD_CACHE, cacheManager, listener, evictingConfiguration()); - } - - public Cache passivatingHelloWorldCache(DefaultCacheManager cacheManager, CacheListener listener) { - return this.buildCache(PASSIVATING_HELLO_WORLD_CACHE, cacheManager, listener, passivatingConfiguration()); - } - - private Cache buildCache(String cacheName, DefaultCacheManager cacheManager, CacheListener listener, Configuration configuration) { - - cacheManager.defineConfiguration(cacheName, configuration); - Cache cache = cacheManager.getCache(cacheName); - cache.addListener(listener); - return cache; - } - - private Configuration expiringConfiguration() { - return new ConfigurationBuilder().expiration().lifespan(1, TimeUnit.SECONDS).build(); - } - - private Configuration evictingConfiguration() { - return new ConfigurationBuilder().memory().evictionType(EvictionType.COUNT).size(1).build(); - } - - private Configuration passivatingConfiguration() { - return new ConfigurationBuilder().memory().evictionType(EvictionType.COUNT).size(1).persistence().passivation(true).addSingleFileStore().purgeOnStartup(true).location(System.getProperty("java.io.tmpdir")).build(); - } - - private Configuration transactionalConfiguration() { - return new ConfigurationBuilder().transaction().transactionMode(TransactionMode.TRANSACTIONAL).lockingMode(LockingMode.PESSIMISTIC).build(); - } - -} diff --git a/libraries/src/main/java/com/baeldung/infinispan/listener/CacheListener.java b/libraries/src/main/java/com/baeldung/infinispan/listener/CacheListener.java deleted file mode 100644 index 942a2fb62d31..000000000000 --- a/libraries/src/main/java/com/baeldung/infinispan/listener/CacheListener.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.baeldung.infinispan.listener; - -import org.infinispan.notifications.Listener; -import org.infinispan.notifications.cachelistener.annotation.*; -import org.infinispan.notifications.cachelistener.event.*; - -@Listener -public class CacheListener { - - @CacheEntryCreated - public void entryCreated(CacheEntryCreatedEvent event) { - this.printLog("Adding key '" + event.getKey() + "' to cache", event); - } - - @CacheEntryExpired - public void entryExpired(CacheEntryExpiredEvent event) { - this.printLog("Expiring key '" + event.getKey() + "' from cache", event); - } - - @CacheEntryVisited - public void entryVisited(CacheEntryVisitedEvent event) { - this.printLog("Key '" + event.getKey() + "' was visited", event); - } - - @CacheEntryActivated - public void entryActivated(CacheEntryActivatedEvent event) { - this.printLog("Activating key '" + event.getKey() + "' on cache", event); - } - - @CacheEntryPassivated - public void entryPassivated(CacheEntryPassivatedEvent event) { - this.printLog("Passivating key '" + event.getKey() + "' from cache", event); - } - - @CacheEntryLoaded - public void entryLoaded(CacheEntryLoadedEvent event) { - this.printLog("Loading key '" + event.getKey() + "' to cache", event); - } - - @CacheEntriesEvicted - public void entriesEvicted(CacheEntriesEvictedEvent event) { - final StringBuilder builder = new StringBuilder(); - event.getEntries().forEach((key, value) -> builder.append(key).append(", ")); - System.out.println("Evicting following entries from cache: " + builder.toString()); - } - - private void printLog(String log, CacheEntryEvent event) { - if (!event.isPre()) { - System.out.println(log); - } - } - -} diff --git a/libraries/src/main/java/com/baeldung/infinispan/repository/HelloWorldRepository.java b/libraries/src/main/java/com/baeldung/infinispan/repository/HelloWorldRepository.java deleted file mode 100644 index 85c0d539a358..000000000000 --- a/libraries/src/main/java/com/baeldung/infinispan/repository/HelloWorldRepository.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.baeldung.infinispan.repository; - -public class HelloWorldRepository { - - public String getHelloWorld() { - try { - System.out.println("Executing some heavy query"); - Thread.sleep(1000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - return "Hello World!"; - } - -} diff --git a/libraries/src/main/java/com/baeldung/infinispan/service/HelloWorldService.java b/libraries/src/main/java/com/baeldung/infinispan/service/HelloWorldService.java deleted file mode 100644 index de30cd5c8e17..000000000000 --- a/libraries/src/main/java/com/baeldung/infinispan/service/HelloWorldService.java +++ /dev/null @@ -1,77 +0,0 @@ -package com.baeldung.infinispan.service; - -import com.baeldung.infinispan.listener.CacheListener; -import com.baeldung.infinispan.repository.HelloWorldRepository; -import org.infinispan.Cache; - -import java.util.concurrent.TimeUnit; - -public class HelloWorldService { - - private final HelloWorldRepository repository; - - private final Cache simpleHelloWorldCache; - private final Cache expiringHelloWorldCache; - private final Cache evictingHelloWorldCache; - private final Cache passivatingHelloWorldCache; - - public HelloWorldService(HelloWorldRepository repository, CacheListener listener, Cache simpleHelloWorldCache, Cache expiringHelloWorldCache, Cache evictingHelloWorldCache, - Cache passivatingHelloWorldCache) { - - this.repository = repository; - - this.simpleHelloWorldCache = simpleHelloWorldCache; - this.expiringHelloWorldCache = expiringHelloWorldCache; - this.evictingHelloWorldCache = evictingHelloWorldCache; - this.passivatingHelloWorldCache = passivatingHelloWorldCache; - } - - public String findSimpleHelloWorld() { - String cacheKey = "simple-hello"; - return simpleHelloWorldCache.computeIfAbsent(cacheKey, k -> repository.getHelloWorld()); - } - - public String findExpiringHelloWorld() { - String cacheKey = "expiring-hello"; - String helloWorld = simpleHelloWorldCache.get(cacheKey); - if (helloWorld == null) { - helloWorld = repository.getHelloWorld(); - simpleHelloWorldCache.put(cacheKey, helloWorld, 1, TimeUnit.SECONDS); - } - return helloWorld; - } - - public String findIdleHelloWorld() { - String cacheKey = "idle-hello"; - String helloWorld = simpleHelloWorldCache.get(cacheKey); - if (helloWorld == null) { - helloWorld = repository.getHelloWorld(); - simpleHelloWorldCache.put(cacheKey, helloWorld, -1, TimeUnit.SECONDS, 10, TimeUnit.SECONDS); - } - return helloWorld; - } - - public String findSimpleHelloWorldInExpiringCache() { - String cacheKey = "simple-hello"; - String helloWorld = expiringHelloWorldCache.get(cacheKey); - if (helloWorld == null) { - helloWorld = repository.getHelloWorld(); - expiringHelloWorldCache.put(cacheKey, helloWorld); - } - return helloWorld; - } - - public String findEvictingHelloWorld(String key) { - String value = evictingHelloWorldCache.get(key); - if (value == null) { - value = repository.getHelloWorld(); - evictingHelloWorldCache.put(key, value); - } - return value; - } - - public String findPassivatingHelloWorld(String key) { - return passivatingHelloWorldCache.computeIfAbsent(key, k -> repository.getHelloWorld()); - } - -} diff --git a/libraries/src/main/java/com/baeldung/infinispan/service/TransactionalService.java b/libraries/src/main/java/com/baeldung/infinispan/service/TransactionalService.java deleted file mode 100644 index 26862b8d6551..000000000000 --- a/libraries/src/main/java/com/baeldung/infinispan/service/TransactionalService.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.baeldung.infinispan.service; - -import org.infinispan.Cache; -import org.springframework.util.StopWatch; - -import javax.transaction.TransactionManager; - -public class TransactionalService { - - private final Cache transactionalCache; - - private static final String KEY = "key"; - - public TransactionalService(Cache transactionalCache) { - this.transactionalCache = transactionalCache; - - transactionalCache.put(KEY, 0); - } - - public Integer getQuickHowManyVisits() { - try { - TransactionManager tm = transactionalCache.getAdvancedCache().getTransactionManager(); - tm.begin(); - Integer howManyVisits = transactionalCache.get(KEY); - howManyVisits++; - System.out.println("Ill try to set HowManyVisits to " + howManyVisits); - StopWatch watch = new StopWatch(); - watch.start(); - transactionalCache.put(KEY, howManyVisits); - watch.stop(); - System.out.println("I was able to set HowManyVisits to " + howManyVisits + " after waiting " + watch.getTotalTimeSeconds() + " seconds"); - - tm.commit(); - return howManyVisits; - } catch (Exception e) { - e.printStackTrace(); - return 0; - } - } - - public void startBackgroundBatch() { - try { - TransactionManager tm = transactionalCache.getAdvancedCache().getTransactionManager(); - tm.begin(); - transactionalCache.put(KEY, 1000); - System.out.println("HowManyVisits should now be 1000, " + "but we are holding the transaction"); - Thread.sleep(1000L); - tm.rollback(); - System.out.println("The slow batch suffered a rollback"); - } catch (Exception e) { - e.printStackTrace(); - } - } - -} diff --git a/libraries/src/main/java/com/baeldung/measurement/WaterTank.java b/libraries/src/main/java/com/baeldung/measurement/WaterTank.java deleted file mode 100644 index f3675ae68930..000000000000 --- a/libraries/src/main/java/com/baeldung/measurement/WaterTank.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.baeldung.measurement; - -import javax.measure.Quantity; -import javax.measure.quantity.Volume; - -public class WaterTank { - - private Quantity capacityMeasure; - private double capacityDouble; - - public void setCapacityMeasure(Quantity capacityMeasure) { - this.capacityMeasure = capacityMeasure; - } - - public void setCapacityDouble(double capacityDouble) { - this.capacityDouble = capacityDouble; - } - - public Quantity getCapacityMeasure() { - return capacityMeasure; - } - - public double getCapacityDouble() { - return capacityDouble; - } -} diff --git a/libraries/src/main/java/com/baeldung/opencsv/Application.java b/libraries/src/main/java/com/baeldung/opencsv/Application.java deleted file mode 100644 index fd7e4d82d48d..000000000000 --- a/libraries/src/main/java/com/baeldung/opencsv/Application.java +++ /dev/null @@ -1,108 +0,0 @@ -package com.baeldung.opencsv; - -import com.baeldung.opencsv.beans.NamedColumnBean; -import com.baeldung.opencsv.beans.SimplePositionBean; -import com.baeldung.opencsv.examples.sync.BeanExamples; -import com.baeldung.opencsv.examples.sync.CsvReaderExamples; -import com.baeldung.opencsv.examples.sync.CsvWriterExamples; -import com.baeldung.opencsv.helpers.Helpers; - -import java.io.Reader; -import java.nio.file.Files; -import java.nio.file.Path; - -public class Application { - - /* - * Bean Examples. - */ - - public static String simpleSyncPositionBeanExample() { - Path path = null; - try { - path = Helpers.twoColumnCsvPath(); - } catch (Exception ex) { - Helpers.err(ex); - } - return BeanExamples.beanBuilderExample(path, SimplePositionBean.class).toString(); - } - - public static String namedSyncColumnBeanExample() { - Path path = null; - try { - path = Helpers.namedColumnCsvPath(); - } catch (Exception ex) { - Helpers.err(ex); - } - return BeanExamples.beanBuilderExample(path, NamedColumnBean.class).toString(); - } - - public static String writeSyncCsvFromBeanExample() { - Path path = null; - try { - path = Helpers.fileOutBeanPath(); - } catch (Exception ex) { - Helpers.err(ex); - } - return BeanExamples.writeCsvFromBean(path); - } - - /* - * CSV Reader Examples. - */ - - public static String oneByOneSyncExample() { - Reader reader = null; - try { - reader = Files.newBufferedReader(Helpers.twoColumnCsvPath()); - } catch (Exception ex) { - Helpers.err(ex); - } - return CsvReaderExamples.oneByOne(reader).toString(); - } - - public static String readAllSyncExample() { - Reader reader = null; - try { - reader = Files.newBufferedReader(Helpers.twoColumnCsvPath()); - } catch (Exception ex) { - Helpers.err(ex); - } - return CsvReaderExamples.readAll(reader).toString(); - } - - /* - * CSV Writer Examples. - */ - - - public static String csvWriterSyncOneByOne() { - Path path = null; - try { - path = Helpers.fileOutOnePath(); - } catch (Exception ex) { - Helpers.err(ex); - } - return CsvWriterExamples.csvWriterOneByOne(Helpers.fourColumnCsvString(), path); - } - - public static String csvWriterSyncAll() { - Path path = null; - try { - path = Helpers.fileOutAllPath(); - } catch (Exception ex) { - Helpers.err(ex); - } - return CsvWriterExamples.csvWriterAll(Helpers.fourColumnCsvString(), path); - } - - public static void main(String[] args) { - simpleSyncPositionBeanExample(); - namedSyncColumnBeanExample(); - writeSyncCsvFromBeanExample(); - oneByOneSyncExample(); - readAllSyncExample(); - csvWriterSyncOneByOne(); - csvWriterSyncAll(); - } -} diff --git a/libraries/src/main/java/com/baeldung/opencsv/Constants.java b/libraries/src/main/java/com/baeldung/opencsv/Constants.java deleted file mode 100644 index f7978acf24c1..000000000000 --- a/libraries/src/main/java/com/baeldung/opencsv/Constants.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.baeldung.opencsv; - -public class Constants { - - public static final String GENERIC_EXCEPTION = "EXCEPTION ENCOUNTERED: "; - public static final String GENERIC_SUCCESS = "SUCCESS"; - - public static final String TWO_COLUMN_CSV = "csv/twoColumn.csv"; - public static final String FOUR_COLUMN_CSV = "csv/fourColumn.csv"; - public static final String NAMED_COLUMN_CSV = "csv/namedColumn.csv"; - - public static final String CSV_All = "csv/writtenAll.csv"; - public static final String CSV_BEAN = "csv/writtenBean.csv"; - public static final String CSV_ONE = "csv/writtenOneByOne.csv"; - - -} diff --git a/libraries/src/main/java/com/baeldung/opencsv/beans/CsvBean.java b/libraries/src/main/java/com/baeldung/opencsv/beans/CsvBean.java deleted file mode 100644 index af9caaae12ea..000000000000 --- a/libraries/src/main/java/com/baeldung/opencsv/beans/CsvBean.java +++ /dev/null @@ -1,3 +0,0 @@ -package com.baeldung.opencsv.beans; - -public class CsvBean { } diff --git a/libraries/src/main/java/com/baeldung/opencsv/beans/NamedColumnBean.java b/libraries/src/main/java/com/baeldung/opencsv/beans/NamedColumnBean.java deleted file mode 100644 index d9e5f9633365..000000000000 --- a/libraries/src/main/java/com/baeldung/opencsv/beans/NamedColumnBean.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.baeldung.opencsv.beans; - -import com.opencsv.bean.CsvBindByName; - -public class NamedColumnBean extends CsvBean { - - @CsvBindByName(column = "name") - private String name; - - //Automatically infer column name as Age - @CsvBindByName - private int age; - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public int getAge() { - return age; - } - - public void setAge(int age) { - this.age = age; - } - - -} diff --git a/libraries/src/main/java/com/baeldung/opencsv/beans/SimplePositionBean.java b/libraries/src/main/java/com/baeldung/opencsv/beans/SimplePositionBean.java deleted file mode 100644 index 799006e2f9c2..000000000000 --- a/libraries/src/main/java/com/baeldung/opencsv/beans/SimplePositionBean.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.baeldung.opencsv.beans; - -import com.opencsv.bean.CsvBindByPosition; - -public class SimplePositionBean extends CsvBean { - - @CsvBindByPosition(position = 0) - private String exampleColOne; - - @CsvBindByPosition(position = 1) - private String exampleColTwo; - - public String getExampleColOne() { - return exampleColOne; - } - - private void setExampleColOne(String exampleColOne) { - this.exampleColOne = exampleColOne; - } - - public String getExampleColTwo() { - return exampleColTwo; - } - - private void setExampleCsvTwo (String exampleColTwo) { - this.exampleColTwo = exampleColTwo; - } - -} diff --git a/libraries/src/main/java/com/baeldung/opencsv/beans/WriteExampleBean.java b/libraries/src/main/java/com/baeldung/opencsv/beans/WriteExampleBean.java deleted file mode 100644 index f145f67f11ff..000000000000 --- a/libraries/src/main/java/com/baeldung/opencsv/beans/WriteExampleBean.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.baeldung.opencsv.beans; - -public class WriteExampleBean extends CsvBean { - - private String colA; - - private String colB; - - private String colC; - - public WriteExampleBean(String colA, String colB, String colC) { - this.colA = colA; - this.colB = colB; - this.colC = colC; - } - - public String getColA() { - return colA; - } - - public void setColA(String colA) { - this.colA = colA; - } - - public String getColB() { - return colB; - } - - public void setColB(String colB) { - this.colB = colB; - } - - public String getColC() { - return colC; - } - - public void setColC(String colC) { - this.colC = colC; - } -} diff --git a/libraries/src/main/java/com/baeldung/opencsv/examples/sync/BeanExamples.java b/libraries/src/main/java/com/baeldung/opencsv/examples/sync/BeanExamples.java deleted file mode 100644 index 086f32677e90..000000000000 --- a/libraries/src/main/java/com/baeldung/opencsv/examples/sync/BeanExamples.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.baeldung.opencsv.examples.sync; - -import com.baeldung.opencsv.beans.CsvBean; -import com.baeldung.opencsv.beans.WriteExampleBean; -import com.baeldung.opencsv.helpers.Helpers; -import com.baeldung.opencsv.pojos.CsvTransfer; -import com.opencsv.CSVWriter; -import com.opencsv.bean.*; - -import java.io.FileWriter; -import java.io.Reader; -import java.io.Writer; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.ArrayList; -import java.util.List; - -public class BeanExamples { - - public static List beanBuilderExample(Path path, Class clazz) { - ColumnPositionMappingStrategy ms = new ColumnPositionMappingStrategy(); - return beanBuilderExample(path, clazz, ms); - } - - public static List beanBuilderExample(Path path, Class clazz, MappingStrategy ms) { - CsvTransfer csvTransfer = new CsvTransfer(); - try { - ms.setType(clazz); - - Reader reader = Files.newBufferedReader(path); - CsvToBean cb = new CsvToBeanBuilder(reader).withType(clazz) - .withMappingStrategy(ms) - .build(); - - csvTransfer.setCsvList(cb.parse()); - reader.close(); - - } catch (Exception ex) { - Helpers.err(ex); - } - return csvTransfer.getCsvList(); - } - - public static String writeCsvFromBean(Path path) { - try { - Writer writer = new FileWriter(path.toString()); - - StatefulBeanToCsv sbc = new StatefulBeanToCsvBuilder(writer).withSeparator(CSVWriter.DEFAULT_SEPARATOR) - .build(); - - List list = new ArrayList<>(); - list.add(new WriteExampleBean("Test1", "sfdsf", "fdfd")); - list.add(new WriteExampleBean("Test2", "ipso", "facto")); - - sbc.write(list); - writer.close(); - - } catch (Exception ex) { - Helpers.err(ex); - } - return Helpers.readFile(path); - } -} \ No newline at end of file diff --git a/libraries/src/main/java/com/baeldung/opencsv/examples/sync/CsvReaderExamples.java b/libraries/src/main/java/com/baeldung/opencsv/examples/sync/CsvReaderExamples.java deleted file mode 100644 index bacfdcff3dfe..000000000000 --- a/libraries/src/main/java/com/baeldung/opencsv/examples/sync/CsvReaderExamples.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.baeldung.opencsv.examples.sync; - -import com.baeldung.opencsv.helpers.Helpers; -import com.opencsv.CSVParser; -import com.opencsv.CSVParserBuilder; -import com.opencsv.CSVReader; -import com.opencsv.CSVReaderBuilder; - -import java.io.Reader; -import java.util.ArrayList; -import java.util.List; - -public class CsvReaderExamples { - - public static List readAll(Reader reader) { - - CSVParser parser = new CSVParserBuilder() - .withSeparator(',') - .withIgnoreQuotations(true) - .build(); - - CSVReader csvReader = new CSVReaderBuilder(reader) - .withSkipLines(0) - .withCSVParser(parser) - .build(); - - List list = new ArrayList<>(); - try { - list = csvReader.readAll(); - reader.close(); - csvReader.close(); - } catch (Exception ex) { - Helpers.err(ex); - } - return list; - } - - public static List oneByOne(Reader reader) { - List list = new ArrayList<>(); - try { - CSVParser parser = new CSVParserBuilder() - .withSeparator(',') - .withIgnoreQuotations(true) - .build(); - - CSVReader csvReader = new CSVReaderBuilder(reader) - .withSkipLines(0) - .withCSVParser(parser) - .build(); - - String[] line; - while ((line = csvReader.readNext()) != null) { - list.add(line); - } - reader.close(); - csvReader.close(); - } catch (Exception ex) { - Helpers.err(ex); - } - return list; - } - -} diff --git a/libraries/src/main/java/com/baeldung/opencsv/examples/sync/CsvWriterExamples.java b/libraries/src/main/java/com/baeldung/opencsv/examples/sync/CsvWriterExamples.java deleted file mode 100644 index 6f52160ba865..000000000000 --- a/libraries/src/main/java/com/baeldung/opencsv/examples/sync/CsvWriterExamples.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.baeldung.opencsv.examples.sync; - -import com.baeldung.opencsv.helpers.Helpers; -import com.opencsv.CSVWriter; - -import java.io.FileWriter; -import java.nio.file.Path; -import java.util.List; - -public class CsvWriterExamples { - - public static String csvWriterOneByOne(List stringArray, Path path) { - try { - CSVWriter writer = new CSVWriter(new FileWriter(path.toString())); - for (String[] array : stringArray) { - writer.writeNext(array); - } - writer.close(); - } catch (Exception ex) { - Helpers.err(ex); - } - return Helpers.readFile(path); - } - - public static String csvWriterAll(List stringArray, Path path) { - try { - CSVWriter writer = new CSVWriter(new FileWriter(path.toString())); - writer.writeAll(stringArray); - writer.close(); - } catch (Exception ex) { - Helpers.err(ex); - } - return Helpers.readFile(path); - } -} \ No newline at end of file diff --git a/libraries/src/main/java/com/baeldung/opencsv/helpers/Helpers.java b/libraries/src/main/java/com/baeldung/opencsv/helpers/Helpers.java deleted file mode 100644 index 9a46fbc49589..000000000000 --- a/libraries/src/main/java/com/baeldung/opencsv/helpers/Helpers.java +++ /dev/null @@ -1,108 +0,0 @@ -package com.baeldung.opencsv.helpers; - -import com.baeldung.opencsv.Constants; - -import java.io.BufferedReader; -import java.io.FileReader; -import java.net.URI; -import java.net.URISyntaxException; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.List; - -public class Helpers { - - /** - * Write Files - */ - - public static Path fileOutAllPath() throws URISyntaxException { - URI uri = ClassLoader.getSystemResource(Constants.CSV_All).toURI(); - return Paths.get(uri); - } - - public static Path fileOutBeanPath() throws URISyntaxException { - URI uri = ClassLoader.getSystemResource(Constants.CSV_BEAN).toURI(); - return Paths.get(uri); - } - - public static Path fileOutOnePath() throws URISyntaxException { - URI uri = ClassLoader.getSystemResource(Constants.CSV_ONE).toURI(); - return Paths.get(uri); - } - - /** - * Read Files - */ - - public static Path twoColumnCsvPath() throws URISyntaxException { - URI uri = ClassLoader.getSystemResource(Constants.TWO_COLUMN_CSV).toURI(); - return Paths.get(uri); - } - - public static Path fourColumnCsvPath() throws URISyntaxException { - URI uri = ClassLoader.getSystemResource(Constants.FOUR_COLUMN_CSV).toURI(); - return Paths.get(uri); - } - - public static Path namedColumnCsvPath() throws URISyntaxException { - URI uri = ClassLoader.getSystemResource(Constants.NAMED_COLUMN_CSV).toURI(); - return Paths.get(uri); - } - - /** - * Simple File Reader - */ - - public static String readFile(Path path) { - String response = ""; - try { - FileReader fr = new FileReader(path.toString()); - BufferedReader br = new BufferedReader(fr); - String strLine; - StringBuffer sb = new StringBuffer(); - while ((strLine = br.readLine()) != null) { - sb.append(strLine); - } - response = sb.toString(); - System.out.println(response); - fr.close(); - br.close(); - } catch (Exception ex) { - Helpers.err(ex); - } - return response; - } - - /** - * Dummy Data for Writing. - */ - - public static List twoColumnCsvString() { - List list = new ArrayList<>(); - list.add(new String[]{"ColA", "ColB"}); - list.add(new String[]{"A", "B"}); - return list; - } - - public static List fourColumnCsvString() { - List list = new ArrayList<>(); - list.add(new String[]{"ColA", "ColB", "ColC", "ColD"}); - list.add(new String[]{"A", "B", "A", "B"}); - list.add(new String[]{"BB", "AB", "AA", "B"}); - return list; - } - - /** - * Message Helpers - */ - - public static void print(String msg) { - System.out.println(msg); - } - - public static void err(Exception ex) { - System.out.println(Constants.GENERIC_EXCEPTION + " " + ex); - } -} diff --git a/libraries/src/main/java/com/baeldung/opencsv/pojos/CsvTransfer.java b/libraries/src/main/java/com/baeldung/opencsv/pojos/CsvTransfer.java deleted file mode 100644 index 79366e3d2032..000000000000 --- a/libraries/src/main/java/com/baeldung/opencsv/pojos/CsvTransfer.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.baeldung.opencsv.pojos; - -import com.baeldung.opencsv.beans.CsvBean; - -import java.util.ArrayList; -import java.util.List; - -public class CsvTransfer { - - private List csvStringList; - - private List csvList; - - public CsvTransfer() {} - - public List getCsvStringList() { - if (csvStringList != null) return csvStringList; - return new ArrayList(); - } - - public void addLine(String[] line) { - if (this.csvList == null) this.csvStringList = new ArrayList<>(); - this.csvStringList.add(line); - } - - public void setCsvStringList(List csvStringList) { - this.csvStringList = csvStringList; - } - - public void setCsvList(List csvList) { - this.csvList = csvList; - } - - public List getCsvList() { - if (csvList != null) return csvList; - return new ArrayList(); - } -} \ No newline at end of file diff --git a/libraries/src/main/java/com/baeldung/smooks/converter/OrderConverter.java b/libraries/src/main/java/com/baeldung/smooks/converter/OrderConverter.java deleted file mode 100644 index fa317f93b71a..000000000000 --- a/libraries/src/main/java/com/baeldung/smooks/converter/OrderConverter.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.baeldung.smooks.converter; - -import com.baeldung.smooks.model.Order; -import org.milyn.Smooks; -import org.milyn.payload.JavaResult; -import org.milyn.payload.StringResult; -import org.xml.sax.SAXException; - -import javax.xml.transform.stream.StreamSource; -import java.io.IOException; - -public class OrderConverter { - - public Order convertOrderXMLToOrderObject(String path) throws IOException, SAXException { - Smooks smooks = new Smooks(OrderConverter.class.getResourceAsStream("/smooks/smooks-mapping.xml")); - try { - JavaResult javaResult = new JavaResult(); - smooks.filterSource(new StreamSource(OrderConverter.class.getResourceAsStream(path)), javaResult); - return (Order) javaResult.getBean("order"); - } finally { - smooks.close(); - } - } - - public String convertOrderXMLtoEDIFACT(String path) throws IOException, SAXException { - return convertDocumentWithTempalte(path, "/smooks/smooks-transform-edi.xml"); - } - - public String convertOrderXMLtoEmailMessage(String path) throws IOException, SAXException { - return convertDocumentWithTempalte(path, "/smooks/smooks-transform-email.xml"); - } - - private String convertDocumentWithTempalte(String path, String config) throws IOException, SAXException { - Smooks smooks = new Smooks(config); - - try { - StringResult stringResult = new StringResult(); - smooks.filterSource(new StreamSource(OrderConverter.class.getResourceAsStream(path)), stringResult); - return stringResult.toString(); - } finally { - smooks.close(); - } - } -} diff --git a/libraries/src/main/java/com/baeldung/smooks/converter/OrderValidator.java b/libraries/src/main/java/com/baeldung/smooks/converter/OrderValidator.java deleted file mode 100644 index 3975921da06d..000000000000 --- a/libraries/src/main/java/com/baeldung/smooks/converter/OrderValidator.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.baeldung.smooks.converter; - -import org.milyn.Smooks; -import org.milyn.payload.JavaResult; -import org.milyn.payload.StringResult; -import org.milyn.validation.ValidationResult; -import org.xml.sax.SAXException; - -import javax.xml.transform.stream.StreamSource; -import java.io.IOException; - -public class OrderValidator { - - public ValidationResult validate(String path) throws IOException, SAXException { - Smooks smooks = new Smooks(OrderValidator.class.getResourceAsStream("/smooks/smooks-validation.xml")); - - try { - StringResult xmlResult = new StringResult(); - JavaResult javaResult = new JavaResult(); - ValidationResult validationResult = new ValidationResult(); - smooks.filterSource(new StreamSource(OrderValidator.class.getResourceAsStream(path)), xmlResult, javaResult, validationResult); - return validationResult; - } finally { - smooks.close(); - } - } -} diff --git a/libraries/src/main/java/com/baeldung/smooks/model/Item.java b/libraries/src/main/java/com/baeldung/smooks/model/Item.java deleted file mode 100644 index 3e1f4a7ef483..000000000000 --- a/libraries/src/main/java/com/baeldung/smooks/model/Item.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.baeldung.smooks.model; - -public class Item { - - public Item() { - } - - public Item(String code, Double price, Integer quantity) { - this.code = code; - this.price = price; - this.quantity = quantity; - } - - private String code; - private Double price; - private Integer quantity; - - public String getCode() { - return code; - } - - public void setCode(String code) { - this.code = code; - } - - public Double getPrice() { - return price; - } - - public void setPrice(Double price) { - this.price = price; - } - - public Integer getQuantity() { - return quantity; - } - - public void setQuantity(Integer quantity) { - this.quantity = quantity; - } - - @Override - public boolean equals(Object o) { - if (this == o) - return true; - if (o == null || getClass() != o.getClass()) - return false; - - Item item = (Item) o; - - if (code != null ? !code.equals(item.code) : item.code != null) - return false; - if (price != null ? !price.equals(item.price) : item.price != null) - return false; - return quantity != null ? quantity.equals(item.quantity) : item.quantity == null; - } - - @Override - public int hashCode() { - int result = code != null ? code.hashCode() : 0; - result = 31 * result + (price != null ? price.hashCode() : 0); - result = 31 * result + (quantity != null ? quantity.hashCode() : 0); - return result; - } - - @Override - public String toString() { - return "Item{" + "code='" + code + '\'' + ", price=" + price + ", quantity=" + quantity + '}'; - } -} diff --git a/libraries/src/main/java/com/baeldung/smooks/model/Order.java b/libraries/src/main/java/com/baeldung/smooks/model/Order.java deleted file mode 100644 index 047e1fe8a389..000000000000 --- a/libraries/src/main/java/com/baeldung/smooks/model/Order.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.baeldung.smooks.model; - -import java.util.Date; -import java.util.List; - -public class Order { - private Date creationDate; - private Long number; - private Status status; - private Supplier supplier; - private List items; - - public Date getCreationDate() { - return creationDate; - } - - public void setCreationDate(Date creationDate) { - this.creationDate = creationDate; - } - - public Long getNumber() { - return number; - } - - public void setNumber(Long number) { - this.number = number; - } - - public Status getStatus() { - return status; - } - - public void setStatus(Status status) { - this.status = status; - } - - public Supplier getSupplier() { - return supplier; - } - - public void setSupplier(Supplier supplier) { - this.supplier = supplier; - } - - public List getItems() { - return items; - } - - public void setItems(List items) { - this.items = items; - } -} diff --git a/libraries/src/main/java/com/baeldung/smooks/model/Status.java b/libraries/src/main/java/com/baeldung/smooks/model/Status.java deleted file mode 100644 index 53c50bdf466e..000000000000 --- a/libraries/src/main/java/com/baeldung/smooks/model/Status.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.baeldung.smooks.model; - -public enum Status { - NEW, IN_PROGRESS, FINISHED -} diff --git a/libraries/src/main/java/com/baeldung/smooks/model/Supplier.java b/libraries/src/main/java/com/baeldung/smooks/model/Supplier.java deleted file mode 100644 index 827a0fc9074c..000000000000 --- a/libraries/src/main/java/com/baeldung/smooks/model/Supplier.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.baeldung.smooks.model; - -public class Supplier { - - private String name; - private String phoneNumber; - - public Supplier() { - } - - public Supplier(String name, String phoneNumber) { - this.name = name; - this.phoneNumber = phoneNumber; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getPhoneNumber() { - return phoneNumber; - } - - public void setPhoneNumber(String phoneNumber) { - this.phoneNumber = phoneNumber; - } - - @Override - public boolean equals(Object o) { - if (this == o) - return true; - if (o == null || getClass() != o.getClass()) - return false; - - Supplier supplier = (Supplier) o; - - if (name != null ? !name.equals(supplier.name) : supplier.name != null) - return false; - return phoneNumber != null ? phoneNumber.equals(supplier.phoneNumber) : supplier.phoneNumber == null; - } - - @Override - public int hashCode() { - int result = name != null ? name.hashCode() : 0; - result = 31 * result + (phoneNumber != null ? phoneNumber.hashCode() : 0); - return result; - } -} diff --git a/libraries/src/test/java/com/baeldung/crdt/CRDTUnitTest.java b/libraries/src/test/java/com/baeldung/crdt/CRDTUnitTest.java deleted file mode 100644 index 840263e430ff..000000000000 --- a/libraries/src/test/java/com/baeldung/crdt/CRDTUnitTest.java +++ /dev/null @@ -1,149 +0,0 @@ -package com.baeldung.crdt; - -import com.netopyr.wurmloch.crdt.GCounter; -import com.netopyr.wurmloch.crdt.GSet; -import com.netopyr.wurmloch.crdt.LWWRegister; -import com.netopyr.wurmloch.crdt.PNCounter; -import com.netopyr.wurmloch.store.LocalCrdtStore; -import org.junit.Test; - -import static org.assertj.core.api.Assertions.assertThat; - -public class CRDTUnitTest { - - @Test - public void givenGrowOnlySet_whenTwoReplicasDiverge_thenShouldMergeItWithoutAConflict() { - // given - final LocalCrdtStore crdtStore1 = new LocalCrdtStore(); - final LocalCrdtStore crdtStore2 = new LocalCrdtStore(); - crdtStore1.connect(crdtStore2); - - final GSet replica1 = crdtStore1.createGSet("ID_1"); - final GSet replica2 = crdtStore2. findGSet("ID_1").get(); - - // when - replica1.add("apple"); - replica2.add("banana"); - - // then - assertThat(replica1).contains("apple", "banana"); - assertThat(replica2).contains("apple", "banana"); - - // when - crdtStore1.disconnect(crdtStore2); - - replica1.add("strawberry"); - replica2.add("pear"); - - assertThat(replica1).contains("apple", "banana", "strawberry"); - assertThat(replica2).contains("apple", "banana", "pear"); - - crdtStore1.connect(crdtStore2); - - // then - assertThat(replica1).contains("apple", "banana", "strawberry", "pear"); - assertThat(replica2).contains("apple", "banana", "strawberry", "pear"); - } - - @Test - public void givenIncrementOnlyCounter_whenTwoReplicasDiverge_thenShouldMergeIt() { - // given - final LocalCrdtStore crdtStore1 = new LocalCrdtStore(); - final LocalCrdtStore crdtStore2 = new LocalCrdtStore(); - crdtStore1.connect(crdtStore2); - - final GCounter replica1 = crdtStore1.createGCounter("ID_1"); - final GCounter replica2 = crdtStore2.findGCounter("ID_1").get(); - - // when - replica1.increment(); - replica2.increment(2L); - - // then - assertThat(replica1.get()).isEqualTo(3L); - assertThat(replica2.get()).isEqualTo(3L); - - // when - crdtStore1.disconnect(crdtStore2); - - replica1.increment(3L); - replica2.increment(5L); - - assertThat(replica1.get()).isEqualTo(6L); - assertThat(replica2.get()).isEqualTo(8L); - - crdtStore1.connect(crdtStore2); - - // then - assertThat(replica1.get()).isEqualTo(11L); - assertThat(replica2.get()).isEqualTo(11L); - } - - @Test - public void givenPNCounter_whenReplicasDiverge_thenShouldMergeWithoutAConflict() { - // given - final LocalCrdtStore crdtStore1 = new LocalCrdtStore(); - final LocalCrdtStore crdtStore2 = new LocalCrdtStore(); - crdtStore1.connect(crdtStore2); - - final PNCounter replica1 = crdtStore1.createPNCounter("ID_1"); - final PNCounter replica2 = crdtStore2.findPNCounter("ID_1").get(); - - // when - replica1.increment(); - replica2.decrement(2L); - - // then - assertThat(replica1.get()).isEqualTo(-1L); - assertThat(replica2.get()).isEqualTo(-1L); - - // when - crdtStore1.disconnect(crdtStore2); - - replica1.decrement(3L); - replica2.increment(5L); - - assertThat(replica1.get()).isEqualTo(-4L); - assertThat(replica2.get()).isEqualTo(4L); - - crdtStore1.connect(crdtStore2); - - // then - assertThat(replica1.get()).isEqualTo(1L); - assertThat(replica2.get()).isEqualTo(1L); - } - - @Test - public void givenLastWriteWinsStrategy_whenReplicasDiverge_thenAfterMergeShouldKeepOnlyLastValue() { - // given - final LocalCrdtStore crdtStore1 = new LocalCrdtStore("N_1"); - final LocalCrdtStore crdtStore2 = new LocalCrdtStore("N_2"); - crdtStore1.connect(crdtStore2); - - final LWWRegister replica1 = crdtStore1.createLWWRegister("ID_1"); - final LWWRegister replica2 = crdtStore2. findLWWRegister("ID_1").get(); - - // when - replica1.set("apple"); - replica2.set("banana"); - - // then - assertThat(replica1.get()).isEqualTo("banana"); - assertThat(replica2.get()).isEqualTo("banana"); - - // when - crdtStore1.disconnect(crdtStore2); - - replica1.set("strawberry"); - replica2.set("pear"); - - assertThat(replica1.get()).isEqualTo("strawberry"); - assertThat(replica2.get()).isEqualTo("pear"); - - crdtStore1.connect(crdtStore2); - - // then - assertThat(replica1.get()).isEqualTo("pear"); - assertThat(replica2.get()).isEqualTo("pear"); - } -} diff --git a/libraries/src/test/java/com/baeldung/google/sheets/GoogleSheetsLiveTest.java b/libraries/src/test/java/com/baeldung/google/sheets/GoogleSheetsLiveTest.java deleted file mode 100644 index 358b3390f9b5..000000000000 --- a/libraries/src/test/java/com/baeldung/google/sheets/GoogleSheetsLiveTest.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.baeldung.google.sheets; - -import java.io.IOException; -import java.security.GeneralSecurityException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import org.junit.BeforeClass; -import org.junit.Test; - -import com.google.api.services.sheets.v4.Sheets; -import com.google.api.services.sheets.v4.model.AppendValuesResponse; -import com.google.api.services.sheets.v4.model.BatchGetValuesResponse; -import com.google.api.services.sheets.v4.model.BatchUpdateSpreadsheetRequest; -import com.google.api.services.sheets.v4.model.BatchUpdateValuesRequest; -import com.google.api.services.sheets.v4.model.BatchUpdateValuesResponse; -import com.google.api.services.sheets.v4.model.CopyPasteRequest; -import com.google.api.services.sheets.v4.model.GridRange; -import com.google.api.services.sheets.v4.model.Request; -import com.google.api.services.sheets.v4.model.Spreadsheet; -import com.google.api.services.sheets.v4.model.SpreadsheetProperties; -import com.google.api.services.sheets.v4.model.UpdateSpreadsheetPropertiesRequest; -import com.google.api.services.sheets.v4.model.UpdateValuesResponse; -import com.google.api.services.sheets.v4.model.ValueRange; - -import static org.assertj.core.api.Assertions.*; - -public class GoogleSheetsLiveTest { - - private static Sheets sheetsService; - - // this id can be replaced with your spreadsheet id - // otherwise be advised that multiple people may run this test and update the public spreadsheet - private static final String SPREADSHEET_ID = "1sILuxZUnyl_7-MlNThjt765oWshN3Xs-PPLfqYe4DhI"; - - @BeforeClass - public static void setup() throws GeneralSecurityException, IOException { - sheetsService = SheetsServiceUtil.getSheetsService(); - } - - @Test - public void whenWriteSheet_thenReadSheetOk() throws IOException { - ValueRange body = new ValueRange().setValues(Arrays.asList(Arrays.asList("Expenses January"), Arrays.asList("books", "30"), Arrays.asList("pens", "10"), Arrays.asList("Expenses February"), Arrays.asList("clothes", "20"), Arrays.asList("shoes", "5"))); - UpdateValuesResponse result = sheetsService.spreadsheets().values().update(SPREADSHEET_ID, "A1", body).setValueInputOption("RAW").execute(); - - List data = new ArrayList<>(); - data.add(new ValueRange().setRange("D1").setValues(Arrays.asList(Arrays.asList("January Total", "=B2+B3")))); - data.add(new ValueRange().setRange("D4").setValues(Arrays.asList(Arrays.asList("February Total", "=B5+B6")))); - - BatchUpdateValuesRequest batchBody = new BatchUpdateValuesRequest().setValueInputOption("USER_ENTERED").setData(data); - BatchUpdateValuesResponse batchResult = sheetsService.spreadsheets().values().batchUpdate(SPREADSHEET_ID, batchBody).execute(); - - List ranges = Arrays.asList("E1", "E4"); - BatchGetValuesResponse readResult = sheetsService.spreadsheets().values().batchGet(SPREADSHEET_ID).setRanges(ranges).execute(); - - ValueRange januaryTotal = readResult.getValueRanges().get(0); - assertThat(januaryTotal.getValues().get(0).get(0)).isEqualTo("40"); - - ValueRange febTotal = readResult.getValueRanges().get(1); - assertThat(febTotal.getValues().get(0).get(0)).isEqualTo("25"); - - ValueRange appendBody = new ValueRange().setValues(Arrays.asList(Arrays.asList("Total", "=E1+E4"))); - AppendValuesResponse appendResult = sheetsService.spreadsheets().values().append(SPREADSHEET_ID, "A1", appendBody).setValueInputOption("USER_ENTERED").setInsertDataOption("INSERT_ROWS").setIncludeValuesInResponse(true).execute(); - - ValueRange total = appendResult.getUpdates().getUpdatedData(); - assertThat(total.getValues().get(0).get(1)).isEqualTo("65"); - } - - @Test - public void whenUpdateSpreadSheetTitle_thenOk() throws IOException { - - UpdateSpreadsheetPropertiesRequest updateRequest = new UpdateSpreadsheetPropertiesRequest().setFields("*").setProperties(new SpreadsheetProperties().setTitle("Expenses")); - - CopyPasteRequest copyRequest = new CopyPasteRequest().setSource(new GridRange().setSheetId(0).setStartColumnIndex(0).setEndColumnIndex(2).setStartRowIndex(0).setEndRowIndex(1)) - .setDestination(new GridRange().setSheetId(1).setStartColumnIndex(0).setEndColumnIndex(2).setStartRowIndex(0).setEndRowIndex(1)).setPasteType("PASTE_VALUES"); - - List requests = new ArrayList<>(); - - requests.add(new Request().setCopyPaste(copyRequest)); - requests.add(new Request().setUpdateSpreadsheetProperties(updateRequest)); - - BatchUpdateSpreadsheetRequest body = new BatchUpdateSpreadsheetRequest().setRequests(requests); - - sheetsService.spreadsheets().batchUpdate(SPREADSHEET_ID, body).execute(); - } - - @Test - public void whenCreateSpreadSheet_thenIdOk() throws IOException { - Spreadsheet spreadSheet = new Spreadsheet().setProperties(new SpreadsheetProperties().setTitle("My Spreadsheet")); - Spreadsheet result = sheetsService.spreadsheets().create(spreadSheet).execute(); - - assertThat(result.getSpreadsheetId()).isNotNull(); - } - -} diff --git a/libraries/src/test/java/com/baeldung/hll/HLLLongRunningManualTest.java b/libraries/src/test/java/com/baeldung/hll/HLLLongRunningManualTest.java deleted file mode 100644 index 2c8113771e26..000000000000 --- a/libraries/src/test/java/com/baeldung/hll/HLLLongRunningManualTest.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.baeldung.hll; - -import com.google.common.hash.HashFunction; -import com.google.common.hash.Hashing; -import net.agkn.hll.HLL; -import org.assertj.core.data.Offset; -import org.junit.Test; - -import java.util.stream.LongStream; - -import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat; - -public class HLLLongRunningManualTest { - - @Test - public void givenHLL_whenAddHugeAmountOfNumbers_thenShouldReturnEstimatedCardinality() { - // given - long numberOfElements = 100_000_000; - long toleratedDifference = 1_000_000; - HashFunction hashFunction = Hashing.murmur3_128(); - HLL hll = new HLL(14, 5); - - // when - LongStream.range(0, numberOfElements).forEach(element -> { - long hashedValue = hashFunction.newHasher().putLong(element).hash().asLong(); - hll.addRaw(hashedValue); - }); - - // then - long cardinality = hll.cardinality(); - assertThat(cardinality).isCloseTo(numberOfElements, Offset.offset(toleratedDifference)); - } - - @Test - public void givenTwoHLLs_whenAddHugeAmountOfNumbers_thenShouldReturnEstimatedCardinalityForUnionOfHLLs() { - // given - long numberOfElements = 100_000_000; - long toleratedDifference = 1_000_000; - HashFunction hashFunction = Hashing.murmur3_128(); - HLL firstHll = new HLL(15, 5); - HLL secondHLL = new HLL(15, 5); - - // when - LongStream.range(0, numberOfElements).forEach(element -> { - long hashedValue = hashFunction.newHasher().putLong(element).hash().asLong(); - firstHll.addRaw(hashedValue); - }); - - LongStream.range(numberOfElements, numberOfElements * 2).forEach(element -> { - long hashedValue = hashFunction.newHasher().putLong(element).hash().asLong(); - secondHLL.addRaw(hashedValue); - }); - - // then - firstHll.union(secondHLL); - long cardinality = firstHll.cardinality(); - assertThat(cardinality).isCloseTo(numberOfElements * 2, Offset.offset(toleratedDifference * 2)); - } -} diff --git a/libraries/src/test/java/com/baeldung/infinispan/AbstractIntegrationTest.java b/libraries/src/test/java/com/baeldung/infinispan/AbstractIntegrationTest.java deleted file mode 100644 index 2a9d43043056..000000000000 --- a/libraries/src/test/java/com/baeldung/infinispan/AbstractIntegrationTest.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.baeldung.infinispan; - -import com.baeldung.infinispan.listener.CacheListener; -import com.baeldung.infinispan.repository.HelloWorldRepository; -import com.baeldung.infinispan.service.HelloWorldService; -import com.baeldung.infinispan.service.TransactionalService; -import org.infinispan.Cache; -import org.infinispan.manager.DefaultCacheManager; -import org.junit.After; -import org.junit.Before; -import org.junit.Ignore; - -import java.util.function.Supplier; - -@Ignore -public abstract class AbstractIntegrationTest { - - private DefaultCacheManager cacheManager; - - private HelloWorldRepository repository = new HelloWorldRepository(); - - protected HelloWorldService helloWorldService; - protected TransactionalService transactionalService; - - @Before - public void setup() { - CacheConfiguration configuration = new CacheConfiguration(); - CacheListener listener = new CacheListener(); - - cacheManager = configuration.cacheManager(); - - Cache transactionalCache = configuration.transactionalCache(cacheManager, listener); - - Cache simpleHelloWorldCache = configuration.simpleHelloWorldCache(cacheManager, listener); - - Cache expiringHelloWorldCache = configuration.expiringHelloWorldCache(cacheManager, listener); - - Cache evictingHelloWorldCache = configuration.evictingHelloWorldCache(cacheManager, listener); - - Cache passivatingHelloWorldCache = configuration.passivatingHelloWorldCache(cacheManager, listener); - - this.helloWorldService = new HelloWorldService(repository, listener, simpleHelloWorldCache, expiringHelloWorldCache, evictingHelloWorldCache, passivatingHelloWorldCache); - - this.transactionalService = new TransactionalService(transactionalCache); - } - - @After - public void tearDown() { - cacheManager.stop(); - } - - protected long timeThis(Supplier supplier) { - long millis = System.currentTimeMillis(); - supplier.get(); - return System.currentTimeMillis() - millis; - } -} diff --git a/libraries/src/test/java/com/baeldung/infinispan/service/HelloWorldServiceTemporaryLiveTest.java b/libraries/src/test/java/com/baeldung/infinispan/service/HelloWorldServiceTemporaryLiveTest.java deleted file mode 100644 index 46cc77cbbaba..000000000000 --- a/libraries/src/test/java/com/baeldung/infinispan/service/HelloWorldServiceTemporaryLiveTest.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.baeldung.infinispan.service; - -import com.baeldung.infinispan.AbstractIntegrationTest; -import org.junit.Test; - -import static org.assertj.core.api.Java6Assertions.assertThat; - -public class HelloWorldServiceTemporaryLiveTest extends AbstractIntegrationTest { - - @Test - public void whenGetIsCalledTwoTimes_thenTheSecondShouldHitTheCache() { - assertThat(timeThis(() -> helloWorldService.findSimpleHelloWorld())).isGreaterThanOrEqualTo(1000); - - assertThat(timeThis(() -> helloWorldService.findSimpleHelloWorld())).isLessThan(100); - } - - @Test - public void whenGetIsCalledTwoTimesQuickly_thenTheSecondShouldHitTheCache() { - assertThat(timeThis(() -> helloWorldService.findExpiringHelloWorld())).isGreaterThanOrEqualTo(1000); - - assertThat(timeThis(() -> helloWorldService.findExpiringHelloWorld())).isLessThan(100); - } - - @Test - public void whenGetIsCalledTwoTimesSparsely_thenNeitherShouldHitTheCache() throws InterruptedException { - assertThat(timeThis(() -> helloWorldService.findExpiringHelloWorld())).isGreaterThanOrEqualTo(1000); - - Thread.sleep(1100); - - assertThat(timeThis(() -> helloWorldService.findExpiringHelloWorld())).isGreaterThanOrEqualTo(1000); - } - - @Test - public void givenOneEntryIsConfigured_whenTwoAreAdded_thenFirstShouldntBeAvailable() { - assertThat(timeThis(() -> helloWorldService.findEvictingHelloWorld("key 1"))).isGreaterThanOrEqualTo(1000); - - assertThat(timeThis(() -> helloWorldService.findEvictingHelloWorld("key 2"))).isGreaterThanOrEqualTo(1000); - - assertThat(timeThis(() -> helloWorldService.findEvictingHelloWorld("key 1"))).isGreaterThanOrEqualTo(1000); - } - - @Test - public void givenOneEntryIsConfigured_whenTwoAreAdded_thenTheFirstShouldBeAvailable() { - assertThat(timeThis(() -> helloWorldService.findPassivatingHelloWorld("key 1"))).isGreaterThanOrEqualTo(1000); - - assertThat(timeThis(() -> helloWorldService.findPassivatingHelloWorld("key 2"))).isGreaterThanOrEqualTo(1000); - - assertThat(timeThis(() -> helloWorldService.findPassivatingHelloWorld("key 1"))).isLessThan(100); - } - -} diff --git a/libraries/src/test/java/com/baeldung/infinispan/service/TransactionalServiceIntegrationTest.java b/libraries/src/test/java/com/baeldung/infinispan/service/TransactionalServiceIntegrationTest.java deleted file mode 100644 index 800c6c2775a4..000000000000 --- a/libraries/src/test/java/com/baeldung/infinispan/service/TransactionalServiceIntegrationTest.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.baeldung.infinispan.service; - -import com.baeldung.infinispan.AbstractIntegrationTest; -import org.junit.Test; - -import static org.assertj.core.api.Java6Assertions.assertThat; - -public class TransactionalServiceIntegrationTest extends AbstractIntegrationTest { - - @Test - public void whenLockingAnEntry_thenItShouldBeInaccessible() throws InterruptedException { - Runnable backGroundJob = () -> transactionalService.startBackgroundBatch(); - Thread backgroundThread = new Thread(backGroundJob); - transactionalService.getQuickHowManyVisits(); - backgroundThread.start(); - Thread.sleep(100); // lets wait our thread warm up - - assertThat(timeThis(() -> transactionalService.getQuickHowManyVisits())).isGreaterThan(500).isLessThan(1000); - } - -} diff --git a/libraries/src/test/java/com/baeldung/measurement/WaterTankUnitTest.java b/libraries/src/test/java/com/baeldung/measurement/WaterTankUnitTest.java deleted file mode 100644 index e23eea1714f5..000000000000 --- a/libraries/src/test/java/com/baeldung/measurement/WaterTankUnitTest.java +++ /dev/null @@ -1,86 +0,0 @@ -package com.baeldung.measurement; - -import javax.measure.Quantity; -import javax.measure.quantity.Area; -import javax.measure.quantity.Length; -import javax.measure.quantity.Pressure; -import javax.measure.quantity.Volume; - -import javax.measure.Unit; -import javax.measure.UnitConverter; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; -import org.junit.Test; - -import com.baeldung.measurement.WaterTank; - -import tec.units.ri.format.SimpleUnitFormat; -import tec.units.ri.quantity.Quantities; -import tec.units.ri.unit.MetricPrefix; -import static tec.units.ri.unit.Units.*; - -public class WaterTankUnitTest { - - @Test - public void givenQuantity_whenGetUnitAndConvertValue_thenSuccess() { - WaterTank waterTank = new WaterTank(); - waterTank.setCapacityMeasure(Quantities.getQuantity(9.2, LITRE)); - assertEquals(LITRE, waterTank.getCapacityMeasure().getUnit()); - - Quantity waterCapacity = waterTank.getCapacityMeasure(); - double volumeInLitre = waterCapacity.getValue().doubleValue(); - assertEquals(9.2, volumeInLitre, 0.0f); - - double volumeInMilliLitre = waterCapacity.to(MetricPrefix.MILLI(LITRE)).getValue().doubleValue(); - assertEquals(9200.0, volumeInMilliLitre, 0.0f); - - // compilation error - // volumeInMilliLitre = waterCapacity.to(MetricPrefix.MILLI(KILOGRAM)); - - Unit Kilometer = MetricPrefix.KILO(METRE); - - // compilation error - // Unit Centimeter = MetricPrefix.CENTI(LITRE); - } - - @Test - public void givenUnit_whenAlternateUnit_ThenGetAlternateUnit() { - - Unit PASCAL = NEWTON.divide(METRE.pow(2)).alternate("Pa").asType(Pressure.class); - assertTrue(SimpleUnitFormat.getInstance().parse("Pa").equals(PASCAL)); - } - - @Test - public void givenUnit_whenProduct_ThenGetProductUnit() { - Unit squareMetre = METRE.multiply(METRE).asType(Area.class); - Quantity line = Quantities.getQuantity(2, METRE); - assertEquals(line.multiply(line).getUnit(), squareMetre); - } - - @Test - public void givenMeters_whenConvertToKilometer_ThenConverted() { - double distanceInMeters = 50.0; - UnitConverter metreToKilometre = METRE.getConverterTo(MetricPrefix.KILO(METRE)); - double distanceInKilometers = metreToKilometre.convert(distanceInMeters); - assertEquals(0.05, distanceInKilometers, 0.00f); - } - - @Test - public void givenSymbol_WhenCompareToSystemUnit_ThenSuccess() { - assertTrue(SimpleUnitFormat.getInstance().parse("kW").equals(MetricPrefix.KILO(WATT))); - assertTrue(SimpleUnitFormat.getInstance().parse("ms").equals(SECOND.divide(1000))); - } - - @Test - public void givenUnits_WhenAdd_ThenSuccess() { - Quantity total = Quantities.getQuantity(2, METRE).add(Quantities.getQuantity(3, METRE)); - assertEquals(total.getValue().intValue(), 5); - - // compilation error - // Quantity total = Quantities.getQuantity(2, METRE).add(Quantities.getQuantity(3, LITRE)); - - Quantity totalKm = Quantities.getQuantity(2, METRE).add(Quantities.getQuantity(3, MetricPrefix.KILO(METRE))); - assertEquals(totalKm.getValue().intValue(), 3002); - } -} diff --git a/libraries/src/test/java/com/baeldung/opencsv/OpenCsvIntegrationTest.java b/libraries/src/test/java/com/baeldung/opencsv/OpenCsvIntegrationTest.java deleted file mode 100644 index fca96684ad9f..000000000000 --- a/libraries/src/test/java/com/baeldung/opencsv/OpenCsvIntegrationTest.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.baeldung.opencsv; - -import com.baeldung.opencsv.helpers.Helpers; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - -public class OpenCsvIntegrationTest { - - private Object testReadCsv(Object result) { - assert (result != null); - assert (result instanceof String); - assert (!((String) result).isEmpty()); - System.out.println(result); - return result; - } - - private Object testWriteCsv(Object result) { - assert (result instanceof String); - assert (!((String) result).isEmpty()); - return result; - } - - @Before - public void setup() { - } - - @Test - public void positionExampleTest() { - testReadCsv(Application.simpleSyncPositionBeanExample()); - } - - @Test - public void namedColumnExampleTest() { - testReadCsv(Application.namedSyncColumnBeanExample()); - } - - @Test - public void writeCsvUsingBeanBuilderTest() { - testWriteCsv(Application.writeSyncCsvFromBeanExample()); - } - - @Test - public void oneByOneExampleTest() { - testReadCsv(Application.oneByOneSyncExample()); - } - - @Test - public void readAllExampleTest() { - testReadCsv(Application.readAllSyncExample()); - } - - @Test - public void csvWriterOneByOneTest() { - testWriteCsv(Application.csvWriterSyncOneByOne()); - } - - @Test - public void csvWriterAllTest() { - testWriteCsv(Application.csvWriterSyncAll()); - } - - @After - public void close() { - } -} \ No newline at end of file diff --git a/libraries/src/test/java/com/baeldung/smooks/converter/SmooksIntegrationTest.java b/libraries/src/test/java/com/baeldung/smooks/converter/SmooksIntegrationTest.java deleted file mode 100644 index df7fea58f80a..000000000000 --- a/libraries/src/test/java/com/baeldung/smooks/converter/SmooksIntegrationTest.java +++ /dev/null @@ -1,60 +0,0 @@ -package com.baeldung.smooks.converter; - -import com.baeldung.smooks.model.Item; -import com.baeldung.smooks.model.Order; -import com.baeldung.smooks.model.Status; -import com.baeldung.smooks.model.Supplier; -import org.junit.Test; -import org.milyn.validation.ValidationResult; -import java.text.SimpleDateFormat; -import static org.hamcrest.Matchers.*; -import static org.junit.Assert.*; - -public class SmooksIntegrationTest { - - private static final String EDIFACT_MESSAGE = "UNA:+.? '" + System.lineSeparator() + "UNH+771+IN_PROGRESS+2018-01-14'" + System.lineSeparator() + "CTA+CompanyX+1234567'" + System.lineSeparator() + "LIN+1+PX1234+9.99'" + System.lineSeparator() - + "LIN+2+RX990+120.32'" + System.lineSeparator(); - private static final String EMAIL_MESSAGE = "Hi," + System.lineSeparator() + "Order number #771 created on 2018-01-14 is currently in IN_PROGRESS status." + System.lineSeparator() + "Consider contact supplier \"CompanyX\" with phone number: \"1234567\"." - + System.lineSeparator() + "Order items:" + System.lineSeparator() + "1 X PX1234 (total price 9.99)" + System.lineSeparator() + "2 X RX990 (total price 240.64)" + System.lineSeparator(); - - @Test - public void givenOrderXML_whenConvert_thenPOJOsConstructedCorrectly() throws Exception { - - OrderConverter xmlToJavaOrderConverter = new OrderConverter(); - Order order = xmlToJavaOrderConverter.convertOrderXMLToOrderObject("/smooks/order.xml"); - - assertThat(order.getNumber(), is(771L)); - assertThat(order.getStatus(), is(Status.IN_PROGRESS)); - assertThat(order.getCreationDate(), is(new SimpleDateFormat("yyyy-MM-dd").parse("2018-01-14"))); - assertThat(order.getSupplier(), is(new Supplier("CompanyX", "1234567"))); - assertThat(order.getItems(), containsInAnyOrder(new Item("PX1234", 9.99, 1), new Item("RX990", 120.32, 2))); - - } - - @Test - public void givenIncorrectOrderXML_whenValidate_thenExpectValidationErrors() throws Exception { - OrderValidator orderValidator = new OrderValidator(); - ValidationResult validationResult = orderValidator.validate("/smooks/order.xml"); - - assertThat(validationResult.getErrors(), hasSize(1)); - // 1234567 didn't match ^[0-9\\-\\+]{9,15}$ - assertThat(validationResult.getErrors() - .get(0) - .getFailRuleResult() - .getRuleName(), is("supplierPhone")); - } - - @Test - public void givenOrderXML_whenApplyEDITemplate_thenConvertedToEDIFACT() throws Exception { - OrderConverter orderConverter = new OrderConverter(); - String edifact = orderConverter.convertOrderXMLtoEDIFACT("/smooks/order.xml"); - assertThat(edifact, is(EDIFACT_MESSAGE)); - } - - @Test - public void givenOrderXML_whenApplyEmailTemplate_thenConvertedToEmailMessage() throws Exception { - OrderConverter orderConverter = new OrderConverter(); - String emailMessage = orderConverter.convertOrderXMLtoEmailMessage("/smooks/order.xml"); - assertThat(emailMessage, is(EMAIL_MESSAGE)); - } -} \ No newline at end of file From 98f59f58a24ef56cb2309d8f3c6a1d17c89b7ae4 Mon Sep 17 00:00:00 2001 From: Sjmillington Date: Mon, 5 Aug 2019 17:12:55 +0100 Subject: [PATCH 76/99] [BAEL-16003] Added missing dependencies - mvn clean install now succeeds --- libraries-data-2/pom.xml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/libraries-data-2/pom.xml b/libraries-data-2/pom.xml index 5570761d91ec..87c620f4382e 100644 --- a/libraries-data-2/pom.xml +++ b/libraries-data-2/pom.xml @@ -109,6 +109,21 @@ infinispan-core ${infinispan.version} + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + ${jackson.version} + + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + + + org.springframework + spring-web + ${spring.version} + @@ -124,5 +139,7 @@ 1.7.0 9.1.5.Final v4-rev493-1.21.0 + 2.9.8 + 4.3.8.RELEASE \ No newline at end of file From c1920ddaaba38796b3105ec3fb3f2eb50acc2df9 Mon Sep 17 00:00:00 2001 From: Juan Vaccari Date: Mon, 5 Aug 2019 17:48:18 +0100 Subject: [PATCH 77/99] BAEL-2928 - Solve conflicts in pom.xml --- pom.xml | 1895 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 950 insertions(+), 945 deletions(-) diff --git a/pom.xml b/pom.xml index 45c84ffb1177..0f7e0edd3ef1 100644 --- a/pom.xml +++ b/pom.xml @@ -1,19 +1,15 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 com.baeldung parent-modules 1.0.0-SNAPSHOT - parent-modules + parent-modules pom - - quarkus - - @@ -57,11 +53,11 @@ test - org.junit.jupiter - junit-jupiter-api + org.junit.jupiter + junit-jupiter-api ${junit-jupiter.version} test - + org.hamcrest hamcrest-core @@ -123,22 +119,22 @@ - - org.junit.platform - junit-platform-surefire-provider - ${junit-platform.version} - - - org.junit.jupiter - junit-jupiter-engine - ${junit-jupiter.version} - - - org.junit.vintage - junit-vintage-engine - ${junit-jupiter.version} - - + + org.junit.platform + junit-platform-surefire-provider + ${junit-platform.version} + + + org.junit.jupiter + junit-jupiter-engine + ${junit-jupiter.version} + + + org.junit.vintage + junit-vintage-engine + ${junit-jupiter.version} + + org.apache.maven.plugins @@ -312,6 +308,10 @@ 3 true + + SpringContextTest + **/*UnitTest + **/*IntegrationTest.java **/*IntTest.java @@ -328,66 +328,67 @@ parent-boot-1 - parent-boot-2 - parent-spring-4 - parent-spring-5 - parent-java - parent-kotlin - - akka-streams - algorithms-genetic - algorithms-miscellaneous-1 - algorithms-miscellaneous-2 - algorithms-miscellaneous-3 - algorithms-sorting - animal-sniffer-mvn-plugin - annotations - antlr - apache-avro - apache-bval - apache-curator - apache-cxf - apache-fop - apache-geode - apache-meecrowave - apache-opennlp - apache-poi - apache-pulsar - apache-shiro - apache-solrj - apache-spark - apache-thrift - apache-tika - apache-velocity - apache-zookeeper - asciidoctor - asm - atomix - autovalue - aws - aws-lambda - axon - azure - - blade - - bootique - - cas - cdi - checker-plugin - core-groovy - core-groovy-2 - core-groovy-collections - - - - core-java-modules/core-java-8 - core-java-modules/core-java-8-2 + parent-boot-2 + parent-spring-4 + parent-spring-5 + parent-java + parent-kotlin + + akka-streams + algorithms-genetic + algorithms-miscellaneous-1 + algorithms-miscellaneous-2 + algorithms-miscellaneous-3 + algorithms-sorting + animal-sniffer-mvn-plugin + annotations + antlr + apache-avro + apache-bval + apache-curator + apache-cxf + apache-fop + apache-geode + apache-meecrowave + apache-opennlp + apache-poi + apache-pulsar + apache-shiro + apache-solrj + apache-spark + apache-thrift + apache-tika + apache-velocity + apache-zookeeper + asciidoctor + asm + atomix + autovalue + aws + aws-lambda + axon + azure + + blade + + bootique + + cas + cdi + checker-plugin + core-groovy + core-groovy-2 + core-groovy-collections + + + + core-java-modules/core-java-8 + core-java-modules/core-java-8-2 core-java-modules/core-java-lambdas core-java-modules/core-java-arrays + core-java-modules/core-java-arrays-2 core-java-modules/core-java-collections core-java-modules/core-java-collections-list core-java-modules/core-java-collections-list-2 @@ -422,7 +423,6 @@ drools dubbo - easy-random ethereum feign @@ -462,12 +462,14 @@ java-lite java-numbers + java-numbers-2 java-rmi java-spi java-streams java-strings java-strings-2 + java-strings-ops java-vavr-stream java-websocket javafx @@ -476,329 +478,326 @@ jaxb - jee-7-security - jersey - JGit - jgroups - jhipster - jhipster-5 - jib - jjwt - jmeter - jmh - jni - jooby - jsf - json - json-path - jsoup - jta - - - kotlin-libraries - kotlin-libraries-2 - - - libraries - libraries-2 - libraries-data - libraries-apache-commons - libraries-primitive - libraries-security - libraries-server - libraries-http - linkrest - logging-modules - lombok - lucene - - mapstruct - maven - maven-archetype - - maven-polyglot/maven-polyglot-json-extension - - mesos-marathon - metrics - - microprofile - msf4j - - mustache - mybatis - - - optaplanner - orika - osgi - - patterns - pdf - performance-tests - - protobuffer - - persistence-modules - quarkus - - rabbitmq - - ratpack - reactor-core - rest-with-spark-java - resteasy - restx - - rule-engines + jee-7-security + jersey + jgit + jgroups + jhipster-5 + jib + jjwt + jmeter + jmh + jni + jooby + jsf + json + json-path + jsoup + jta + + + kotlin-libraries + kotlin-libraries-2 + + + libraries + libraries-2 + libraries-data + libraries-apache-commons + libraries-primitive + libraries-security + libraries-server + libraries-http + libraries-io + linkrest + logging-modules + lombok + lucene + + mapstruct + maven + maven-archetype + + maven-polyglot/maven-polyglot-json-extension + + mesos-marathon + metrics + + microprofile + msf4j + + mustache + mybatis + + + optaplanner + orika + osgi + + patterns + pdf + performance-tests + + protobuffer + + persistence-modules + quarkus + + rabbitmq + + ratpack + reactor-core + resteasy + restx + + rule-engines rsocket - rxjava - rxjava-2 - software-security/sql-injection-samples + rxjava + rxjava-2 + software-security/sql-injection-samples tensorflow-java spring-boot-flowable spring-security-kerberos - morphia - + oauth2-framework-impl - - default-second - - - - - org.apache.maven.plugins - maven-surefire-plugin - ${maven-surefire-plugin.version} - - 3 - true - - **/*IntegrationTest.java - **/*IntTest.java - **/*LongRunningUnitTest.java - **/*ManualTest.java - **/*JdbcTest.java - **/*LiveTest.java - - - - - - - - - parent-boot-1 - parent-boot-2 - parent-spring-4 - parent-spring-5 - parent-java - parent-kotlin - - saas - spark-java - - spring-4 - - spring-5 - spring-5-webflux - spring-5-data-reactive - spring-5-mvc - spring-5-reactive - spring-5-reactive-client - spring-5-reactive-oauth - spring-5-reactive-security - spring-5-security - spring-5-security-oauth - spring-5-security-cognito - - spring-activiti - spring-akka - spring-all - spring-amqp - spring-amqp-simple - spring-aop - spring-apache-camel - spring-batch - spring-bom - - spring-boot - spring-boot-admin - spring-boot-angular - spring-boot-angular-ecommerce - spring-boot-autoconfiguration - spring-boot-bootstrap - spring-boot-camel - - spring-boot-client - - spring-boot-crud - spring-boot-ctx-fluent - spring-boot-custom-starter - spring-boot-disable-console-logging - - spring-boot-jasypt - spring-boot-keycloak - spring-boot-logging-log4j2 - spring-boot-mvc - spring-boot-mvc-birt - spring-boot-ops - spring-boot-ops-2 - spring-boot-rest - spring-boot-data - spring-boot-parent - spring-boot-property-exp - spring-boot-security - spring-boot-testing - spring-boot-vue - spring-boot-libraries - - spring-cloud - spring-cloud-bus - - spring-cloud-data-flow - - spring-core - spring-core-2 - spring-cucumber - - spring-data-rest - spring-data-rest-querydsl - spring-dispatcher-servlet - spring-drools - spring-di - - - spring-ehcache - spring-ejb - spring-exceptions - - spring-freemarker - - spring-groovy - - spring-integration - - spring-jenkins-pipeline - spring-jersey - spring-jinq - spring-jms - spring-jooq - - spring-kafka - spring-katharsis - - spring-ldap - - spring-mobile - spring-mockito - spring-mvc-forms-jsp - spring-mvc-forms-thymeleaf - spring-mvc-java - spring-mvc-kotlin - spring-mvc-simple - spring-mvc-simple-2 - spring-mvc-velocity - spring-mvc-webflow - spring-mvc-xml - - spring-protobuf - - - spring-quartz - - spring-reactive-kotlin - spring-reactor - spring-remoting - spring-rest - spring-rest-angular - spring-rest-full - spring-rest-hal-browser - spring-rest-query-language - spring-rest-shell - spring-rest-simple - spring-resttemplate - spring-roo - spring-security-acl - spring-security-angular/server - spring-security-cache-control - - spring-security-client - - spring-security-core - spring-security-mvc-boot - spring-security-mvc-custom - spring-security-mvc-digest-auth + + default-second + + + + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + 3 + true + + SpringContextTest + **/*UnitTest + + + **/*IntegrationTest.java + **/*IntTest.java + **/*LongRunningUnitTest.java + **/*ManualTest.java + **/*JdbcTest.java + **/*LiveTest.java + + + + + + + + + parent-boot-1 + parent-boot-2 + parent-spring-4 + parent-spring-5 + parent-java + parent-kotlin + + saas + spark-java + + spring-4 + + spring-5 + spring-5-webflux + spring-5-data-reactive + spring-5-mvc + spring-5-reactive + spring-5-reactive-2 + spring-5-reactive-client + spring-5-reactive-oauth + spring-5-reactive-security + spring-5-security + spring-5-security-oauth + spring-5-security-cognito + + spring-activiti + spring-akka + spring-all + spring-amqp + spring-amqp-simple + spring-aop + spring-apache-camel + spring-batch + spring-bom + + spring-boot + spring-boot-admin + spring-boot-angular + spring-boot-angular-ecommerce + spring-boot-autoconfiguration + spring-boot-bootstrap + spring-boot-camel + + spring-boot-client + + spring-boot-crud + spring-boot-ctx-fluent + spring-boot-custom-starter + spring-boot-disable-console-logging + + spring-boot-jasypt + spring-boot-keycloak + spring-boot-kotlin + spring-boot-logging-log4j2 + spring-boot-mvc + spring-boot-mvc-birt + spring-boot-ops + spring-boot-ops-2 + spring-boot-rest + spring-boot-data + spring-boot-parent + spring-boot-property-exp + spring-boot-security + spring-boot-testing + spring-boot-vue + spring-boot-libraries + + + + + + + + spring-core + spring-core-2 + spring-cucumber + + spring-data-rest + + spring-dispatcher-servlet + spring-drools + spring-di + + spring-ehcache + + spring-exceptions + + spring-freemarker + + spring-groovy + + spring-integration + + spring-jenkins-pipeline + spring-jersey + spring-jinq + spring-jms + spring-jooq + + spring-kafka + spring-katharsis + + spring-ldap + + spring-mobile + spring-mockito + spring-mvc-forms-jsp + spring-mvc-forms-thymeleaf + spring-mvc-java + spring-mvc-kotlin + spring-mvc-simple + spring-mvc-simple-2 + spring-mvc-velocity + spring-mvc-webflow + spring-mvc-xml + + spring-protobuf + + + spring-quartz + + spring-reactive-kotlin + spring-reactor + spring-remoting + spring-rest + spring-rest-angular + spring-rest-full + spring-rest-hal-browser + spring-rest-query-language + spring-rest-shell + spring-rest-simple + spring-resttemplate + spring-roo + spring-security-acl + spring-security-angular/server + spring-security-cache-control + + spring-security-core + spring-security-mvc-boot + spring-security-mvc-custom + spring-security-mvc-digest-auth spring-security-mvc-jsonview - spring-security-mvc-ldap - spring-security-mvc-login - spring-security-mvc-persisted-remember-me - spring-security-mvc-session - spring-security-mvc-socket - spring-security-openid - - spring-security-rest - spring-security-rest-basic-auth - spring-security-rest-custom - spring-security-sso - spring-security-stormpath - spring-security-thymeleaf - spring-security-x509 - spring-session - spring-sleuth - spring-soap - spring-social-login - spring-spel - spring-state-machine - spring-static-resources - spring-swagger-codegen - - spring-thymeleaf - - spring-userservice - - spring-vault - spring-vertx - - spring-webflux-amqp - - spring-zuul - - static-analysis - stripe - structurizr - struts-2 - - testing-modules - - twilio - Twitter4J - - undertow - - vavr - vertx - vertx-and-rxjava - video-tutorials - vraptor - - wicket - - xml - xmlunit-2 - xstream + spring-security-mvc-ldap + spring-security-mvc-login + spring-security-mvc-persisted-remember-me + spring-security-mvc + spring-security-mvc-socket + spring-security-openid + + spring-security-rest + spring-security-rest-basic-auth + spring-security-rest-custom + spring-security-sso + spring-security-stormpath + spring-security-thymeleaf + spring-security-x509 + + spring-sleuth + spring-soap + spring-social-login + spring-spel + spring-state-machine + spring-static-resources + spring-swagger-codegen + + spring-thymeleaf + + + spring-vertx + + + + spring-zuul + + static-analysis + stripe + structurizr + struts-2 + + testing-modules + + twilio + twitter4j + + undertow + + vertx + vertx-and-rxjava + video-tutorials + vraptor + + wicket + + xml + xstream tensorflow-java spring-boot-flowable spring-security-kerberos - morphia - + - + spring-context @@ -825,6 +824,7 @@ spring-5 spring-5-data-reactive spring-5-reactive + spring-5-reactive-2 spring-5-reactive-client spring-5-reactive-security spring-5-security @@ -843,6 +843,7 @@ spring-boot-camel spring-boot-client spring-boot-custom-starter + spring-boot-di greeter-spring-boot-autoconfigure greeter-spring-boot-sample-app persistence-modules/spring-boot-h2/spring-boot-h2-database @@ -909,14 +910,13 @@ spring-security-acl spring-security-angular spring-security-cache-control - spring-security-client spring-security-core spring-security-mvc-boot spring-security-mvc-custom spring-security-mvc-digest-auth spring-security-mvc-ldap spring-security-mvc-persisted-remember-me - spring-security-mvc-session + spring-security-mvc spring-security-mvc-socket spring-security-rest spring-security-sso @@ -931,7 +931,6 @@ spring-state-machine spring-swagger-codegen/spring-swagger-codegen-app spring-thymeleaf - spring-userservice spring-vault spring-vertx spring-zuul/spring-zuul-foos-resource @@ -947,572 +946,576 @@ - - default-heavy - - - - - org.apache.maven.plugins - maven-surefire-plugin - ${maven-surefire-plugin.version} - - 3 - true - - **/*IntegrationTest.java - **/*IntTest.java - **/*LongRunningUnitTest.java - **/*ManualTest.java - **/*JdbcTest.java - **/*LiveTest.java - - - - - - - - - parent-boot-1 - parent-boot-2 - parent-spring-4 - parent-spring-5 - parent-java - parent-kotlin - - core-java-modules/core-java-concurrency-advanced - core-kotlin - core-kotlin-2 - core-kotlin-io - - jenkins/hello-world - jws - - libraries - - persistence-modules/hibernate5 - persistence-modules/hibernate-mapping - persistence-modules/java-jpa - persistence-modules/java-mongodb - persistence-modules/jnosql - - vaadin - - - - - integration-lite-first - - - - - org.apache.maven.plugins - maven-surefire-plugin - - - **/*ManualTest.java - **/*LiveTest.java - - - **/*IntegrationTest.java - **/*IntTest.java - - - - - - - - parent-boot-1 - parent-boot-2 - parent-spring-4 - parent-spring-5 - parent-java - parent-kotlin - - akka-streams - algorithms-genetic - algorithms-miscellaneous-1 - algorithms-miscellaneous-2 - algorithms-miscellaneous-3 - algorithms-sorting - animal-sniffer-mvn-plugin - annotations - antlr - apache-avro - apache-bval - apache-curator - apache-cxf - apache-fop - apache-geode - apache-meecrowave - apache-opennlp - apache-poi - apache-pulsar - apache-shiro - apache-solrj - apache-spark - apache-thrift - apache-tika - apache-velocity - apache-zookeeper - asciidoctor - asm - atomix - autovalue - aws - aws-lambda - axon - azure - - bootique - - cas - cdi - checker-plugin - core-groovy - core-groovy-2 - core-groovy-collections - - - core-java-modules/core-java-8 - core-java-modules/core-java-8-2 - - - core-java-modules/core-java-arrays - core-java-modules/core-java-collections - core-java-modules/core-java-collections-list - core-java-modules/core-java-collections-list-2 - core-java-modules/core-java-collections-array-list - core-java-modules/core-java-collections-set - core-java-modules/core-java-concurrency-basic - core-java-modules/core-java-concurrency-collections - core-java-modules/core-java-io - core-java-modules/core-java-nio - core-java-modules/core-java-security - core-java-modules/core-java-lang-syntax - core-java-modules/core-java-lang - core-java-modules/core-java-lang-oop - core-java-modules/core-java-lang-oop-2 - core-java-modules - core-java-modules/core-java-networking - core-java-modules/core-java-perf - core-java-modules/core-java-sun - core-scala - couchbase - custom-pmd + + default-heavy + + - dagger - data-structures - ddd - deeplearning4j - disruptor - dozer - drools - dubbo + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + 3 + true + + SpringContextTest + **/*UnitTest + + + **/*IntegrationTest.java + **/*IntTest.java + **/*LongRunningUnitTest.java + **/*ManualTest.java + **/*JdbcTest.java + **/*LiveTest.java + + + - ethereum + + - feign - flyway-cdi-extension + + parent-boot-1 + parent-boot-2 + parent-spring-4 + parent-spring-5 + parent-java + parent-kotlin + + core-java-modules/core-java-concurrency-advanced + core-kotlin + core-kotlin-2 + core-kotlin-io + + jenkins/hello-world + jhipster + jws + + libraries + persistence-modules/hibernate5 + persistence-modules/hibernate-mapping + persistence-modules/java-jpa + persistence-modules/java-jpa-2 + persistence-modules/java-mongodb + persistence-modules/jnosql - geotools - google-cloud - google-web-toolkit - - - graphql/graphql-java - grpc - gson - guava - guava-collections - guava-modules - - guice + vaadin + vavr + + - hazelcast - helidon - httpclient - httpclient-simple - hystrix + + integration-lite-first - image-processing - immutables + + + + org.apache.maven.plugins + maven-surefire-plugin + + + **/*ManualTest.java + **/*LiveTest.java + + + **/*IntegrationTest.java + **/*IntTest.java + + + + + - jackson - jackson-2 - jackson-simple - java-collections-conversions - java-collections-maps - java-collections-maps-2 - - java-ee-8-security-api - java-lite - java-numbers - java-rmi - java-spi - java-streams - - java-strings - java-strings-2 - java-vavr-stream - java-websocket - javafx - javax-servlets - javaxval - jaxb - + akka-streams + algorithms-genetic + algorithms-miscellaneous-1 + algorithms-miscellaneous-2 + algorithms-miscellaneous-3 + algorithms-sorting + animal-sniffer-mvn-plugin + annotations + antlr + apache-avro + apache-bval + apache-curator + apache-cxf + apache-fop + apache-geode + apache-meecrowave + apache-opennlp + apache-poi + apache-pulsar + apache-shiro + apache-solrj + apache-spark + apache-thrift + apache-tika + apache-velocity + apache-zookeeper + asciidoctor + asm + atomix + autovalue + aws + aws-lambda + axon + azure + + bootique + + cas + cdi + checker-plugin + core-groovy + core-groovy-2 + core-groovy-collections + + + core-java-modules/core-java-8 + core-java-modules/core-java-8-2 + + + core-java-modules/core-java-arrays + core-java-modules/core-java-arrays-2 + core-java-modules/core-java-collections + core-java-modules/core-java-collections-list + core-java-modules/core-java-collections-list-2 + core-java-modules/core-java-collections-array-list + core-java-modules/core-java-collections-set + core-java-modules/core-java-concurrency-basic + core-java-modules/core-java-concurrency-collections + core-java-modules/core-java-io + core-java-modules/core-java-nio + core-java-modules/core-java-security + core-java-modules/core-java-lang-syntax + core-java-modules/core-java-lang + core-java-modules/core-java-lang-oop + core-java-modules/core-java-lang-oop-2 + core-java-modules + core-java-modules/core-java-networking + core-java-modules/core-java-perf + core-java-modules/core-java-sun + core-scala + couchbase + custom-pmd + + dagger + data-structures + ddd + deeplearning4j + disruptor + dozer + drools + dubbo + + ethereum + + feign + flyway-cdi-extension + + geotools + google-cloud + google-web-toolkit + + + graphql/graphql-java + grpc + gson + guava + guava-collections + guava-modules + + guice + + hazelcast + helidon + httpclient + httpclient-simple + hystrix + + image-processing + immutables + + jackson + jackson-2 + jackson-simple + java-collections-conversions + java-collections-maps + java-collections-maps-2 + + java-ee-8-security-api + java-lite + java-numbers + java-numbers-2 + java-rmi + java-spi + java-streams + + java-strings + java-strings-2 + java-strings-ops + java-vavr-stream + java-websocket + javafx + javax-servlets + javaxval + jaxb + - jee-7-security - jersey - JGit - jgroups - jhipster - jhipster-5 - jib - jjwt - jmeter - jmh - jni - jooby - jsf - json - json-path - jsoup - jta - - - kotlin-libraries - - - libraries - libraries-data - libraries-apache-commons - libraries-security - libraries-server - libraries-http - linkrest - logging-modules - lombok - lucene - - mapstruct - maven - - maven-archetype - - maven-polyglot/maven-polyglot-json-extension - - mesos-marathon - metrics - - microprofile - msf4j - - mustache - mybatis - - - optaplanner - orika - osgi - - patterns - pdf - performance-tests - - protobuffer - - persistence-modules - - rabbitmq - - ratpack - reactor-core - rest-with-spark-java - resteasy - restx - - rule-engines - rsocket - rxjava - rxjava-2 - - - - - - - integration-lite-second - - - - - org.apache.maven.plugins - maven-surefire-plugin - - - **/*ManualTest.java - **/*LiveTest.java - - - **/*IntegrationTest.java - **/*IntTest.java - - - - - - - - parent-boot-1 - parent-boot-2 - parent-spring-4 - parent-spring-5 - parent-java - parent-kotlin - - saas - spark-java - - spring-4 - - spring-5 - spring-5-data-reactive - spring-5-mvc - spring-5-reactive - spring-5-reactive-client - spring-5-reactive-oauth - spring-5-reactive-security - spring-5-security - spring-5-security-oauth - spring-5-security-cognito - spring-activiti - spring-akka - spring-all - spring-amqp - spring-amqp-simple - spring-aop - spring-apache-camel - spring-batch - spring-bom - - spring-boot - spring-boot-admin - spring-boot-angular - spring-boot-angular-ecommerce - spring-boot-autoconfiguration - spring-boot-bootstrap - spring-boot-camel - - spring-boot-client - spring-boot-crud - spring-boot-ctx-fluent - spring-boot-custom-starter - spring-boot-disable-console-logging - - spring-boot-jasypt - spring-boot-keycloak - spring-boot-logging-log4j2 - spring-boot-mvc - spring-boot-mvc-birt - spring-boot-ops - spring-boot-ops-2 - spring-boot-rest - spring-boot-data - spring-boot-parent - spring-boot-property-exp - spring-boot-security - spring-boot-vue - - spring-cloud - spring-cloud-bus - - spring-cloud-data-flow - - spring-core - spring-core-2 - spring-cucumber - - spring-data-rest - spring-data-rest-querydsl - spring-dispatcher-servlet - spring-drools - spring-di + jee-7-security + jersey + jgit + jgroups + jhipster-5 + jib + jjwt + jmeter + jmh + jni + jooby + jsf + json + json-path + jsoup + jta + + + kotlin-libraries + + + libraries + libraries-data + libraries-apache-commons + libraries-security + libraries-server + libraries-http + linkrest + logging-modules + lombok + lucene + + mapstruct + maven + + maven-archetype + + maven-polyglot/maven-polyglot-json-extension + + mesos-marathon + metrics + + microprofile + msf4j + + mustache + mybatis + + + optaplanner + orika + osgi + + patterns + pdf + performance-tests + + protobuffer + + persistence-modules + + rabbitmq + + ratpack + reactor-core + resteasy + restx + + rule-engines + rsocket + rxjava + rxjava-2 + oauth2-framework-impl + + + + + + + integration-lite-second + + + + + org.apache.maven.plugins + maven-surefire-plugin + + + **/*ManualTest.java + **/*LiveTest.java + + + **/*IntegrationTest.java + **/*IntTest.java + + + + + + + + parent-boot-1 + parent-boot-2 + parent-spring-4 + parent-spring-5 + parent-java + parent-kotlin + + saas + spark-java + + spring-4 + + spring-5 + spring-5-data-reactive + spring-5-mvc + spring-5-reactive + spring-5-reactive-2 + spring-5-reactive-client + spring-5-reactive-oauth + spring-5-reactive-security + spring-5-security + spring-5-security-oauth + spring-5-security-cognito + spring-activiti + spring-akka + spring-all + spring-amqp + spring-amqp-simple + spring-aop + spring-apache-camel + spring-batch + spring-bom + + spring-boot + spring-boot-admin + spring-boot-angular + spring-boot-angular-ecommerce + spring-boot-autoconfiguration + spring-boot-bootstrap + spring-boot-camel + + spring-boot-client + spring-boot-crud + spring-boot-ctx-fluent + spring-boot-custom-starter + spring-boot-disable-console-logging + + spring-boot-jasypt + spring-boot-keycloak + spring-boot-logging-log4j2 + spring-boot-mvc + spring-boot-mvc-birt + spring-boot-ops + spring-boot-ops-2 + spring-boot-rest + spring-boot-data + spring-boot-parent + spring-boot-property-exp + spring-boot-security + spring-boot-vue + + spring-cloud + spring-cloud-bus + + spring-cloud-data-flow + + spring-core + spring-core-2 + spring-cucumber + + spring-data-rest + spring-data-rest-querydsl + spring-dispatcher-servlet + spring-drools + spring-di spring-ehcache - spring-ejb - spring-exceptions - - spring-freemarker - - spring-groovy - - spring-integration - - spring-jenkins-pipeline - spring-jersey - spring-jinq - spring-jms - spring-jooq - - spring-kafka - spring-katharsis - - spring-ldap - - spring-mobile - spring-mockito - spring-mvc-forms-jsp - spring-mvc-forms-thymeleaf - spring-mvc-java - spring-mvc-kotlin - spring-mvc-simple - spring-mvc-simple-2 - spring-mvc-velocity - spring-mvc-webflow - spring-mvc-xml - - spring-protobuf - - - spring-quartz - - spring-reactive-kotlin - spring-reactor - spring-remoting - spring-rest - spring-rest-angular - spring-rest-full - spring-rest-hal-browser - spring-rest-query-language - spring-rest-shell - spring-rest-simple - spring-resttemplate - spring-roo - - spring-security-acl - spring-security-angular/server - spring-security-cache-control - - spring-security-client - - spring-security-core - spring-security-mvc-boot - spring-security-mvc-custom - spring-security-mvc-digest-auth - spring-security-mvc-ldap - spring-security-mvc-login - spring-security-mvc-persisted-remember-me - spring-security-mvc-session - spring-security-mvc-socket - spring-security-openid - - spring-security-rest - spring-security-rest-basic-auth - spring-security-rest-custom - spring-security-sso - spring-security-stormpath - spring-security-thymeleaf - spring-security-x509 - spring-session - spring-sleuth - spring-soap - spring-social-login - spring-spel - spring-state-machine - spring-static-resources - spring-swagger-codegen - - spring-thymeleaf - - spring-userservice - - spring-vault - spring-vertx - - spring-webflux-amqp - - spring-zuul - - static-analysis - stripe - structurizr - struts-2 - - testing-modules - - twilio - Twitter4J - - undertow - - vavr - vertx - vertx-and-rxjava - video-tutorials - vraptor - - wicket - - xml - xmlunit-2 - xstream - - - - - - - integration-heavy - - - - - org.apache.maven.plugins - maven-surefire-plugin - - - **/*ManualTest.java - **/*LiveTest.java - - - **/*IntegrationTest.java - **/*IntTest.java - - - - - - - - parent-boot-1 - parent-boot-2 - parent-spring-4 - parent-spring-5 - parent-java - parent-kotlin + spring-ejb + spring-exceptions - core-java-modules/core-java - core-java-modules/core-java-concurrency-advanced - core-kotlin - core-kotlin-2 + spring-freemarker + + spring-groovy + + spring-integration + + spring-jenkins-pipeline + spring-jersey + spring-jinq + spring-jms + spring-jooq + + spring-kafka + spring-katharsis + + spring-ldap + + spring-mobile + spring-mockito + spring-mvc-forms-jsp + spring-mvc-forms-thymeleaf + spring-mvc-java + spring-mvc-kotlin + spring-mvc-simple + spring-mvc-simple-2 + spring-mvc-velocity + spring-mvc-webflow + spring-mvc-xml + + spring-protobuf + + + spring-quartz + + spring-reactive-kotlin + spring-reactor + spring-remoting + spring-rest + spring-rest-angular + spring-rest-full + spring-rest-hal-browser + spring-rest-query-language + spring-rest-shell + spring-rest-simple + spring-resttemplate + spring-roo + + spring-security-acl + spring-security-angular/server + spring-security-cache-control + spring-security-core + spring-security-mvc-boot + spring-security-mvc-custom + spring-security-mvc-digest-auth + spring-security-mvc-ldap + spring-security-mvc-login + spring-security-mvc-persisted-remember-me + spring-security-mvc + spring-security-mvc-socket + spring-security-openid + + spring-security-rest + spring-security-rest-basic-auth + spring-security-rest-custom + spring-security-sso + spring-security-stormpath + spring-security-thymeleaf + spring-security-x509 + spring-session + spring-sleuth + spring-soap + spring-social-login + spring-spel + spring-state-machine + spring-static-resources + spring-swagger-codegen + + spring-thymeleaf + + spring-vault + spring-vertx + + spring-webflux-amqp - jenkins/hello-world - jws + spring-zuul - libraries + static-analysis + stripe + structurizr + struts-2 - persistence-modules/hibernate5 - persistence-modules/java-jpa - persistence-modules/java-mongodb - persistence-modules/jnosql + testing-modules - vaadin - + twilio + twitter4j - + undertow + + vertx + vertx-and-rxjava + video-tutorials + vraptor + + wicket + + xml + xstream + + + + + + integration-heavy + + + + + org.apache.maven.plugins + maven-surefire-plugin + + + **/*ManualTest.java + **/*LiveTest.java + + + **/*IntegrationTest.java + **/*IntTest.java + + + + + + + + parent-boot-1 + parent-boot-2 + parent-spring-4 + parent-spring-5 + parent-java + parent-kotlin + + core-java-modules/core-java + core-java-modules/core-java-concurrency-advanced + core-kotlin + core-kotlin-2 + + jenkins/hello-world + jhipster + jws + + libraries + + persistence-modules/hibernate5 + persistence-modules/java-jpa + persistence-modules/java-jpa-2 + persistence-modules/java-mongodb + persistence-modules/jnosql + + vaadin + vavr + + + @@ -1546,7 +1549,7 @@ 1.1.7 - + 2.21.0 3.7.0 1.6.0 @@ -1561,6 +1564,7 @@ 2.21.0 2.5 2.6 + 3.5 1.4 3.0.0 3.1.0 @@ -1582,4 +1586,5 @@ 1.16.12 1.4.197 - + + \ No newline at end of file From 4b7d77eb1dfe70694031c54d0be3892e4dfc89c1 Mon Sep 17 00:00:00 2001 From: Andrew Shcherbakov Date: Mon, 5 Aug 2019 19:57:12 +0200 Subject: [PATCH 78/99] Get rid of custom.properties --- .../main/java/com/baeldung/idc/Application.java | 15 ++------------- spring-5-mvc/src/main/resources/custom.properties | 2 -- 2 files changed, 2 insertions(+), 15 deletions(-) delete mode 100644 spring-5-mvc/src/main/resources/custom.properties diff --git a/spring-5-mvc/src/main/java/com/baeldung/idc/Application.java b/spring-5-mvc/src/main/java/com/baeldung/idc/Application.java index ff86301f7db6..7288aded73db 100644 --- a/spring-5-mvc/src/main/java/com/baeldung/idc/Application.java +++ b/spring-5-mvc/src/main/java/com/baeldung/idc/Application.java @@ -1,24 +1,13 @@ package com.baeldung.idc; -import java.util.HashMap; -import java.util.Map; - +import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.PropertySource; @SpringBootApplication -@ComponentScan(basePackages = "com.baeldung.idc") -@PropertySource(value = { "classpath:/custom.properties" }, ignoreResourceNotFound = true) public class Application { public static void main(String[] args) { - final SpringApplicationBuilder builder = new SpringApplicationBuilder(Application.class); - final Map map = new HashMap<>(); - map.put("spring.config.name", "custom.properties"); - builder.properties(map).run(args); - + SpringApplication.run(Application.class, args); } } diff --git a/spring-5-mvc/src/main/resources/custom.properties b/spring-5-mvc/src/main/resources/custom.properties deleted file mode 100644 index 78c6675b2659..000000000000 --- a/spring-5-mvc/src/main/resources/custom.properties +++ /dev/null @@ -1,2 +0,0 @@ -server.port=8080 -spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration \ No newline at end of file From ab0477a4b29115a18229c33b5532edb99b7abf5c Mon Sep 17 00:00:00 2001 From: Sumeet Gajbhar Date: Tue, 6 Aug 2019 01:55:25 +0530 Subject: [PATCH 79/99] BAEL-3127 Binary Numbers in Java (#7469) * BAEL-3027 binary number arithmetic operations * BAEL-3127 updated the unit test case names * added unit test cases for built-in java functions * updated function name * BAEL-3127 updated unit test case names * BAEL-3127 removed comments from code * BAEL-3127 updated variable names * BAEL-3027 binary number arithmetic operations * merging upsteam * fixing build issue * updated formatting * update variable names --- .../baeldung/binarynumbers/BinaryNumbers.java | 288 +++++++++--------- 1 file changed, 140 insertions(+), 148 deletions(-) diff --git a/java-numbers-2/src/main/java/com/baeldung/binarynumbers/BinaryNumbers.java b/java-numbers-2/src/main/java/com/baeldung/binarynumbers/BinaryNumbers.java index effdee07ad87..62cead726f3e 100644 --- a/java-numbers-2/src/main/java/com/baeldung/binarynumbers/BinaryNumbers.java +++ b/java-numbers-2/src/main/java/com/baeldung/binarynumbers/BinaryNumbers.java @@ -1,148 +1,140 @@ -package com.baeldung.binarynumbers; - -public class BinaryNumbers { - - /** - * This method takes a decimal number and convert it into a binary number. - * example:- input:10, output:1010 - * - * @param decimalNumber - * @return binary number - */ - public Integer convertDecimalToBinary(Integer decimalNumber) { - - if (decimalNumber == 0) { - return decimalNumber; - } - - StringBuilder binaryNumber = new StringBuilder(); - - while (decimalNumber > 0) { - - int remainder = decimalNumber % 2; - int result = decimalNumber / 2; - - binaryNumber.append(remainder); - decimalNumber = result; - } - - binaryNumber = binaryNumber.reverse(); - - return Integer.valueOf(binaryNumber.toString()); - } - - /** - * This method takes a binary number and convert it into a decimal number. - * example:- input:101, output:5 - * - * @param binary number - * @return decimal Number - */ - public Integer convertBinaryToDecimal(Integer binaryNumber) { - - Integer result = 0; - Integer base = 1; - - while (binaryNumber > 0) { - - int lastDigit = binaryNumber % 10; - binaryNumber = binaryNumber / 10; - - result += lastDigit * base; - - base = base * 2; - } - return result; - } - - /** - * This method accepts two binary numbers and returns sum of input numbers. - * Example:- firstNum: 101, secondNum: 100, output: 1001 - * - * @param firstNum - * @param secondNum - * @return addition of input numbers - */ - public Integer addBinaryNumber(Integer firstNum, Integer secondNum) { - - StringBuilder output = new StringBuilder(); - - int carry = 0; - int temp; - - while (firstNum != 0 || secondNum != 0) { - - temp = (firstNum % 10 + secondNum % 10 + carry) % 2; - output.append(temp); - - carry = (firstNum % 10 + secondNum % 10 + carry) / 2; - - firstNum = firstNum / 10; - secondNum = secondNum / 10; - } - - if (carry != 0) { - output.append(carry); - } - - return Integer.valueOf(output.reverse() - .toString()); - } - - /** - * This method takes two binary number as input and subtract second number from the first number. - * example:- firstNum: 1000, secondNum: 11, output: 101 - * @param firstNum - * @param secondNum - * @return Result of subtraction of secondNum from first - */ - public Integer substractBinaryNumber(Integer firstNum, Integer secondNum) { - - int onesComplement = Integer.valueOf(getOnesComplement(secondNum)); - - StringBuilder output = new StringBuilder(); - - int carry = 0; - int temp; - - while (firstNum != 0 || onesComplement != 0) { - - temp = (firstNum % 10 + onesComplement % 10 + carry) % 2; - output.append(temp); - - carry = (firstNum % 10 + onesComplement % 10 + carry) / 2; - - firstNum = firstNum / 10; - onesComplement = onesComplement / 10; - } - - String additionOfFirstNumAndOnesComplement = output.reverse() - .toString(); - - if (carry == 1) { - return addBinaryNumber(Integer.valueOf(additionOfFirstNumAndOnesComplement), carry); - } else { - return getOnesComplement(Integer.valueOf(additionOfFirstNumAndOnesComplement)); - } - - } - - public Integer getOnesComplement(Integer num) { - - StringBuilder onesComplement = new StringBuilder(); - - while (num > 0) { - int lastDigit = num % 10; - if (lastDigit == 0) { - onesComplement.append(1); - } else { - onesComplement.append(0); - } - num = num / 10; - } - - return Integer.valueOf(onesComplement.reverse() - .toString()); - } - -} +package com.baeldung.binarynumbers; + +public class BinaryNumbers { + + /** + * This method takes a decimal number and convert it into a binary number. + * example:- input:10, output:1010 + * + * @param decimalNumber + * @return binary number + */ + public Integer convertDecimalToBinary(Integer decimalNumber) { + + if (decimalNumber == 0) { + return decimalNumber; + } + + StringBuilder binaryNumber = new StringBuilder(); + Integer quotient = decimalNumber; + + while (quotient > 0) { + + int remainder = quotient % 2; + binaryNumber.append(remainder); + quotient /= 2; + } + + binaryNumber = binaryNumber.reverse(); + return Integer.valueOf(binaryNumber.toString()); + } + + /** + * This method takes a binary number and convert it into a decimal number. + * example:- input:101, output:5 + * + * @param binary number + * @return decimal Number + */ + public Integer convertBinaryToDecimal(Integer binaryNumber) { + + Integer decimalNumber = 0; + Integer base = 1; + + while (binaryNumber > 0) { + + int lastDigit = binaryNumber % 10; + binaryNumber = binaryNumber / 10; + + decimalNumber += lastDigit * base; + base = base * 2; + } + return decimalNumber; + } + + /** + * This method accepts two binary numbers and returns sum of input numbers. + * Example:- firstNum: 101, secondNum: 100, output: 1001 + * + * @param firstNum + * @param secondNum + * @return addition of input numbers + */ + public Integer addBinaryNumber(Integer firstNum, Integer secondNum) { + + StringBuilder output = new StringBuilder(); + + int carry = 0; + int temp; + + while (firstNum != 0 || secondNum != 0) { + + temp = (firstNum % 10 + secondNum % 10 + carry) % 2; + output.append(temp); + + carry = (firstNum % 10 + secondNum % 10 + carry) / 2; + + firstNum = firstNum / 10; + secondNum = secondNum / 10; + } + + if (carry != 0) { + output.append(carry); + } + + return Integer.valueOf(output.reverse() + .toString()); + } + + /** + * This method takes two binary number as input and subtract second number from the first number. + * example:- firstNum: 1000, secondNum: 11, output: 101 + * @param firstNum + * @param secondNum + * @return Result of subtraction of secondNum from first + */ + public Integer substractBinaryNumber(Integer firstNum, Integer secondNum) { + + int onesComplement = Integer.valueOf(getOnesComplement(secondNum)); + StringBuilder output = new StringBuilder(); + int carry = 0; + int temp; + + while (firstNum != 0 || onesComplement != 0) { + + temp = (firstNum % 10 + onesComplement % 10 + carry) % 2; + output.append(temp); + + carry = (firstNum % 10 + onesComplement % 10 + carry) / 2; + + firstNum = firstNum / 10; + onesComplement = onesComplement / 10; + } + + String additionOfFirstNumAndOnesComplement = output.reverse() + .toString(); + + if (carry == 1) { + return addBinaryNumber(Integer.valueOf(additionOfFirstNumAndOnesComplement), carry); + } else { + return getOnesComplement(Integer.valueOf(additionOfFirstNumAndOnesComplement)); + } + } + + public Integer getOnesComplement(Integer num) { + + StringBuilder onesComplement = new StringBuilder(); + while (num > 0) { + int lastDigit = num % 10; + if (lastDigit == 0) { + onesComplement.append(1); + } else { + onesComplement.append(0); + } + num = num / 10; + } + return Integer.valueOf(onesComplement.reverse() + .toString()); + } + +} \ No newline at end of file From a02fcfbb064daa85f5367ba0dbf5a14246c294af Mon Sep 17 00:00:00 2001 From: Juan Moreno Date: Mon, 5 Aug 2019 19:35:34 -0300 Subject: [PATCH 80/99] UPDATE Added additional tests, security config, and fix format issues (#7421) --- .../xml/attribute/Dom4jTransformer.java | 6 ++- .../xml/attribute/JaxpTransformer.java | 17 +++---- .../xml/attribute/jmh/AttributeBenchMark.java | 47 ++++++++++--------- .../xml/attribute/Dom4jProcessorUnitTest.java | 41 ++++++++++------ .../xml/attribute/JaxpProcessorUnitTest.java | 14 ++++++ .../xml/attribute/JooxProcessorUnitTest.java | 38 ++++++++++----- xml/src/test/resources/xml/xee_attribute.xml | 9 ++++ 7 files changed, 116 insertions(+), 56 deletions(-) create mode 100644 xml/src/test/resources/xml/xee_attribute.xml diff --git a/xml/src/main/java/com/baeldung/xml/attribute/Dom4jTransformer.java b/xml/src/main/java/com/baeldung/xml/attribute/Dom4jTransformer.java index a1922ad22489..d4fdeb0d5811 100644 --- a/xml/src/main/java/com/baeldung/xml/attribute/Dom4jTransformer.java +++ b/xml/src/main/java/com/baeldung/xml/attribute/Dom4jTransformer.java @@ -3,6 +3,7 @@ import org.dom4j.*; import org.dom4j.io.DocumentSource; import org.dom4j.io.SAXReader; +import org.xml.sax.SAXException; import javax.xml.XMLConstants; import javax.xml.transform.OutputKeys; @@ -17,9 +18,12 @@ public class Dom4jTransformer { private final Document input; - public Dom4jTransformer(String resourcePath) throws DocumentException { + public Dom4jTransformer(String resourcePath) throws DocumentException, SAXException { // 1- Build the doc from the XML file SAXReader xmlReader = new SAXReader(); + xmlReader.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); + xmlReader.setFeature("http://xml.org/sax/features/external-general-entities", false); + xmlReader.setFeature("http://xml.org/sax/features/external-parameter-entities", false); this.input = xmlReader.read(resourcePath); } diff --git a/xml/src/main/java/com/baeldung/xml/attribute/JaxpTransformer.java b/xml/src/main/java/com/baeldung/xml/attribute/JaxpTransformer.java index a2266a2b44e1..a55b00950cfc 100644 --- a/xml/src/main/java/com/baeldung/xml/attribute/JaxpTransformer.java +++ b/xml/src/main/java/com/baeldung/xml/attribute/JaxpTransformer.java @@ -32,7 +32,8 @@ public JaxpTransformer(String resourcePath) throws SAXException, IOException, Pa // 1- Build the doc from the XML file DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); - input = factory.newDocumentBuilder() + factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); + this.input = factory.newDocumentBuilder() .parse(resourcePath); } @@ -40,24 +41,24 @@ public String modifyAttribute(String attribute, String oldValue, String newValue // 2- Locate the node(s) with xpath XPath xpath = XPathFactory.newInstance() .newXPath(); - NodeList nodes = (NodeList) xpath.evaluate(String.format("//*[contains(@%s, '%s')]", attribute, oldValue), input, XPathConstants.NODESET); + NodeList nodes = (NodeList) xpath.evaluate(String.format("//*[contains(@%s, '%s')]", attribute, oldValue), this.input, XPathConstants.NODESET); // 3- Make the change on the selected nodes for (int i = 0; i < nodes.getLength(); i++) { Element value = (Element) nodes.item(i); value.setAttribute(attribute, newValue); } - //Stream api syntax - // IntStream - // .range(0, nodes.getLength()) - // .mapToObj(i -> (Element) nodes.item(i)) - // .forEach(value -> value.setAttribute(attribute, newValue)); + // Stream api syntax + // IntStream + // .range(0, nodes.getLength()) + // .mapToObj(i -> (Element) nodes.item(i)) + // .forEach(value -> value.setAttribute(attribute, newValue)); // 4- Save the result to a new XML doc TransformerFactory factory = TransformerFactory.newInstance(); factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); Transformer xformer = factory.newTransformer(); xformer.setOutputProperty(OutputKeys.INDENT, "yes"); Writer output = new StringWriter(); - xformer.transform(new DOMSource(input), new StreamResult(output)); + xformer.transform(new DOMSource(this.input), new StreamResult(output)); return output.toString(); } } diff --git a/xml/src/main/java/com/baeldung/xml/attribute/jmh/AttributeBenchMark.java b/xml/src/main/java/com/baeldung/xml/attribute/jmh/AttributeBenchMark.java index 064e181713e2..f5f3a2ce6c55 100644 --- a/xml/src/main/java/com/baeldung/xml/attribute/jmh/AttributeBenchMark.java +++ b/xml/src/main/java/com/baeldung/xml/attribute/jmh/AttributeBenchMark.java @@ -1,7 +1,19 @@ package com.baeldung.xml.attribute.jmh; +import java.io.IOException; +import java.util.concurrent.TimeUnit; + +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.TransformerException; +import javax.xml.xpath.XPathExpressionException; + import org.dom4j.DocumentException; -import org.openjdk.jmh.annotations.*; +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.OutputTimeUnit; +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.State; import org.openjdk.jmh.runner.Runner; import org.openjdk.jmh.runner.RunnerException; import org.openjdk.jmh.runner.options.Options; @@ -12,30 +24,23 @@ import com.baeldung.xml.attribute.JaxpTransformer; import com.baeldung.xml.attribute.JooxTransformer; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.transform.TransformerException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.util.concurrent.TimeUnit; - @BenchmarkMode(Mode.AverageTime) @OutputTimeUnit(TimeUnit.MILLISECONDS) @State(Scope.Benchmark) public class AttributeBenchMark { public static void main(String[] args) throws RunnerException { - Options opt = new OptionsBuilder() - .include(AttributeBenchMark.class.getSimpleName()) - .forks(1) - .build(); + Options opt = new OptionsBuilder().include(AttributeBenchMark.class.getSimpleName()) + .forks(1) + .build(); new Runner(opt).run(); } @Benchmark - public String dom4jBenchmark() throws DocumentException, TransformerException { - String path = getClass() - .getResource("/xml/attribute.xml") - .toString(); + public String dom4jBenchmark() throws DocumentException, TransformerException, SAXException { + String path = this.getClass() + .getResource("/xml/attribute.xml") + .toString(); Dom4jTransformer transformer = new Dom4jTransformer(path); String attribute = "customer"; String oldValue = "true"; @@ -46,9 +51,9 @@ public String dom4jBenchmark() throws DocumentException, TransformerException { @Benchmark public String jooxBenchmark() throws IOException, SAXException { - String path = getClass() - .getResource("/xml/attribute.xml") - .toString(); + String path = this.getClass() + .getResource("/xml/attribute.xml") + .toString(); JooxTransformer transformer = new JooxTransformer(path); String attribute = "customer"; String oldValue = "true"; @@ -59,9 +64,9 @@ public String jooxBenchmark() throws IOException, SAXException { @Benchmark public String jaxpBenchmark() throws TransformerException, ParserConfigurationException, SAXException, IOException, XPathExpressionException { - String path = getClass() - .getResource("/xml/attribute.xml") - .toString(); + String path = this.getClass() + .getResource("/xml/attribute.xml") + .toString(); JaxpTransformer transformer = new JaxpTransformer(path); String attribute = "customer"; String oldValue = "true"; diff --git a/xml/src/test/java/com/baeldung/xml/attribute/Dom4jProcessorUnitTest.java b/xml/src/test/java/com/baeldung/xml/attribute/Dom4jProcessorUnitTest.java index 485744f9a520..351b8bc43751 100644 --- a/xml/src/test/java/com/baeldung/xml/attribute/Dom4jProcessorUnitTest.java +++ b/xml/src/test/java/com/baeldung/xml/attribute/Dom4jProcessorUnitTest.java @@ -2,14 +2,19 @@ import org.dom4j.DocumentException; import org.junit.jupiter.api.Test; +import org.xml.sax.SAXException; +import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactoryConfigurationError; +import javax.xml.xpath.XPathExpressionException; + import java.io.IOException; import java.net.URISyntaxException; import java.nio.file.Files; import java.nio.file.Paths; +import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.xmlunit.assertj.XmlAssert.assertThat; /** @@ -18,10 +23,9 @@ public class Dom4jProcessorUnitTest { @Test - public void givenXmlWithAttributes_whenModifyAttribute_thenGetXmlUpdated() throws TransformerFactoryConfigurationError, TransformerException, DocumentException { - String path = getClass() - .getResource("/xml/attribute.xml") - .toString(); + public void givenXmlWithAttributes_whenModifyAttribute_thenGetXmlUpdated() throws TransformerFactoryConfigurationError, TransformerException, DocumentException, SAXException { + String path = getClass().getResource("/xml/attribute.xml") + .toString(); Dom4jTransformer transformer = new Dom4jTransformer(path); String attribute = "customer"; String oldValue = "true"; @@ -33,23 +37,32 @@ public void givenXmlWithAttributes_whenModifyAttribute_thenGetXmlUpdated() throw } @Test - public void givenTwoXml_whenModifyAttribute_thenGetSimilarXml() throws IOException, TransformerFactoryConfigurationError, TransformerException, URISyntaxException, DocumentException { - String path = getClass() - .getResource("/xml/attribute.xml") - .toString(); + public void givenTwoXml_whenModifyAttribute_thenGetSimilarXml() throws IOException, TransformerFactoryConfigurationError, TransformerException, URISyntaxException, DocumentException, SAXException { + String path = getClass().getResource("/xml/attribute.xml") + .toString(); Dom4jTransformer transformer = new Dom4jTransformer(path); String attribute = "customer"; String oldValue = "true"; String newValue = "false"; - String expectedXml = new String(Files.readAllBytes((Paths.get(getClass() - .getResource("/xml/attribute_expected.xml") - .toURI())))); + String expectedXml = new String(Files.readAllBytes((Paths.get(getClass().getResource("/xml/attribute_expected.xml") + .toURI())))); String result = transformer.modifyAttribute(attribute, oldValue, newValue); - assertThat(result) - .and(expectedXml) - .areSimilar(); + assertThat(result).and(expectedXml) + .areSimilar(); + } + + @Test + public void givenXmlXee_whenInit_thenThrowException() throws IOException, SAXException, ParserConfigurationException, XPathExpressionException, TransformerFactoryConfigurationError, TransformerException { + String path = getClass().getResource("/xml/xee_attribute.xml") + .toString(); + + assertThatThrownBy(() -> { + + new Dom4jTransformer(path); + + }).isInstanceOf(DocumentException.class); } } diff --git a/xml/src/test/java/com/baeldung/xml/attribute/JaxpProcessorUnitTest.java b/xml/src/test/java/com/baeldung/xml/attribute/JaxpProcessorUnitTest.java index 8394016dbd53..8d814783e020 100644 --- a/xml/src/test/java/com/baeldung/xml/attribute/JaxpProcessorUnitTest.java +++ b/xml/src/test/java/com/baeldung/xml/attribute/JaxpProcessorUnitTest.java @@ -1,5 +1,6 @@ package com.baeldung.xml.attribute; +import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.xmlunit.assertj.XmlAssert.assertThat; import java.io.IOException; @@ -11,6 +12,7 @@ import org.junit.jupiter.api.Test; import org.xml.sax.SAXException; +import org.xml.sax.SAXParseException; /** * Unit test for {@link JaxpTransformer}. @@ -31,4 +33,16 @@ public void givenXmlWithAttributes_whenModifyAttribute_thenGetXmlUpdated() throw assertThat(result).hasXPath("//*[contains(@customer, 'false')]"); } + @Test + public void givenXmlXee_whenInit_thenThrowException() throws IOException, SAXException, ParserConfigurationException, XPathExpressionException, TransformerFactoryConfigurationError, TransformerException { + String path = getClass().getResource("/xml/xee_attribute.xml") + .toString(); + + assertThatThrownBy(() -> { + + new JaxpTransformer(path); + + }).isInstanceOf(SAXParseException.class); + } + } diff --git a/xml/src/test/java/com/baeldung/xml/attribute/JooxProcessorUnitTest.java b/xml/src/test/java/com/baeldung/xml/attribute/JooxProcessorUnitTest.java index 38c7c5978926..40d0c671e760 100644 --- a/xml/src/test/java/com/baeldung/xml/attribute/JooxProcessorUnitTest.java +++ b/xml/src/test/java/com/baeldung/xml/attribute/JooxProcessorUnitTest.java @@ -2,13 +2,19 @@ import org.junit.jupiter.api.Test; import org.xml.sax.SAXException; +import org.xml.sax.SAXParseException; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactoryConfigurationError; +import javax.xml.xpath.XPathExpressionException; + import java.io.IOException; import java.net.URISyntaxException; import java.nio.file.Files; import java.nio.file.Paths; +import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.xmlunit.assertj.XmlAssert.assertThat; /** @@ -18,9 +24,8 @@ public class JooxProcessorUnitTest { @Test public void givenXmlWithAttributes_whenModifyAttribute_thenGetXmlUpdated() throws IOException, SAXException, TransformerFactoryConfigurationError { - String path = getClass() - .getResource("/xml/attribute.xml") - .toString(); + String path = getClass().getResource("/xml/attribute.xml") + .toString(); JooxTransformer transformer = new JooxTransformer(path); String attribute = "customer"; String oldValue = "true"; @@ -33,22 +38,31 @@ public void givenXmlWithAttributes_whenModifyAttribute_thenGetXmlUpdated() throw @Test public void givenTwoXml_whenModifyAttribute_thenGetSimilarXml() throws IOException, TransformerFactoryConfigurationError, URISyntaxException, SAXException { - String path = getClass() - .getResource("/xml/attribute.xml") - .toString(); + String path = getClass().getResource("/xml/attribute.xml") + .toString(); JooxTransformer transformer = new JooxTransformer(path); String attribute = "customer"; String oldValue = "true"; String newValue = "false"; - String expectedXml = new String(Files.readAllBytes((Paths.get(getClass() - .getResource("/xml/attribute_expected.xml") - .toURI())))); + String expectedXml = new String(Files.readAllBytes((Paths.get(getClass().getResource("/xml/attribute_expected.xml") + .toURI())))); String result = transformer.modifyAttribute(attribute, oldValue, newValue); - assertThat(result) - .and(expectedXml) - .areSimilar(); + assertThat(result).and(expectedXml) + .areSimilar(); + } + + @Test + public void givenXmlXee_whenInit_thenThrowException() throws IOException, SAXException, ParserConfigurationException, XPathExpressionException, TransformerFactoryConfigurationError, TransformerException { + String path = getClass().getResource("/xml/xee_attribute.xml") + .toString(); + + assertThatThrownBy(() -> { + + new JooxTransformer(path); + + }).isInstanceOf(SAXParseException.class); } } diff --git a/xml/src/test/resources/xml/xee_attribute.xml b/xml/src/test/resources/xml/xee_attribute.xml new file mode 100644 index 000000000000..9633ca15b0d9 --- /dev/null +++ b/xml/src/test/resources/xml/xee_attribute.xml @@ -0,0 +1,9 @@ + + ]> + + &xxe; + + john@email.com + mary@email.com + \ No newline at end of file From c3020771206d2e14416bbb936116afabe0629041 Mon Sep 17 00:00:00 2001 From: Chirag Dewan Date: Wed, 7 Aug 2019 21:36:14 +0530 Subject: [PATCH 81/99] BAEL-2990 Automatic generation of the Builder pattern with FreeBuilder --- libraries-2/pom.xml | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/libraries-2/pom.xml b/libraries-2/pom.xml index a9a818615f50..bac601df6169 100644 --- a/libraries-2/pom.xml +++ b/libraries-2/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 libraries2 libraries2 @@ -111,15 +111,9 @@ org.apache.mesos mesos ${mesos.library.version} - - - org.inferred - freebuilder - ${freebuilder.version} - true - + 3.0.7 3.6.2 @@ -135,6 +129,5 @@ 2.8.5 3.14.2 4.1.2 - 2.4.1 - - + + \ No newline at end of file From fcc7ca0f1d1630a7f3186a8ff97d97aab6876d91 Mon Sep 17 00:00:00 2001 From: dev-chirag <41482403+dev-chirag@users.noreply.github.com> Date: Wed, 7 Aug 2019 21:40:20 +0530 Subject: [PATCH 82/99] Update pom.xml --- libraries-2/pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries-2/pom.xml b/libraries-2/pom.xml index bac601df6169..83adf1e199db 100644 --- a/libraries-2/pom.xml +++ b/libraries-2/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 libraries2 libraries2 @@ -130,4 +130,4 @@ 3.14.2 4.1.2 - \ No newline at end of file + From ec8b02a6882161e309d9f673d736efccd2adc96f Mon Sep 17 00:00:00 2001 From: dev-chirag <41482403+dev-chirag@users.noreply.github.com> Date: Wed, 7 Aug 2019 21:40:48 +0530 Subject: [PATCH 83/99] Update pom.xml --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 14b9d3cf818a..aabede4f3a00 100644 --- a/pom.xml +++ b/pom.xml @@ -1579,7 +1579,7 @@ 0.3.1 2.5.1 0.0.1 - 3.7 + 3.8 2.3 3.8 From b72e8b3f1dbe8248e85e0c6efd19de57142ae07c Mon Sep 17 00:00:00 2001 From: Sjmillington Date: Wed, 7 Aug 2019 19:48:38 +0100 Subject: [PATCH 84/99] [BAEL-16003] Moved missing docx test. Removed remaining docx folders. modified libraries & libraries-data README.md files.Added libraries-data-2 to project pom. --- libraries-data-2/src/main/resources/image.jpg | Bin 0 -> 70820 bytes .../Docx4jReadAndWriteIntegrationTest.java | 38 +++---- .../java/com/baeldung/docx/Docx4jExample.java | 105 ------------------ 3 files changed, 19 insertions(+), 124 deletions(-) create mode 100644 libraries-data-2/src/main/resources/image.jpg rename {libraries/src/test/java => libraries-data-2/src/test}/com/baeldung/docx/Docx4jReadAndWriteIntegrationTest.java (97%) delete mode 100644 libraries/src/main/java/com/baeldung/docx/Docx4jExample.java diff --git a/libraries-data-2/src/main/resources/image.jpg b/libraries-data-2/src/main/resources/image.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e2554a0d9c7b0f0e797a73824c15021346fb1467 GIT binary patch literal 70820 zcmb4qWmp_b)99ih5L|=1E$;3X+}(l%cMDE%cXx+nSqScs;O_435;Q?`_nh~8zx&*u zw|1v`rh0a^s=Ks?^51O$hP=!t82}6n000C10RFB4Bms!<2#5&qh=>S?@7^II zA!8sTzkiR6gNFVA10RQg03QbrkC23hjF5wv+$~`|=U7c0CJg3dY3j z$|(+gkeYWM;fGOfSq_$(-0vq#AHGYBvAb=Q^O*hW9-1-_NP%c|wtq^bNY`s~?DTTG zovra$cYHamk*$~nNPnZAmP@UKJGl-O%4ycKT$(7H#P8fG$3eIq9ka??%v8ry;Kv&i zWR8XHMQSa>>xJDS%*G_FHej^QZYd}(UQSD=4(p>3C}PPrgD>GIvydf_(4%iqY53Kh zQRC}<72!8W+h8;0&*3=Jd*#)un%_XMf(3(R0c4G(X5bO9m!`RiEibk5!c}MldLm%g zVeOwE?GVi*O|>NDsm&h!{(4tGEVPvGex&uK15H3{yd|kknbNpNz*_7hF1;SbH|ny) zcQd;?2Q&2Do3wNAIMZ;70748lfSDq;qF8ti<+9XgJQWht3&U4UJ#vu#@ZjAS?nQN@ z_o}_+E1K?zdM11m)jmG0@*>qpwLE^C<%XNQRk!*c`RmS3cdjAH$ojD@Q|!g=y1H88 zb#o3#0J)qRsZ{znAhSzV^d~y3O13+ejO2T>!Si;`+j}G#4gM5C!<8H61jdG?!z|qD ziA8LW(Csw+?OiE?A0m+@WGvN~YlEwZ0KR%TShe?j!=?as21+Wa_n{U+ith(?&p!+m zqfXd-FE(I`t0QRBlJ~$;kJaIWi%BiX#lSM~HFT0ZJ}6soQXmsO{`%r`SA8SWy=koU za<2Ht%i`+rPB<{r{mE(_XA6vT&aPky=bUA@E&+z+ASkldkeTlLk~!ce&WFJ;;3S%s z_iL`N*%LfC4+L{>wEx?s;wNed$$v>-Tha)kAUm>-X0HR&HO&7Jt3ddEQp=li}5= z-Vw_S(0kTENnRmM+yb{w&;B&ac+|=sQjT}K$7ADgb1&t#=b=6B$nSKdkTY(5=<}z% zz*woUX^#GT=(otk-~qbq+(@ag-?MhnjIt^OTyW44EcSCyjE5rlqnw5GCroula`@fr zDkgs4v|rPFbl{gzU;EBL-z{|1tZ zoMh5S_drn(m&@219Nyz*+e#!Pw4?|&MP>hh$fgJYe8enNf;GLUdhwy0zg=wuVQOp3 z!-c&kCogkOm1B@FpfcKLu2P?nZ!N*Pl zscN-tkYi(Z-}Bk68%%M$_X%8(Qz7g`xUzK{kkTDsc{??;McgtHhn-3|>9LkpAbtBb zMtF21kXb=W%>AW-nODt0-*Hwi!pSZpfG)swXOma#2s{s;3)KE3k;8b~;`(aHb;q|V z;8GLA*lv0d>d4qO@?!;e)J=<0Pml2+&rm|Ih_dUBdxrmj+Gzw!9P#G|jA2OtK(P=i zMG)Xy(11^a{ZOHEt#ElUmRhW`){p6%2KDhp>=AooH8@2(*GSh&JtA`QiWz5rGDlC# zT*2F7uM)<&Y>sD9qBHjBR$!^W zVSVt@@s@AKR4k9gj_$=Pt@6UuDY@+~n3;?+&XQKzh!M6|0>W~+1G#Z#8ZFXG3fo;&i~Qf>vryr*eKti7V+Fqm>Yk9iU4UYZonnY zi2w1@sUiYAaimk8{phx!cmrPQHDO?OXZj*kx?9$~p3KA4Y^5Wh=HW3o7A^IZCcu!@ zk8lH>r~fkx!w({v0-z#*PNrH!vdcGpsxCl!T-u+;^tdrezWCac#$o4a<7sC?e9wpu43jay8n;&y1)a?#Q4DR_*WhcH*k~8mTVHwT@-oDXS`lA z#;2*#FU3Q7TzsZL>!>IY-UueuX`8!M=i|1J=|4PTeh}mOAlCmunhlZMky$s(NjAm2 zRvy0`e{YI&$)xgPGV9K3XcPG-(pM&nr(CfzP{G+4bkA0fopb(Q6sYJlei&kI17L$PYhF8fCGHSYtz#7=Qt7Pyig1 zRYgKXI!P#^FkaU;Sgy`lNS#5d5di8JxtrBXnYAhFj}bS?EPdPqDX10qA^0O@zVf0s z93QdkY~^m35i-|oXl9bb189RVXr*l18-Yy{KQZDYVFnYB!yN`HKK8p{F(*cSIg_p_Y}QJ$IIY+FFxlOa5+FF0oIR8X z|9`zjb~u2Ud;cIU;f-S#FP`+NYBCj(?KgRLTvO9-@U0#7=n9DO!(8QRHTJt@{VtzHl*5;$ zVzP_D!Y{jJL3RxHl(-EpOyT`q8M6K}>PQK?X78JpuK%RU{?uTVOMv_Sl=&f-h! zeryL-JmOiKfc=Gx>b+~;g05|S2e-Ouz1`!Tud>yc>&S^fHSxyZ&-I z2N$*Ad%uXf$nwGi59b1A95+xBo|GQ1VeyC-gB2hBcc~uTq1k~NKWFxRo?TRoN)ySL zblV^+^8bhg0I;(GOwr3GHher5u$QWOiw*4LskNo%^{7j~i(`Z(Mek=JJA^hK9cvN4 zN}WNFdUQ~%-Y<>;8?*qVg3B*A{HzI!i4EUQ;v=ZWp4=LScJC+Be*GfND9RWn9efMS z6&9KF%Bz)S;g#U+8})HhGM1dnar54cnlpUkKU3_)o*OKn_hER1Xx#~G9CC3x69>q|rw3PKzY=!@viZRp6iN;R5EN%TQ8YW*=O z_OCcF<$w>0yxS+n*$R8LTJ|mo4lY;@W=c3m-<$g+IAWl z;3z*U{py+t-MDv?Z!xzgLMq@}(r8Z4&IDUdA2N#g4&m_trh9om>{VC0ec8Gl7eU<3 zy~jXJlZrkc38O&N($fdOs}J{{a|crn;{_NG#C|@L=}w&MrxxFLXcZ> z=k5P=5p>Qc{5*SjccomVzExH4@dHq%Xm%ixzTB*ViYo=|u2ipPO0zX6(!-9WVwG5> zIotEI)poBfztGGiMc@3|`uMx*;2=e`v>`}Y;ELzk*@wy`|K}O1v3bgIM8}k>XZv~& zhvzFD)d*=sQAUtYw$M_AfRHg+p}`pu)f%C&lQ}>IB0v`FGMnu{x1TfrBLI*K0K89Rs)mY?DwZk+EeHT}Xceqw zKAu#1J(_zM!1`94&sdN_DjKBh8kC|h6cT^Z@Omjc)QniM;=|UBkL*=sc_uS2^o(+f zt%ct8+$7yJthn!QKW^Ei^9hql57cs>JiTa4_&m2A4}TekBayo`Rk-jhG!4Q zq+8IyTf)glr_a`lj7=Ti{+^0_CrZ(Q_H5fx(7kHu{y~`3OIfkG1)`Jv7Msbiz+Ka& zJHh8EHUYepud7*!;5LE-d>o!bs|A96-1qpd=8=H0XAvJ|7~=NZ(q^K8)1yYw^c9Nc zY=;^|c7$;*j+@%AlRwknUVfjJU(9o4ptP3^xOWjI5WfZsU80*3lLkW2MGNLi#@q!d z4t_ttP3RqCx!gQqdS`aQDogoNJ2$&y4$RHSQg~v<@M^LjokR#$V2Htf-hFXu`;|4{ zFF*X<_Psj=<;jB3n%HFb&#AQtzej-E4Pkxw@;>vtC0qbt&5MmkZwhtc3tH49S}NN+ z4G}g0!?ify}g-0rxO`B>vF$r#;UWgG)WIwURq-DG*)I4Q<@Ov6x_4z+yz za3v3*fd2LQo$IOf&yup%Sla->#TQx56Q@HJ)^gUYl9QN2>nF3vY>^zYtao!$86_uY zhcI`?FC%11A{GhIJ0j-r$7k-^yIm7XYI7rIsBQ=SkwryidyL^lzO6pe$vwY6qA?D= zorw(~($*`V!BV2nkxPlPFTS;>v@$X2Yr%WG5j)!d&v5xKMg&0F7rKl)>E_9~hdM!W zGX3DS(cW+)A{GY*U zt_&>5DAA>DsleXg?ZQsZY&iB(PG<4c`Eff_a~?$QMs^}e+;;8(mCspm4par)Bzk-x z3tCvIS(J5chfuj^Qj*L|Zz{u=p#O69Z}|ZLFeM@Ne04wmDQlcW1J8uSi$p;ly8ij7 zOF@qwOD>F{jIq8IRz1}^)WhqR`Tpitg3x1iEK;hDNIUzj=gF3FK*?+kizM_gpQ#lU zxXkxb^u#Zi_QZ$fKE|hGIK~GuZ1Po~*U%iPxi|cVb>JE^#j?T)bnhv80>Rblmxr1 zpvIRNRwV~4Z`-NjII6eMtS+V0f}7x2rXMX~$acFE`U@yYc#lFYrT2LyzO{czvkaiK zILfWY5$C@AB_)fI*`nTBdbv?bQi>&p^DLOYeKisk+F%^RX{4pnHF&n88k?ClJmKJ9 z-Tq>v=e}NmmIi7pZO@^8PYwI(#d7XdK#dll#wPZEx%>fbQ8;8?vo)_)(k?aHP`=S9 zdQ6x>YCdH(Mb=5iLuu;mrqN|7`tQ*fG4rR7WKOr;FO^8UrQu~MGQNDCRvRn%9bCO5 z%#;&+M4W4xv$6e+)nVC;m3fa`IITw7YRbi$I-E*ag)@vN%ykw_9?DG~-fL}?lmvyY zIPr^2Rw^n);L**~mJEpw^0YGMZEA)4bL~U7ABaMQ06;jB^*@{vPy}TH`q`9HqhJ>b zJk}Qn{Ppm@4+&F$i7%Wm?!;O)ASlw8wpF8`#6&8LVo*r4`Ih3xJb(OkN_PHg>?rAp z2J7Y3cUU$&qOtVxeiKZZ?>f0C&_`msem%FDGC?{dKeson*_23JynZ>+v?FE4TLu69(5G2g?YGL?UU(gN;0 z^WM@tUDtd<&013*7q7T}2p12*GPbgjkr_EgzOpF|FHCt*Q=i$gs;EJvxrw&6Okx(dL^? z`2rDyudTz-;S6-{;`6~Or=VeKJX`@pl~7LH!Bp++k^O6mTWfS9!iP4de0M+D{v*Gc z?rw{z_;~0XwhIhnwp=Ek1A|2|O{nxUfQ>k^ImnXX12#MtFD7kD(?4O~Sy&D=JgFEd zu03TIw&^nX;n=VUPuSt*2D`B7=-eZw_e+?e!O0^ZH(JK>SM)&NL;Z!EDkd$IdvaEg zezfC$%6Mm^lhgf`TTgbDIhRWzcVOcDkVCJkH1+^4Ycfq!X1biWtS|n_tEjv(5sR3H zM=H0NaS1mC1_X4Wm~6v}$!$!JQsbKztCxa1ucS#8iw#Oa22lT?gaZ(u0y2?c)nNKz zzvBc`VGzSo{xFqdLWtm^TtT!AlGb={1&A=k5XTY&!fp_g-#z|%0>nNBO(kNr!3-UQ z*Zc((Av7O+82>;KlsNtljY1<5ImlQs#1}d~u-ZcT0dnM@nKI>J%qp1(C`{$avndJ3 zb+G`@m^cRp00tfg4i+8}76#$p&^R;@4u=VkfklCUjYH1PflJB8DJG6c#YIiSEuo4h z2@RGbLGOb>fW0%^U}S7sZLZS9r35E(^Ry`)V6q7#>Bs)=5%Xlj7FvtY?$lBVCIj#McM9?9|Y(>@j&n?@2SVK1sueyR6Z%6 zI2T{^bJ3^n=4y<3t9ZN<^h(-{ySvHJ1fe3-YPIMe2A3JWCEl0fQjH3bh+6ub*(|Cd zQ}P;xxG#p+ioxEAZ*gCHW-G_~t-|z5F7iv|wX7Bcoz}<;TWKg^V z-srO!EZ%oH8l84f_+F9CEcF zuVXqJ1h0pr-?x%)x3C~PAhc5M6XV^tGXK=4oxblDNAco;=r?+c&2kk0Sc1!Z zh!?5nu4UuW;Zi{?1^4?S8t`fuhAY~HK>N2XYx@w?R~C;Z+l4o{M8seLOsi>bff@K> zTxUXS1nnqS1fgIrXI>nlCIBAs+G>0l&OLDswSaNjKIL7Lk2*2)=v!{Rx+}2_Rm#D7 z-8QWSZgI4?ifhuSH}IHuZbXjXQRi_RD@MzC8pN+|dr#BcT$>(=|8usDG(3qMxEs8C ztz_YiqFGt)+6SrC+>XheMU7d^5YXRKV7za#o$+y-lkjSnZ7OM_jx<}%4Cmmva4fCh z=O2}2C|woyTZHh=-gPni1nxNE`k@{ ziAW8IJs4;3DjS1|K^Tx7SS>J0n7;1J3-g#Oi$O4go&l|oBbNj9Y|^mbkb*W;Uwr3p zE)WI=-$ML_Qe)CDao=>28#mN*i+Ud-PS9V=9 z$;(U?M=}U@tp<_~nZ=6A)DZ-gwelE<=<7U}Y&;W939<6`4GV6``MS_SuF$s1R|567 zZJJl!;+n{GL%aubSun+kw1)2plQEH#q=@zm81KK8-C~P}uO^g>?Y<8eDvW4$()gJy z-tOs$X4W^BjS0gsXgFB2Z;h8$KjV}V2JQ6OG#0#rHvJ}R5T+Lsq2PR~axyMgj#L7x z0D7V5wS%L!;|0%PYP3`FE6@;!f!`IJjl173x_(pqV8e@=H!ykPC>%vtimdy)si9^i zZz7(UCMi?iOFgdABUKB|wRCMxYlMJpnKgbDCmd?$ zde00f-V5bS%{ewf-oD-$S3ZRwJ4v3{r8zdLnbfXs7gknD(PAx$ZlKpyR@@Yz##-4Y zh5>c#BdlcC#!LxxS5`Kfn68o*A+XuI3*YAV!x+Fvrorm58IV87U@j0Y^b481ntW$0K_8)e)wVgUj^wcZ>_ZyT88m_IvbRY9DdG)3-}HkRMHHh4q_Y z#e6WE%4rkLB=1Ss_i}0fJsKLn?plx1X{_WYNzWQ(87k0h_NT_oOK;rPN`H(|xh1Pz zXuN*NLOxzuB62GE;n%#pXUNQ`*L2$J&@6;?lABN+LR9p!xRA=-G?+7ZZS*P`>ijWV)&!jtD zL8y`(t6Q5S@naAyb@D`-oUO--?wiwiVyv%KMh@b#>lIK{epw7@Pvh4Pk!aN!NIlZd zedI6C5mZA$7))5jAg^5)<>UdBBnHtS2*YU^dHk;C&tEcSUV;0-k&^t z8UOBWw|1f#g^K2LFh+`6rDs6&8GTrFub!H#QNGD`@menn24XdtJ8?d{aPllUj25z_ zRF$Zick&pL++4dts;tF`+*pbayq9lejNT}tIFUzhMrKxST){rjv88)Q-jlkWK5~Te zXJ5F|wO}K`^iqHvPi!4Bp`0|_+B$^kV;T>5iI6+@!!qO(NAMB4etMVeopwihx#I+{ zeKMd>#yC5z-KE7iO;Lt}%>8BVRg}GZJGf8>xpzmu4r-h+n6>8(7rMY-rFZa~@WZ;m zzIJYQP^*2(?L`hcesGSSwHcXaAeQXs@5G83?MT7bc-;D*8ugEWz#D~GVe|@Cc_CAx>1UVR}+OC3h#f{TS^S8#~ zvZsMJB*;iC*eVYzb9wg6KkH)Ge*tSd@ z3*uaQ_cG|4QB_+$)giZ-R>sKKifW*R@catzuPQqyfuuUoBT=eyKNnQM`an_)L`zmD z5fMiXDcfu58^4I*WXkX)qrem!n7h`W*2uFtiDj55^DFlm)|B^b7rQLrD%rti4H@r7 zr~D(h^mFu&gx4p3C6pq67WV^Jh<;O>yoeBh>s(EV- z*>SD2r{eu(fKhV^HvSi`Ir+I>*Hw9Y`oV$KID6aGg+|8r6Lma53)GY43u8DEUX+iO z6}Y~+%R%B6IKoCJgn?jGq=9l|(f|-f3ienp((Io6Vq?zQW9;vxq|E>=H?rD9JB2(3 z84*{o$vkO+{=jOJ4;Dn|8aSfMu7O^%(YMh$fX_kXtbFgph^I3%f*&su_gL}pW)big zKriC7ns723`xjtF$d8L(vFMbXS{}Y{Y+P4(nc+3nPw+-c_C;!iif1YNq%EP_*&l<;Woch59Gqka z8dAvN){hB-p4_fQ=l^9f0wa6d{b*P=xiMy?s7p+W@kZJo`mpDK@At}u9HrLiZbzOx zm@ei-IBvq03JT@BAB_?N^!7^!1%Xu7;lvqwVbMI(Pu{x?0nM@vw>$MgjS}Qlnw3=s z?(pPp+Sq7PBXRYR1yGs9eio zgeUWr3!>RqvKUR*kEu%E&7ZD&pwpaLlRC~w8Wva`^=57$A1(n84O!Dvb+ zE+YtN_(=IY%R-3H4t&Qrel2GKcV(X~y{9T8m!?@ib=0 zyA&3_TR8LcK(FK)c?j@Bxf9mH`Ks9*Dj||uH*_}(VStA%Yz~t{R_20p;G9l-CXHrQ zf&2wHh-!4gq;Pk@!L_Q~^HNbRO#s^+MIGAIn_`7W;zj7qY9UKQPg}w^`lzmNTSt2= zTCA$oFrHnwHMq;6f%2uWW#TY)w(gFKIG9L2-004lJubchEw4?(pFqConej%wOyBagr^GOTg_1C!$4WxNmSJ-^U<_iA0kqbV zQ%8@2y9W%6Fbbc)){}JF_PyGWdXK zI#h}Bt072b1iwBFrPLjseE*ZAM5|r66ck=?ylrJ* z<4l$eL<_@x6W09;(AnL2v~j7e%D9jbQIS3kWA1&^{LbCE`4!hW-p@9BZ}K7w~2!MiKq-8L|pD9tO?u3pS8f7D7A+Hrs&gS$Ow zi+^<37-)UwI?P#|6-b&idsj3bm`cLihgqgH*Jtc?k?i;GX3sI90|3h3_0iuW&|V7R&(-_%`1=eo{c z>@R@ikace-`F`q=dp>Zt@lEp0Y4*oanGKof(2~SoK%(UBdQJV*zLRu_CB=B_xGM;DKni=$V?_ba=5fR3hmz|S`3}U4!N}(7|oUb;44?o zT!{5CoEuAufe)aopkSe;Qg+17i+p)sSWwj`5JUT3MQp_4+FPKqyWlR+&T zG+7G~tuG~)u&%Bk`5|cWo;Y8W=;IE!b6_j(>|I;EKA z0^sJjZnJ3B@Slb{v&(J;VPW@8iMUIs1;-NQzp;wxg}xJlwIR?q+CnYJSYMq*|01U@ zhecSu5_J`?y;py04v*fuy`36-lmwbrSgqhz6UKI+xp6-ElE@XPn2T%TNqqR}#FS$Mou28|}uGcU7$2a;uAjQ#}}xgwqiGTS=Y2aIZ} z&aqy+1#lN0`26bD`iwhT3{wAI%{-j;**RA~d_mk9B!lh@mXz!2R@pCb!rVH0s&E<@ zs{4}p!Vl*u?1xXO=ru5{@*I^1`4-E)utn@ILo0kRWF7^f$@T` ziz)#X>5pLf$Is6J(UWa~cEjs7Mq~$ORflQE#9Cl&yaS)78jn?wI z7|Ljm9s0{8XpZCH6!Wh0A@?mOg_g)i#@bU8ruAcpt<~Yk}_(?|2NT*yO zE9ITyNU-GG*pop!S1cbvF}`TA+)qT(p~JhGEFoQ`s83Od%2ZDl>^%f#_5AIMsGb1v-r+K&?VT_(|ql?nUb#|HG!xFQLbib6qX2Uhacz>Y#{pu2^r{+QCoroDdONPa!_b z2tkf7eJMCt^6PIt>cNh)$F+X}o&{U`HOMJ+xM9Hw0elY&RLQL&G22_&x^EWb$_i9HJ>Un42C-bN+J8o1r>sJ5MR! zIru&GX{ysPBcEj9$=L95+I_MFYvjb6wYK=4-B&Lw&fR&xk5)*JV7iAz`%lGTUkeIV19ffRmWZPI?i(rLfoq!y2X6&^ zlPYpVQa|%>C-WFI4sZYr0{M-7MW!-sPv1wV^v_prN#Wt*@c7U?bS<6q7o~~zmJDb1pjkZ#-qd8?tWTBzJ2hDlMH;AL?Rox?yv-l!9bd(I ze33OOChXc`=xP|Gm)NSrP+Jv91=URT zV^likA6KD{UMA+<^n-~FMJd}GAbh20S;?J4BaZieP8$6MLj!R@S*`xO<+|Mi4mtM2 z6zrYHn6h09UP0ap%iPv$PJ@I6Hdl*pUA+7?5%{!M!)+|aG~swmv|WwSp6$Z?Y5>76d^5P^{yCvG)-SWNf7<41 z_VZe3a!USGW77PTKRIQgp`-xp@$vd*|I}YR&Pjb(m}WzTttM&SwQMQ}Wa&kF`f;WM zWTiOx^?Y(ladIRDvn>nVPgs(!VyBGsfc&q#axz7rIDJqbnF)1%n^cAj63*+)hYsU}qp{kli=sNPcr( z`vApt+Jm8A^x9-f5jZbs@S9PwBsp^wV>#PjE8UL~$$ngG(g5{SosnA2}tNd7c0iURN`Kxga-A%B?5J@Im<)kR|$ZC=#0puq%AqP8zhE)3c z)Ib|U7W`2Njx`-0?JPBr5J!p0MErCK7oF)ZVC+pwv}9cM0F9(@j`P9}=UYh&RkEC%olhw?o8TMEvKel#yYBXyzzaN$ayLz}g zFRk(m;9DHjV&XQ#8Xfv$2e*=1i3PbB-9~C#+mMxgEA6zK+;hm}_?TTmM&|rW^0W(7o^1QL*!9FEo|2L72TMFJoc~M!$|MECtj~{7 zAA4``BK|KxxjZE>2U|gU6-(l~YF$OK$Tyz^t>Z8)H4$i7x`qL>NM@P^?Oi&ppe@$m zK`Zlw(I7+a;r^efrN}(5BcsO*AIr@&FH55p9arg%G%sp{eS`cKVS}_bSE$HZjGE2R zkml-tQH3JAn+RuUH+y6^Yh>vuWF>sz$^L+cLUh2<6d)OG}}?; zC4Ys6wNuGujd-PFEmN$Z3hI00S$x!7&Ng<3I3=tXq==4J1B&FBTco?T}%ME@_~ zyLPQ&Ps`(<=tjmRLUk$yO`$O7R^+=DAdMqK|A{nblrV8aL5JW7Emyb-3gxd^)_)P| zKWG0%H>~LYdkH-y?di*~=W*(tab;qwn^tgr2>7c1Jq&U&X{Muh9HgRic| zU#3`8N|YbYj8#_mGemNUdKeKLhT%OH*#|^ezDrYi zkF*8z<=n2^uE=}*yR%Jp-aOFW_I_V^?q9qn*^vcY<&pg6xxdvkct9P^YulWnRePLA z(}LJuvFNP5yhubXW}t)`wy+v80Ms-W#2s9VL8G}k^s7x>U^lI>Hgh5pt%Y#R8|B@_ z-}xQ0w2H5{^4F{$_gwL-G(K2@eZP$hlQt&LrjyPnW#1c6rIdO_Tne-Iv+T{0Ud#z^ zEVj-kcscnddZ11!((e1VG>ys%e)&zycd@SVX@jmJIk5d(@#xnw`KG{@k$;j^5!4}m(hjGGh>)FXhy^PcR?V~EB7D|0NDFh& zMy5F3Y@s^2DU77SBVyJaEJZa^{R;piJ#q*aHP^j8uSPU`uE+j%phYdkb8^0Tsk?Fy z7j(AkO$+Zco@*M!m(dh|?y$1cy{BT4X%;i=TV>C&_9yrQD`7b1>(wM&(b6=`E;hH3 zva$bqhVmO_&UO`h?IsSWSPLBkV|h*^3by2o268w$z|^k>bGcfnydjPw@r4pqq9baF0z zQHmgxkiz=5Q|fAg%@*sO5uS>TC(b&U_o?o?1%SOwX(+FvPw~@WhD!*=$Z~zn zpv)F3&kUlR(qQ(Bh?oc&b;X{Ne{6E6(3;do7+ylHoeE<@4|oo)hf*UDzOD3Xk_dx> z5Z74Wc&E@<-)JY-sF2hoBAL+5uc(HZ`smUHW<1Zlf z^GJi-U`9qsC-anY(#Tw!D9}2kvXwPTId9%oqrKeJ1aHg)e+-Is^**}3vk<~N7|u!& z%-OXxW|7|AH>T9ur7?O;97+3lD9hrpTcL7_efcL`{`wI(v|me>+!-Ko{fIJT!Ag?c z=_zr&f-<z1Z1wFHh<_M{dBwZ|}N%P&a12am!EAnXc=J1t%co0i*teKHXJRFBOaKfV96THVx(V+;0L?+bgkxjJ zAg2(+!seh9S5^Br?Et#9PZZ`N&%6||(E7K`ZvvFngA3P(HebW88sjBayNsr>)q_jd z-~7J0U6aN~tZpf`_yhvVkJD#J@j*(2@Yu1GR{kpaVdP(&=8s_nf}%o=1SXeWwo0eH zTW`ylZmKx@i>GKS*jkdyk0s;c-B$u9p7`1{=szQ<&GIR^lF|hikQ&lU4!sx`UZqOu zS%(pJZGlw=p7=HdbLr$XkP@!3;Y``80vv9(7(&ELHelDT1JYSqdv6F4v^EX&g5#&( zE0w)fs+IP#q&WQPk;Q|?A62hQdvAA8yH%;|=u=Vwjy&`3*DlaHe3S2XjB1N{tU^Uf zklt5Tk_aTnxRjFXfOwYfHK{a;lGM}w9gTN1@~Ej23`e27qj{F1_{Vz|EB=d|4-rTO z*Id1$R1f){G3ZeKHhD#P3Fn8c53r1bG=x}b)P7Mpe}6GC-+|*L%W=Sph>=P)+6NV% zY|{nM(+Mc=eExH+@znYpY?z}cm8!S{vo|8<%^081ZxSGY^Hw9UhxA&aGu(Ug0ZYxB zR;L~wC9y~*VQ>o$+p%C_$ovobV6}Y>Y~VzDpbna7(2MO>ziY(7h!)9Hi^}QF&@Zw$ zTAW%=*Mfz<_&e(tTfH|{*iLz7$^}tyL>HsRb%_)R`Kwec3;Alrz5DO2_%Km$4ateh z;5RhQ4-}>J(!}IA@_YJ$Iy8LOTLIkAEQx=X)>6?%19epV|6%)B*5#j~TVT)adb;BN zYpNi7-9LnOcak8_9unk09ST0NMNQDkzrR$<*AbAU$oVF&);@dnvXzN^3gvSX8K=c#e~JcBBx+uhZ7T5qg4Hj&GE0Y z!v3SIcLk_uYIJv6D%8nx7jRyV^BMv(!R#_fKMAPd&0;Zw+5U5C8W|(g+7cH(tEO2) zFsGHn=;>LUg%#)i`&etRqcM%DcQ5%3IdZ7L-vt=dbnX@Xte@?wgI)6aO7Vgil6kfsXZkzcp)11_~c?x$^iJ2D@WHO8A) zZ1>VK^A^G*a6FO_&{sf_H#v`0D$N^<5wx&bK!Q;rm11*G#u_2bn>6ob;VqPTF0eKq zR_s8#lps@Mg4R-O8k^baUNWNY%ghBCD0YI!5GM^e_;vqv2HrZjy&G+~onGIh=F!i{ zRdc8V>swt3Nwf{t>|emAowK+!B}L7&S4^Zb<@3riTZ@2%-ao6v6ib2>)De%UyQ&qg zqAKtP16wpUFDOHBdVCUv&>VT!VQ9N8g+$#SUuE;>w=<+z===qUbdfwwh0FQ`;r}5Y2`Z3>A{01oQ1+R{3N#LDZVKqH7k- zhv`=kSz()>)1KtRMq;Fd2okxcToh0HesKJGEj)&7%@y_PC+g%+*wbw~W*vLMNaVpt zy8*$6l3%1*&zJuLsq!>fQBuWf^r-?#)W1Z<-RQnweS<<&RMbDmKM*-@z zvFQ59NvpWZ^14OlGo$^qB;-5qWi!VX>!^c^XK*D=-BNyXOPT+= z{-2yML{ZpEO>LbaEqnLDwN#ypK+6T&qIUbvG%Y#gKY{fnUD}z}wcH+xtl`mBVuky} zOkQ@q{@qGioAk=Bv7-f6{%cojp7J5zvztY`v62IW2{hh=%}0z3A-pW5xVYt2{+JOb zUE6JB_P@4VvvwSO8EiUvPa*MOqX}Q&PF2-{o|;{FtM+IN?}K_CZ%s{=GI7Q;i?Ll5 zC_?L#8zZRPC?fLWQ1~o=P|^>0`3zRN5F`-}kA}{mcCQPmlQ_lS^}#+6w&|)Y za8=sd*T1=ojnM@rN7A(I}i%OvuP>5ekWfd*XP@M*89ZUd<==d4Kkf+<2G;IPk zVpl}Mcin&x4@DsBWmT2dZ%57aj% zR&IQU0-mIdRxRHjo_9u!tq8Hh(%2R>Jl9r1`BZIr+2jwGZy$34Lzh8bPH*_0+?rd( z-8@?vpSd}o0y|E-7MyGFG4vgE_vW>G|ES{HyX%wFNOQ5*=U8QE7aq>z?u8k!;#%Hm z@vjUQzSLOUxq|B|8g%@s-in?-d)PC1RX1vxT!rCZbz%^uXquNz$~7L_gu#y0M9a#P zQ$(k6E=HICwuI_tE52S#v_hul1F(AN`>$8|3Y|Kl*FLEltHshKaI|1iWod+Oym_R;@&tME3r+>6h--{|JiQ~9a=T=qlm zR{eKyJ}R0uP1on`+#O$T#jAKZOtVO8MbBH04rG%R<|l--44U$b7Ut!XNIvb3*vPe( zXH%lgFFb0+`3zLU8g;{t{i7}{CAnMCqVbR3Mf8{IlOkG!B3hn);5U=eo`aVvlZcz@ z>X94JV7%Q6g;$-h&LO2wb-9pXNOUEP+qfuwLpm{Gr)MTHs(|*qHi@A-%69dS_P#;nZ#CjuS z%x0;i=o~G3e4terP}qDxW&33;TBty@rwDva!)rC%@uRP0as)5yET~p(!(Bye?!<#D zp$5=DR;h{xrbL6(gYMntt?K%w)_O(NwR$j0^i<==e0imF6(+x#i>g-bXlac*l(2Gq zou{4R_SXfA*5Gbpg-90in*YH6A?hul+G?V9VM;0P?vMb%-Mv7N;O-Q6DXs;IJ0!SM zf);l#?$F{TxD+T*3KT2e%lqB$zkk+b_RN{H&RS=ZwP*ITpS`C(N|{!0eXq0b3z4nk zw&5S4u1Mgmm+#C>R^f}zCaP{uD0FNno+mF&C%q+#h|^RcTvFSNSNnW!R5BZinFj8b zO8nr*oV2ub-qp2CqhGCO9hH$qwM-S?Ii^?NqRWNffxLqi$%S7-65gPXIbg_c@nFcw zv*5dy!J2L4M5g;0zq1@)-DsIYL>2gyu|d=sRMns|CZy++{pWy8FIh^)$AUEZJsfY1 zZocpKP5Q^l0Sf};WApykI{D>p%Fw^Egq^w+TVF!}&~r1bRbu=5FMnMOUYXJz>t~Ia zJSlJKy{`%#Fq#~$Lt|HIXmS(MACyhVb?!V}WD|TRN4MwfC2B9WL`TVuic!&>i|v-h zf+Q^V1*SOl9NrbzS^ih>!2&IsWWB3tJcK4LHC~~~>6NTi9KMrH9wvESrkRh3o)0n+ z=tHG3z`J59kqBw3o;g%=p0g=(xlb;+=rWYABnTC`JVP_|5Ms^7O!@q%_pV@_c| zi1{Cq{&n*H_s`v9?S6$vx%}_2_&d;+32-tz^mY#_o0@ta4Dj$QZXX=h>n&Ajo)jCO z{f78h?FfPVNT_j?eFu_kV8Y)He0=Ii1Pu(x4{Jzbs%SK8IlxgVP2Drpa~J`- z^ z#vK|f>Lx>0FyyCObL)gc?b9KT!TX0FiKS?5eSNtO=luZ-`xSG4%2a(7JG zCMPEmIu8$!^^)|{Q>R=u)?8tVj+p^S2?9X3|9h;+R#Gx&(qy&%4fsPEqqjls!oFT= z8;N;S)0|mveBaudov~!*tILxX19FpBKM_8Z%K7gq_p&J&Uw_F#7@1>bR4rpx1c2@= zr*`{%Y^^Fgl$-XWt2Gud_PbI3AqhL0a>Nu~eI>6P_|rcH9{6!GvpMG&MRWwGH8e7E z=t$3KJPxnw2okc3erLX0@z+45(3Z&YP(y3Q^Q%a^Z3%eBOf(wTNTBN%hh#b#74}4; z@3&d3GDYSA8xZ~m#B7?oYQ<_OdS%q*7yNW5STkQl+l(62%%$l>Qv9Nz4JPaH_Dx;x z45&i%HdE5M9-aVxTW`BB56KQ_u1s|0@UIeq>gGAIef&gALd?piX=PJ+M%>f#cj*dU z>>IZ>i^tu!eSDTS{!g4-$3PUtFu+@#E<;!?M3nlJiymh7y-?%7nfHEGg+ofN6RgfM@5s-?%`wIUZm+=-!~Oe_x%*DeqoK^8HJ?M2fRYXq?I!&;F#mqMQ3)(d{*4 zni@Xh(IxJS^3FAgsOo-(!sXD(){#j2^IDK}i{e$jmA_&?u8XG#&t>#FFj-x^?wp}< zfpS;kujM}^&7r(2tcnCZzWnEq>3y@w9aAoN0DIL}a~l0JPXnpyEoqYe5N52xY3~&0 z57SwpSO*#re=9k;migT299>FyV1LZmZ*Fl*ONp$c*inRy7P=m%1&JJ^+8P8rv^~uq z^Q7dPU7)_-dc?I48~-6WTu1#w!ZCRNq3?I4oz(2D+r-=N2ifKYNf+Eb!KcFVqVC6i zysaNT4^juiT`3Ze`$u|4!+Rq88kpKm)| zWr@j?99%Z3?UeKoCEr_PbFfZfCfSn#i@`a0L>sSS>b#u#ZvTevX)>I2Gj0*<)Y_Q+ zL&9~LxvcynwL5ExG3k{{!!>|&(Xt*Jb7Mo719lNXMwQb~LTq$gt{)3oqKyPs%V*+f z2o^G4TpoNRe&wwy74q!}N=9WsZu;L+)sca@YoLxaUB?aYn+uuJtA{^j%)mSE489!J zh3K7qsQQO=WZ*aXvF0&|vxq0#JbDG^Yr=g&%&MemUo`84cL2Nc#f1s=&-C5|rwI1p z{5zJY<|(eG6)T~>@Kt7SSx>E3f34x$d9||ijjm?_F$STg!3rj&&v5avTvueRb3=I08IXmp|9;p&R zLrg7roQQu&^R31^b<%A@#>anISi?my#Jp5MgG8NMha z_3y{W33|3Z1}%V$!QgbR7;b~x#0(Vf$Ap^0*I$2qS?TpzPH1lbI*IyCsJ5sy8dB)= z;&lpGX$mDiY^y7BU0J{VI<>?SYhpLOE8v(LdE4jUvM1|(5yRX?yVZQX@wQ83%VEGi zOw;qJ7~>0-r+%}n@FOJA`ed7{sJW3eZoy2t zRT_Ir?AW1%n@IJ~zj%1bE1YBJy|Gn;ZV;VTdYvZTUyI6=<#j^dt)n=e@JbY*cWhKtKdD6O=SXRM?WRddYQ1jH%+Nv<^g;RXO(ZL z1N8ZcbcU{u(avDMEv3NLZmdOgy}2@JrC5sUdfHyV516tq8AYI0w?BLN^lE-cuTJQM z6>+TNfM(l#QT6d4u_%^Bz$7HVJ7@Hr!-30T?>F92yQ_B&vw@sF0zO`CI;!}VwxK3ui@Qq*17@9|OuvxTeBtNfJb{gvQpuRP987!vF=*(=Le*39%b$Ku3`HFp|w zOxFsX?E@Sq3R+FxdO>~>N>yfJOa$lPV@$LiRU(i29Q z^=PU5RT3APrm8@_-{PlYo!lm=kNvq@EX9l>j2)8$=%V8RQ&7pYS9Fqt;)Ho!5`Vp- zuRlE1B9;TQo$5Qiq8gVm>D3+|Sm;PzKW}TnWutQH_)#r2UW{W+69)3xpF=JMx)|XL z+wVx1alTqx$$PKP8oZYB9*5oYjJCv!iX^9SoD~ohBH{L#c|&QiJbhm%%0OvV zWQSzzk*y@h@(aA?sle$p0m$D(sNudXMon%87sxk@tEcLiSW{1r4DX*SGN_aVa5vNb z$woEF^@@sXdXPyW6gAdFgM`{Pi!oq@5~?^^x=eVaGKE`c|2nyREVVc-F_&_BgEXHv z7jv2K+PPil7gP8<^kdE3E&=WZ#?$Nd518>^sq=p`<%lyhMQb}Lu-~gY1UxWwi$Ob- zOGpzo3^0G|-&cM0Q7(EuUou+jqd^#v|I|H?tDhRZBi+Pi4!^TSF$*yko@}%FUC2N= zz2Je#*yd1b*ORXBG|z3SJV_Aq=Ir>@lFU!5p#5SaF{1gavO5VPQy~LYiY56E4j?L3 zj&QeJ>7A5HnR1j|(|L#=<1N(E&hfi*HIgYUQ`3NhV*;)hMV9wgfvdgaVeVngB%=Yg zbb$4yQ&XLLHg6LTe!^gR(1{!baC=sq5MOOU9ml`CZZ0D+%qS= zRYcDZul8Ffr!vkrl72>4O-|l=_TN?48Ky{%qU}$k7L&>@>&=aoF*Xg+==gz#BVFR0 zyXN#<0>_eH$I~GT+Cd+j$jfmJgG@C z8T=-@GBliyjqXN2`msr z3lgFWIjBd)YhcsndZXY^-$#RTzlYD8iE`aAPqzUPXC6VNH>oAqXJ6;({8tosfjttq z6^0uwZcL-@oyWP<7gS<7wVkydleA2Fyc!s_De!4(JD~nCeVxmw6Ugmy!-VQbyEryL z0EG3)?w+%?CfmXv%BES|0nV621oCEl_u(p054hA+j_2~w-mE1Ze!)cXhkj#+t3mlx zX~A5bGebN+ z&sNh#6K4dGzq2P#MeFhu5Z?RL+ORcmPogDOS07#@oYCk*!z%{ydw-|D31$|ovw)_a zT79UteMFDoP#qcRVwsP?5C0Wi@pFYi1O}R&t&P_#+(mfOV}ZI)8QOadOdi?1R{ zn^Z35LiC!+TRg|RUazY<4P7K%SP-n`ws5Gz;ThFm zt06|ZY2l-&Fw_$Ergb6TFz}hoiFlAl{gd1x5)(xq0MrGvJ=p~b4MLB#~ z^3f0PP#mr!xMULutR?g9Q2sl1r)MU8QAO~loLFzu9!#NghEYQ3&NNkG@-`lj550^N zQsLl)(>khtqb_awa=yV}BnY+<=|rN@O7&7@cCa^8|HzdylQyhc*6&bg`P)oC?mG7s z8@0%sSL4E*lB)*pSEI0W*5JR=2^?*T-i_qTgVTXh&eB`ISofA(bAE_^v$mV})~51S zk~N6ckskgsBtllKm5XT1dlXeertlsAcKhisIK+~SmHsY2WU39fE_?&^nEb3oL8NUSYBcr!!OV75yro#Z;6f5Si_R5r9-lC>!>aTg%j$c*dyNj&97%Q$ji9LRDK(aQ4 z-)2{#@K}?1kuROj1XbLZgLu=OUI%0-lWN)|j2ffIS5^U%V2$2}!;C07>pvWp&k zY@q{#Mch|$_PF}E(e`!l>1XbBlTW{W7_;(ddp+Zc-I6`XyTF)EdT9T&5F?PGjy3{ zyTPT+f;&Z%d#}aD3|QRo(sE~+n2MwoF5Pt%&{Q-3K)m1kYGV(mi8dE{e$pDgt^E~I zC^jv?W+f;}pohi+{q}D=l{5CmwUNvgX_-6}J}u#`smfhw z7IJH-auDaY`(-8+Brf({)}7+}Cv+lY8r4i|R616O9Z&Hc#Ev6U3O%R)B9#k>56v%) zdnACYsJrLY%I-#P@x;6%`Y?C~5by%fjYKm+CI}Yf%A3^RZvw`hnX=A!#(&b63YAl; zd%wl`9Bt)QMie^IG6QX*5ULp)eAGd9A%s#L7uNju~?xbM{yO)4QVjw0TR zW7X<0N1g8{*-E%nOY1Eak}@ezsj^Ghg;8?X5$OimPdfcr@(^C~XkU`&@QN`-)ID=g z|7S6u!5^o36E3;#U%H4QzB8*2Q(xjPxh|NeyT^-o&Gt01>x3VtlKvs_nrd9X6a&Ai z?k{>9$F0}K_qF;RD@OnOk&8bi2;dTae6eZd{riCVECdAyj0AD`%MZQ`-T}`akJxU^ z+X%-@SZSDadPbBSgxacRHV{P3(GRhORb0Mwy7hf@O0iyiTc}^0Tz9S_(lp)JD1QCk^(^d2sSn zp$(ze9h@ytRv>WZe%`-s_Zj_xRh{AE;~v8HTQ`$b7gHs7dC8$gpIo4#P%dD<-E1#S zh94_l*10D)hE0|ADq{~$t6ZPzs_f$^sFbF8m$6BF^lh>pp!JO{Ej^1sz2~4#b625U zN7pOf_Mqw~gXoF@U%AcNO3;EvSDmfuM0X!HU*YV_eEr_gi(jU))~?%#La!&G7l0$bw>8|m%)W9t-Smk?K+)fmyY=NhUIr| z`SvR*(z7(3b#z@zru6|qQ=2cpb#)yp7gOkq$*tG_NE-i%+iyt+_>}b}!X&rQNevS# zAm>bih>c4qkQF`LsgZL#j(~f+)C%(!gmk%72K9qzFq&j9572(;A+>_cPZ}kCAXOdJ z*^B#SFn~<$Buc;8O5kg+Gawca$EM?cOD{J3T0p~CDX!~t6E2(pbo5m$AlVjZiUQpg zHRuJ!=0Qs;Bg&6UB$kZJ-(_z4Ial32e>`y`Svp@bGe7S0d8m#WCL>$Gtqx(oF+WSP ztDLXutlxO0VnOxDxfz;Df>G#r5D1SvT9VPU6;}9yBDf4xgnJ*bPiWGCCn8uK zDi;nDM^wtYiZ>H#a7t^uSd}IyzP-bAMRhD0t@=12F3kF-X7;Nnv%1sAaxKHE@F+~l zlw{H&T|dR5LtJC_C$f{)!N~zbPO`2qBNgz4IrGC-J+5or=i@EC`svPEGLr{3PSRK! zp2QEfJ!c#gnU@Ay?6$)?PFnolSp*6?W>&gl8Ag?zkkpz5?%n*~plZ?Ly{-k_XC`1` zUlekTz!6*d8{NmAcJ-Z&+`^spAMdMnQTsm8R?k4q7R}{1th97T;-p0t4+4@V< zBbdyOYR=Ci!-SX%eX29IJF9N*p6h5cA?(L?MaFYN)N{he$Lff~?xyaFIy9~~N}=Gu zsHXFQ;X#j@0}{hC`N97w{b%z3m48U`>!Wv?G$>9KD;mW~hxt-x#9w{3N3L|JB;>im zSscyGa$eS|<|QHfbhM2EdFgIxKIlq;`J3-6o8?0Gfovz=UhbIJTUn26vu6!npPC3U zTj|N5r<4Ew(RS}M(miW7^PG>b7dI0F%GAAqyH^0)Td9QF<|6q!ufy&bwgLBBuHVlI z-J$T)jl=Htdj^*GS7r-e$X=NC@*C1~e(L}AhzbazYN#J@k9y->EJ&VSA-011z6(3G zZuE*-d{AxZ87#>-e_AHo)n$)m6A9$vJ?t2R|Da7s4CG4X-^Y_-FZr%eNw`1Skwv*{ zsuJhHB{KXW%R6@^xmtX3g|9?E-f165u^0$ro`@ zgL5xhs{Hi}{%dXfzUoCG83*p*-H+LqpJfVkRl(`2s|prkOu||{&voA73NLJz#l%?t zyniEFN7$jf!yfrRLMq`usR94LeGT}wAAHB}f9sw9JNW{2cVD|T$gn{J`?W?XtHDFf-n((#JHH!ygORf`GI zF5jQ~#lGVLBGHYm$|S~Ol#biW!zo|ve?zb}tw$nT_eSSACE_56ElRVdrnWni+{}Jz z!b?|gFfYm3KQ8rfXG>?gstSHTvq3$Hv$&y?$^VksM8gs7$BDH&2;M8wK7K0qoSK`G z`HCMenTc*z`o)FKhL42&A14C|_5X1)UJ(FzWwb2uJ;Gr0#f<~!e|YA0-fI4TsY|2* zI+Z8dO7*bj$y>4q0+c&Soz7ikg}IbnwkuOStz@D@-Ay#clF>-#D2n(({3YJ zK7dx#9l{uBB72nAmtRvrg`QVH#gLFeZzIawGo+g^Q|OzxI~ zku3avz&nd#STH?CM2m)m)M{$26rTmWfiEdv+m~InLUK>}Sw3@=z!UVNF~3wUFIz}5 z8AmclS@xp8YM2X4-hlay(=>*@aU&5c!3}Vpq;eQjyF3@bX!Ru`T_5a-?%DEA5u+RN zwkStlxKY>n0mnkcrGPlSiY1KYL`A_}fp>C|XwL@0v;HA`$aP)DmI?hLdW9j=O|_6O$IlGB`-_uHKrxhx=9y$7oL&%v`Noqndf%Zbu=aqRSATecIX z9GZ`34jdQn7N6p@^JA*RCP>l08NpFq-3TX>Orc?bzm4p4o&cSYCvsP1t&_YS!}Miq zMTEd<5GI>Dx2viL6-ToIi|IIszPEWa@5mP^q zr7&i1@1{~b#Lrl zFF*wav7j|4NnD6_aQJ60T6uC)KjzhBRpq>Uj>w*2l$maZ#*Ne$a6P&~cLV)x&)Nfk z;iiGuN%H1C~qTKXU4==AVX*qDO35-|+=y>-^nJ=4dhU$iKoBKxj$oJ z?b}pI*qGAZMZi%|ab2JYt#jG6uM(?xztgTOdhrkxMl@~T2b09_CSuhzW>e6?Y0M~F z4-Q}PLIf$Mk$Ec&L0r2Lz5^YUgv#%EK&d__8WA6$k|w7boH91J=@>22C_u43g*4pM z%nzA~gU*vHv2V>3DrKqHW-UwIPfuL9n$?Z2tPkg?aFm;l5)$j0YyKiin`h(w2uBCt$FT&n z_o)vOZa@+G*>?$&^kG1B`WW?*IIJRpDb=vvzXsGpzNf!-flmb@9y ziQ`dA;=?nNO;--!R%Fo5EKbRiweAR~f-<3hpoz|yjXX+D8q`}z^a!Vs=h*<%?!Xb5 ze|bN1$+tt+YYlVz+YVdz!cp1|i(%_q%#z*&zqXTmQ<#hP8*M|u=d<3^QiFPB!-Tn! zo{-pdu}TRnGxWUdUep3&@R6P6bMktb=>&Nk4#P?6t0=>?8ZwrIwqoO)GvEk=4;BK> zSK&xJb8o1SqWxkrf=$pJj9wF7BVCo+5pWDH`!caaglk~u!G29Ez3`e_D?Gd*_g}uPgxu7_}S4KL{Qwp!*D zfE_?X<;e$d6lQQ9d+n?K4~YS}r<1J2XnY#)Ky^zkc$`qYi_w+;`Dy`v+x#hWJT>5! zuKyX2yXrhenwO`7s>yiqHnsI_lEpFzbsOB>&@6JI%H>b7J*$zK25a-bWUz&G!$f>N zOIXR3PVhf1H%<^EW^*Qe-O%W0MO5 z`4lJ3nD4CZzc&GSW>eK3gav%J!axaZbHd^Ct>dP^CD}6upXVu+!aW5hDReI#JYW8V zm(xY`*)oi1K3qp57mgTx09ZEr_y8}p4*T{YeQLTlo*(*}?QIY!k8 za~#9yaZB=&CX?J>9Exx^-G~H4{yscbeyma-ZE$a;Lj6 z2=B2Itf1)-K*v#&7A$dOaQ%A>ZowcWdOTS#Dp!ZS6-u%J4&b=%9%t~=sgBM1<4`@7`|4Ke6`>|$a0)%MNp~X<>9oKBSwTkI$!UDO{O$Tj` zvBrj|G8_ZGRYF8zUsCTHR~Yl%WBtu%*VQ-EnZ62=SoxT1)y%p+M=)M<9Qg+`Gn4ME z6gK=lC?cu0<<<4(U>|(XKx4bxAqSV_83y=R7SD;D9n)~VV2d&=gPhbM)w+=wxz~1% z8?$cK=R8cOB)Bqm&vMtu(Kb^TWZ}kgjz2dfF_rb=I-AynC|G4#WWCu?0o{iJSk`Wt z3cN#Omi*LjSg-8M(yXjzfcQ+bs)#6n_`<|~ruzkGp(5+eU;1L-e@OAyw>>nI1@$ly?ZKb&a8>*2w9ts5MKpCmuvEi_aU*V z;CmRpn1!upUZ{*eDW4a|Ut(1N!9*?!2eTm$*qhj+BgYCOdV-tC2}1Du`{E4;V-kKm zgSNs?ARNBEjad93hM@(Eu1UZzz7itblVL8IA~ld2|A|nJPRSt*fGWNPl~_it_sTiZ z5#|VumlxH@e(WwmLrHr{QIV#wF~+Nw;)&7v8Pa^tGV~6MxmjPnrX54zlCiiSy3-t# z1}X0yDnR74XMC~0>UI;Ltb}8|-9YU|L^h?ePZ8XJtQdEpN1voBVOVflCmj8n z#h>-e%;d!Sy1qmN+1Q3j7&s%OHP|~=J`TzzXLcVC^l`4g#Dbw1ug_*zH3cF2w*56iq+&fW^`Oi5;TNUW1mL_at_0AN&n0x6#p zn9=fPFrF8b?Qs0wD~)i5-=a)-nP-Grv+C-qLAx)krzo3^*-071Fm_GC@njEDR{>Oj zO6V27g4dizM=LWz6a%XiQMk{?D~z7qq?w-0H#|5agQa~gIsOa%l<>VadFGDPk1q+( zGd_Qs6BP>Ua9D&6+IWt~iP_&bO;7nV_CIZD)or>?@{Yu}ny8vP-k#bB+k4%}rBWBZ z8~1z>4}jZo{Fm=DA4(_%P8T)WE1FmrcYq+E4*Z*a;GU2qp?^8WNJ#PpM5lHRb?2<;w#u1@ylGj02vC_fBz|ja9qy;3|eH(Wh)U-i) z5XU&99?w;aoza7(Y3uh_pvFsJ!P_EOE233iFS|Zr!wN-KDNh!~qJso1dg!3Q1l^ak z3Etp`IDLuaK-vA7jylZjLAV%7R*O@ z>N37tiv;;hZqaFS#k|osM0L* zJih%JpHCz-!L&>3sLY5Zm|{^<)`9r~SR?&E(<}ci-f+qS>K+y*F1jW0jParH*UbRG z)qXJ|SfRP*Zv+)sy|3;!ifuZT7+ys&pv?syCtFcR+1fgQJQz<_72l@Eksk%oDv2Yj z9LvU0nlX4%;&lf-7`k6S3`0L(jch%yWXMFlU37}cZ+k6XSZXBL^UY?gfoNCB&yN?GpJN#Ge34`G7kxvk9@hR9pnhTM(m z+h}ScK)%#Oo<@HFa?ASJ#~j`p_7r`3zNUIE4J!M+!7wsvu%YHaRE z?R(qCpzsh8_xLMbes|E37vZ{dRxy8Ao(HHSgCX0cbDm=?_OhCR3D<@DuVJ4B_aE{; z1lE&7K9;eN6>~Lrh}JsOD+oS=MfffkaI;soFdlX9Mv=R?#_8<~Y4vnfMi9-Y1kzuq zsNpevgvL?BaRY3)5?Ve~(_&m4LO{v0t zQdK^e;Vus+@f;P~d_Bm7=1E=g$0Npc)giJ*4M88EmvF&73zL=2kwxmjXB&IpoCT*BPGl7T5G$Wg%M%{f|3BaiMRIc*r*-lQD z$jEvy=T z;7A_ZSj5l1oU3S7UqZ4px(oD#PGuY(U6{CK2~2slJ+j?;Zms*1+K_~{MrSVH3;FhwdMl|mr3jv^Z zG@)i%<`9J5vc%n@GY$7Z=NlP$f}uyDTD8k7q)XzZ*7&d;djzY&Jjh2#Xf`i1u9d0N zB+|Xct+)m{M~AIp@!`KE6JO9F3m9+O%}dcIYj73`R2E9wbEc1Uhw#YdomlJz@D}|v z7yms6A2j|-l)>ttS=+;z(AQmWQMyEkfTGB^<&|{`M!eyONlplthXK)_1&X@wFs@6C zDS-6J;7_uU1GM^Q5vEy0n9_f=OD(?6t0rk2d_8M1!jNd&|>^>V}Z$e=HjW%|+QyGuDi z|B%G)rPUkCLO9mLScpAmQ)C?v=6qf?8uoV8Ab0n%8^w{Uk=gVu0gG;n)be=0#`VHvi(72_kJi#W3&KEBgYhNyj}6~}#pFIPd4bvGGOE6(cj!U*H-J<`Oe1G(5FsLSxJ@LP zA@$a7mG2Ip5s=gyFVBkc#rTRTLG)0j>C7q!HJ5I<4ZduE(6cJl#<6rHr=59|~k^DJR+zPRTA`eaX| zE8^GojIvl~%Y_KI^;<>5DApqd`k?Woz7yI%ET8q6RH*e%iC{76TNeM2hMq@`mFG1c z1W6d!e6ky|9C(@9-Y!4ke5vl(nt@A-TJZ?+7xK zv?b8pzX}~q&Bf1uE>&GDNr!f`U)gC7MD>^zssQQdckm>&K;!qkp24Cl83T1nVQ8(l z3fUy4aqV~5yPPmeMmPM=&qTK-FaZY4J#Pg+s#D1>&wv01$+OV>uk z0owEr)LA7PeZ44`)F|B9j)V3UyS|d^`0mY4e}*LTFOlNwWd^8n)J&# zA$y+8K*g!fpL;fZ$c3mt<~dLIixDPSme7gj+fa-?wOy{hC77 ztc*ECcK-fNSJ}GEPD1(|#$cAW{-s0~Zf`hfEA6LL#X!fn>>uLj#C!NYdbC2NGBS>^ zYX4n8wKd41Q>P*Hs1Xy>O5-xWgmB?!AHy_gkkxP()C!iek&@BE<}Wxg=H}DZKo2XC ztjtK((xb4#$azm-6v#-x%rrDlMd{Opx2koCwEo$%Sj6^K6n1O^N^V?gmAvC;0ooQW z9hhT4zBTFl*J_@kxQ(6hvf|WK;!)AIoY7$|Wm6>XiBxoE>a&o?*)b|QshojJ{CStt z*he4*e(6+HBVznCL@_j6epuu^ddwR!%M;V*81ogzea|(?a2+LCCDk(F+=Z08(wQc{ zkn@1BT1h?uoGx(6kyR4S;`pXCUofyzHG)%e6vJ=NOWH#ym;#q+*&V*Tk#L_y+*&*X z+j^vl9?L^%n(B$o=sY!8OY7I9nUS^a>7~x5$k>DF{U$@4FogN?`QGo^(GRTVQfqVc zh}7Yt8kgSvQlAr1uWibmpRJ zKk+dVY0WWT33av<=W{HX68U{Yxtcxu5bL2#pREj?n0;I6AqMv&`BO=Q>Ahb~XsO?y zvA66^uiuR8klnk9GQ@0sYRC1y8J0yAe(A03s9L$e5 z2Ol-oK;AiIK`Gk6H~y9rf=Mf|IuQG{<%*N-R|AVIUEz=%QO}ouNORa_N#d|)>-O1L z>)A+ZcjZ8CumDLFw;kW7bl&fV1zVAl)+&wSL+D?qPDE4pPtwKvUT^0zwa6Uqs3p0m zU};rFWi|2F=5F8rxTTwKb1Z&a`uo*1Kf>?34ya(aDFog+FEsU<<@`csoiSUhnqxaD zTA`5-<#&IjbMF2WsMviqHzXmcELXD?pQWiRAzk_5tc}IfdQ-(An}V^4x${suygX`F zC{h8O=b~4|m`XJ}J3|T)hUElds#Sl=kCdZofSt37wv5W(2$5zmtuOa4vAFM-ll)?` zh+j738bcF9c(q^1%JE}ZYAgz7r*&RxZ10hLh;@%WRX)P=@T3fLC#gU{tW*g@OP~gw z+#bE5x0Il@Q(@C{;UEJ~;-_Ia)gwSyVGmLNnx(&kE=@Sw6#6-a21Sr4yGVrUU16dC zzUGcX9Y%)W1!av_=~h_PV8~!%lDOd(z!<)CC3CHKE&%Z?jdk)&s^bhZo9{1b4`ckC zL8)K3tFM=#NPI`(!(SRAtEQaRpo!x6n1xVzYp5k4uOR4?evA8q_oVT!3K-L%@{dIa#>H}sAnJnfTafT=^u!N-y!-j!klh4})Dw^q zpQ-MHAfdR9trv%z7T%}7sRc6)4^LSUcS(G)zzf#raP{ARt&&&*=+I5HCQOO#XvY0j z+jA&+0<4rG+QVq62+u9;ztas|A{QlC#||Qe)#JQ_CykFJD;LKNF>}58OJG9cLkU4{ z`71NRsoA#YyJnY57$-zr@GT97EIkn+OUfk>sfs)o$dEjQMRU6(nQW8k$OoD#w9*oV zO|?s@-bW#CutR?419l2m%07(0vtdzcc(-D`vqGG3AP_M=*Q|?dv1@cE%-PB29Q$`K(%;0(beZyFjxm`4kjot}dkKe;h!ER+oRuf=rbY}xT0K#u=x*6Ngtia-9$FBaF;_I27 z#hoe1N#*SMX~blA9-~L}CV0`LC%&PB*N451QPMA^QsJ!Ep<&w2B@4bBI?OZT%^XH_Vzg(`urQYb+9KP0)R zg2dA}b^M(yQ%u@T<I`e`*BYXYDi|++xMlR?j}`+*;ra5J$Mr5nKD?#qZMzTuEPJ;<;WM z{KPQc27}(&Lo#}8uZ9;0!A=YvhOKm1cz_e1{zsPl{HLg=hI-s}`V-`6xdxI+A=(n# ze2Ou|K}{|$g(CkWv?X>Ydy>{x!FhuF323s!m%2QjnHe1ktMqiwYXXaOVZetDiz4jL zg~~DbGutB~HKE50s_R6FP5j%zkO86Zb)mBSC(5!#dDDyOQyprJQu6`&(t8p%{$pv> z44Ggyq7$*b(V0j_*4SE^m(!s%Ki}0PJ;h{{9YP!m2_&~?e$bDGfa92P)&sP!Y&@SU zwiR#_U<-_=Bt;UwIfc_p3f=NrLJpk2P0pB>KdoZSkHlWQ#9c+512PYDIlaPDy5u(Z z{Z)CdoZ{}r`9Ci!0Vg1eN{MWna;%IxrqqV%`Ve(!&2m3ewoT{Xu^fh9DiLX{+dwCR zMRbh3uO`|KaHYjo>P@{Y_rmEk*gJw^baH{wmzb;`P(EU#YV+}Vn#^u(O>)Eo$|M(D z`oU6?Cmsj)>hnWF9YMzq`?40rg9lShBY8UpeCH{F}z7RrpBTV#c{)~or z$Red(IFU0>BJG9#sxK8iq7<2r-;-$M233sBQ%3MFAFuo-3p(OKzLzG#Q&N;gTiE#6` ze=Aoqv&Q4d;ZfCAsws{~^z0gGAFln4WFMGoIUsm2%8i3&9rFF%DW`PMn@r_$18Yx+ zxlR-TqXni8!&|YQc((G?2xG#zmQalv7nI(2z}}7Q#YHcsw^+;kUR7`6zQTvQ?m3z6 z1&4pij0`^zE8;c%fzmo3Pf}azIp-5bEi3b8GIDCb{?9oF{yHLn!I3biQBp<@51jiz zv~kIFs=9NS^pHN=tR+C8CIZWc#505UsqqwRN%M4t(g-YMEM(PQI!0P-5 z*2K()Yl#YLDIgTQ-B7U2I|XeK7TgBT;J4P&s*1fQk;2nD7>H)p=FdOoE>z$_anyoX z?a4h<*bL&+sQ_(gKXk`vqr%Kr?{Sxp}1g2yY?!X zJq2{f^Y={F_|(H!l`1#vm4K8f2t$qt-^{-f4DRFGivX`#_^@YBl%TuFS@GP49`Po1VLL3 zJ(d{ED3E-Q<(A(5LGWK%kA-53Xa2TymXCeGC;7_}`!KHe9%HP;^{x?_G8S`qF#IIDx$vU0LIxH;P=D0@wY;3pLrRR% zM{RDyIXYPB8>IX0RzfiL+VJq|Xzsq}@J$^-v0FymS&)?YXSs~l59f$&-9G3BI-i_f zD`u>VT+}Us@R7uO?ToU=Tg+%BDBs~{NrSUtl@nc;F)>lUzx=7t50XiGc!3h%p81tX z_fYX<;%rv&0nXM((bmV1nF50s+E(Cu0MPXr-AgRnQ)D1Os&N`HpY_Dj} z2kJD8T01am8`~OtOD&i0yE&9Fc&_5|)kav=>NDECI&H|1KzBtna-+(s1g+u1o6V2& za~a?Qvj2G$Vt1)vJHe%*vpOw{1lJoX)+Ae#K3$VmlPaAS8LU59(9vR39I6@A%Uk=? z`98Uj*^x?Bw6%2B74;cij3^0|oStCsy;XKP%hrreEO@-ant@~?54g%1F{I-Jrxjc{ z>RWTG5qMwOVUv6>%T*!C#E^4fKSLC4Gh&{d9Dfi$86bJOpE}XFi^yCmLh{eOq}G!m z!Ay8y*o$REW0ehzzqg|QK9qFkXaC8RN-;RrQCjutQaB{4t5q=zN{I+S|Jb%|QO*&9 zoYspd?-v|p3XKpbV`I_Sv@4NzhA2TRTTg-!j57!=6a~J8Bjl0xd?2b-n)n@u@2yL) z?Kz-`lpbsbUMnvq3cTc~nxt=pxWW ztw<@n!S|4QQAtxMoZA3Oz`CBfRqaFKX3|%;T%aW@(SEcu?SPWYTu9FWBH{X zVWnMTN|q)cv{AkV>F>P6eSzSsxJg(cYPiwyiEB*dnx^Icjq}jxW@uHgX&|AHPbU*< z4Z$*5umqs`my!Rp6`2h`>g!YyuG~?m$E`2b?ZE40W1&zYF}KjE34mMHR4C`5i5VV zd&DI=`_A#6l3*zyZIiKdFP}kKino|E(-ngH;R$P@hqqq%i~W#1(~t4>^29ZD&!qJo;Um4hmJ=V&*N-KL_gb`rSLw8W-)(N)f1hA_71 zBWPn8+f5Jy7&9|Re3+77trar-p~Za3?mkq;BCeXiy&!aKpzh)8!L`$W;I=Ptjw0$V zC<>7@gNJe$-`*>qh62=H-hcYkxu>m!qg_ut*;!wxMuHem=xMM2J5Y4~lPhh_(s#;x z#W{c6Gl|7El%3fj)d#8IyWS<2D~N~&klVxOPr^z&5KVBat6B_O2ngFVlN&xTKi(+^T_QN<6k zZ_zKv#hb5KeJ>QDb`eAZ*VW69_ENXqR zyb#Nyie%WGw9^CK??e8<F;J^2pcYF6HjpiU@}6ul$&133#z(iMV@NNtqeTU$r;4 z=#rAIrd*)^pB86aM*jcTQg>s%`GR@?Q^5C*;Qw@<43R#j_3{hSGZ#@SN`S9KaS({0 zRSgN&ygAgZ&lD1`$OS$xDY0|WgL6*Va~j3>iM@b#x_aP}#4flh@t88I%^%I?^JlTVx(Ae(p<#X3Ur;`ji_qM1!vWdHgMsS5fKUCY_NeZ-Kr!GhJ^@ zVT&$~d&qIRkbN@TR^#L=Z!4AQJu@%;59>4Nt}@EDb|fabFfP9GPzOgkIxe110|CQo z`Z$ZmLxcj)ZYQZiY?Hj&ae<92J`FA9*kddIp*VU0uiXH?hq{P8A>JRAhWRwwj1FEa zNLp>x`W1`OPd}@r7ql)vw(cEi-nJ(Q-7koKtprkh7oOS|B*AcXcV@kqC}0;6UefsH zRn+>i;bCF%dvJRwa^s3NQt5A!`CpgF>{ac*XgvAD#IVV|Z}D*f6nd0-)3@v+VhUlZ zs@X)=n?>&uNUv$7)IydLX`SWWY8_x>%vFBN{7b>lw+L^EynN*aQrK%t1{$r`43n(b zDH9QTpe@k$iZ4?bhK?dlQ2dA!&F_c}v}_=)n5LHdN-lVhqQN6ew>?|~ojyDklY=eK zzyVSmpHMrhru z%=@!140#eV=6|cJJT#KLhZ{$?+T{br6d)d|W@hA4i2)q(AQsbeGB{6(LAeFQ>Grg@e z!3)9o(=WG?A@GWe^6KYS65uSasXSU`utVy6USbauJGwMAJB^p(C)J`hH+$)fG&aHW zl(gqawIp0v+zdV-n=8CxLW_*7;VKiY?OdjGVqsF#mTHGc3CUJ1uG6NG4TqacN5RrV z5F%5`LqEZEIV4%WROD=5xe-N|zg$|~W{#=!y%BMgulmwpdJD=8tNCb1OEaq)dMG~Z zy7^NlWh^R3AoV4HR?(8+^zz$Cp%IP}tEcyi{9mL<>_Hl371P`w1S0N3_MKnyYznFu zmsNIp(=OVM-o-g)sWP;#m~H!@;ae>;E^)BQbsnxCVsc0ff#=#`2CJGRYbh%ADYZ6o zMAHn`Sx`h(MmrL!1XCe~!^H`CQk8N%u7Z`40)I7}P2WcOVZSqnTJw@nv7cm^2fNBV?Pm_gWHgR9OPAykRa6;cBk-^LXx zbzIzYV2E}8JFIn$CtAT2pz+6I8{4#O7EzDR=!JD^@CiT7VNtuq?DtSrgHmsZ+S{B% zXe-)FC7Jf_&N=dxq;cdW#2dbD)~30X>}&93Iv;+^I%Ji2_F zon>j25C|gP7hrZ?dfgc|7c{B$uPK#?BK^yL4$WL8E5*aD<4^EPr1t3togeRdVPT|1 zUr(9>(>GFh>yqt_BO=kUg7E@7<3L9^2n z%*vf&BM@W;Y-Xq2ctp3a6dQTIh0W=-DZ8^}_c2JjZm~EwO%^>4Exw5p(Ic(Mj`B=p zvhmQ6TC_qVrI4e#-WQyo>55nCSVbiDwi6uy`BWnpB&fh!EzTW&Ae=E| z2+!WFFo|D?e7hqF8)NoPhTdgj4>+!F@Gf;lqD^+7K#&fOsNhr>a zO*jNC8f3}*N-s^O;uh7#oSw^_Zuxy^PehI+qisBxuVz8<9W#T->MVZZp-vN+v71Kw zjgM4*aP5P8KQ@|nTRMqT>6@Wg;{}6~mb4#T7CqisU#V4!)VM7%LN#LvzTUy6iqw~D zGDXVgD~2CY@Bd!Y=DdF|KkVTkh2#L5>oj2-wo7-HzRZY%{)z)A;i`>E>-R4G)3%z^ zG;@>43puk3i&>?phS$u4wL;};Jc{czuh3WJvJl96{tZY}f`;g1L((%C+y3?3Lj)J2 zVonkIY_Yl+f@2*x)h#ou6$Fa%8E(3$}oqi z3Yh+sH4Li&eH}>=m2|#wf>E;IUJkl{ASLq`m|>qRIIV|-AJryd2`Ez{Jn7C_Km9{? z*6t>ga0?|VGo$UAPe36%46yLj9_CV1RwAa&Oit&F>@I|w;$;W3dr9GEw8U1ICnznDK>?x#@F#4c379yFABoO>V^L1IJ=Y)~i&2VDYlVt<^k9qQfR$d``Zr^8sNC;d z8iIi`vA6T2ehX*X156mhaefDF3J(PsW&%(#__uj9T+KtX%(&}6JBXC4eLhx17N37P z5BI*26(uu6nv6Y`j_0a;GM(&o&=Snj5T-ih56EPW{S)Hheq>BTxP_;dG7>7tI)!9m`^MBK|lAZI?mkYvpAR^&5nsmj)&YY)w(Z<@^6 zE80Pcwv1V3_MTZQL5Vvze8MR|;wBO{e|@Hs*Va7DOxNylbFL+(*?y97GdmTC`HPkB zia4HyE9~-2+7g(wlR?Aku^X2Th9!A3Dv>Gswvh>yCrn!h&yp*#rQ^@>MagqP&9yu- zGrz6txwWAaB~nJR@GHAaPhxm5RR8S$5esNUXIIY9n<&HB>(%tqWmHf<4ENT=L!*(m z4p&7cOYfj7ikeo#R-~FSPW?dROXiYHyo8BTCB}7OGuK-r0?O+J*;tR_mR8G&Vv1n_ z$H_2hB{u_b=n1_K`0r^^EPAQr0<-l*bzZ=*Ix5_nMq!>Gr77(^kCZdxs!7U3g^Afd z!C)E>kfjq2}ANWN1g{;aqY5= zssn@%CIgs5@m!#KvR5?Q2tqXxV)gf`N33_SIs)7~+ZPT9+oL7P!@2Zzs&_1Xw%PLj zhDsxiCr}LeHK04VO@B(295D`>j%t4gGn$$t9u!$S{uJuFT`4@<5C6@0#vCsY`dzQ? zyz$vxUL)iRQ!3MAPEI)7I5O*TFHEF&kD(A5mgb*bU?^c!FJt<}fA}7zdmhun8=s5dDrs8Y8f+xB?jnd;-O0dcSJ$+wa&^(W1)|4L7A7az(Rqi%9ixQd;oLK%2 zEn0iRjR4rOEx`ka-Z8ASd3&D|s_ySO7L1Nde-dYStLE@gN{i{=>X$-iT6qN6d_EE4 z4t?f6aTeJ5>TdUyT7mJm$)1_-AY#B2SyS+RhFqy9K`h~>@j+t`&eSSd*VSL(7f z#nCuvc1Ty>AM?FW)&zf&g=I=(xJhBdoHDP_l;PL4z^xf$!BmBNmG+iE3cRKge|r# zl9Q?64P^ixS#9N8T#MQvJF05(!6GjSDcjcv;`Hv*JhJZJiI#nHEmc`sAG>6&OJQ5Kg+fI3{Mvf(w|4X(6vOCrtkWC?VfWz=^`|BEFg5+l6(K4D%jZk zT9J@*p}J`Lbndn{*FRC-(L!Jujc@dmDZ}N=y!JllXO2=x-4)KmA0=7!ps&vv8VDyB zZSIVlLD->AJl=fQC!&w;dR1BW=%cchX_vRST#2|}%y&MqMn9G@+9)QQ32OIy?>L!6 zt`pz&-@Wud{AM88e-oIqaR=&DrN;tqTn0Bj%zBiadK2cVP&MZUn~7z5~(B5 zMHhZ$D<5(CO8`|-q9-{ApHmFiO!&GuZg11l?XU-)V@1tI74GKzMno3|L=W+co*`=_ z9KTwT5C83zEoF)dY&G8(<;Q2$cPTRDZP-D+GirpUgErrD!9?#Cpi0k2E9>!fj6JQ1 zwR(E&rscXR&nxvq2c#9X|M>10R3~dDhwatsjMU$a#pwk%6xY1o{$lVQHoX5l4cOm!(1imjx-lN?hc3Jui(W@>Z05Eni!!C;BcusEHl{GKT%)S2j!JZm z7URhzi|hV~#3EiG`VU;lf30sj68;W*x~cn4y52xOo*Wobg?+%T8aTiS;QHNj$Noeo z+v#DqP={XlKgL6SPleMG_DLo>#g}ldpU|GbBMTu7D+jzf1sOYycurFvr3Bvxk@9+{ zDtb3m-(y2X@^8#h^}HJK^M@gE4+Qw&amqG$_uo68n%pSJKw_W2PN{w2jBBp&4y*5T zw~|c_!Z(~XwUyuh9q@n8miiaeBRT_Srj+>F*gehsm;@-0 zi-b-ss!Tl~O$FdJGbYCC`hSf7a({0<=*|bM4-4Qi^;5g*e-8DsyY!U#bpmZis*3A0 zdy7|*#d-bTcfMpg+ijH@_d)ynBTT*_^GyeBy5=%=`1~FCq-}P#R`2QI9 zp#M3IWe1Z?X+LOhTn@-o28n_-FRUf#+%4YZXC8}U# zt9jw@xC%OVUO4(}--qP^AS0Zt65^z)Z5f_;n_oY$1eV7$l?fAN!c;otBTmaV>5MM0 zKBw;!)a?Gj_W$J~y`<5qJ`l>c;5rN+-Z0!8YbEdP_SD?EQZfaQh;NCvC(FILm7S}s ztiWAQJ!QD5KCqx9ag_;n;}nfR9YCWl@;n5=|CWkiq>OtU{rCGAjX2c(`b+d0Dv|BuGN|4U^62%_fZlCsp4bie+eO7{P%VE{SLn6|*PF*A%& zS}9+S7(&Z|`%J}c=L*x8jx_=%%`95bY6zdYGWj?fs@WFuJ`u(GU_@OV9P(lrK_yd8 z%CNz}7%0xKnvS{_NhD4>{yO!Ax@E^>fFX+?Dh-SxXWHCv$!?Wcrh%OJEyKz<=oskP zA(b4&5Qyz;GvN`KAi9A`;0r+|a4~Ai0n^?lq3TDWWG=0WdBazY1ZLSZXN6kO??aW~ z{(s#nJqJiJZ1M>`64wE8c2<|=;$`aAfoS!=Z&K`UJh_pY!3ehW$Yt-@(k5&w;%^^E z+tDgH(2wJeSV>@-dCqEl*rTnMIF8X8K7Hhgl`PD*IF6}c8F0Jb3_D)RU~wNYUm5OJ zTcY*GlBLAbGTw|=_dx8E&+$6Q$?^?}^wRqLX%zfGBkKG7f}9Y~prfN3A&nu2e^1`6 z;DY8ueYc<1fyqFIwgFuiK-<4W zi55Tz0DW3&hTIEmwgX^tax_J0T|U`!FR)4?rj}N;fQI%4Zm6FQ2~1$|S`@uP1c^_u z3=yoO`&UPbFdp38+IjAJUH*C2ZO4-5$gNe00rUuq%aOJe5;(BlAEj&9K@gBo2_SZN zcjt-AZi42cPRaU$PyU}*D%9IkW|=@_XX2(=H}wm zElncIBA71C-n9uUTbPPAa?F2U2*ynBcmpE_2A?D0jvzv90&aDM zXUYJ<%XcZ{dnh5@-O|@HAXKTPWy?_cI0}TG*)W2(wDU?yQpv2upq0%YIMxmRKZi68 zty~frpS>%qiBJ631D;8Fy6$1iAMMpFTG^xMunuQBIsOLi&rc#4Y{RyeKo=HmJC&b9 zJseCwmgweV$~ZoTMwVj^Z8_aY30CQURSeqiMpp_b2f#$)Te z)owdAH8sPu8T}qxycS2Ddj3Fr7=)8{%X$6Y`xcav+Sb*|jm80#rez$CX)abN14f-H znMmUUqlnYLOM|$Q@`+=uJ%{p++ANVY`RH1pm2aVb28Nd;u`qF`p_c2GzYFh9i{`&h z>)ma=`=$Tuwcv4qAZ}_YE=@~!$=3hvwf-xM0*o+-0F%*;fzY8KPiay+t8yEX&N=H? zloJIu32b8aOhOxHTE|uvdyupG4tabwUPHI0gY`Q3NY&wh2V58&S)u z#vG28Hkba3Zi@LKN3l%{;=l)k<>FEzto)?%+^wzgY#69WksbmGFQeW@XjM}>Dphh0 zZ#TAZOWQ5&?*+u5DE-7-*L~&^e%1!nK~yX!O+=CEmpnSu0|{EzJuywl3-x!^rO4zE zh;wnbRJwDweQc{HKcvihNjdpV_-F}*Pa5d&=c&V@5iHC6g1exldYuxuc_Z^wd@nVe zNr>K*q$P+8At!ew*f_qPINT$T_&tHoJKKhr0gMC-@k!CDcv)S1Xl*CUP%#-LDJZsg z939bd0hQqx?l?QkkkUz}+UuOphzNZ9aGobCg3B91_l^?g=0<@|&8L>dRQt)`Ios_9 zjFD1W69P|SiJcu}X5gBao7+4|nBGIcM%x#UJO21e1}`GCo->E-sMxYm zSa~0~p6I4-NLI*ftQ8x$>sXdLm2YXmGW<}f)K9QaO0?@i_)IBFBHo48A+h&j6guY4 zztvKMZoK>m1jOxPH+QIWhv}W>zc+l8Q|XWf0MPN#F>|YBqe4F9e8+aqD?3mth7QWN zmaqHp0MNMy=27S9PuxCv+yJyb4inX@CJpNkweFKKkdrL&%xB4IdQPN_jK-ck^cB+WTreIoieOEQ^|#ixn%Ha>iu$HHgtNfkviAzsKXf%F!= z#144`;8NveFOg1&ZO(Vkr~WFuh@ZyQ+gx^R{?`i7qdQE@Y27zmIz1`_khD|>xJlJX zQzyPp9xw`oCIx9c#^q5304OYlJ3=rz)G+)~rhYCBx)0Ehkt<3pS+^ej#sT_OGTl(2 zUl8Kl>p%Rrxn3S@4Yo6mM7ae+g>EB*N){IC8XGcJ zS;EvLsyCbvsyE^}Q3-56&{N=tcp@s2>jl3faif6Pu0;0oOaKR)b+Js@M z%yBi9Qzq&hTBAb+T?Mip7N{O#k=GO=H(qER6Cx~(am$J@xybpKOeyg#RG3h)Ihp7~LTf}>Xy+>E?P!$v$UzD&*V zlNf%H3Ia{tw*9ND>Y8VGY=_EH5uIm!6p{JnyeQn6pI3PJ#K4vHcvZ#!f z>CPOFh)y85nk>SFhRcK7%7BlqVvkm=LoA&53z;Xx9zDC-<4KSOh>e`~Q5R@o$V3Ls z{DnUzXQD*KkXsPNwJB+Jh-vPMD-TLe(dxpOZ?QG5b<((We2!m$d)GheS+X>xjW2)b zmyxXkSeY}>u&jQ>+{bN8AER3OVRqE#8$$!_M6(wGR`$ik?_M}nj;${S4QI&VC2SD} z)^N>iT_ZPxw%zVsmt(@tepM>r{ebm zxGT0#vN=~9w+{N#(_?eOe4+eH{Mw~K?63u^o1c^k>h-k@Gv^fArEtA!oCQfsVc86K zlai#0HRoP(9)=%Ce^R(GjKTJ1zt4@7S)Km2M+7gmfYe2h$wJm|$U0KuJU57KV4Mvb z<5e<_jIa?v^|!FLD(oGap>Z8RDn{8>ip4j~r@2l+)PP9a=0DI{`m02Ff94pTKoQqtBn+ntW=m(5p5zQP z2TIO{(iR-{VO1idvY!p$#l|JCh)qPgE$?cD|o=z_#9N9jX zxrT64J(gyr(XAhNHWzEB{*8GN+sn^&+FnN&^N$f}cJ>zz?n25U>Z|A8qgLJ_mG4m5 z#lSCCgsAHM^;CVAhmUk^m27GA@hiF1{a3idU7EddA{DQF45!q0VJ%Grq~HOr zU%(HRWqvG)xX48GU*gS$U33K$>=!)dA|})3)d@c4=oKa1N9~<>yf)}cwut1k9R2x) zsFM{jhca`LWz$IVn^_f$=6N*N(K2pPf15C~*e^33Hj-#Q)#38rqw~Z(Gb%|9lQs3o3_S5ZkI5s=jc<_ z)lrT;swrOU6lg<3QzP3zwbO@IK%|V^%J900ed#>r4O;~w052TGs&w~Obw4w|ap3U} zcNQXen!GH>qJE|HTYyN5K|iK1HhA&eSR7B!2po~*y%i}XoN z%gNbiwqI(SiG*@m4I@8^3A&EaWpj4R?z}1dMJ18QVlZ}C{sK+XzN{b5n_${upWZH~ zUoYOVByF^0+j4X#P&t--{}AWm5#fPq?U`5;(86gJF_SO0%1v5yX7m)D3i-y(V;KaJ z+ekNPDYBH-xE>Wz_aM3fz|144FDp z)`DSz<;$26{4W9G-7~~vz|xsPPOa4C7!Iyj336Q+$(-Xi^A43hGXo4aa#+J3$0tFe z+NTXl8D~T+=NE&2!y{F7jc&>i*BN6A_&poytsfipym?=PrO3{@vnbAVT0X~_VLMXE zGrfMPtS?CR#1a*^FefBH*$qAf_rH}x0OKsN5x6>jxrGuBpdl%M-B`=v1O2#duspCi zOT@QN!o8i$CxH+R`}SwV0JXOA4Y{RR$&RCc0%R-1g|YRR-h=Si{2x6hGxGd|$iLHA zPL+z&5W}NT?yl+YT#{>nW7u#$Ny4v{9O5^ff~KcG1%GQrN;nveoYD7$Y7Q$^A5)*= zki^rQ55uw9jSXXnUn?X3frBjORW0bkbLq1x{<|T1rq2EwU(c7I#1gNErg_>;ABDw- zxPFREku)mRnt1#Vh_dv+xsNOL+58vUG&|8CUPYdMSjf^x8A$zJC^xY7tJA+0z3g_s z;N4f;PHLu|QwU@fr^taALZ z`zVj6eAxt3^&zY7h?z9kZA>++Jgh97*PPqV=TmXYsRomPFp{&{91_yN1XaZdrcg57 zn7X_u=@+=o*%w|e%qGQLv*biSGm#oir}$ds^GU5Qa=GfBnXW+FmOvKUOh1b+zN?ba zzv9Mb-Ya&ap5{&mXCx>Lx?2bDLmLXuN3Dm;aAn~W9cct*Rd?;?*Jhh0kKsIIN@Pi` zdw7NDSoZNN6;s1ft{6U;+hjxcxpksdobNm%=qWc)n1hQ(g?&xYxPBq|_ezS#W zYh^@eb+TOZB!=U_i>5}y(U!&EQ0Rt$zP(roJ<*yNJaU$BHdG!`Ee3ydLG+!>3Y?Sj zc~yZY{KMsrOwQEbfP60H`5@V(ZSZ-F=g+Ou>Gc>s;;Ql)7ew3;EhWy3=bbX=lN-yAEBbGRlZ*75w$yFW&prF&X%khUGCKnCi?sZ z-BLfOHZ*4`(;Jy{C0x3A#31vBvQ#Z(m2uq(34KYYp^hMvD`+A)Ma<$L#L}gKzM+lVK07#tmM`kt z0oRqMHsuxNR3++)@S97g7!>bx8nY<3QXzfzmSfn^Fm z9nrZfrCTmM-*5=UOf5AZktKn(9kKpN@_vA%7-?WRYunF}BJg~;FSdV9ORTk*a#LXL z8r;!zsd0#EKl}k-#fW1HP3QC^2b~E{M;3o)Y}Oj;OJ=HERPLr6pca@Vz38nx!htDy zt|Yv&PbjUGX4?Ic9&4$nC(`#j35*E-(Nc$16G%-}m6YTTJ(rxHIa_6UWHZfmn%pP+ z)?}Yp(rRMTvR3CY7-t>M>vG^tP`Px%R&!|1+gdEhUsuyN^E#u??i(xlGN)%E)v$5= z$?!mAVZ+S!0Cz*)pzO#>QAr zU#8sK8p*}-yhIKv=S+kaE9!6HcAtG>r}lC?R^IR|^4f*rIO-ftB;^f}vAL3jJNF>+ zq;UkS5zQReVVHgSWweT31)~s4`WKvk#fF37=V_Qm-6^LPk(YI_xjk=?f6>1lnAtlW z0VaDBQ@6>+{_|f>sMJ-0itCIFM53LmRDI%Oj{Lce~l$DjsM+QYU{gioy@E}1b3@jb3yGs{D0s-$%R1r}JhJ#*`w#Ll?4tCBbb5IF9kvmrcV{@S zoRCi@N$Lgc$(P4RBCJd3i`%nVIv-hH8K3^qoTJBFko2WeG@I`ryWgpIf75BDW+DU0 z%Y!?Y1O=#H`92?R(^-#(dqTbiTzZJl*4NbxI9HSeeU&LR6qPhI8yjcni;`P+%#1E_!`iP$g-6d}%_w$g{<) z1@{?TW8IvSmJ4VHiXpN}?lvI_*Y|^PJDdE#N7q@9+28V**cunw>J{IC^gYYK(0ZUu zZ`Y4no3O}dL^sclyM!nWq2}uivy{MRfhrr-;G<8&a%={OtAQrSbqC1i{;O!%?9P*d z*b85zFVgG#XXn;exg0>qPJbmLy;1uW>$x1bc3YHZA^6XXNHq#A=gbN4g%k&Ue4Jd05xNE~R#? z&A#iQOL|!;dTo>76D4kGa(S#&`>T>ZBK$OW@Nn!ViAyiC)T{dqZ}(m?5u?NMHr5&; zQdg^-i^0!!^Im0W4YXibgXgTIgWeCc;X{uuU#>Sc&nd)szZuNs?{iucA zU&p^wlEd^G1s3BmorZLjS7QAg$;~85dQNl7z20-1oo6}w90$1IwSZ&+r0=AeYNsry zb0kDQ8V*-9^g+v5L13vgVF|ob$x+NL*Bs~X{IUB2bvqN}po{aKcgIWEE%mvJdERu7guIEI`~MLo$B;C>v`u_+^ZLM%EQre=5k) zpbVfqgM-5PUp|F$)w2Ka%R%`1Iv42uOC~CKnBDmpez3sxqSIJ6tM81Z=I`8Mvp3Pz z-MY{g!X+cu7G9CUPdaKekszKDHxHZapYz&o_+BR!bJNh0*SR%sxAm=M(tJoljU|g| zaCsCz|6;AR@>-5Orxiv62lZ!4tH$8(duk;`HVp;J|K=z~+A@9WJ9mH)>|c8zK7-uD z0YAuiSo>X$`#p)ClEVg?6;4C~{^VtwcXt!p_D+c6BNk4GI%&53YFf^YOoWZ;Y;Mhj zl+4;oM{U%EOEXTunBz5OR{9;T58Q!Q7 z?nF8%Tc(?ED~z*7gKyX@l1EBCQ98HqAl4XwIZUDe`WA|=y^zyc1$Q}I0)v3+kQ0sB z)EQP#zXPY0hX4H5jVA)%MZWqjyg%v0wTi+xa?nsr(sA~;p`KuihP!UU=6lc8h(xlB zoYjht_@Mz=SzF`M9~JsG#`u}Gb#0t(PzkAU=QNDNNFSLcuS^;+cWr-s@L6t!0vL+> zJGHazUs$3EH?s;j!rlB$M#e&r4rbk1$CfQWf;7xaO6uf}`I&V4J0J7qh@u6!gO)rh zW?^BJ3T~F!_D!jSYzR<~-yPivB8k#ybiHd>VPfD~pGs9!@k7nd+N$G4Gi}#?!vOn| z77=cPK8r3c)O;H^xU+^#IcEU*&-QhQ5x&X=`fLqJJYv|Az?Zh=wozn(AsBn|r5SZ> zj^2cKKjL*nc zzuJp0H|O1m%?J?@4&f5#>{+5w8c?26LhKs&$L8QiUc55hh5Hw5yyKHLh>;sYJ5&sC z`r9r)=0uIgwGaiym1kR(X$S|=Gu5O>Qez_v>zFdy?tLMG*)Gm*%Xou;csXgBz7-=#-~302bq2&uI^{&uU0i)QfjP^fJ8&uv5sN; zqwzVCcYfS9S-FTq6oC4h`5)*L5Q^OR@Js7>k5(?bU{XYK!!@OY6A4ru(pHBWnW*cz zZ<#FplY4i((#r5oD}L?g0T(qP%OaH!^jE^w|8>pUc>rYcO3>vJ>!n9*~=;?lqRDTMsXvKM%jAqyhAJJO>fe@DowJv zVgJp$dM`s2C~s&U7mqn`EkaCwzB0#I`chyb)bSKCmxzBA>DlhXK{3;>+ZZ9WTYdA~U2uG166u?)~tkvcnZ67QfR-p@@!gHoq_}1FE zLpb#JCxG3MpfbQjHP~N&AodPEym9MbqLk^^!Dd#ue?Mx?=5f{H*9LbV6@Vw7J4$Ar z3gH=_j6A}H)^cNE=Dx|GR)?6wF}VRpj<3cH&aTqJxlQyAZtTZfWgSCT#!@0+CBf1% zyg}8I`JAGpek1XXwubGYE#~Ue_%>@6v%)JlYMY_ayylM~8d>kL*(K4+BRN6`+?=7y z8tgxC?eyB1o&&kh5ujAF6g^~;P9u+FCdwu_!IKUnemxJZ20gE+nNQXv(7N%DK=ESJ z(6CEMc!gnq{NyxY7xwJ^;|q3HCZ~Y!;Y~5gUtojPZ2< z{#D9=!=Y9>{rsKQs{vQymMhaKH!xv4y4rztFIK9`ah8Ti1ZUguRVoJ2tUTQ?&ml-D zBFQWsH1oUE`|a3f?kL>^$GiF1gebvya@(dsYqadwv_iL#k0Hz8YUo+~*ivl=W|f{oaB21k7lhzYSyacoQ^tRbM;IH6F9 zxOj9F$1t4G=HG+)ou38%O*W1MKj(uTs58Q)uYtSC^P&9{*Kz2!>!wR92K$#>8Ya#!}mevgsIT#9~tzZ5TZ4 zfqWx*gM@50dkKX5Bg)=(bAnl#3a**B>=~f+lEY8SwY-=EVR+e#GI5Z~Zx}7ngt6d&5WDG$jB^%l@ZH z>@uj&v9QcG9!x00i^WaR&yfG>imoKcPGBzr4%WpuV%hSMtj?6r(T4kKD!Mue_x@2w zoRZ`G)1^`pBf3Q6EI+92>=gA=zrNvMxc=#1YW+k@4U1m!YkO{trrYcKtV3ez1joZ; z$FAX6av1Xd6(}x@Kj=d@xrWu()&wRjZ+lJF9u0gxkAFv*8^`RSiLR4FptnAEWHY}o zNp)7GpM>irFNr^ zomzcsv|E6-n&+9r3q8Z}OKbD(M5WOq;$R<2sB?pYXNtd_gs@rL{{o~yTfaKrDc$*f z6SDlHW}lXJUzv9dWz;w6`G-at{{WLJ*nG~?c95qgW!7NC9K_f$6v(;cOLuQLzj!KE z=n7_m4%%15RMN7VFiiq@&D31Dup6fs->G6_UZ*nFlh&{O2^f3!!S1 zFe!m}OOs9E08&}#TqB>fg1526Y+&qYkE2(u}4Butm8Fqud-PuvZWTja>YOe**S>Z!0lq|?#A?COairkXY=wEz z!5Ei#feBg^9YF&EJdRHh3mZ9QwgXpdxp{adYb@GsV;l7yLXX511;3oR;$21W7#VCB z)UewN9%ajKiJq)HvGT$><~rOkcZAQ92PIr=AYY1w@=NJab*aaj<{_ngnLWhtt>EaM zU?P#dP~6BzpDn*JXm47w8l|H(L_zW^GbwU)sxt9^M-XZO(>LuHY@FUf@dRInkoOWQ z742>VdSSca{$`&At0dBw_55x&`$5T$Vv zDQxFRgpe3ofiYuQ%L%d%m#KOvD5i7!k0B=*YCkzP-g6mL6gSldd&4x!XrBz>u|tp8?vPlKyR%= zRf*Igpow_RA7~Dyc)X$Lv%5Ovw;5%qYK%S^;-%&5IS=ebnt6bMCyx`lM5mB5s>mU!3CGq zrU(}xcEc>#S9So>tx-)(4FS5mkf=mlaA6FfO0=I@w*^dWsOUEndrs2rX^TxK5=uf7mJjh7R1{d3P1C)5+TUMTp^q%umEJXZ0#3 z!{q{l#3i0;6{()BsG@*%tpkzg1+$%C1aU!FmZUZgvq$`pPy6qaTe$U!CsLEBYj@fmTe_kiyfFXR=#1<<_m!M zxGjg`JF}}%>Yp^GY3LoVP9DE|O&rFLao zrc|k3=b4_LPZ1}?rv$9sha@6|;BPb6rF5LY|7QSx+UOY}A{ zDgZv>rGZ87aSRH0%mHE@G~5$xPN`9=hdsy@pSVgITT0EDj6p(xOt?bgrtUom>axkg zt}CJUS1rj)ccv^5N2Uu0YMqX~N)_W>d*)k7s#1x)2EmbEkogdc}UM;3t`xGYORYmd_#DyW$|3yoim0pWO6tw z_YY7;2M33K((6+IOaL_-xU_D&LL42%E;9xR*=)WEn6ecDQIpRJ4=XSM0*ebez#J^^ zULh3_W^iu4U}bKbXz|jfb{@u+1JEll&22Vof9fK*DL(O+shrZ}I~^b(Y0gCKk#U~$ z5v9?1?E{ELD0@h}2DpeXXDsPT&zXm~^j@MG_?etMK}u+VMbT{-H=l@KnHOrjMC?7^ zsexzn{Z4nu{-83SiSxdC2WR1bF~eWvKJya;lor9%(sv~d1{(@O2eduQ@T54pVkNW= zZf3Tt;#GBHwaS}KbgP2B4lsx)4&i5L9SfM@yjtClav9Yt(%2k2F7xpV#(Kj&e}(-n zUB?l8&!4By_*^FC+Mzi5DnIVD{>K|2uMb6vQCw8KU&HLN;Xx8kBXFCr-M5FM(G%W?tA+Z$57cKxMz z1Cy>vLBYe)P_wfLL0ib`9QPtIc+lQ;#1};w#gd(Z!s8sQ=j5C&Q*;~YS=7V}%-Ak& z*MBm#Bmk|Ce8cke;#jqYu9dk)UG}0V0xQY$0|xGo`nT~Z0A8Pni9R#%$2|}?_llL*Y`<~%9k;?ZJAkyc%ybn&8+3Aw51Aahksp*L!}^FkK^^a=-$!1g<4Ol`2$Ll)8|x9ufNyD@hRP>RBv9 zv@Fni&IZrSDX1%q;t)y~xB#(rpr~4)z4pq{Vx1=EqT)nMr8cpA;$H5`y+JI3oUmNN zV~#ZaU;J7iy#L;w?Y&eN=^DRBgR%wmMd(3VC^~9%Tdx_d%)2!LWcFd^Qcy1J; z6z!q)o-LonN!jN4qbVTQo^2iA*=;?s6omw=d%=xE?mE*{{Vyj zJpB*+c+BPynx(FhrWiQ8semZ>H*hM=^tTfxg7hyk{8MW82}gqG~!-we=16rc?>7a7T3>PG^~FJMK*S6h~rY@(M~jeyr)mlm)}qc!sZ4UD;U zGqxF^>&~UA-E?y*(luJMiuyn0QGy7OAcmwQ5V3e4m^;l%yaTMQEl!L-=?#+Lu(|y% z6fFaQIG9F-`%9EfeqOI=RUv=2)gh@UVJIqeN(0Vgnan5o(kOVQAMiQ7d#ou+|_7qr8rw)hO1Ck)dEG zU%a)cQm>>$&<#J#CKayiL$INPv-HHWT)BTsm-N4-{{Y}J;LDc=To{Jc4>*Di*!91} zKsAoc64a`})@7>e3({i^7gcsINUFdb+G1I2JXUMwB}f44k`>#aYVi?$7R{S^mu!22 z5gJ$CRiety95TyNfZKL~Mh8OM<`+Pnl+iK(gQ~$RW=Fn07y_bRs>ycLr$&Ausk~rg zm~72n{Xs2Sp4p5_o5i#}McAsTPW(zFDA}drQ+6x7HagY2@^EFdp=k-RUVPh?!xAja2;Y9 zXNKWjV1b&S+J?mo4}^Dz0iiY#N4Vv7A{%TAb><%p54=?_mi#B1FtceqZ30 zF<-VA9Ui5R#TJSqA=axDGf*oiU_Y6nTO6-fyeDoO=)s!xlW$<32jDv8Sl8eqX=sDJ z9sI!emC$y;oCF>Srfn(hDpj~4iCGV!Ql_;7>0fvk3}z;jv*o|s1P54medV0O_r$qp zNI1gAvBn{T%+Xbu#rue7604SJ$7lR6{BB&o^1r430F}e(#JCt8k^|UQt<~T0EjpNN zN?;P&y3A6sonuglHD>mbc7O?&hlQ-%~tjrgbS{W2h5LVewjU}B2&ZS^?fVUo5tj-OlRc@;5{6zvOe2EQ=Z9w8_WTw)Ku7Z4c^AK%n4Y_z$66s=fZ2mmM@>&Mmq05(5Fl?V59N~SuY z*6PoQ-u$q{x*B}SBd#|Q>*m4F=@tDQH1c<&2}&~O(H&SBsJfWQzGhbJyQ$IsLZ zza1t@j?XpFb|Mc9=`QlzG(SZ{T6PH8ev8GoW^N23-^8>Qt9(pt_b_w@RLGU`cZpVo>f(i<;+7?qOv0n$Vb@oZ z>M=}>DE;*;3Ub;H%t|Q5c)hJm0HI0&f4P1R;roc~z3PfbV zaSLEjTK-csy^Wsn6@k=jma5JYhs?jTruA3dFJQF-obho-`reQmy?s^2rp~!2o(1{gR@ys$dmk%&F=>&>|DpYbtGNnqK{VH*n;b-at zcDF9@!3xF4sY$D3MBUQ>bC^}D7^E^41!^~>3NN)t zw!hq<2)$qraT!dlfsV1QU4oYSEL{xZm7U2$dd+b7s5egL#T@}I%2X&SKf8m$-L+-8 z^D>&IwA5nux~d5ANCwvO%(_;X$ZN+D(4h?TQ7u}?7qRX3b^(%6xT4&riv~?Q% z!xdrX{{We0!e+@ydq7Qqal|!FDyp9*qfSn)%ZQ3PcCZ}ibl=6rky(1AA}vY>KU%28C&b95#0&sot0iluM^9F7#(2|I)b+hvYmqQz3_{WKz zF2_bbAOLp#@zMnsMvmTK&o{zzEBqPH_&-(!cZ7U>7$t{HuRZ9xl^*QBq~Z}EsYA>u zk!-vJ%hFy(&GG7VfrbsNU=Y5NuCroj_XGoA3Yh&B5+taRK9v$wew8tg zc1K1prS+FCU;Y;^T)&|RSI}mm3!l}_P*BmqE|m&7=`&lm4I6OiC@mx8K8pCRuvQb5Ym2bcLg4HQqrXMg-V~*sZzIuv9({Sif z@iPT4QTq@>ajB>0F>nUsAonT=9tueV!ktSch`C-Kpx|6ihk%#hQMz(mbx`c8{L46D z!F{^QwvI%0XL5iK(-Qfw>th(|KUe7eLD)4r1nm>BihmUU0D%y~ne8cQ=E45}P!k1R z1gXLCDBwOKb|7_#5hY5A5+q2HqD1;v(2Mbp%7$Ig&RPgGG)D|zi&?7g%o|}ZW^4{+ zdRyWErCmtfqw3;fpEXj!=Dv!4We^3zwa*{!FI)Af!LrwIewY3=E(1CqSR8jMFKf~F zfxV~xpe6kW>2PJsfDY~@z@RwAg+ex4ysqry>_Xj#!!SGxb5$|JOC-s*K2ue=-Jxso z282feXS@>NTj8fp;XxLSh8=%#T`uDxGL5C!7wwK2hXUnQE$tn|H=d$=+qqd2*^~B` zRgU=l#sxq)Q>hPXO0k31!pxU&a&84gW2sN5UZVPQ28AyPU`Xt^n9B`d&U{9w940kT z@;QA{Bz}+idzkGp)RuLZ-Y?Pj8|eH`pNRN=B0U*TMpM-?Z630AnDtTXBLmGzk9hN- zmzcMS+`+LdI)T<#)~5>n*uSVZ*IBZr0B6=%t8`aZBNq93L2}hgi^0>p1#G9O8Kn=q zj;V%Lr5sRV6gJK9vcL(N;PEOg9%UwqJMjMii!=Gu*DojXfh&A}n_i#_02~Ckvh2}8 zuY~!Aa+BbX{FnX&AE6JSE-YHS+JXr^8TpJfv^nGV5T=!!rV@*Jv>Fdo%Wy&1jVGsR zivob}Z`uf3MNq#miDez78%-T^5*RRX4jKUD51dOTE?!&vN-j`0X&6<;F6{fn7T16k ze|^Bt!$KF`iDR2}j3TLR1=c&9_`R4A0LV%{>;P<-V8iC%wHjSf4D^9fEI3STpsXF< zWdMacHHmR>Wnjg6E^%NTOc?fHgf*} zbpQ%({YE8=cNuw76Vz(JcDsPRJVj!u;_K9I6$DX&2U&|Cao_k1)MfK65G|pD$I#6t zqs@06KQFlNkWkvS<<3}dELG)y1Lyw$JBQZg{ZF9464r4c(MtNG9NW=pFfG~AYBa$d zXAm$}8>je<|%p@vk+8N0D^Ha4vssI(}&0E9ehgyH;U#r zHx?9drh=QO?ViZ&pgCGD<=R%(CcMDE0;^l0`&>r$Cg>a&d#+=Rq%@EVyjl{6IUi)J z7&?hEqg8zo`;d9|UBPm!-F*kqj0sR|RITC>=+4A67O7m8CqQL}74B~T0I0-RYfv;5 zOZdz-P)ko=;y7tYXEu-IvxW4D^fZ;`{{Ra8z(oNII0Nl0Hkll6l#Ud~!5wP+ApjNR zE?ZVURL6*b(R$`3l&x?_fFq#W+)N5z2^{YCRu}hT+JX`#;PH>B{VShesq{@~To2vo zN0GLCKApcRgy3pk2*_PwJPdt-{{W%>C)D~Y);a9O&6c&6k1+_Y3I>DGH3rRJPY^4u zhL`%ni>WtPP$j;0tNCIt5IBo4XF{xZW{F!?j0y$WV1DC=0)-v14LLS$BSX|${Kel9 zqQ$``i_S;$9?wGc*#2T_z3Wee2Fy|eA2RIWaYgzf%d@fYKrmXQ{JE7zMlc8Frf4h~ zoIfxE*-C4d?*VCptG^MSxDEOn^#yh?3Y%LR#xW4uJ=6!6 z9k%2E3%r!-HuJWi*A@@>4ETXT5FZfshG4cYW;!vk3cwZ3(Wskl z-W8&rGrJj?sW#{+*Jw0VLo(1_t#BN|*CT3>=Ox}L7;;DEFw$45{?5Hy>qLjB@85%Ch5r^(DHt7nJ-T$q$r!PUhCu{p8!fn;h_S=5y3PM1d8tG~=|Rl|lJh|}arR?P zggrqGNsCY9mIxf0#} z$NiWgSgNB$Oc!|I=*rGvtgOYBMp&Oxjpw@b_=V0=VYpAZ&d z@iW||_e>4o+jkYrq`0_%Go5VpQ@ShTrRvNPLY5mQ9AgE1kTEOZZ{eT3*$B}wOa)Co@1m=WS zLTmvU_%0mI$CwltJk>p}E{0iEuEE_<9wr>6b+vkV;tdU56hH%Q2UTFXoL9Ik$m38! z7z)V+2c-n9Ab|*Gy|7cxbxcvguqshh@wg~2vK>W^aANl=wWAp+lbkw$0>EX^H7;JL zkZp~FjcQgP>8|6avt!2*m6fw?s)(#LPKtfw_>aUkOnHBdU+P>m9wiR%FbCRL9Xn z>zP$bXR*7~bE~qigCA+uv=7*SxWEdEDyPI^P06_L{44(ejQS9Vi1Zic7)UIAU|Sy_ z_=4E@gc_P2hI5ou0PiRz-y%AewI z9R&|KQWQW+E~*ake37VgqNA-VePVIU6CvQvj1cIx06L+Xl?|nsN}%8_>!b^^IJCOP zFExndR=NjEZ#8fyG`YCE35Y-;9MTVJnJZZ6rFvI=zzRi9hD0v0xRq(&PI>Op z%K^GpWL;Tm=2q1!3#BZ-OcJdnP^+}P1|?S`dbv6P_2p`&1BzDJXc{@=Fpg(Tmj&Z%ijDit0}jWRZY8at zZhQb!eQsvqZ2I;yf;z`)=>5yxMG~tm0|Po!GJ>s&ZxB&*{L_B^oXlZ(uP#|u3OR*q zDy9;a=F+tFj}Q+L>#M{Cl$qW{>yl|Dyi{WbJBhbYAwc+LBL~*weO1l~nv}z5W>j}SA(H8MV4&>hiJ2&SP;FDPx&^!fvYP=V~FpX>B(X* zdSZU{!^bJcj1l-1mI0T*3rw=-l_hF@Zs5quO+>{8S6bIGY87d-2uISNiSatoCEq)4 zF6hl!vo58B0+;9uBGAyQwN8#ASjMF=ww#AKJHtn!`fKTVYv%-o%>-)b;}VOf#{kf7 z1#-IU}Z<#orx2`48|R^iTvPYioRq6s3i(!KiLQcZ;|k@V8fJLXml_62(KScP*1+ z163?1q{&w>peAo6!|z^9G0+L1K@i)BP$+77r`rpuzUJBETFnJS#) zFRRohxq`H+i(|JK`IclAa3TvmFL0*i5T@KPG2@W>WIdxBilC5Cf-!W3A)Fl<+X zTC@)sUl63r?5MF~ncH}e$ze=Zvj_>AHR;x;PYQTDJAz{72H0c?Zm7{XX36{{ZdJ(E1aI>1{Eb zIt)Dx%*98tED$fLrr4o^__KcENk0QoEk$~`_Z-q|Jfm5r8lo&=msSQgR=A2>zH+`L z%?u5@_?K>iZv|9qS-Zc)L;w?ci=CWaH{w<41%m}n9ha$9@hsYa=G8g4II2WMGOR0R z6@&$0Rz7A{c+r*e)ULE?2c?izflHN2=Z}d)P?WaY3IH-&(-Q@dIkTVj7eHNnO{4VM z1Ar}78G9Rz?qxSH3ab>1x{A_w0?X!@aZGZPP3K8S%FQuBqzL0c#|o}B*)BUvs<(n; z7Yqm%4}fj;GaENWRaskf@76NP`|B%ddI|}2=nIHIc^bAZN1Cdbbr7Pcl&4(BT_l%V zDayEUsFt}Bt0SKI`@@}kMImd^O*xdtASZP8jURQC5l6`=Zdf-&74vRxh{iz`A}yZg zFWzn8tXKwLq8sAw6o{9t7>LoSQUEO0C z)O+W2-Wx#lM3qm0nk$ZJp`6GYnhJae+_CR1kR44dtwlaux$ST5G=rY2(RIf4;82e zsdsCPS3Tl^4X)G9OdI_~J}5)9KZop}Z3h1UV$$GxvIUKISJE3>t%&YQMo5>pBu7e%w1*8tC@?f$i3~SBCg{zxJ&lM?B<;v0CrmJ+NsPpP%8XW@pS5X>9 zn`_8LV)aV8KJa0&IJNQ2BGbD6085!9i|J1u_!DwfsYYQ=wnt8oF0~@-o-_luyG;0eP)eovv!U zOY0@G1+g2Xj-NV;mbl}%Ms1XmpK*eP#o#CkrYB82Bj=D%|xLDqd;`_ zl?BQGbw&cHmf9C>R=1jjINadHH>3ipH<0C0={lEExoB}~VRZiha~lVZ>|D96W+S{@ z#-C5TAEv{IwpZYTOJ#Hy$Y!9JV~x#0!^UMyBN$VY7~2KqY%4<)Hd}{SE-s)g+f|%# za@KW?J=>$)bf3B|Y}gXCUm469x~JE))QmZ;*VKOEqBhF#Of9zesDjvBnM8uC0Ethg zm@0jl5|BapCfKG$pn%9P{S11g(p))qDUXOz04c0=vaO`7L8Wy#0-GNwC840Jp+kyb$N}WV- zd-%A0#6+)QufP7@zsb<9=U}erC;+TvzqAUgxWCM7eX%9$ucmL74{y#!rWOlBg1kXD z_J`v$6uCU6eL|RTZkOSSav0#lmY#WFuL&5c#BCz3IYcTHTo!(1kVZDCRX*KBy9L&; z_<}0$99y9kO-T2v?o_$_fN8^nMtyQdWXBJ}$o;tizgQiwkD7T8&^ z8F-h%g~5?Sk{M`xEWl_y%q(Tg&0wRhu3SipZ6zCO54^JJxBbNYix88O#aZf7%f7$M z1bvBy=?*G`aE_#?0MHAdvC;O2inW$)Z+hQ&{?(HN%dNH!Vg>B%ytQ9Tjnj&_hLbeV zx|MNjN7xm=nL~F-u;sqG#w9GUQm|EX03|7QlAH|C>9^J zF97ip54fia9{O3RL1r^TUZ|pV=`X;aASmU6RudI5c(4-2Nt?X{W3;(%-SVti1uSN~ zwTRja>lkh!%5GWYtyU&}lBJ(J&9%Ku;2y}uI~=g&>-a2V^(=NvTk22Lc##%+A>j6! zSjM?9fJT+snPS%7!v?vk;J~Z5ExRBJz_NmvFzSJR=O|k?wg_@^%R%c=x}fwZ{6ZV5 z@<08d^dkn%esO>RJK{XyoM{S{Tjr1E0JdIfNHz+tu||PooY&$DF0JD(iCs#)+*ZbB zj%%B#Vx_HgN-IpxDPL>2w$5}be)5D>2+>cf&&*zdO{)ub;_HXn3!Mve%UcgPwfBmw zJXqw60(R(sai(fK8~K^1KopbBN0vJutQrHTc0PZI0oLqgKXItpL6*$MXF$~^{{W*3 zpgjAV9PJ;YHj6;i7O{7P4lVS=cwQ8&xbWyfOX|0X51;N2XbKF17l5V`m2MnpAp#+h zA={K>?z>-zi;2zwTN^CSVC7r>{6}Xdu7n(+oItt%0KZ5;bp39blkQ(=mor zA9$)b-qg&fP#!7Q_^l&Lt52WtTo}^23`hvdr~~}9TCrAXJADL1+h97qKg{}s2tp zbvA%F*F*}cFL~T7BG@bqIl8`^G{PhY=+$F3IO#4ljjBZ!|jpp4Fo{l#n`g0!YH(2@4R++w!NHREN96S z0~kvbwM?%BwRm96HE^){TurL9T?U%$Y+xgrIJ1$Pxqao#B3C(0CXu}Mmh}J$!#FKo zqdEPMJ@)BL!$)9PJ^9>1?R_;1V|TJTrBCLa(?zqmwQ5g>;)sH0p1(rLCne zXol>wqbgVcn$8MzjCb!ECWF@Mb>`RDWE>q4@2MJ?x9SIWchfP_ z^ktL~PBRLY30)Xbc=Ak4FDvyHt40^(Ux{$L1aaRrDNhr0e4pV+c~zv^avzy{9qy1G zjC!cCw>ZVdCMfUB4Z}1Aflds{1BMgnQ>TxjCU-3-1tozB$`4}G3xI|o$RB@jCynW4 z(cpZs$pvsfy<$aTluosl4sbTW`i2?(FGc_`uxsiYgOY?`b|Va@8|t~z@8pzuenk+I zU=u3P1Dvw`W{gh-b?tE%gVf}zuD6Jv2UT08YW>6lb;47T>GdHBn|;Y~UY-YZ$+IT0 zsIzx=ldT?&32@HMQXb$n_m%@~d*HBm_bJ{}&OIO)TIYl_RYgL@?{J`7u9|*gxUt0; z^_cLNqOD5x9EyatseWPynNeTK8*@WVgw4kEAT7Y^!uy*8)eqsD9T`fVl^$qKRo?lt ztkNGq72`JwLbmOL>}C@b5K_hGnNBRzW??N#>k*VWi{QjbM|gw)V#*xb2C$AeA%v3d zsu#sa%a%YRXgMz|Qlo39zBLEraUk6^U3iF8h%~J<^Hf09-@I4$m*aiOVf12Yw5S}c z8x>N9uCW8{4IsS^4$u)6IULfZsD%kaO^0|pZoaW8nXMy5xdPW5%$IxL`Q;jho(4rO zn(rSqg38xW#mYZ-^TUt1ww~tiya)HM?gEuVOA2cFtXx1`Xj$7@nSZJCDV-szo|8U4 zbi(o6dWWZI*5<;>?gDI$o5NQc%&$YYXlV@M>y;qYbrj6&ne1ZI%L8I_FpNr6_>@FG zfNB#}-qCC({7h(vilKD!RIo(}Hto ziC-06e}T!>A1xl!@$}+0PZogr{7UsFI%vMeeq(f5^)CLtiV4)HysTr1D(FvzPm&rT zngw7MwAqS|Yn&~IvZL;zrUg_o%d+?xA|!De;8!dD3Z;xA_LNPuD#wVjJ%l9z67+&s z4Oss0Pv|<&_Pa3;pjRb=&iR567RzSlDFStd5!|=TRc&o$4?9hvQu^YLN7VWeXBWmC zaGq)`-H&%RxpK8*9MJQ`46CD(2Bf*+MV%hm6Cz&Jhq7jZ0*H6oI5|7#_<*RP$LPoC@9NA) zQOtkI`mu~8p}{{Vtui~iT~4#&g|Y`KRFvht3QL6(aTR zGvVS`2RloZhP%H(kLagP(bjb-=8^nGKdH5u@T%Xg@qX$qzSaPIvfoLjt<<+oj}q$t z0BCujiO|FkM4=_eBVE${Lto|CU@8O*p?5GBzK>Qng$n{v+5?+j+J>yFgcB;YtGJQG ziUc&Xm0hbdFO+g>SH?R10s#80uo=md?H*q9W!j?)-owNm+)>G!#jWedAK}C!ri6?@ ziP~+Xy&xUc)}mKh;-z|C^%aqz=C>Ne3&w9TX}X+>5F!apt)8Q0bY%=9g=cn9Er$O9 zrVuTjpO`{btW`mj7llq(?PU`6mK!OF$T}!M3IirVY!I~{0hy9Ta+JVK>361m#_SUA z)%V<36aml+<|?}!^99(Bv=?N?fy&-^aRnMf%Iye15k|gJG5QM!R3hz%bd(ENT}-Y_ zCv%Dnb1xEzR5r9=^E0}3%UiJ3cZK98&L-^O&obAA1*1CY<_tk+DlV$^-VAgh1!MyI zLCENlRwzbS=1VmggbIL{i3$tee=>`wiCNGMrklb@a0bs3$F+kZ1=SAOQ*@#iRmpcR zig>_xOSlkLtPX1Hbu4m@|s@4wi#Bm;Mzp zIV&Pd`2^ojm^;?{#4xYSMK=3kr!M^^9N~J)Mx6JB%vajs0HAe+!m0`jQe7CSrv;2? zZwz|>0O(&44cgs2J;{G}F21c*>Iyl6w^rJ(E6>-YAr_%*h~!th2+&zJ77%P3M!{b* zDr|YM)MEb1Bc<5smxAXZ`kdMB(pp5Vuzay05bl`Ji4<6v{7W1=pi5DR!ga?9Zd zg3i>d?-C0aaYL0ampsy~LeS3y77;kHedQ_*c3Q9p14=dsN|y~@C3%+hhCw&?m~Bh) z-w>-qLNF5DR+i6uh=P}9Lxb+%I9oPu1HroF>K%JV4vnGZERh|T^y?GZe{Qf)AWOcl zn1@tbv3kj}2*A3<)zahKI_B|lY&iPgF;hE%gTM&?0A0>A`@Q7@L4V(Jy$AQ}6)CCy z+ko8*#xs53O@;0Ju&F@x{{UpoOM3qRzHDUcpYt*ccmDuvRcm^`%MvPHR{sFZEt2e$i>H8=ARQ~`; zK!sph+*BLNO~~-_+zm0DCG?$o6CUcTbt&94B@M8TGzlKklzWvcLqn60^XG=2wJMYdzY3fkRNGsh_UWL4U}bYj6tSF z&gJPsm8w1^nt@fSOBJMQ&U4xsItaCuv)n3#x3>`tUocJ#KM*xxLSwa6lIH&awc=Hn z3&vY|$^9J&t2bEGZ2ohp_fE&&c0Ti{edlEPoiO=j_@cbe2g@Gc%O1zeKe1!3zD(>7 z%<)A!edmgJrQ50EmdB6p9khMrJG0_iZ1|ni;&;!8uP4M%7Gs*sbY1$LWcZbEzY>m5 zh_ayXARS-~Bfy{WlQ-)_7%qV??+DF+1KH=Z3duV}@)FrwieKQV$|uAPSD}=7uOtvv z2`gX#v+Xa~pD{_d#9e}?%t=7C?*d+$;PU?f>OO=%tiL8ZjQ6==(xn@Q_}dUR1H7~> zE`%V8V!q}DLI8`gS9-YPJLU{SE@@GjHM5qe=`smMg$5RA-cxKw1EIUF(Lkd5AGDwV zSYERj+C3)U24+Nk1NR4maOg_;oL4rMsMUzA)m!mU=?BPxay89y6e%8ClTRdW|(diUzzrrkwhZ@C7 zaBB#mTKgkNG|8t7uV%}s2Fjzvh10}?q`-MElmjQq${YLhCAoXCcRzAGdKK%A$U-mmn4Cjs?>WF0zF>#UUmuxCp!yPg4D4iNMu|}2iF{0eTYc=BH z6KYeO%Hl^IfAxpfphpxBec~uEJJXg8liL!-0^^jxBkZ^$U=p>i+LUa!Rt!+C_Phu(sM@=~P}wBt-=1Q)xVQ-QiDofgs!WPjsL>F};{j=HMl+E8R8`Y!ilUEj zd2Vj*K97n~Z}AO>tsA8`_i z7*zJQH4EPLdS|?@EYpL9N*cvz(ddLbI#R*#n8BpQwV!tm5jF=B{apeXIaf6s;Zb*L zc!P>?4OcfC7G(j!d>tmtw(wNK5RLO;#q$=@3$T~cnQK~kHGFTFkSk`ao}v&|s9d;d z0;sjsu4i=IH0y93rZ>C3(fw~xAcQ1Ri7d9(v&vg8TuvA>LG4VF$V~u z;eRuPqtc<)72ajA z%BoNt))g_rui2Ca(dt}6^tII#gj9EE3aL6MuL(^iWdIbsSi}vD+%${Q)L^;F)!=+b zDAkt0fYDVHu*@9bn;tKTKy{Ye;EIrG)1SO+jvKmX%ua>VBEHZv(>um9A>A3SVp?mn zB1>}`(Rb9NFEpF5Vb8`-m=w`mSbXG{c9yoQ0k4nD$v}78k^^NLtxgbS!vhX5nI-P7 zH0u8VPLnLFsJ~F&u>iMhwMP^HJwc*^HWuxOXdU<#+)+(AYX_nsI1;Xy28Y5%U6c(y zJw`T{%&udICdO4kfly-EgO0alb&NoW1P3T zR2^YxRemZA0#O+>;^qL02u5Z zz(z1uMbZ%xvtu6NEz-#H*Lmzm%k;Rg)bYyuAuu+ULq=N3{r>7*)V?Ei1L;Z#uYrYF zs)}40K&;RPZux*8u@^bVrQ##p?K-C$)GkGb$NvC0eNU+mrK~Rh0NOmlhk_uA)olDF z+KG7T`HX2-Y=mQ(t&PS*=T5xGpp2&RD9RU*wC@@r^}wPSyomn*d&?CV^O7ySCI#?8 z5RszF{QhSjuu)(GW!F9~E&zGKe{mqwu2Wf1I>^~ z8>+2(>2R_XcSz%hq|*zG0`|`neBsNU@q{y&s4j=hUgC3AE9|-p2lkLuTG{xE6NOy7 zOpvLVtgxuSbrw|acZ!FomBdtrhblZk8;W3Dy5eh?4w2$Eizymz;_6%>U7N&7vFoTN zu>)8}gI#5G_G>)3mVf>CNmdPjDq*Lj5UwbtE2L~#Mhz%>Dv?8XyDw128#<1Jytq^f zEAtQJ#~={jxp^o8rF*;e1vlCdPk+=ykf?O#rWsvOE#!j51U3WhP(?9#&!EKBMA==B zsP2{v120)@Ow^*Sf0!E6Zkp{e{ss;^%Y_LFEUm=Tk-%$IL5&eb7tC&I(NOD{ij52H z7G8H2481vj#GpBxOto12Kkj0=M7x4ukn;m5=y$j`d-Vv$7tB3)z3eeFo_Nos9jL* z5s57)Wr1Vgztm+O(M88BLCwKs)xe-FvDdW44YW0qDQe){ zi_@ogh_Hn@UddWJfN-ZCV9hGtKyPtm@Y!hdT_f8Cfc-F=L|kls;(=WCM(D=8{6kl6 zl>-%P=!&I`*x0zF?J&y??Ue*lOAAi3Fet0Aoyn1s1!Qv6Fs;qttmEw-5HcF$1R@!O zK;fRV0E^ZrYpWbRj0Vuer#w~*mvVp$E>*drmd7R?WEki`1&Ly?b^SwmT`&s9{18#? zjEI&003g7GEn1UO`w>EoFIe-)!o}Rdpb1(Vnl2FdCF5{o(HdFC8Q%)Byw5WSd*)hSdhUe&q!!GPx}!HLHFuU8@#9V%Gj36f8Hn zXgE{Sg??Z(E#o`E9jLd=aAw$;4!?< z<-jf%I_;= zEzZy8DYOk0Fvhx*9cQ!aa~*&7xpMr=m*!t*;!~sXDbe_zKM7y-!~R$o#E8B8*yqTY|W5VG?&1 zcV+qP)OqOw7U@!@s&_n-H({@!)IY;nM#yz2a@nNO0^o&1T){J2ubvyGN6jPYLMS*u`$Q+tII zNED3~)qxxn*>yhy^Zsv9Xn2?6`0}@4V3YE@x(kxIvW%Xu$}NM1UX5 zhy|k_Tt(Xr_U3G$UN%aq1-jC}E0liEam=mgTz8o|yj4+-w-9oU67C`t8@t2-b?3ss z(ll>cVG)UnR0P5Y5#at=Y%8qkjYC4Bi!PahmsuMgC2>)uzR+(Krol9%ttoC6Ob3Gx za{SmBZXCssTCC+iJj5~2yC>(Q2y?T_zVrI4^9-~5{L2aR!p@e5*|_fJ3=P7fp|CQqau^7zC41Zv9oL3I8zV9V$r zty+$2EobA)9D9T*(*d8-iM!uOCfC}+z3;|ys`nKETOCML1nRnaAf1nlxfY!m{*K{< z6jcvh&_yg_tA z1FHOqSi*4R5x8g5FtAw9Qrs+}>)k8-O+mG1{UUNp8O;hclFg>zy-g%JWv$RvaS;V-yHrBmeNkgqN0{`fPBl;z zHpmjTAKbtO#SAO&7RsrEikpf;z;VsR1DJP8vfqHTIQWGCS6ON3#~C&ku#L@4(}E7@ z0%;j{m}NQq9)S66I>9%Zq_AW2Z2ym(&LIz)M-0Ag>itnuTfHRe-^53DNtO9Bu==z9j@y zxbmhYIx_=*EW5hf0qkDY6c8f&#g-26C|0jAYEf_~R0dMl0s5F|pufb+MkSS$WklH= zSZv)BesUvG;>%ec+n; z(*^y<@jve;{lxzOyqNDFl*yZX=o2x+%N?ciy4gOMq4w&gpUd#YUsIxW=ts zVM5kI?>m;f+;`R&!mtId2o~drAQr3D^8%1m$(&aZsRtRlh}B6jQD>8wK!P?>{6{grE{N$gp^c5g z4wg0=fMl`7%FeROdWYqlD#p{iqAbJxZa-6%g73`4m%PY?0ou~6)lurcnWbH5@v;$e`$P$Y|t5tKq)Km~HUE=pqT)tD9JVz%* zy6kf)t3g?L%%QxmKg0ml)>6ixR6jA#HFE~b6~+%!BS^tUVT1k7?7Nyl^5$!Kr-*CeX56Ai85aWM$DJE zg(z1Nm4pMNweH>afi6b+6Fa3$*N%Uc zRaCdk>hg$Vg8a9b0{|Y)#-{x?YDMBrj=lONsqlW-824oE<8m1E7xi6AY zvAkwkbpv}dE_Us}@6;Bd60fX6AZDTGUX4uH0*D}J1y^;t#67M^Z4omZSgn^EuyWQ7|jdUP6SPpA&yW+G~-ml_p zDzU+9kB`i1=~gMet^1vP-bV#7VV* z?guLYd$^n29Las>C1s7TxE}yZ+#N)mp;Y4$};!!g1?xT*r_Z)y8SR}P^ zxKdUhc->Fi6TrUZ<_DUA2Kjk$6Gc_t2KMa@L^=?iK9aY~qw^XHYb0{F3BZTp09_o+ z?9O1q5YfyxHoWzQy-rj1gmNw+MmT`Z522~_0Id-YBm&roV+Nqq**1HX^rQAoj%8j^ zwB7>*{Lw61Q!KNHOSD}?rK?(-UTbijB8ntotwipcUo{e|R$Maqo0&DY%xr|u5CLIO z%Y%-P1psbo)*vW{&zKGn-^_LKKe6dP`T3huPd(U5x`}TPwHrk2f8jG%oUs5E-IvP% zKv6)$=6&PglT&|}<|*;=er04dR%y0j&2Sh#CM7YRAjIOB^07=HLf~x7LgCo=nH~-D zc_s$2V{+Vv**wAk04kkRm`{K16Nf4HhCd8_ffZ4Y^p4*@LE<}uY;<{@CdAqkmJ-+_ r%ow6=n1-V9#3eW(HUsKELBv+J!eaz&MQNA^V9o*YKWIM?(Lev$hpa@H literal 0 HcmV?d00001 diff --git a/libraries/src/test/java/com/baeldung/docx/Docx4jReadAndWriteIntegrationTest.java b/libraries-data-2/src/test/com/baeldung/docx/Docx4jReadAndWriteIntegrationTest.java similarity index 97% rename from libraries/src/test/java/com/baeldung/docx/Docx4jReadAndWriteIntegrationTest.java rename to libraries-data-2/src/test/com/baeldung/docx/Docx4jReadAndWriteIntegrationTest.java index b6e157beea4d..9a2691d3f0d1 100644 --- a/libraries/src/test/java/com/baeldung/docx/Docx4jReadAndWriteIntegrationTest.java +++ b/libraries-data-2/src/test/com/baeldung/docx/Docx4jReadAndWriteIntegrationTest.java @@ -1,19 +1,19 @@ -package com.baeldung.docx; - -import org.junit.Test; - -import static org.junit.Assert.assertTrue; - -public class Docx4jReadAndWriteIntegrationTest { - - private static final String imagePath = "src/main/resources/image.jpg"; - private static final String outputPath = "helloWorld.docx"; - - @Test - public void givenWordPackage_whenTextExist_thenReturnTrue() throws Exception { - Docx4jExample docx4j = new Docx4jExample(); - docx4j.createDocumentPackage(outputPath, imagePath); - assertTrue(docx4j.isTextExist("Hello World!")); - assertTrue(!docx4j.isTextExist("InexistantText")); - } -} +package com.baeldung.docx; + +import org.junit.Test; + +import static org.junit.Assert.assertTrue; + +public class Docx4jReadAndWriteIntegrationTest { + + private static final String imagePath = "src/main/resources/image.jpg"; + private static final String outputPath = "helloWorld.docx"; + + @Test + public void givenWordPackage_whenTextExist_thenReturnTrue() throws Exception { + Docx4jExample docx4j = new Docx4jExample(); + docx4j.createDocumentPackage(outputPath, imagePath); + assertTrue(docx4j.isTextExist("Hello World!")); + assertTrue(!docx4j.isTextExist("InexistantText")); + } +} diff --git a/libraries/src/main/java/com/baeldung/docx/Docx4jExample.java b/libraries/src/main/java/com/baeldung/docx/Docx4jExample.java deleted file mode 100644 index 97fbf4adc70a..000000000000 --- a/libraries/src/main/java/com/baeldung/docx/Docx4jExample.java +++ /dev/null @@ -1,105 +0,0 @@ -package com.baeldung.docx; - -import org.docx4j.dml.wordprocessingDrawing.Inline; -import org.docx4j.jaxb.Context; -import org.docx4j.model.table.TblFactory; -import org.docx4j.openpackaging.exceptions.Docx4JException; -import org.docx4j.openpackaging.packages.WordprocessingMLPackage; -import org.docx4j.openpackaging.parts.WordprocessingML.BinaryPartAbstractImage; -import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart; -import org.docx4j.wml.BooleanDefaultTrue; -import org.docx4j.wml.Color; -import org.docx4j.wml.Drawing; -import org.docx4j.wml.ObjectFactory; -import org.docx4j.wml.P; -import org.docx4j.wml.R; -import org.docx4j.wml.RPr; -import org.docx4j.wml.Tbl; -import org.docx4j.wml.Tc; -import org.docx4j.wml.Text; -import org.docx4j.wml.Tr; - -import javax.xml.bind.JAXBElement; -import javax.xml.bind.JAXBException; -import java.io.File; -import java.nio.file.Files; -import java.util.List; - -class Docx4jExample { - - void createDocumentPackage(String outputPath, String imagePath) throws Exception { - WordprocessingMLPackage wordPackage = WordprocessingMLPackage.createPackage(); - MainDocumentPart mainDocumentPart = wordPackage.getMainDocumentPart(); - mainDocumentPart.addStyledParagraphOfText("Title", "Hello World!"); - mainDocumentPart.addParagraphOfText("Welcome To Baeldung!"); - - ObjectFactory factory = Context.getWmlObjectFactory(); - P p = factory.createP(); - R r = factory.createR(); - Text t = factory.createText(); - t.setValue("Welcome To Baeldung"); - r.getContent().add(t); - p.getContent().add(r); - RPr rpr = factory.createRPr(); - BooleanDefaultTrue b = new BooleanDefaultTrue(); - rpr.setB(b); - rpr.setI(b); - rpr.setCaps(b); - Color red = factory.createColor(); - red.setVal("green"); - rpr.setColor(red); - r.setRPr(rpr); - mainDocumentPart.getContent().add(p); - - File image = new File(imagePath); - byte[] fileContent = Files.readAllBytes(image.toPath()); - BinaryPartAbstractImage imagePart = BinaryPartAbstractImage.createImagePart(wordPackage, fileContent); - Inline inline = imagePart.createImageInline("Baeldung Image", "Alt Text", 1, 2, false); - P Imageparagraph = addImageToParagraph(inline); - mainDocumentPart.getContent().add(Imageparagraph); - - int writableWidthTwips = wordPackage.getDocumentModel().getSections().get(0).getPageDimensions().getWritableWidthTwips(); - int columnNumber = 3; - Tbl tbl = TblFactory.createTable(3, 3, writableWidthTwips / columnNumber); - List rows = tbl.getContent(); - for (Object row : rows) { - Tr tr = (Tr) row; - List cells = tr.getContent(); - for (Object cell : cells) { - Tc td = (Tc) cell; - td.getContent().add(p); - } - } - - mainDocumentPart.getContent().add(tbl); - File exportFile = new File(outputPath); - wordPackage.save(exportFile); - } - - boolean isTextExist(String testText) throws Docx4JException, JAXBException { - File doc = new File("helloWorld.docx"); - WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(doc); - MainDocumentPart mainDocumentPart = wordMLPackage.getMainDocumentPart(); - String textNodesXPath = "//w:t"; - List paragraphs = mainDocumentPart.getJAXBNodesViaXPath(textNodesXPath, true); - for (Object obj : paragraphs) { - Text text = (Text) ((JAXBElement) obj).getValue(); - String textValue = text.getValue(); - if (textValue != null && textValue.contains(testText)) { - return true; - } - } - return false; - } - - private static P addImageToParagraph(Inline inline) { - ObjectFactory factory = new ObjectFactory(); - P p = factory.createP(); - R r = factory.createR(); - p.getContent().add(r); - Drawing drawing = factory.createDrawing(); - r.getContent().add(drawing); - drawing.getAnchorOrInline().add(inline); - return p; - } -} From 81d12e2121825445c4a0fcd3a8d14920e8515bbf Mon Sep 17 00:00:00 2001 From: Sjmillington Date: Wed, 7 Aug 2019 19:53:18 +0100 Subject: [PATCH 85/99] [BAEL-16003] Added missing README and POM changes --- libraries-data/README.md | 1 - libraries/README.md | 8 -------- pom.xml | 2 ++ 3 files changed, 2 insertions(+), 9 deletions(-) diff --git a/libraries-data/README.md b/libraries-data/README.md index 077961f887cf..1ad7e94a1f42 100644 --- a/libraries-data/README.md +++ b/libraries-data/README.md @@ -11,7 +11,6 @@ - [Apache Ignite with Spring Data](http://www.baeldung.com/apache-ignite-spring-data) - [Guide to JMapper](https://www.baeldung.com/jmapper) - [A Guide to Apache Crunch](https://www.baeldung.com/apache-crunch) -- [Building a Data Pipeline with Flink and Kafka](https://www.baeldung.com/kafka-flink-data-pipeline) - [Intro to Apache Storm](https://www.baeldung.com/apache-storm) - [Guide to Ebean ORM](https://www.baeldung.com/ebean-orm) - [Introduction to Kafka Connectors](https://www.baeldung.com/kafka-connectors-guide) diff --git a/libraries/README.md b/libraries/README.md index c7b40e3c94db..1dd47ef17611 100644 --- a/libraries/README.md +++ b/libraries/README.md @@ -15,7 +15,6 @@ - [Serenity BDD with Spring and JBehave](http://www.baeldung.com/serenity-spring-jbehave) - [Locality-Sensitive Hashing in Java Using Java-LSH](http://www.baeldung.com/locality-sensitive-hashing) - [Introduction to Awaitlity](http://www.baeldung.com/awaitlity-testing) -- [Guide to the HyperLogLog Algorithm](http://www.baeldung.com/java-hyperloglog) - [Introduction to Neuroph](http://www.baeldung.com/neuroph) - [Quick Guide to RSS with Rome](http://www.baeldung.com/rome-rss) - [Introduction to PCollections](http://www.baeldung.com/java-pcollections) @@ -23,8 +22,6 @@ - [Introduction to Eclipse Collections](http://www.baeldung.com/eclipse-collections) - [DistinctBy in the Java Stream API](http://www.baeldung.com/java-streams-distinct-by) - [Introduction to NoException](http://www.baeldung.com/no-exception) -- [Introduction to Conflict-Free Replicated Data Types](http://www.baeldung.com/java-conflict-free-replicated-data-types) -- [Introduction to javax.measure](http://www.baeldung.com/javax-measure) - [Spring Yarg Integration](http://www.baeldung.com/spring-yarg) - [Delete a Directory Recursively in Java](http://www.baeldung.com/java-delete-directory) - [Guide to JDeferred](http://www.baeldung.com/jdeferred) @@ -33,15 +30,10 @@ - [Introduction to Retrofit](http://www.baeldung.com/retrofit) - [Using Pairs in Java](http://www.baeldung.com/java-pairs) - [Introduction to Caffeine](http://www.baeldung.com/java-caching-caffeine) -- [Introduction To Docx4J](http://www.baeldung.com/docx4j) - [Introduction to StreamEx](http://www.baeldung.com/streamex) - [Introduction to BouncyCastle with Java](http://www.baeldung.com/java-bouncy-castle) -- [Interact with Google Sheets from Java](http://www.baeldung.com/google-sheets-java-client) - [A Docker Guide for Java](http://www.baeldung.com/docker-java-api) -- [Introduction To OpenCSV](http://www.baeldung.com/opencsv) - [Introduction to Akka Actors in Java](http://www.baeldung.com/akka-actors-java) -- [Introduction to Smooks](http://www.baeldung.com/smooks) -- [A Guide to Infinispan in Java](http://www.baeldung.com/infinispan) - [A Guide to Unirest](http://www.baeldung.com/unirest) - [Introduction to Akka Actors in Java](http://www.baeldung.com/akka-actors-java) - [A Guide to Byte Buddy](http://www.baeldung.com/byte-buddy) diff --git a/pom.xml b/pom.xml index 9b47ffe3a6a1..139ce65ee51e 100644 --- a/pom.xml +++ b/pom.xml @@ -502,6 +502,7 @@ libraries libraries-2 libraries-data + libraries-data-2 libraries-apache-commons libraries-primitive libraries-security @@ -1194,6 +1195,7 @@ libraries libraries-data + libraries-data-2 libraries-apache-commons libraries-security libraries-server From 7749c4d79f1b6c455fc662c766cb963a5de7818a Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Wed, 7 Aug 2019 22:59:17 +0300 Subject: [PATCH 86/99] Update README.md --- spring-boot-mvc-2/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-boot-mvc-2/README.md b/spring-boot-mvc-2/README.md index a405298cbe8b..f8e26f218bd5 100644 --- a/spring-boot-mvc-2/README.md +++ b/spring-boot-mvc-2/README.md @@ -1,3 +1,3 @@ ### Relevant Articles: -- [Functional Controllers in Spring MVC]() \ No newline at end of file +- [Functional Controllers in Spring MVC](https://www.baeldung.com/spring-mvc-functional-controllers) From b7e02dbb4a1217a02d4d44acd99b19a8fd1dde56 Mon Sep 17 00:00:00 2001 From: Guillermo Lopez Date: Wed, 7 Aug 2019 22:43:41 -0300 Subject: [PATCH 87/99] BAEL-2804 Fixed XML indentation I've set the XML indentation the same way as the rest of the modules using 4 spaces instead of 2. --- persistence-modules/java-jpa-2/pom.xml | 208 +++++++++--------- .../main/resources/META-INF/persistence.xml | 56 ++--- .../java-jpa-2/src/main/resources/logback.xml | 21 +- 3 files changed, 145 insertions(+), 140 deletions(-) diff --git a/persistence-modules/java-jpa-2/pom.xml b/persistence-modules/java-jpa-2/pom.xml index dd200eb3cb01..fdd482f83396 100644 --- a/persistence-modules/java-jpa-2/pom.xml +++ b/persistence-modules/java-jpa-2/pom.xml @@ -1,111 +1,111 @@ - 4.0.0 - java-jpa-2 - java-jpa-2 - - com.baeldung - parent-modules - 1.0.0-SNAPSHOT - ../../pom.xml - - - - org.hibernate - hibernate-core - ${hibernate.version} - - - org.hibernate - hibernate-jpamodelgen - ${hibernate.version} - - - com.h2database - h2 - ${h2.version} - + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 + java-jpa-2 + java-jpa-2 + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + ../../pom.xml + + + + org.hibernate + hibernate-core + ${hibernate.version} + + + org.hibernate + hibernate-jpamodelgen + ${hibernate.version} + + + com.h2database + h2 + ${h2.version} + - - - javax.persistence - javax.persistence-api - ${javax.persistence-api.version} - + + + javax.persistence + javax.persistence-api + ${javax.persistence-api.version} + - - - org.eclipse.persistence - eclipselink - ${eclipselink.version} - runtime - - - org.postgresql - postgresql - ${postgres.version} - runtime - - + + + org.eclipse.persistence + eclipselink + ${eclipselink.version} + runtime + + + org.postgresql + postgresql + ${postgres.version} + runtime + + - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.5.1 - - -proc:none - - - - org.bsc.maven - maven-processor-plugin - 3.3.3 - - - process - - process - - generate-sources - - target/metamodel - - org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor - - - - - + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.5.1 + + -proc:none + + + + org.bsc.maven + maven-processor-plugin + 3.3.3 + + + process + + process + + generate-sources + + target/metamodel + + org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor + + + + + - - org.codehaus.mojo - build-helper-maven-plugin - 3.0.0 - - - add-source - generate-sources - - add-source - - - - target/metamodel - - - - - - - - - 5.4.0.Final - 2.7.4-RC1 - 42.2.5 - 2.2 - + + org.codehaus.mojo + build-helper-maven-plugin + 3.0.0 + + + add-source + generate-sources + + add-source + + + + target/metamodel + + + + + + + + + 5.4.0.Final + 2.7.4-RC1 + 42.2.5 + 2.2 + \ No newline at end of file diff --git a/persistence-modules/java-jpa-2/src/main/resources/META-INF/persistence.xml b/persistence-modules/java-jpa-2/src/main/resources/META-INF/persistence.xml index 653ab83a1831..560a75070c0d 100644 --- a/persistence-modules/java-jpa-2/src/main/resources/META-INF/persistence.xml +++ b/persistence-modules/java-jpa-2/src/main/resources/META-INF/persistence.xml @@ -1,31 +1,35 @@ + version="2.2"> - - org.hibernate.jpa.HibernatePersistenceProvider - com.baeldung.jpa.queryparams.Employee - true - - - - - - - - - - - - + + org.hibernate.jpa.HibernatePersistenceProvider + com.baeldung.jpa.queryparams.Employee + true + + + + + + + + + + + + \ No newline at end of file diff --git a/persistence-modules/java-jpa-2/src/main/resources/logback.xml b/persistence-modules/java-jpa-2/src/main/resources/logback.xml index e0098e7c7e95..2527fea2455f 100644 --- a/persistence-modules/java-jpa-2/src/main/resources/logback.xml +++ b/persistence-modules/java-jpa-2/src/main/resources/logback.xml @@ -1,14 +1,15 @@ - - - %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n - - - + + + %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - + %msg%n + + + - - - + + + \ No newline at end of file From 71db72a68a45549b8d8eef3e3bcb601d438250ff Mon Sep 17 00:00:00 2001 From: nikunjgandhi1987 <51273165+nikunjgandhi1987@users.noreply.github.com> Date: Wed, 7 Aug 2019 21:59:06 -0400 Subject: [PATCH 88/99] Selection Sort Implementation (#7454) * Selection sort implementation * Selection sort implementation --- .../selectionsort/SelectionSort.java | 38 +++++++++++++++++++ .../selectionsort/SelectionSortUnitTest.java | 25 ++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 algorithms-sorting/src/main/java/com/baeldung/algorithms/selectionsort/SelectionSort.java create mode 100644 algorithms-sorting/src/test/java/com/baeldung/algorithms/selectionsort/SelectionSortUnitTest.java diff --git a/algorithms-sorting/src/main/java/com/baeldung/algorithms/selectionsort/SelectionSort.java b/algorithms-sorting/src/main/java/com/baeldung/algorithms/selectionsort/SelectionSort.java new file mode 100644 index 000000000000..17e95edf06c3 --- /dev/null +++ b/algorithms-sorting/src/main/java/com/baeldung/algorithms/selectionsort/SelectionSort.java @@ -0,0 +1,38 @@ +package com.baeldung.algorithms.selectionsort; + +public class SelectionSort { + + public static void sortAscending(final int[] arr) { + for (int i = 0; i < arr.length - 1; i++) { + int minElementIndex = i; + for (int j = i + 1; j < arr.length; j++) { + if (arr[minElementIndex] > arr[j]) { + minElementIndex = j; + } + } + + if (minElementIndex != i) { + int temp = arr[i]; + arr[i] = arr[minElementIndex]; + arr[minElementIndex] = temp; + } + } + } + + public static void sortDescending(final int[] arr) { + for (int i = 0; i < arr.length - 1; i++) { + int maxElementIndex = i; + for (int j = i + 1; j < arr.length; j++) { + if (arr[maxElementIndex] < arr[j]) { + maxElementIndex = j; + } + } + + if (maxElementIndex != i) { + int temp = arr[i]; + arr[i] = arr[maxElementIndex]; + arr[maxElementIndex] = temp; + } + } + } +} \ No newline at end of file diff --git a/algorithms-sorting/src/test/java/com/baeldung/algorithms/selectionsort/SelectionSortUnitTest.java b/algorithms-sorting/src/test/java/com/baeldung/algorithms/selectionsort/SelectionSortUnitTest.java new file mode 100644 index 000000000000..85efd1d3da2f --- /dev/null +++ b/algorithms-sorting/src/test/java/com/baeldung/algorithms/selectionsort/SelectionSortUnitTest.java @@ -0,0 +1,25 @@ +package com.baeldung.algorithms.selectionsort; + +import static org.junit.Assert.*; +import static org.junit.Assert.assertArrayEquals; + +import org.junit.Test; + +public class SelectionSortUnitTest { + + @Test + public void givenUnsortedArray_whenSelectionSort_SortAscending_thenSortedAsc() { + int[] input = { 5, 4, 1, 6, 2 }; + SelectionSort.sortAscending(input); + int[] expected = {1, 2, 4, 5, 6}; + assertArrayEquals("the two arrays are not equal", expected, input); + } + + @Test + public void givenUnsortedArray_whenSelectionSort_SortDescending_thenSortedDesc() { + int[] input = { 5, 4, 1, 6, 2 }; + SelectionSort.sortDescending(input); + int[] expected = {6, 5, 4, 2, 1}; + assertArrayEquals("the two arrays are not equal", expected, input); + } +} From 69fb2149624d4b153501af123b9c656cd21bcd7a Mon Sep 17 00:00:00 2001 From: Kumar Chandrakant Date: Thu, 8 Aug 2019 10:57:16 +0530 Subject: [PATCH 89/99] Adding source code for tutorial tracked under BAEL-3171. (#7523) --- .../baeldung/jgss/JgssIntegrationTest.java | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 core-java-modules/core-java-security/src/test/java/com/baeldung/jgss/JgssIntegrationTest.java diff --git a/core-java-modules/core-java-security/src/test/java/com/baeldung/jgss/JgssIntegrationTest.java b/core-java-modules/core-java-security/src/test/java/com/baeldung/jgss/JgssIntegrationTest.java new file mode 100644 index 000000000000..e322e8999627 --- /dev/null +++ b/core-java-modules/core-java-security/src/test/java/com/baeldung/jgss/JgssIntegrationTest.java @@ -0,0 +1,75 @@ +package com.baeldung.jgss; + +import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import javax.security.sasl.SaslException; + +import org.ietf.jgss.GSSContext; +import org.ietf.jgss.GSSCredential; +import org.ietf.jgss.GSSException; +import org.ietf.jgss.GSSManager; +import org.ietf.jgss.GSSName; +import org.ietf.jgss.MessageProp; +import org.ietf.jgss.Oid; +import org.junit.After; +import org.junit.Before; +import org.junit.Ignore; +import org.junit.Test; + +@Ignore +public class JgssIntegrationTest { + + private static final String SERVER_PRINCIPAL = "HTTP/localhost@EXAMPLE.COM"; + private static final String MECHANISM = "1.2.840.113554.1.2.2"; + + GSSContext serverContext; + GSSContext clientContext; + + @Before + public void setUp() throws SaslException, GSSException { + GSSManager manager = GSSManager.getInstance(); + serverContext = manager.createContext((GSSCredential) null); + String serverPrinciple = SERVER_PRINCIPAL; + GSSName serverName = manager.createName(serverPrinciple, null); + Oid krb5Oid = new Oid(MECHANISM); + clientContext = manager.createContext( + serverName, krb5Oid, (GSSCredential) null, GSSContext.DEFAULT_LIFETIME); + clientContext.requestMutualAuth(true); + clientContext.requestConf(true); + clientContext.requestInteg(true); + } + + @Test + public void givenCredential_whenStarted_thenAutenticationWorks() throws SaslException, GSSException { + byte[] serverToken = new byte[0]; + byte[] clientToken = new byte[0]; + clientToken = clientContext.initSecContext(clientToken, 0, clientToken.length); + serverToken = clientToken; + serverToken = serverContext.acceptSecContext(serverToken, 0, serverToken.length); + clientToken = serverToken; + clientToken = clientContext.initSecContext(clientToken, 0, clientToken.length); + assertTrue(serverContext.isEstablished()); + assertTrue(clientContext.isEstablished()); + } + + @Test + public void givenContext_whenStarted_thenSecurityWorks() throws SaslException, GSSException { + byte[] messageBytes = "Baeldung".getBytes(); + MessageProp clientProp = new MessageProp(0, true); + byte[] clientToken = clientContext.wrap(messageBytes, 0, messageBytes.length, clientProp); + byte[] serverToken = clientToken; + MessageProp serverProp = new MessageProp(0, false); + byte[] bytes = serverContext.unwrap(serverToken, 0, serverToken.length, serverProp); + clientContext.verifyMIC(serverToken, 0, serverToken.length, bytes, 0, bytes.length, serverProp); + String string = new String(bytes); + assertEquals("Baeldung", string); + } + + @After + public void tearDown() throws SaslException, GSSException { + serverContext.dispose(); + clientContext.dispose(); + } + +} From 7f7fd337a7c8fb187c6c66f9ffb40fba080255a8 Mon Sep 17 00:00:00 2001 From: Nivedan Bamal <50937743+Nivedan-Bamal@users.noreply.github.com> Date: Thu, 8 Aug 2019 01:38:03 -0400 Subject: [PATCH 90/99] Adds after / before mapping example (#7518) --- .../main/java/com/baeldung/dto/CarDTO.java | 1 + .../main/java/com/baeldung/dto/FuelType.java | 5 +++ .../com/baeldung/entity/BioDieselCar.java | 4 ++ .../java/com/baeldung/entity/ElectricCar.java | 4 ++ .../java/com/baeldung/mapper/CarsMapper.java | 32 ++++++++++++++ .../baeldung/mapper/CarsMapperUnitTest.java | 42 +++++++++++++++++++ 6 files changed, 88 insertions(+) create mode 100644 mapstruct/src/main/java/com/baeldung/dto/FuelType.java create mode 100644 mapstruct/src/main/java/com/baeldung/entity/BioDieselCar.java create mode 100644 mapstruct/src/main/java/com/baeldung/entity/ElectricCar.java create mode 100644 mapstruct/src/main/java/com/baeldung/mapper/CarsMapper.java create mode 100644 mapstruct/src/test/java/com/baeldung/mapper/CarsMapperUnitTest.java diff --git a/mapstruct/src/main/java/com/baeldung/dto/CarDTO.java b/mapstruct/src/main/java/com/baeldung/dto/CarDTO.java index 51aa8ccac2b0..98aefcb9712f 100644 --- a/mapstruct/src/main/java/com/baeldung/dto/CarDTO.java +++ b/mapstruct/src/main/java/com/baeldung/dto/CarDTO.java @@ -8,4 +8,5 @@ public class CarDTO { private int id; private String name; + private FuelType fuelType; } diff --git a/mapstruct/src/main/java/com/baeldung/dto/FuelType.java b/mapstruct/src/main/java/com/baeldung/dto/FuelType.java new file mode 100644 index 000000000000..88692884adc7 --- /dev/null +++ b/mapstruct/src/main/java/com/baeldung/dto/FuelType.java @@ -0,0 +1,5 @@ +package com.baeldung.dto; + +public enum FuelType { + ELECTRIC, BIO_DIESEL +} diff --git a/mapstruct/src/main/java/com/baeldung/entity/BioDieselCar.java b/mapstruct/src/main/java/com/baeldung/entity/BioDieselCar.java new file mode 100644 index 000000000000..3f868c10a7f6 --- /dev/null +++ b/mapstruct/src/main/java/com/baeldung/entity/BioDieselCar.java @@ -0,0 +1,4 @@ +package com.baeldung.entity; + +public class BioDieselCar extends Car { +} diff --git a/mapstruct/src/main/java/com/baeldung/entity/ElectricCar.java b/mapstruct/src/main/java/com/baeldung/entity/ElectricCar.java new file mode 100644 index 000000000000..9b780a244eb1 --- /dev/null +++ b/mapstruct/src/main/java/com/baeldung/entity/ElectricCar.java @@ -0,0 +1,4 @@ +package com.baeldung.entity; + +public class ElectricCar extends Car { +} diff --git a/mapstruct/src/main/java/com/baeldung/mapper/CarsMapper.java b/mapstruct/src/main/java/com/baeldung/mapper/CarsMapper.java new file mode 100644 index 000000000000..430aef144072 --- /dev/null +++ b/mapstruct/src/main/java/com/baeldung/mapper/CarsMapper.java @@ -0,0 +1,32 @@ +package com.baeldung.mapper; + +import org.mapstruct.AfterMapping; +import org.mapstruct.BeforeMapping; +import org.mapstruct.Mapper; +import org.mapstruct.MappingTarget; + +import com.baeldung.dto.CarDTO; +import com.baeldung.dto.FuelType; +import com.baeldung.entity.BioDieselCar; +import com.baeldung.entity.Car; +import com.baeldung.entity.ElectricCar; + +@Mapper +public abstract class CarsMapper { + + @BeforeMapping + protected void enrichDTOWithFuelType(Car car, @MappingTarget CarDTO carDto) { + if (car instanceof ElectricCar) + carDto.setFuelType(FuelType.ELECTRIC); + if (car instanceof BioDieselCar) + carDto.setFuelType(FuelType.BIO_DIESEL); + } + + @AfterMapping + protected void convertNameToUpperCase(@MappingTarget CarDTO carDto) { + carDto.setName(carDto.getName().toUpperCase()); + } + + public abstract CarDTO toCarDto(Car car); + +} diff --git a/mapstruct/src/test/java/com/baeldung/mapper/CarsMapperUnitTest.java b/mapstruct/src/test/java/com/baeldung/mapper/CarsMapperUnitTest.java new file mode 100644 index 000000000000..e729e1a2d01d --- /dev/null +++ b/mapstruct/src/test/java/com/baeldung/mapper/CarsMapperUnitTest.java @@ -0,0 +1,42 @@ +package com.baeldung.mapper; + +import static org.junit.Assert.assertEquals; + +import org.junit.jupiter.api.Test; +import org.mapstruct.factory.Mappers; + +import com.baeldung.dto.CarDTO; +import com.baeldung.dto.FuelType; +import com.baeldung.entity.BioDieselCar; +import com.baeldung.entity.Car; +import com.baeldung.entity.ElectricCar; + +class CarsMapperUnitTest { + + private CarsMapper sut = Mappers.getMapper(CarsMapper.class); + + @Test + void testGivenSubTypeElectric_mapsModifiedFieldsToSuperTypeDto_whenBeforeAndAfterMappingMethodscarCalled() { + Car car = new ElectricCar(); + car.setId(12); + car.setName("Tesla_Model_C"); + + CarDTO carDto = sut.toCarDto(car); + + assertEquals("TESLA_MODEL_C", carDto.getName()); + assertEquals(FuelType.ELECTRIC, carDto.getFuelType()); + } + + @Test + void testGivenSubTypeBioDiesel_mapsModifiedFieldsToSuperTypeDto_whenBeforeAndAfterMappingMethodscarCalled() { + Car car = new BioDieselCar(); + car.setId(11); + car.setName("Tesla_Model_X"); + + CarDTO carDto = sut.toCarDto(car); + + assertEquals("TESLA_MODEL_X", carDto.getName()); + assertEquals(FuelType.BIO_DIESEL, carDto.getFuelType()); + } + +} From 8ff8628008b26e7955e871c4163abbc80a4c64ee Mon Sep 17 00:00:00 2001 From: FrancoCorleone Date: Thu, 8 Aug 2019 14:40:43 +0200 Subject: [PATCH 91/99] feat(BAEL-3044) Implement MyBatis with Spring/SpringBoot module (#7507) --- persistence-modules/spring-mybatis/pom.xml | 113 ++++++++++++++++++ .../com/baeldung/mybatis/spring/Article.java | 19 +++ .../mybatis/spring/ArticleMapper.java | 11 ++ .../mybatis/spring/PersistenceAutoConfig.java | 14 +++ .../mybatis/spring/PersistenceConfig.java | 37 ++++++ .../src/main/resources/beans.xml | 21 ++++ .../src/main/resources/data.sql | 3 + .../src/main/resources/schema.sql | 6 + .../ArticleMapperBootIntegrationTest.java | 13 ++ .../spring/ArticleMapperCommonTest.java | 22 ++++ .../spring/ArticleMapperIntegrationTest.java | 11 ++ .../ArticleMapperXMLIntegrationTest.java | 11 ++ pom.xml | 1 + 13 files changed, 282 insertions(+) create mode 100644 persistence-modules/spring-mybatis/pom.xml create mode 100644 persistence-modules/spring-mybatis/src/main/java/com/baeldung/mybatis/spring/Article.java create mode 100644 persistence-modules/spring-mybatis/src/main/java/com/baeldung/mybatis/spring/ArticleMapper.java create mode 100644 persistence-modules/spring-mybatis/src/main/java/com/baeldung/mybatis/spring/PersistenceAutoConfig.java create mode 100644 persistence-modules/spring-mybatis/src/main/java/com/baeldung/mybatis/spring/PersistenceConfig.java create mode 100644 persistence-modules/spring-mybatis/src/main/resources/beans.xml create mode 100644 persistence-modules/spring-mybatis/src/main/resources/data.sql create mode 100644 persistence-modules/spring-mybatis/src/main/resources/schema.sql create mode 100644 persistence-modules/spring-mybatis/src/test/java/com/baeldung/mybatis/spring/ArticleMapperBootIntegrationTest.java create mode 100644 persistence-modules/spring-mybatis/src/test/java/com/baeldung/mybatis/spring/ArticleMapperCommonTest.java create mode 100644 persistence-modules/spring-mybatis/src/test/java/com/baeldung/mybatis/spring/ArticleMapperIntegrationTest.java create mode 100644 persistence-modules/spring-mybatis/src/test/java/com/baeldung/mybatis/spring/ArticleMapperXMLIntegrationTest.java diff --git a/persistence-modules/spring-mybatis/pom.xml b/persistence-modules/spring-mybatis/pom.xml new file mode 100644 index 000000000000..ecdcd1d923bb --- /dev/null +++ b/persistence-modules/spring-mybatis/pom.xml @@ -0,0 +1,113 @@ + + 4.0.0 + com.baeldung + spring-mybatis + 0.1-SNAPSHOT + spring-mybatis + + + com.baeldung + parent-boot-2 + 1.0.0-SNAPSHOT + ../../parent-boot-2 + + + + + + + + org.springframework + spring-context + ${org.springframework.version} + + + + org.springframework + spring-beans + ${org.springframework.version} + + + + + + org.mybatis.spring.boot + mybatis-spring-boot-starter + + + + + + com.h2database + h2 + ${h2.version} + + + + org.springframework + spring-jdbc + ${org.springframework.version} + + + + org.mybatis + mybatis + ${mybatis.version} + + + + org.mybatis + mybatis-spring + ${spring-mybatis.version} + + + + + + org.springframework.boot + spring-boot-starter-test + + + + org.springframework + spring-test + ${org.springframework.version} + test + + + + org.assertj + assertj-core + ${assertj-core.version} + test + + + + + + spring-mybatis + + + src/main/resources + true + + + + + + + 5.1.8.RELEASE + + + 2.0.2 + 3.5.2 + 2.1.0 + 1.4.197 + + + 3.8.0 + + + + diff --git a/persistence-modules/spring-mybatis/src/main/java/com/baeldung/mybatis/spring/Article.java b/persistence-modules/spring-mybatis/src/main/java/com/baeldung/mybatis/spring/Article.java new file mode 100644 index 000000000000..90e4ce61701b --- /dev/null +++ b/persistence-modules/spring-mybatis/src/main/java/com/baeldung/mybatis/spring/Article.java @@ -0,0 +1,19 @@ +package com.baeldung.mybatis.spring; + +public class Article { + private Long id; + private String title; + private String author; + + public Long getId() { + return id; + } + + public String getTitle() { + return title; + } + + public String getAuthor() { + return author; + } +} diff --git a/persistence-modules/spring-mybatis/src/main/java/com/baeldung/mybatis/spring/ArticleMapper.java b/persistence-modules/spring-mybatis/src/main/java/com/baeldung/mybatis/spring/ArticleMapper.java new file mode 100644 index 000000000000..db5b3675f427 --- /dev/null +++ b/persistence-modules/spring-mybatis/src/main/java/com/baeldung/mybatis/spring/ArticleMapper.java @@ -0,0 +1,11 @@ +package com.baeldung.mybatis.spring; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +@Mapper +public interface ArticleMapper { + @Select("SELECT * FROM ARTICLES WHERE id = #{id}") + Article getArticle(@Param("id") Long id); +} diff --git a/persistence-modules/spring-mybatis/src/main/java/com/baeldung/mybatis/spring/PersistenceAutoConfig.java b/persistence-modules/spring-mybatis/src/main/java/com/baeldung/mybatis/spring/PersistenceAutoConfig.java new file mode 100644 index 000000000000..72f754c01d51 --- /dev/null +++ b/persistence-modules/spring-mybatis/src/main/java/com/baeldung/mybatis/spring/PersistenceAutoConfig.java @@ -0,0 +1,14 @@ +package com.baeldung.mybatis.spring; + +import org.springframework.boot.SpringBootConfiguration; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.FilterType; + +@SpringBootConfiguration +@EnableAutoConfiguration +@ComponentScan(basePackages = { "com.baeldung.mybatis" }, excludeFilters = { + @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = { PersistenceConfig.class }) +}) +public class PersistenceAutoConfig { +} diff --git a/persistence-modules/spring-mybatis/src/main/java/com/baeldung/mybatis/spring/PersistenceConfig.java b/persistence-modules/spring-mybatis/src/main/java/com/baeldung/mybatis/spring/PersistenceConfig.java new file mode 100644 index 000000000000..f02e04e5a1bc --- /dev/null +++ b/persistence-modules/spring-mybatis/src/main/java/com/baeldung/mybatis/spring/PersistenceConfig.java @@ -0,0 +1,37 @@ +package com.baeldung.mybatis.spring; + +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.annotation.MapperScan; +import org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder; +import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType; + +import javax.sql.DataSource; + +@Configuration +@MapperScan("com.baeldung.mybatis") +@EnableAutoConfiguration(exclude = { DataSourceAutoConfiguration.class, MybatisAutoConfiguration.class }) +public class PersistenceConfig { + + @Bean + public DataSource dataSource() { + return new EmbeddedDatabaseBuilder() + .setType(EmbeddedDatabaseType.H2) + .addScript("schema.sql") + .addScript("data.sql") + .build(); + } + + @Bean + public SqlSessionFactory sqlSessionFactory() throws Exception { + SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean(); + factoryBean.setDataSource(dataSource()); + return factoryBean.getObject(); + } + +} \ No newline at end of file diff --git a/persistence-modules/spring-mybatis/src/main/resources/beans.xml b/persistence-modules/spring-mybatis/src/main/resources/beans.xml new file mode 100644 index 000000000000..6ed82b793459 --- /dev/null +++ b/persistence-modules/spring-mybatis/src/main/resources/beans.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/persistence-modules/spring-mybatis/src/main/resources/data.sql b/persistence-modules/spring-mybatis/src/main/resources/data.sql new file mode 100644 index 000000000000..86203bf56130 --- /dev/null +++ b/persistence-modules/spring-mybatis/src/main/resources/data.sql @@ -0,0 +1,3 @@ +TRUNCATE TABLE ARTICLES; +INSERT INTO ARTICLES +VALUES (1, 'Working with MyBatis in Spring', 'Baeldung'); \ No newline at end of file diff --git a/persistence-modules/spring-mybatis/src/main/resources/schema.sql b/persistence-modules/spring-mybatis/src/main/resources/schema.sql new file mode 100644 index 000000000000..807e1ec62476 --- /dev/null +++ b/persistence-modules/spring-mybatis/src/main/resources/schema.sql @@ -0,0 +1,6 @@ +CREATE TABLE IF NOT EXISTS `ARTICLES` +( + `id` INTEGER PRIMARY KEY, + `title` VARCHAR(100) NOT NULL, + `author` VARCHAR(100) NOT NULL +); diff --git a/persistence-modules/spring-mybatis/src/test/java/com/baeldung/mybatis/spring/ArticleMapperBootIntegrationTest.java b/persistence-modules/spring-mybatis/src/test/java/com/baeldung/mybatis/spring/ArticleMapperBootIntegrationTest.java new file mode 100644 index 000000000000..531356ffa235 --- /dev/null +++ b/persistence-modules/spring-mybatis/src/test/java/com/baeldung/mybatis/spring/ArticleMapperBootIntegrationTest.java @@ -0,0 +1,13 @@ +package com.baeldung.mybatis.spring; + +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest +@ContextConfiguration(classes = PersistenceAutoConfig.class) +public class ArticleMapperBootIntegrationTest extends ArticleMapperCommonTest { + +} diff --git a/persistence-modules/spring-mybatis/src/test/java/com/baeldung/mybatis/spring/ArticleMapperCommonTest.java b/persistence-modules/spring-mybatis/src/test/java/com/baeldung/mybatis/spring/ArticleMapperCommonTest.java new file mode 100644 index 000000000000..33071dc0c1bb --- /dev/null +++ b/persistence-modules/spring-mybatis/src/test/java/com/baeldung/mybatis/spring/ArticleMapperCommonTest.java @@ -0,0 +1,22 @@ +package com.baeldung.mybatis.spring; + +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; + +import static org.assertj.core.api.Assertions.assertThat; + +class ArticleMapperCommonTest { + + @Autowired + ArticleMapper articleMapper; + + @Test + public void whenRecordsInDatabase_shouldReturnArticleWithGivenId() { + Article article = articleMapper.getArticle(1L); + + assertThat(article).isNotNull(); + assertThat(article.getId()).isEqualTo(1L); + assertThat(article.getAuthor()).isEqualTo("Baeldung"); + assertThat(article.getTitle()).isEqualTo("Working with MyBatis in Spring"); + } +} diff --git a/persistence-modules/spring-mybatis/src/test/java/com/baeldung/mybatis/spring/ArticleMapperIntegrationTest.java b/persistence-modules/spring-mybatis/src/test/java/com/baeldung/mybatis/spring/ArticleMapperIntegrationTest.java new file mode 100644 index 000000000000..9298714cb2fc --- /dev/null +++ b/persistence-modules/spring-mybatis/src/test/java/com/baeldung/mybatis/spring/ArticleMapperIntegrationTest.java @@ -0,0 +1,11 @@ +package com.baeldung.mybatis.spring; + +import org.junit.runner.RunWith; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = PersistenceConfig.class) +public class ArticleMapperIntegrationTest extends ArticleMapperCommonTest { + +} diff --git a/persistence-modules/spring-mybatis/src/test/java/com/baeldung/mybatis/spring/ArticleMapperXMLIntegrationTest.java b/persistence-modules/spring-mybatis/src/test/java/com/baeldung/mybatis/spring/ArticleMapperXMLIntegrationTest.java new file mode 100644 index 000000000000..de8974d4ad2e --- /dev/null +++ b/persistence-modules/spring-mybatis/src/test/java/com/baeldung/mybatis/spring/ArticleMapperXMLIntegrationTest.java @@ -0,0 +1,11 @@ +package com.baeldung.mybatis.spring; + +import org.junit.runner.RunWith; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(locations = "classpath:/beans.xml") +public class ArticleMapperXMLIntegrationTest extends ArticleMapperCommonTest { + +} diff --git a/pom.xml b/pom.xml index aabede4f3a00..d095e8a7bc0d 100644 --- a/pom.xml +++ b/pom.xml @@ -879,6 +879,7 @@ spring-freemarker persistence-modules/spring-hibernate-3 persistence-modules/spring-hibernate4 + persistence-modules/spring-mybatis spring-integration spring-jenkins-pipeline spring-jersey From 650dabda9f5aeb6a928b84ba3b6376e9a811eb0e Mon Sep 17 00:00:00 2001 From: amit2103 Date: Fri, 9 Aug 2019 00:27:47 +0530 Subject: [PATCH 92/99] [BAEL-16685] -Upgrade parent-spring-4 to the latest version of Spring 4.3.25 --- parent-spring-4/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent-spring-4/pom.xml b/parent-spring-4/pom.xml index ab66cf19bfd1..390934ca7bb5 100644 --- a/parent-spring-4/pom.xml +++ b/parent-spring-4/pom.xml @@ -51,7 +51,7 @@ - 4.3.22.RELEASE + 4.3.25.RELEASE 1.6.1 From c9176915cb9b859f7e35e5158ba9286100044fbe Mon Sep 17 00:00:00 2001 From: "sreekanth.nair" Date: Fri, 9 Aug 2019 08:29:13 +0530 Subject: [PATCH 93/99] [BAEL-3121] Added source for finding number of lines in a file --- .../main/java/com/baeldung/file}/Main.java | 18 ++++---- .../baeldung/file}/NumberOfLineFinder.java | 13 +++++- .../src/main/resources/input.txt | 45 +++++++++++++++++++ .../file/NumberOfLineFinderUnitTest.java | 21 ++++++--- parent-java/pom.xml | 6 +++ 5 files changed, 87 insertions(+), 16 deletions(-) rename core-java-modules/{core-java-io/src/main/java/com/baeldung/files => core-java-nio/src/main/java/com/baeldung/file}/Main.java (55%) rename core-java-modules/{core-java-io/src/main/java/com/baeldung/files => core-java-nio/src/main/java/com/baeldung/file}/NumberOfLineFinder.java (90%) create mode 100644 core-java-modules/core-java-nio/src/main/resources/input.txt rename core-java-modules/{core-java-io => core-java-nio}/src/test/java/com/baeldung/file/NumberOfLineFinderUnitTest.java (64%) diff --git a/core-java-modules/core-java-io/src/main/java/com/baeldung/files/Main.java b/core-java-modules/core-java-nio/src/main/java/com/baeldung/file/Main.java similarity index 55% rename from core-java-modules/core-java-io/src/main/java/com/baeldung/files/Main.java rename to core-java-modules/core-java-nio/src/main/java/com/baeldung/file/Main.java index c3bcd048a42f..d8800dd88145 100644 --- a/core-java-modules/core-java-io/src/main/java/com/baeldung/files/Main.java +++ b/core-java-modules/core-java-nio/src/main/java/com/baeldung/file/Main.java @@ -1,12 +1,13 @@ -package com.baeldung.files; +package com.baeldung.file; -import static com.baeldung.files.NumberOfLineFinder.getTotalNumberOfLinesUsingApacheCommonsIO; -import static com.baeldung.files.NumberOfLineFinder.getTotalNumberOfLinesUsingBufferedReader; -import static com.baeldung.files.NumberOfLineFinder.getTotalNumberOfLinesUsingGoogleGuava; -import static com.baeldung.files.NumberOfLineFinder.getTotalNumberOfLinesUsingLineNumberReader; -import static com.baeldung.files.NumberOfLineFinder.getTotalNumberOfLinesUsingNIOFileChannel; -import static com.baeldung.files.NumberOfLineFinder.getTotalNumberOfLinesUsingNIOFiles; -import static com.baeldung.files.NumberOfLineFinder.getTotalNumberOfLinesUsingScanner; +import static com.baeldung.file.NumberOfLineFinder.getTotalNumberOfLinesUsingApacheCommonsIO; +import static com.baeldung.file.NumberOfLineFinder.getTotalNumberOfLinesUsingBufferedReader; +import static com.baeldung.file.NumberOfLineFinder.getTotalNumberOfLinesUsingGoogleGuava; +import static com.baeldung.file.NumberOfLineFinder.getTotalNumberOfLinesUsingLineNumberReader; +import static com.baeldung.file.NumberOfLineFinder.getTotalNumberOfLinesUsingNIOFileChannel; +import static com.baeldung.file.NumberOfLineFinder.getTotalNumberOfLinesUsingNIOFiles; +import static com.baeldung.file.NumberOfLineFinder.getTotalNumberOfLinesUsingNIOFilesReadAllLines; +import static com.baeldung.file.NumberOfLineFinder.getTotalNumberOfLinesUsingScanner; public class Main { @@ -17,6 +18,7 @@ public static void main(String... args) throws Exception { System.out.printf("Total Number of Lines Using LineNumberReader: %s%n", getTotalNumberOfLinesUsingLineNumberReader(INPUT_FILE_NAME)); System.out.printf("Total Number of Lines Using Scanner: %s%n", getTotalNumberOfLinesUsingScanner(INPUT_FILE_NAME)); System.out.printf("Total Number of Lines Using NIO Files: %s%n", getTotalNumberOfLinesUsingNIOFiles(INPUT_FILE_NAME)); + System.out.printf("Total Number of Lines Using NIO Files#readAllLines: %s%n", getTotalNumberOfLinesUsingNIOFilesReadAllLines(INPUT_FILE_NAME)); System.out.printf("Total Number of Lines Using NIO FileChannel: %s%n", getTotalNumberOfLinesUsingNIOFileChannel(INPUT_FILE_NAME)); System.out.printf("Total Number of Lines Using Apache Commons IO: %s%n", getTotalNumberOfLinesUsingApacheCommonsIO(INPUT_FILE_NAME)); System.out.printf("Total Number of Lines Using NIO Google Guava: %s%n", getTotalNumberOfLinesUsingGoogleGuava(INPUT_FILE_NAME)); diff --git a/core-java-modules/core-java-io/src/main/java/com/baeldung/files/NumberOfLineFinder.java b/core-java-modules/core-java-nio/src/main/java/com/baeldung/file/NumberOfLineFinder.java similarity index 90% rename from core-java-modules/core-java-io/src/main/java/com/baeldung/files/NumberOfLineFinder.java rename to core-java-modules/core-java-nio/src/main/java/com/baeldung/file/NumberOfLineFinder.java index 076825d76cc4..3abf82f3fa10 100644 --- a/core-java-modules/core-java-io/src/main/java/com/baeldung/files/NumberOfLineFinder.java +++ b/core-java-modules/core-java-nio/src/main/java/com/baeldung/file/NumberOfLineFinder.java @@ -1,4 +1,4 @@ -package com.baeldung.files; +package com.baeldung.file; import java.io.BufferedReader; import java.io.File; @@ -67,6 +67,17 @@ public static int getTotalNumberOfLinesUsingNIOFiles(String fileName) { return lines; } + public static int getTotalNumberOfLinesUsingNIOFilesReadAllLines(String fileName) { + int lines = 0; + try { + List fileStream = Files.readAllLines(Paths.get(fileName)); + lines = fileStream.size(); + } catch (IOException ioe) { + ioe.printStackTrace(); + } + return lines; + } + public static int getTotalNumberOfLinesUsingNIOFileChannel(String fileName) { int lines = 1; try (FileChannel channel = FileChannel.open(Paths.get(fileName), StandardOpenOption.READ)) { diff --git a/core-java-modules/core-java-nio/src/main/resources/input.txt b/core-java-modules/core-java-nio/src/main/resources/input.txt new file mode 100644 index 000000000000..650da894e89b --- /dev/null +++ b/core-java-modules/core-java-nio/src/main/resources/input.txt @@ -0,0 +1,45 @@ +Lorem ipsum dolor sit amet, consectetur adipiscing elit. In lacus enim, scelerisque id sapien ut, semper euismod quam. Nunc ullamcorper semper blandit. Praesent quis quam mollis, iaculis lectus a, fringilla leo. Interdum et malesuada fames ac ante ipsum primis in faucibus. Duis vitae auctor mauris. Pellentesque eu pellentesque lorem, vel ultricies libero. Pellentesque vestibulum sagittis eros. In vestibulum lacus elit. Interdum et malesuada fames ac ante ipsum primis in faucibus. + +Vivamus pharetra lacus fringilla nisl molestie eleifend. Donec et dolor non quam mattis mattis. Proin malesuada maximus elit id semper. Donec facilisis dolor ut feugiat auctor. Proin accumsan semper consectetur. Vivamus facilisis odio vel bibendum imperdiet. Sed rutrum nisi nec nisi interdum fringilla. Aliquam laoreet velit ullamcorper egestas ultrices. Aliquam ultricies sem sed orci interdum, eu porta purus malesuada. Sed accumsan, nunc ut maximus rhoncus, arcu ante pretium ex, non ultrices magna nisi et velit. Pellentesque tempor mi quis lacus consectetur, quis imperdiet enim efficitur. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. + +Nunc sed maximus erat. Aenean imperdiet finibus massa ac aliquam. Interdum et malesuada fames ac ante ipsum primis in faucibus. Duis dignissim cursus purus, eu tempus urna. Nunc sed mauris scelerisque, luctus eros ut, viverra nisi. Maecenas congue sed ligula in eleifend. Praesent nec dignissim enim, dictum efficitur massa. Nullam eros dui, rutrum quis aliquam accumsan, sollicitudin cursus eros. Phasellus euismod, lorem vitae vehicula ullamcorper, leo lorem vestibulum magna, vitae malesuada libero ipsum id lorem. Aenean finibus turpis facilisis tortor bibendum, vitae dignissim dolor dictum. Ut quis ornare nisi, non rutrum sapien. + +Etiam placerat, est eget placerat imperdiet, neque urna tristique est, a dictum nisl dolor vitae leo. Vivamus porttitor mi vitae volutpat ultrices. Quisque at ante porta mauris ultricies iaculis. Phasellus iaculis sollicitudin urna nec facilisis. Suspendisse dapibus vulputate scelerisque. Fusce felis diam, eleifend in tristique in, malesuada a purus. Suspendisse euismod ipsum sed urna imperdiet, quis venenatis lacus dapibus. Maecenas vitae est vel sem fringilla ornare at ut mi. Quisque porta, nulla at rutrum fringilla, mi ligula egestas libero, ac convallis elit diam et sapien. Vestibulum purus tortor, ornare ut enim sed, mattis lobortis erat. Maecenas ac ante tincidunt, euismod mauris a, fermentum diam. Nullam arcu est, consequat sed enim in, bibendum aliquet velit. Donec bibendum magna ac augue sagittis vehicula. Curabitur nec mauris eu augue bibendum volutpat. Fusce fringilla varius fringilla. + +Aliquam faucibus massa non orci accumsan, porta consectetur diam vulputate. Nullam nec erat mollis, imperdiet libero nec, tincidunt neque. Aenean varius purus nec est auctor, sed vulputate libero varius. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent vel neque elit. Donec vulputate fermentum nulla, ut aliquam neque tempor in. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec vel venenatis est. Suspendisse luctus elit quis dui dapibus, id sodales dolor cursus. Curabitur ut vehicula dui. Fusce aliquet est et ante feugiat, et tempus ex congue. Nunc eget dapibus leo. Nunc eu accumsan diam. Suspendisse risus eros, rutrum et volutpat in, consequat in nulla. Suspendisse id felis a orci accumsan iaculis. + +Duis tincidunt diam eget tortor aliquet sodales. Etiam sodales purus ac urna mollis, et cursus enim porttitor. Nulla viverra ligula nunc, ornare condimentum felis posuere sed. Fusce aliquet pretium sagittis. Sed ac mi elementum massa dictum ornare. Integer quis dapibus lectus. Curabitur in rhoncus justo, et vulputate justo. Integer eget efficitur felis. + +Sed finibus vel tortor ac egestas. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas vestibulum nulla mi, blandit efficitur sapien fermentum eu. Integer sed turpis eros. Phasellus sed aliquam ligula. Etiam dictum quam in dapibus mattis. Donec et tristique quam. Pellentesque gravida luctus dolor, eu ornare sapien. Donec justo ante, lacinia non sem et, ultricies dignissim nibh. Vivamus eu nisl et magna pulvinar efficitur. Sed at vehicula lectus, sit amet luctus sem. Morbi vehicula sapien nisi, nec sagittis orci vestibulum et. + +Praesent non finibus diam. Quisque sit amet nisl vitae augue lobortis commodo. Morbi ullamcorper, tortor id ornare maximus, erat ipsum ullamcorper ipsum, in imperdiet diam sem vel erat. Sed pellentesque quis ex sed volutpat. Vestibulum volutpat diam ac dignissim sollicitudin. Praesent at luctus ex, at volutpat dui. Nunc nulla dui, lobortis et pharetra quis, efficitur in turpis. Donec sodales auctor purus id mollis. Sed auctor eu erat eget bibendum. Mauris tincidunt ornare neque id consequat. Suspendisse non massa ante. Quisque velit enim, rhoncus at erat eget, scelerisque placerat elit. Donec finibus luctus dolor. In sed eleifend lorem. Sed tempor ullamcorper lorem nec tristique. Fusce nec volutpat neque, id elementum est. + +Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vestibulum mattis elementum tellus, vitae maximus nulla eleifend ut. Vestibulum eu nibh vulputate, posuere felis eget, aliquet ex. Nullam leo ex, lacinia a ante ac, accumsan efficitur ligula. Vestibulum ornare gravida tempus. Proin rhoncus felis sit amet dolor commodo facilisis. Integer aliquet, diam sed pharetra feugiat, sem massa mollis orci, eget pretium libero nunc at quam. Ut rhoncus quam vitae massa hendrerit, ornare condimentum odio varius. Donec odio sapien, tristique eget libero ac, interdum facilisis odio. Phasellus nec mauris vel dolor semper mattis et quis ligula. Donec nec porttitor nunc. Integer maximus quam vitae sem gravida, ut commodo ex porttitor. + +Sed cursus nisi turpis, vel laoreet massa blandit ut. Cras posuere velit nulla, nec pellentesque ipsum dignissim eget. Donec pharetra, ex et commodo viverra, leo dolor dapibus tellus, vel dignissim est sem ac lectus. Quisque a arcu dapibus, aliquet magna sed, rhoncus neque. Integer suscipit, nulla ac varius lacinia, orci metus scelerisque neque, a laoreet nibh risus vitae dolor. Pellentesque felis metus, pulvinar vel cursus id, ultrices non purus. Donec mi lectus, faucibus sit amet nunc at, sagittis pretium lectus. Fusce nec purus arcu. Mauris neque neque, blandit eget mi at, auctor tempus orci. Mauris sapien lorem, luctus nec tellus non, porttitor aliquam dui. + +Mauris non ex risus. Aliquam imperdiet in eros eget placerat. Sed congue sed sapien porta sollicitudin. Phasellus tempor hendrerit metus vitae tincidunt. Suspendisse congue nisi sed augue dapibus, at pretium ante mollis. Cras non posuere nulla. Proin malesuada finibus magna vel iaculis. Cras in dapibus lorem. Pellentesque volutpat dolor sit amet magna tincidunt mollis. Nunc et lectus sodales, accumsan est vitae, ornare augue. Maecenas malesuada arcu leo, eget blandit lectus porttitor et. Nam aliquam sapien sit amet purus consequat lobortis. Aenean varius, augue porta dignissim efficitur, felis velit dapibus leo, tincidunt ultricies magna felis id ligula. Duis hendrerit, lectus eu elementum euismod, elit lectus consequat mi, sit amet egestas justo massa ut urna. Proin eleifend interdum ultrices. + +Donec lacinia orci pharetra ornare tincidunt. Nulla facilisi. Maecenas malesuada dui ac elit sagittis tincidunt id dictum dolor. Quisque lobortis purus ac metus volutpat viverra. Proin finibus sapien ut odio semper consectetur. Sed gravida luctus egestas. Mauris pretium volutpat elit, at commodo arcu sagittis nec. Ut condimentum fringilla urna ac dignissim. Cras aliquam metus pulvinar, pulvinar nibh at, placerat arcu. Nulla ornare tortor sed lectus mollis, vitae fringilla tellus egestas. Vivamus efficitur tincidunt sapien, sed finibus mi congue eu. Nullam magna velit, lacinia vitae ligula eget, molestie consectetur felis. Suspendisse varius turpis orci, ac laoreet arcu accumsan sed. Fusce quis fermentum lacus, nec varius libero. Pellentesque ac odio ut justo lobortis elementum sit amet vehicula lorem. Nulla interdum nulla eget mi tristique, vitae egestas nunc egestas. + +Curabitur commodo libero eu elit tincidunt, quis placerat risus vehicula. Vestibulum vehicula id nunc iaculis fermentum. Aenean semper, tellus ac semper rutrum, justo lorem feugiat leo, quis vulputate neque dui non ligula. Etiam egestas, enim eget tempor porta, nunc est tristique ante, vel suscipit massa lorem vel diam. Donec faucibus ante id turpis rhoncus congue. Nullam laoreet, diam efficitur scelerisque consequat, ligula leo ultrices est, non fermentum elit mauris ut dolor. Morbi non porttitor lorem. Sed volutpat sapien et lorem porttitor, ultricies ultricies tellus congue. Mauris sodales, tortor nec sagittis finibus, dui odio aliquet nibh, in luctus sapien massa eu risus. Nulla in est sed ante molestie vehicula vel nec lectus. Fusce maximus a quam eget aliquam. Vivamus pulvinar quis nisi a maximus. Proin cursus lacus sapien, et hendrerit elit pretium a. Donec tellus lectus, consectetur id dolor a, luctus rutrum libero. Suspendisse auctor scelerisque dui, nec pellentesque felis viverra nec. Cras elit ex, varius sed pulvinar sed, suscipit ultrices lacus. + +Vivamus eu luctus lectus. Maecenas congue magna orci, quis semper nulla blandit vel. Phasellus dignissim risus placerat lacinia sagittis. Praesent at gravida nisi, at pulvinar diam. Nulla egestas lectus sed felis facilisis egestas. Curabitur posuere gravida urna eu vestibulum. Pellentesque at dolor gravida, placerat quam sit amet, fermentum ligula. Morbi fringilla, mi eget mollis dictum, neque dolor ullamcorper leo, a rutrum libero ipsum eget orci. Curabitur consectetur iaculis vestibulum. Suspendisse ultricies ligula et neque lacinia luctus. Sed dignissim neque id eros sollicitudin pellentesque. + +Donec et magna quis lectus pharetra finibus a fringilla sapien. Phasellus accumsan, erat eu sodales cursus, tortor elit dapibus risus, ut ornare neque arcu in tellus. Nam ac vehicula diam, at aliquam nisl. Cras in sem eget nisi ultrices rutrum sit amet eu velit. Sed molestie tellus eget ante scelerisque, sit amet pulvinar neque fringilla. Nunc volutpat facilisis egestas. Cras sodales dui ac massa egestas, in mattis leo rhoncus. Pellentesque vitae urna vehicula ipsum sodales suscipit. Sed commodo tempus fringilla. + +Etiam egestas elit vitae mi maximus fringilla quis eget libero. Fusce finibus ultrices tellus at molestie. Pellentesque posuere blandit elementum. Etiam eu erat eu urna hendrerit euismod. Nulla quis lectus rhoncus, ultricies urna eget, pretium neque. Cras sit amet ipsum sit amet purus rutrum ultricies nec vitae tortor. Sed tempor dapibus augue in pulvinar. Ut pretium sapien in malesuada accumsan. Donec eget ultrices erat, ut efficitur ligula. Sed posuere mauris est, nec convallis ipsum tempus non. + +Duis a ullamcorper ante. Quisque eu ultricies metus, at aliquet odio. Nullam tempus molestie augue ut varius. Fusce purus eros, dictum nec finibus sed, sodales et diam. Suspendisse sed mi purus. Donec eleifend ipsum diam, nec fringilla enim laoreet non. Phasellus condimentum, magna sit amet porttitor suscipit, arcu risus lobortis dolor, ac fringilla nibh nisl vel purus. Phasellus facilisis posuere orci sit amet tempus. Nam nec enim maximus, rhoncus felis a, rutrum diam. + +Suspendisse potenti. Donec vel tempor neque. In aliquet nulla in eleifend bibendum. Sed sapien sem, finibus in sodales vitae, euismod in sem. Phasellus nec elit a erat pulvinar semper. Aliquam luctus nisl in libero molestie aliquam. Nunc ac ornare felis. Ut non mauris ut ipsum rhoncus pretium. Curabitur tristique lacus a sagittis aliquam. Morbi vel volutpat tellus. Maecenas volutpat, lacus sed tempus imperdiet, eros tellus volutpat nisi, a egestas augue nulla quis arcu. In sollicitudin imperdiet efficitur. Suspendisse viverra aliquet nisi, congue ultrices arcu hendrerit in. + +Maecenas vitae vestibulum nunc. Nullam semper faucibus tincidunt. Etiam sed hendrerit risus. Proin gravida, urna nec tincidunt tempus, nulla sapien porttitor nibh, porttitor lobortis nunc quam et tortor. Praesent ut varius lacus, ut hendrerit enim. Ut nec turpis ac felis imperdiet bibendum. Phasellus porttitor enim odio, et vehicula mi convallis vel. Quisque porta scelerisque sagittis. Praesent dignissim sagittis vulputate. Aenean non justo ac est volutpat bibendum. Aliquam mattis, sapien dapibus pellentesque semper, velit urna malesuada diam, nec varius nibh eros at erat. Proin leo ante, ultricies id velit ut, faucibus porta nibh. Sed nec fermentum urna, sed mollis leo. Aliquam erat volutpat. + +Donec condimentum, urna sed hendrerit vestibulum, ante nibh lacinia dui, in tincidunt odio sem eget orci. In hac habitasse platea dictumst. Mauris id ex id ante tempus finibus eu sagittis erat. Quisque interdum urna risus, vel varius nibh euismod non. Nulla eget pellentesque quam. Aliquam vestibulum ac tortor non lobortis. Sed vitae erat sed libero dignissim dictum nec in turpis. Vivamus id ornare elit, ut facilisis lectus. Morbi dictum purus eget ipsum dignissim porttitor. Sed at vehicula purus, nec rhoncus quam. Nunc a nisl quis arcu blandit fermentum vel quis odio. Vivamus rhoncus, sapien sed lacinia hendrerit, velit urna fermentum dolor, id feugiat magna ligula sed urna. Proin euismod efficitur libero, eget porttitor lacus tempus quis. Duis tincidunt quis est a laoreet. Nam sit amet tristique nisl, sit amet mattis mi. + +Aenean id dictum nulla, sed laoreet magna. Morbi consectetur in turpis at aliquam. Maecenas rutrum feugiat metus, at ullamcorper augue fermentum ut. Vivamus in magna pretium nibh dictum rhoncus luctus at orci. In hac habitasse platea dictumst. Fusce convallis, nulla nec hendrerit suscipit, ipsum diam lobortis sem, vitae elementum lectus erat sit amet magna. Quisque sollicitudin fringilla purus, ac molestie justo congue vitae. Nulla sapien leo, ullamcorper ac tellus in, cursus rhoncus enim. Suspendisse rutrum magna non ex elementum elementum id vitae enim. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Suspendisse ornare libero eu molestie pulvinar. Phasellus faucibus, magna eget rutrum porta, lorem turpis blandit lectus, eu viverra massa risus et ex. + +Ut consectetur eros lacus, ac ullamcorper lacus mattis a. Cras congue justo ut erat interdum, et scelerisque nisi malesuada. Quisque sed sapien sollicitudin purus tincidunt finibus vestibulum vel dolor. Cras iaculis bibendum erat, a dictum urna viverra et. Integer non neque vulputate, tincidunt purus nec, rutrum arcu. Aliquam nec magna non sem semper laoreet quis at quam. Mauris dui lectus, convallis eu efficitur at, facilisis nec lorem. Cras felis sem, egestas ac rutrum vel, mollis et ex. Aenean semper egestas libero, nec commodo mi blandit efficitur. Duis nec quam in massa dignissim sagittis vel vitae leo. Nam molestie hendrerit auctor. + +Sed suscipit egestas tellus sed cursus. Donec vel massa sit amet dui condimentum accumsan. Phasellus libero eros, lobortis a nisi id, porttitor maximus lectus. Praesent consectetur diam urna, id viverra turpis elementum in. Vivamus vitae pretium justo, nec tempor felis. Vivamus volutpat ultricies magna. Suspendisse vulputate lectus ac orci volutpat ullamcorper. Nulla eu leo pretium, commodo arcu accumsan, tempor nisl. Fusce sit amet tellus a ipsum vehicula laoreet sed vitae mauris. Duis porttitor massa mattis nibh placerat consequat. Fusce rutrum commodo tortor eget pellentesque. Suspendisse tempor enim libero, consequat dictum nibh dictum varius. Pellentesque feugiat sit amet urna sed facilisis. Curabitur a sagittis augue. \ No newline at end of file diff --git a/core-java-modules/core-java-io/src/test/java/com/baeldung/file/NumberOfLineFinderUnitTest.java b/core-java-modules/core-java-nio/src/test/java/com/baeldung/file/NumberOfLineFinderUnitTest.java similarity index 64% rename from core-java-modules/core-java-io/src/test/java/com/baeldung/file/NumberOfLineFinderUnitTest.java rename to core-java-modules/core-java-nio/src/test/java/com/baeldung/file/NumberOfLineFinderUnitTest.java index 6f0427ebd291..40ed6d6bbabc 100644 --- a/core-java-modules/core-java-io/src/test/java/com/baeldung/file/NumberOfLineFinderUnitTest.java +++ b/core-java-modules/core-java-nio/src/test/java/com/baeldung/file/NumberOfLineFinderUnitTest.java @@ -1,12 +1,13 @@ package com.baeldung.file; -import static com.baeldung.files.NumberOfLineFinder.getTotalNumberOfLinesUsingApacheCommonsIO; -import static com.baeldung.files.NumberOfLineFinder.getTotalNumberOfLinesUsingBufferedReader; -import static com.baeldung.files.NumberOfLineFinder.getTotalNumberOfLinesUsingGoogleGuava; -import static com.baeldung.files.NumberOfLineFinder.getTotalNumberOfLinesUsingLineNumberReader; -import static com.baeldung.files.NumberOfLineFinder.getTotalNumberOfLinesUsingNIOFileChannel; -import static com.baeldung.files.NumberOfLineFinder.getTotalNumberOfLinesUsingNIOFiles; -import static com.baeldung.files.NumberOfLineFinder.getTotalNumberOfLinesUsingScanner; +import static com.baeldung.file.NumberOfLineFinder.getTotalNumberOfLinesUsingApacheCommonsIO; +import static com.baeldung.file.NumberOfLineFinder.getTotalNumberOfLinesUsingBufferedReader; +import static com.baeldung.file.NumberOfLineFinder.getTotalNumberOfLinesUsingGoogleGuava; +import static com.baeldung.file.NumberOfLineFinder.getTotalNumberOfLinesUsingLineNumberReader; +import static com.baeldung.file.NumberOfLineFinder.getTotalNumberOfLinesUsingNIOFileChannel; +import static com.baeldung.file.NumberOfLineFinder.getTotalNumberOfLinesUsingNIOFiles; +import static com.baeldung.file.NumberOfLineFinder.getTotalNumberOfLinesUsingNIOFilesReadAllLines; +import static com.baeldung.file.NumberOfLineFinder.getTotalNumberOfLinesUsingScanner; import static org.junit.Assert.assertEquals; import org.junit.Test; @@ -39,6 +40,12 @@ public void whenUsingNIOFiles_thenReturnTotalNumberOfLines() { assertEquals(ACTUAL_LINE_COUNT, lines); } + @Test + public void whenUsingNIOFilesReadAllLines_thenReturnTotalNumberOfLines() { + int lines = getTotalNumberOfLinesUsingNIOFilesReadAllLines(INPUT_FILE_NAME); + assertEquals(ACTUAL_LINE_COUNT, lines); + } + @Test public void whenUsingNIOFileChannel_thenReturnTotalNumberOfLines() { int lines = getTotalNumberOfLinesUsingNIOFileChannel(INPUT_FILE_NAME); diff --git a/parent-java/pom.xml b/parent-java/pom.xml index cb3e2058711c..09e2596d0a39 100644 --- a/parent-java/pom.xml +++ b/parent-java/pom.xml @@ -21,10 +21,16 @@ guava ${guava.version} + + commons-io + commons-io + ${commons.io.version} + 23.0 + 2.6 From 243882bf1546ee9427cb2022254a58ef2f64a95b Mon Sep 17 00:00:00 2001 From: Kumar Chandrakant Date: Sat, 10 Aug 2019 01:18:05 +0530 Subject: [PATCH 94/99] Java GSS (#7541) * Adding source code for tutorial tracked under BAEL-3171. * Incorporated review comments on the article. * Resolved merge conflicts. * Incorporated review comments on the article. --- .../baeldung/jgss/JgssIntegrationTest.java | 35 ++++++++++++------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/core-java-modules/core-java-security/src/test/java/com/baeldung/jgss/JgssIntegrationTest.java b/core-java-modules/core-java-security/src/test/java/com/baeldung/jgss/JgssIntegrationTest.java index e322e8999627..ce784bcae6bd 100644 --- a/core-java-modules/core-java-security/src/test/java/com/baeldung/jgss/JgssIntegrationTest.java +++ b/core-java-modules/core-java-security/src/test/java/com/baeldung/jgss/JgssIntegrationTest.java @@ -19,7 +19,7 @@ @Ignore public class JgssIntegrationTest { - + private static final String SERVER_PRINCIPAL = "HTTP/localhost@EXAMPLE.COM"; private static final String MECHANISM = "1.2.840.113554.1.2.2"; @@ -33,8 +33,7 @@ public void setUp() throws SaslException, GSSException { String serverPrinciple = SERVER_PRINCIPAL; GSSName serverName = manager.createName(serverPrinciple, null); Oid krb5Oid = new Oid(MECHANISM); - clientContext = manager.createContext( - serverName, krb5Oid, (GSSCredential) null, GSSContext.DEFAULT_LIFETIME); + clientContext = manager.createContext(serverName, krb5Oid, (GSSCredential) null, GSSContext.DEFAULT_LIFETIME); clientContext.requestMutualAuth(true); clientContext.requestConf(true); clientContext.requestInteg(true); @@ -42,27 +41,37 @@ public void setUp() throws SaslException, GSSException { @Test public void givenCredential_whenStarted_thenAutenticationWorks() throws SaslException, GSSException { - byte[] serverToken = new byte[0]; - byte[] clientToken = new byte[0]; - clientToken = clientContext.initSecContext(clientToken, 0, clientToken.length); - serverToken = clientToken; - serverToken = serverContext.acceptSecContext(serverToken, 0, serverToken.length); - clientToken = serverToken; - clientToken = clientContext.initSecContext(clientToken, 0, clientToken.length); + byte[] serverToken; + byte[] clientToken; + + // On the client-side + clientToken = clientContext.initSecContext(new byte[0], 0, 0); + // sendToServer(clientToken); // This is supposed to be send over the network + + // On the server-side + serverToken = serverContext.acceptSecContext(clientToken, 0, clientToken.length); + // sendToClient(serverToken); // This is supposed to be send over the network + + // Back on the client-side + clientContext.initSecContext(serverToken, 0, serverToken.length); + assertTrue(serverContext.isEstablished()); assertTrue(clientContext.isEstablished()); } @Test public void givenContext_whenStarted_thenSecurityWorks() throws SaslException, GSSException { + // On the client-side byte[] messageBytes = "Baeldung".getBytes(); MessageProp clientProp = new MessageProp(0, true); byte[] clientToken = clientContext.wrap(messageBytes, 0, messageBytes.length, clientProp); - byte[] serverToken = clientToken; + // sendToServer(clientToken); // This is supposed to be send over the network + + // On the server-side MessageProp serverProp = new MessageProp(0, false); - byte[] bytes = serverContext.unwrap(serverToken, 0, serverToken.length, serverProp); - clientContext.verifyMIC(serverToken, 0, serverToken.length, bytes, 0, bytes.length, serverProp); + byte[] bytes = serverContext.unwrap(clientToken, 0, clientToken.length, serverProp); String string = new String(bytes); + assertEquals("Baeldung", string); } From 2a9050ef9043c444e93b2a93b47b479db6e581c1 Mon Sep 17 00:00:00 2001 From: Priyesh Mashelkar Date: Sat, 10 Aug 2019 06:39:38 +0100 Subject: [PATCH 95/99] BAEL-2904 Improvement: Move Lambda Related Articles (#7519) --- core-java-modules/core-java-8/README.md | 5 ----- core-java-modules/core-java-lambdas/README.md | 5 +++++ core-java-modules/core-java-lambdas/pom.xml | 8 +++++++- .../src/main}/java/com/baeldung/java8/entity/Human.java | 0 .../java8/lambda/exceptions/LambdaExceptionWrappers.java | 0 .../java8/lambda/exceptions/ThrowingConsumer.java | 0 .../src/main/java/com/baeldung/java8/lambda/tips/Bar.java | 0 .../src/main/java/com/baeldung/java8/lambda/tips/Baz.java | 0 .../src/main/java/com/baeldung/java8/lambda/tips/Foo.java | 0 .../java/com/baeldung/java8/lambda/tips/FooExtended.java | 0 .../java/com/baeldung/java8/lambda/tips/Processor.java | 0 .../com/baeldung/java8/lambda/tips/ProcessorImpl.java | 0 .../main/java/com/baeldung/java8/lambda/tips/UseFoo.java | 0 .../functionalinterface/FunctionalInterfaceUnitTest.java | 0 .../baeldung/functionalinterface/ShortToByteFunction.java | 0 .../test/java/com/baeldung/java8/Java8SortUnitTest.java | 0 .../exceptions/LambdaExceptionWrappersUnitTest.java | 0 .../baeldung/java8/lambda/methodreference/Bicycle.java | 0 .../java8/lambda/methodreference/BicycleComparator.java | 0 .../lambda/methodreference/MethodReferenceUnitTest.java | 0 .../tips/Java8FunctionalInteracesLambdasUnitTest.java | 0 21 files changed, 12 insertions(+), 6 deletions(-) rename core-java-modules/{core-java-8/src/test => core-java-lambdas/src/main}/java/com/baeldung/java8/entity/Human.java (100%) rename core-java-modules/{core-java-8 => core-java-lambdas}/src/main/java/com/baeldung/java8/lambda/exceptions/LambdaExceptionWrappers.java (100%) rename core-java-modules/{core-java-8 => core-java-lambdas}/src/main/java/com/baeldung/java8/lambda/exceptions/ThrowingConsumer.java (100%) rename core-java-modules/{core-java-8 => core-java-lambdas}/src/main/java/com/baeldung/java8/lambda/tips/Bar.java (100%) rename core-java-modules/{core-java-8 => core-java-lambdas}/src/main/java/com/baeldung/java8/lambda/tips/Baz.java (100%) rename core-java-modules/{core-java-8 => core-java-lambdas}/src/main/java/com/baeldung/java8/lambda/tips/Foo.java (100%) rename core-java-modules/{core-java-8 => core-java-lambdas}/src/main/java/com/baeldung/java8/lambda/tips/FooExtended.java (100%) rename core-java-modules/{core-java-8 => core-java-lambdas}/src/main/java/com/baeldung/java8/lambda/tips/Processor.java (100%) rename core-java-modules/{core-java-8 => core-java-lambdas}/src/main/java/com/baeldung/java8/lambda/tips/ProcessorImpl.java (100%) rename core-java-modules/{core-java-8 => core-java-lambdas}/src/main/java/com/baeldung/java8/lambda/tips/UseFoo.java (100%) rename core-java-modules/{core-java-8 => core-java-lambdas}/src/test/java/com/baeldung/functionalinterface/FunctionalInterfaceUnitTest.java (100%) rename core-java-modules/{core-java-8 => core-java-lambdas}/src/test/java/com/baeldung/functionalinterface/ShortToByteFunction.java (100%) rename core-java-modules/{core-java-8 => core-java-lambdas}/src/test/java/com/baeldung/java8/Java8SortUnitTest.java (100%) rename core-java-modules/{core-java-8 => core-java-lambdas}/src/test/java/com/baeldung/java8/lambda/exceptions/LambdaExceptionWrappersUnitTest.java (100%) rename core-java-modules/{core-java-8 => core-java-lambdas}/src/test/java/com/baeldung/java8/lambda/methodreference/Bicycle.java (100%) rename core-java-modules/{core-java-8 => core-java-lambdas}/src/test/java/com/baeldung/java8/lambda/methodreference/BicycleComparator.java (100%) rename core-java-modules/{core-java-8 => core-java-lambdas}/src/test/java/com/baeldung/java8/lambda/methodreference/MethodReferenceUnitTest.java (100%) rename core-java-modules/{core-java-8 => core-java-lambdas}/src/test/java/com/baeldung/java8/lambda/tips/Java8FunctionalInteracesLambdasUnitTest.java (100%) diff --git a/core-java-modules/core-java-8/README.md b/core-java-modules/core-java-8/README.md index b2ae48ea1140..6e79eddd1690 100644 --- a/core-java-modules/core-java-8/README.md +++ b/core-java-modules/core-java-8/README.md @@ -4,14 +4,10 @@ ### Relevant Articles: - [Guide to Java 8’s Collectors](http://www.baeldung.com/java-8-collectors) -- [Functional Interfaces in Java 8](http://www.baeldung.com/java-8-functional-interfaces) -- [Java 8 – Powerful Comparison with Lambdas](http://www.baeldung.com/java-8-sort-lambda) - [New Features in Java 8](http://www.baeldung.com/java-8-new-features) -- [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) - [Guide to Java 8 groupingBy Collector](http://www.baeldung.com/java-groupingby-collector) - [Strategy Design Pattern in Java 8](http://www.baeldung.com/java-strategy-pattern) -- [Exceptions in Java 8 Lambda Expressions](http://www.baeldung.com/java-lambda-exceptions) - [Guide to Java 8 Comparator.comparing()](http://www.baeldung.com/java-8-comparator-comparing) - [Guide To Java 8 Optional](http://www.baeldung.com/java-optional) - [Guide to the Java 8 forEach](http://www.baeldung.com/foreach-java) @@ -38,6 +34,5 @@ - [Java @SafeVarargs Annotation](https://www.baeldung.com/java-safevarargs) - [Java @Deprecated Annotation](https://www.baeldung.com/java-deprecated) - [Java 8 Predicate Chain](https://www.baeldung.com/java-predicate-chain) -- [Method References in Java](https://www.baeldung.com/java-method-references) - [Creating a Custom Annotation in Java](https://www.baeldung.com/java-custom-annotation) - [The Difference Between Collection.stream().forEach() and Collection.forEach()](https://www.baeldung.com/java-collection-stream-foreach) diff --git a/core-java-modules/core-java-lambdas/README.md b/core-java-modules/core-java-lambdas/README.md index 10b876735e51..98fff64d6824 100644 --- a/core-java-modules/core-java-lambdas/README.md +++ b/core-java-modules/core-java-lambdas/README.md @@ -1,3 +1,8 @@ ## Relevant articles: - [Why Do Local Variables Used in Lambdas Have to Be Final or Effectively Final?](https://www.baeldung.com/java-lambda-effectively-final-local-variables) +- [Java 8 – Powerful Comparison with Lambdas](http://www.baeldung.com/java-8-sort-lambda) +- [Functional Interfaces in Java 8](http://www.baeldung.com/java-8-functional-interfaces) +- [Lambda Expressions and Functional Interfaces: Tips and Best Practices](http://www.baeldung.com/java-8-lambda-expressions-tips) +- [Exceptions in Java 8 Lambda Expressions](http://www.baeldung.com/java-lambda-exceptions) +- [Method References in Java](https://www.baeldung.com/java-method-references) diff --git a/core-java-modules/core-java-lambdas/pom.xml b/core-java-modules/core-java-lambdas/pom.xml index d6158c29467f..9e6e81ed407c 100644 --- a/core-java-modules/core-java-lambdas/pom.xml +++ b/core-java-modules/core-java-lambdas/pom.xml @@ -15,5 +15,11 @@ ../../parent-java - + + + org.apache.commons + commons-lang3 + ${commons-lang3.version} + + \ No newline at end of file diff --git a/core-java-modules/core-java-8/src/test/java/com/baeldung/java8/entity/Human.java b/core-java-modules/core-java-lambdas/src/main/java/com/baeldung/java8/entity/Human.java similarity index 100% rename from core-java-modules/core-java-8/src/test/java/com/baeldung/java8/entity/Human.java rename to core-java-modules/core-java-lambdas/src/main/java/com/baeldung/java8/entity/Human.java diff --git a/core-java-modules/core-java-8/src/main/java/com/baeldung/java8/lambda/exceptions/LambdaExceptionWrappers.java b/core-java-modules/core-java-lambdas/src/main/java/com/baeldung/java8/lambda/exceptions/LambdaExceptionWrappers.java similarity index 100% rename from core-java-modules/core-java-8/src/main/java/com/baeldung/java8/lambda/exceptions/LambdaExceptionWrappers.java rename to core-java-modules/core-java-lambdas/src/main/java/com/baeldung/java8/lambda/exceptions/LambdaExceptionWrappers.java diff --git a/core-java-modules/core-java-8/src/main/java/com/baeldung/java8/lambda/exceptions/ThrowingConsumer.java b/core-java-modules/core-java-lambdas/src/main/java/com/baeldung/java8/lambda/exceptions/ThrowingConsumer.java similarity index 100% rename from core-java-modules/core-java-8/src/main/java/com/baeldung/java8/lambda/exceptions/ThrowingConsumer.java rename to core-java-modules/core-java-lambdas/src/main/java/com/baeldung/java8/lambda/exceptions/ThrowingConsumer.java diff --git a/core-java-modules/core-java-8/src/main/java/com/baeldung/java8/lambda/tips/Bar.java b/core-java-modules/core-java-lambdas/src/main/java/com/baeldung/java8/lambda/tips/Bar.java similarity index 100% rename from core-java-modules/core-java-8/src/main/java/com/baeldung/java8/lambda/tips/Bar.java rename to core-java-modules/core-java-lambdas/src/main/java/com/baeldung/java8/lambda/tips/Bar.java diff --git a/core-java-modules/core-java-8/src/main/java/com/baeldung/java8/lambda/tips/Baz.java b/core-java-modules/core-java-lambdas/src/main/java/com/baeldung/java8/lambda/tips/Baz.java similarity index 100% rename from core-java-modules/core-java-8/src/main/java/com/baeldung/java8/lambda/tips/Baz.java rename to core-java-modules/core-java-lambdas/src/main/java/com/baeldung/java8/lambda/tips/Baz.java diff --git a/core-java-modules/core-java-8/src/main/java/com/baeldung/java8/lambda/tips/Foo.java b/core-java-modules/core-java-lambdas/src/main/java/com/baeldung/java8/lambda/tips/Foo.java similarity index 100% rename from core-java-modules/core-java-8/src/main/java/com/baeldung/java8/lambda/tips/Foo.java rename to core-java-modules/core-java-lambdas/src/main/java/com/baeldung/java8/lambda/tips/Foo.java diff --git a/core-java-modules/core-java-8/src/main/java/com/baeldung/java8/lambda/tips/FooExtended.java b/core-java-modules/core-java-lambdas/src/main/java/com/baeldung/java8/lambda/tips/FooExtended.java similarity index 100% rename from core-java-modules/core-java-8/src/main/java/com/baeldung/java8/lambda/tips/FooExtended.java rename to core-java-modules/core-java-lambdas/src/main/java/com/baeldung/java8/lambda/tips/FooExtended.java diff --git a/core-java-modules/core-java-8/src/main/java/com/baeldung/java8/lambda/tips/Processor.java b/core-java-modules/core-java-lambdas/src/main/java/com/baeldung/java8/lambda/tips/Processor.java similarity index 100% rename from core-java-modules/core-java-8/src/main/java/com/baeldung/java8/lambda/tips/Processor.java rename to core-java-modules/core-java-lambdas/src/main/java/com/baeldung/java8/lambda/tips/Processor.java diff --git a/core-java-modules/core-java-8/src/main/java/com/baeldung/java8/lambda/tips/ProcessorImpl.java b/core-java-modules/core-java-lambdas/src/main/java/com/baeldung/java8/lambda/tips/ProcessorImpl.java similarity index 100% rename from core-java-modules/core-java-8/src/main/java/com/baeldung/java8/lambda/tips/ProcessorImpl.java rename to core-java-modules/core-java-lambdas/src/main/java/com/baeldung/java8/lambda/tips/ProcessorImpl.java diff --git a/core-java-modules/core-java-8/src/main/java/com/baeldung/java8/lambda/tips/UseFoo.java b/core-java-modules/core-java-lambdas/src/main/java/com/baeldung/java8/lambda/tips/UseFoo.java similarity index 100% rename from core-java-modules/core-java-8/src/main/java/com/baeldung/java8/lambda/tips/UseFoo.java rename to core-java-modules/core-java-lambdas/src/main/java/com/baeldung/java8/lambda/tips/UseFoo.java diff --git a/core-java-modules/core-java-8/src/test/java/com/baeldung/functionalinterface/FunctionalInterfaceUnitTest.java b/core-java-modules/core-java-lambdas/src/test/java/com/baeldung/functionalinterface/FunctionalInterfaceUnitTest.java similarity index 100% rename from core-java-modules/core-java-8/src/test/java/com/baeldung/functionalinterface/FunctionalInterfaceUnitTest.java rename to core-java-modules/core-java-lambdas/src/test/java/com/baeldung/functionalinterface/FunctionalInterfaceUnitTest.java diff --git a/core-java-modules/core-java-8/src/test/java/com/baeldung/functionalinterface/ShortToByteFunction.java b/core-java-modules/core-java-lambdas/src/test/java/com/baeldung/functionalinterface/ShortToByteFunction.java similarity index 100% rename from core-java-modules/core-java-8/src/test/java/com/baeldung/functionalinterface/ShortToByteFunction.java rename to core-java-modules/core-java-lambdas/src/test/java/com/baeldung/functionalinterface/ShortToByteFunction.java diff --git a/core-java-modules/core-java-8/src/test/java/com/baeldung/java8/Java8SortUnitTest.java b/core-java-modules/core-java-lambdas/src/test/java/com/baeldung/java8/Java8SortUnitTest.java similarity index 100% rename from core-java-modules/core-java-8/src/test/java/com/baeldung/java8/Java8SortUnitTest.java rename to core-java-modules/core-java-lambdas/src/test/java/com/baeldung/java8/Java8SortUnitTest.java diff --git a/core-java-modules/core-java-8/src/test/java/com/baeldung/java8/lambda/exceptions/LambdaExceptionWrappersUnitTest.java b/core-java-modules/core-java-lambdas/src/test/java/com/baeldung/java8/lambda/exceptions/LambdaExceptionWrappersUnitTest.java similarity index 100% rename from core-java-modules/core-java-8/src/test/java/com/baeldung/java8/lambda/exceptions/LambdaExceptionWrappersUnitTest.java rename to core-java-modules/core-java-lambdas/src/test/java/com/baeldung/java8/lambda/exceptions/LambdaExceptionWrappersUnitTest.java diff --git a/core-java-modules/core-java-8/src/test/java/com/baeldung/java8/lambda/methodreference/Bicycle.java b/core-java-modules/core-java-lambdas/src/test/java/com/baeldung/java8/lambda/methodreference/Bicycle.java similarity index 100% rename from core-java-modules/core-java-8/src/test/java/com/baeldung/java8/lambda/methodreference/Bicycle.java rename to core-java-modules/core-java-lambdas/src/test/java/com/baeldung/java8/lambda/methodreference/Bicycle.java diff --git a/core-java-modules/core-java-8/src/test/java/com/baeldung/java8/lambda/methodreference/BicycleComparator.java b/core-java-modules/core-java-lambdas/src/test/java/com/baeldung/java8/lambda/methodreference/BicycleComparator.java similarity index 100% rename from core-java-modules/core-java-8/src/test/java/com/baeldung/java8/lambda/methodreference/BicycleComparator.java rename to core-java-modules/core-java-lambdas/src/test/java/com/baeldung/java8/lambda/methodreference/BicycleComparator.java diff --git a/core-java-modules/core-java-8/src/test/java/com/baeldung/java8/lambda/methodreference/MethodReferenceUnitTest.java b/core-java-modules/core-java-lambdas/src/test/java/com/baeldung/java8/lambda/methodreference/MethodReferenceUnitTest.java similarity index 100% rename from core-java-modules/core-java-8/src/test/java/com/baeldung/java8/lambda/methodreference/MethodReferenceUnitTest.java rename to core-java-modules/core-java-lambdas/src/test/java/com/baeldung/java8/lambda/methodreference/MethodReferenceUnitTest.java diff --git a/core-java-modules/core-java-8/src/test/java/com/baeldung/java8/lambda/tips/Java8FunctionalInteracesLambdasUnitTest.java b/core-java-modules/core-java-lambdas/src/test/java/com/baeldung/java8/lambda/tips/Java8FunctionalInteracesLambdasUnitTest.java similarity index 100% rename from core-java-modules/core-java-8/src/test/java/com/baeldung/java8/lambda/tips/Java8FunctionalInteracesLambdasUnitTest.java rename to core-java-modules/core-java-lambdas/src/test/java/com/baeldung/java8/lambda/tips/Java8FunctionalInteracesLambdasUnitTest.java From db411e34a8ab73862693642ac8ea69194374312e Mon Sep 17 00:00:00 2001 From: Dhawal Kapil Date: Sat, 10 Aug 2019 14:52:25 +0530 Subject: [PATCH 96/99] BAEL-10672 Modules with Failing SpringContextTest - Renamed SpringContextTest to SpringContextLiveTest for modules that had live component - Fixed integration build due to issues in spring-cloud-data-flow pom.xml --- pom.xml | 16 ++++++++-------- ...ntextTest.java => SpringContextLiveTest.java} | 2 +- spring-cloud-data-flow/pom.xml | 2 +- ...ntextTest.java => SpringContextLiveTest.java} | 2 +- ...ntextTest.java => SpringContextLiveTest.java} | 2 +- ...ntextTest.java => SpringContextLiveTest.java} | 2 +- ...ntextTest.java => SpringContextLiveTest.java} | 2 +- ...ntextTest.java => SpringContextLiveTest.java} | 2 +- ...ntextTest.java => SpringContextLiveTest.java} | 2 +- ...ntextTest.java => SpringContextLiveTest.java} | 2 +- ...ntextTest.java => SpringContextLiveTest.java} | 2 +- ...ntextTest.java => SpringContextLiveTest.java} | 2 +- ...ntextTest.java => SpringContextLiveTest.java} | 2 +- 13 files changed, 20 insertions(+), 20 deletions(-) rename spring-cloud-bus/spring-cloud-config-client/src/test/java/org/baeldung/{SpringContextTest.java => SpringContextLiveTest.java} (91%) rename spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/data-flow-server/src/test/java/org/baeldung/{SpringContextTest.java => SpringContextLiveTest.java} (92%) rename spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/data-flow-shell/src/test/java/org/baeldung/{SpringContextTest.java => SpringContextLiveTest.java} (91%) rename spring-cloud/spring-cloud-bootstrap/gateway/src/test/java/com/baeldung/spring/cloud/bootstrap/gateway/{SpringContextTest.java => SpringContextLiveTest.java} (90%) rename spring-cloud/spring-cloud-vault/src/test/java/org/baeldung/spring/cloud/vaultsample/{SpringContextTest.java => SpringContextLiveTest.java} (91%) rename spring-data-rest-querydsl/src/test/java/org/baeldung/{SpringContextTest.java => SpringContextLiveTest.java} (91%) rename spring-ejb/spring-ejb-client/src/test/java/org/baeldung/{SpringContextTest.java => SpringContextLiveTest.java} (92%) rename spring-session/spring-session-mongodb/src/test/java/org/baeldung/{SpringContextTest.java => SpringContextLiveTest.java} (92%) rename spring-session/spring-session-redis/src/test/java/org/baeldung/{SpringContextTest.java => SpringContextLiveTest.java} (92%) rename spring-vault/src/test/java/org/baeldung/{SpringContextTest.java => SpringContextLiveTest.java} (92%) rename spring-webflux-amqp/src/test/java/org/baeldung/{SpringContextTest.java => SpringContextLiveTest.java} (92%) diff --git a/pom.xml b/pom.xml index eff74cfe707d..24c2080f8a1a 100644 --- a/pom.xml +++ b/pom.xml @@ -664,23 +664,23 @@ spring-boot-libraries - - + spring-cloud + spring-cloud-bus - + spring-cloud-data-flow spring-core spring-core-2 spring-cucumber spring-data-rest - + spring-data-rest-querydsl spring-dispatcher-servlet spring-drools spring-di spring-ehcache - + spring-ejb spring-exceptions spring-freemarker @@ -752,7 +752,7 @@ spring-security-stormpath spring-security-thymeleaf spring-security-x509 - + spring-session spring-sleuth spring-soap spring-social-login @@ -763,10 +763,10 @@ spring-thymeleaf - + spring-vault spring-vertx - + spring-webflux-amqp spring-zuul diff --git a/spring-cloud-bus/spring-cloud-config-client/src/test/java/org/baeldung/SpringContextTest.java b/spring-cloud-bus/spring-cloud-config-client/src/test/java/org/baeldung/SpringContextLiveTest.java similarity index 91% rename from spring-cloud-bus/spring-cloud-config-client/src/test/java/org/baeldung/SpringContextTest.java rename to spring-cloud-bus/spring-cloud-config-client/src/test/java/org/baeldung/SpringContextLiveTest.java index a5ab1342a1f3..8a33efef43f7 100644 --- a/spring-cloud-bus/spring-cloud-config-client/src/test/java/org/baeldung/SpringContextTest.java +++ b/spring-cloud-bus/spring-cloud-config-client/src/test/java/org/baeldung/SpringContextLiveTest.java @@ -9,7 +9,7 @@ @RunWith(SpringRunner.class) @SpringBootTest(classes = SpringCloudConfigClientApplication.class) -public class SpringContextTest { +public class SpringContextLiveTest { @Test public void contextLoads() { diff --git a/spring-cloud-data-flow/pom.xml b/spring-cloud-data-flow/pom.xml index f3382067f9ac..32e16c72fcc6 100644 --- a/spring-cloud-data-flow/pom.xml +++ b/spring-cloud-data-flow/pom.xml @@ -13,7 +13,7 @@ - spring-cloud-data-flow-stream + spring-cloud-data-flow-stream-processing spring-cloud-data-flow-etl batch-job apache-spark-job diff --git a/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/data-flow-server/src/test/java/org/baeldung/SpringContextTest.java b/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/data-flow-server/src/test/java/org/baeldung/SpringContextLiveTest.java similarity index 92% rename from spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/data-flow-server/src/test/java/org/baeldung/SpringContextTest.java rename to spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/data-flow-server/src/test/java/org/baeldung/SpringContextLiveTest.java index 83cb8067cf47..980c096f5e2b 100644 --- a/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/data-flow-server/src/test/java/org/baeldung/SpringContextTest.java +++ b/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/data-flow-server/src/test/java/org/baeldung/SpringContextLiveTest.java @@ -8,7 +8,7 @@ @RunWith(SpringRunner.class) @SpringBootTest(classes = DataFlowServerApplication.class) -public class SpringContextTest { +public class SpringContextLiveTest { @Test public void whenSpringContextIsBootstrapped_thenNoExceptions() { diff --git a/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/data-flow-shell/src/test/java/org/baeldung/SpringContextTest.java b/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/data-flow-shell/src/test/java/org/baeldung/SpringContextLiveTest.java similarity index 91% rename from spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/data-flow-shell/src/test/java/org/baeldung/SpringContextTest.java rename to spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/data-flow-shell/src/test/java/org/baeldung/SpringContextLiveTest.java index c456f699797f..5be4f9c07716 100644 --- a/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/data-flow-shell/src/test/java/org/baeldung/SpringContextTest.java +++ b/spring-cloud-data-flow/spring-cloud-data-flow-stream-processing/data-flow-shell/src/test/java/org/baeldung/SpringContextLiveTest.java @@ -8,7 +8,7 @@ @RunWith(SpringRunner.class) @SpringBootTest(classes = DataFlowShellApplication.class) -public class SpringContextTest { +public class SpringContextLiveTest { @Test public void contextLoads() { diff --git a/spring-cloud/spring-cloud-bootstrap/gateway/src/test/java/com/baeldung/spring/cloud/bootstrap/gateway/SpringContextTest.java b/spring-cloud/spring-cloud-bootstrap/gateway/src/test/java/com/baeldung/spring/cloud/bootstrap/gateway/SpringContextLiveTest.java similarity index 90% rename from spring-cloud/spring-cloud-bootstrap/gateway/src/test/java/com/baeldung/spring/cloud/bootstrap/gateway/SpringContextTest.java rename to spring-cloud/spring-cloud-bootstrap/gateway/src/test/java/com/baeldung/spring/cloud/bootstrap/gateway/SpringContextLiveTest.java index a2d1cd1087a1..a3cbb3310d21 100644 --- a/spring-cloud/spring-cloud-bootstrap/gateway/src/test/java/com/baeldung/spring/cloud/bootstrap/gateway/SpringContextTest.java +++ b/spring-cloud/spring-cloud-bootstrap/gateway/src/test/java/com/baeldung/spring/cloud/bootstrap/gateway/SpringContextLiveTest.java @@ -7,7 +7,7 @@ @RunWith(SpringRunner.class) @SpringBootTest -public class SpringContextTest { +public class SpringContextLiveTest { @Test public void whenSpringContextIsBootstrapped_thenNoExceptions() { diff --git a/spring-cloud/spring-cloud-vault/src/test/java/org/baeldung/spring/cloud/vaultsample/SpringContextTest.java b/spring-cloud/spring-cloud-vault/src/test/java/org/baeldung/spring/cloud/vaultsample/SpringContextLiveTest.java similarity index 91% rename from spring-cloud/spring-cloud-vault/src/test/java/org/baeldung/spring/cloud/vaultsample/SpringContextTest.java rename to spring-cloud/spring-cloud-vault/src/test/java/org/baeldung/spring/cloud/vaultsample/SpringContextLiveTest.java index 73fcbe55f093..3be4d9696445 100644 --- a/spring-cloud/spring-cloud-vault/src/test/java/org/baeldung/spring/cloud/vaultsample/SpringContextTest.java +++ b/spring-cloud/spring-cloud-vault/src/test/java/org/baeldung/spring/cloud/vaultsample/SpringContextLiveTest.java @@ -7,7 +7,7 @@ @RunWith(SpringRunner.class) @SpringBootTest(classes = VaultSampleApplication.class) -public class SpringContextTest { +public class SpringContextLiveTest { @Test public void whenSpringContextIsBootstrapped_thenNoExceptions() { diff --git a/spring-data-rest-querydsl/src/test/java/org/baeldung/SpringContextTest.java b/spring-data-rest-querydsl/src/test/java/org/baeldung/SpringContextLiveTest.java similarity index 91% rename from spring-data-rest-querydsl/src/test/java/org/baeldung/SpringContextTest.java rename to spring-data-rest-querydsl/src/test/java/org/baeldung/SpringContextLiveTest.java index 5e68a8e64f3d..5cb0a8167e31 100644 --- a/spring-data-rest-querydsl/src/test/java/org/baeldung/SpringContextTest.java +++ b/spring-data-rest-querydsl/src/test/java/org/baeldung/SpringContextLiveTest.java @@ -9,7 +9,7 @@ @RunWith(SpringRunner.class) @SpringBootTest(classes = Application.class) -public class SpringContextTest { +public class SpringContextLiveTest { @Test public void whenSpringContextIsBootstrapped_thenNoExceptions() { diff --git a/spring-ejb/spring-ejb-client/src/test/java/org/baeldung/SpringContextTest.java b/spring-ejb/spring-ejb-client/src/test/java/org/baeldung/SpringContextLiveTest.java similarity index 92% rename from spring-ejb/spring-ejb-client/src/test/java/org/baeldung/SpringContextTest.java rename to spring-ejb/spring-ejb-client/src/test/java/org/baeldung/SpringContextLiveTest.java index 3e9af8a336e8..bbd3b6c2ba7c 100644 --- a/spring-ejb/spring-ejb-client/src/test/java/org/baeldung/SpringContextTest.java +++ b/spring-ejb/spring-ejb-client/src/test/java/org/baeldung/SpringContextLiveTest.java @@ -9,7 +9,7 @@ @RunWith(SpringRunner.class) @SpringBootTest(classes = SpringEjbClientApplication.class) -public class SpringContextTest { +public class SpringContextLiveTest { @Test public void whenSpringContextIsBootstrapped_thenNoExceptions() { diff --git a/spring-session/spring-session-mongodb/src/test/java/org/baeldung/SpringContextTest.java b/spring-session/spring-session-mongodb/src/test/java/org/baeldung/SpringContextLiveTest.java similarity index 92% rename from spring-session/spring-session-mongodb/src/test/java/org/baeldung/SpringContextTest.java rename to spring-session/spring-session-mongodb/src/test/java/org/baeldung/SpringContextLiveTest.java index 307d31a80917..b41f2b0338fe 100644 --- a/spring-session/spring-session-mongodb/src/test/java/org/baeldung/SpringContextTest.java +++ b/spring-session/spring-session-mongodb/src/test/java/org/baeldung/SpringContextLiveTest.java @@ -8,7 +8,7 @@ @RunWith(SpringRunner.class) @SpringBootTest(classes = SpringSessionMongoDBApplication.class) -public class SpringContextTest { +public class SpringContextLiveTest { @Test public void whenSpringContextIsBootstrapped_thenNoExceptions() { diff --git a/spring-session/spring-session-redis/src/test/java/org/baeldung/SpringContextTest.java b/spring-session/spring-session-redis/src/test/java/org/baeldung/SpringContextLiveTest.java similarity index 92% rename from spring-session/spring-session-redis/src/test/java/org/baeldung/SpringContextTest.java rename to spring-session/spring-session-redis/src/test/java/org/baeldung/SpringContextLiveTest.java index 994f93c24f12..b23ce7dbbb98 100644 --- a/spring-session/spring-session-redis/src/test/java/org/baeldung/SpringContextTest.java +++ b/spring-session/spring-session-redis/src/test/java/org/baeldung/SpringContextLiveTest.java @@ -9,7 +9,7 @@ @RunWith(SpringRunner.class) @SpringBootTest(classes = SessionWebApplication.class) -public class SpringContextTest { +public class SpringContextLiveTest { @Test public void whenSpringContextIsBootstrapped_thenNoExceptions() { diff --git a/spring-vault/src/test/java/org/baeldung/SpringContextTest.java b/spring-vault/src/test/java/org/baeldung/SpringContextLiveTest.java similarity index 92% rename from spring-vault/src/test/java/org/baeldung/SpringContextTest.java rename to spring-vault/src/test/java/org/baeldung/SpringContextLiveTest.java index 95abe622fac0..1b3db59ecb98 100644 --- a/spring-vault/src/test/java/org/baeldung/SpringContextTest.java +++ b/spring-vault/src/test/java/org/baeldung/SpringContextLiveTest.java @@ -8,7 +8,7 @@ @RunWith(SpringRunner.class) @SpringBootTest(classes = SpringVaultApplication.class) -public class SpringContextTest { +public class SpringContextLiveTest { @Test public void whenSpringContextIsBootstrapped_thenNoExceptions() { diff --git a/spring-webflux-amqp/src/test/java/org/baeldung/SpringContextTest.java b/spring-webflux-amqp/src/test/java/org/baeldung/SpringContextLiveTest.java similarity index 92% rename from spring-webflux-amqp/src/test/java/org/baeldung/SpringContextTest.java rename to spring-webflux-amqp/src/test/java/org/baeldung/SpringContextLiveTest.java index 88d29d5ac00b..effe8d2cfaa1 100644 --- a/spring-webflux-amqp/src/test/java/org/baeldung/SpringContextTest.java +++ b/spring-webflux-amqp/src/test/java/org/baeldung/SpringContextLiveTest.java @@ -8,7 +8,7 @@ @RunWith(SpringRunner.class) @SpringBootTest(classes = SpringWebfluxAmqpApplication.class) -public class SpringContextTest { +public class SpringContextLiveTest { @Test public void whenSpringContextIsBootstrapped_thenNoExceptions() { From 7211b74b111e059be3bdb78806708021daa2236e Mon Sep 17 00:00:00 2001 From: Catalin Burcea Date: Sat, 10 Aug 2019 18:05:51 +0300 Subject: [PATCH 97/99] create triangles with for loops - examples (#7513) --- algorithms-miscellaneous-3/pom.xml | 13 +++ .../printtriangles/PrintTriangleExamples.java | 49 ++++++++++ .../PrintTriangleExamplesUnitTest.java | 93 +++++++++++++++++++ 3 files changed, 155 insertions(+) create mode 100644 algorithms-miscellaneous-3/src/main/java/com/baeldung/algorithms/printtriangles/PrintTriangleExamples.java create mode 100644 algorithms-miscellaneous-3/src/test/java/com/baeldung/algorithms/printtriangles/PrintTriangleExamplesUnitTest.java diff --git a/algorithms-miscellaneous-3/pom.xml b/algorithms-miscellaneous-3/pom.xml index 3cebdd09acdd..802cf7432090 100644 --- a/algorithms-miscellaneous-3/pom.xml +++ b/algorithms-miscellaneous-3/pom.xml @@ -30,6 +30,19 @@ guava ${guava.version} + + + org.apache.commons + commons-lang3 + 3.8.1 + + + + pl.pragmatists + JUnitParams + 1.1.0 + test + diff --git a/algorithms-miscellaneous-3/src/main/java/com/baeldung/algorithms/printtriangles/PrintTriangleExamples.java b/algorithms-miscellaneous-3/src/main/java/com/baeldung/algorithms/printtriangles/PrintTriangleExamples.java new file mode 100644 index 000000000000..a67c54a92260 --- /dev/null +++ b/algorithms-miscellaneous-3/src/main/java/com/baeldung/algorithms/printtriangles/PrintTriangleExamples.java @@ -0,0 +1,49 @@ +package com.baeldung.algorithms.printtriangles; + +import org.apache.commons.lang3.StringUtils; + +public class PrintTriangleExamples { + + public static String printARightAngledTriangle(int N) { + StringBuilder result = new StringBuilder(); + for (int r = 1; r <= N; r++) { + for (int j = 1; j <= r; j++) { + result.append("*"); + } + result.append(System.lineSeparator()); + } + return result.toString(); + } + + public static String printAnIsoscelesTriangle(int N) { + StringBuilder result = new StringBuilder(); + for (int r = 1; r <= N; r++) { + for (int sp = 1; sp <= N - r; sp++) { + result.append(" "); + } + for (int c = 1; c <= (r * 2) - 1; c++) { + result.append("*"); + } + result.append(System.lineSeparator()); + } + return result.toString(); + } + + public static String printAnIsoscelesTriangleUsingSubstring(int N) { + StringBuilder result = new StringBuilder(); + String helperString = StringUtils.repeat(' ', N - 1) + StringUtils.repeat('*', N * 2 - 1); + + for (int r = 0; r < N; r++) { + result.append(helperString.substring(r, N + 2 * r)); + result.append(System.lineSeparator()); + } + return result.toString(); + } + + public static void main(String[] args) { + System.out.println(printARightAngledTriangle(5)); + System.out.println(printAnIsoscelesTriangle(5)); + System.out.println(printAnIsoscelesTriangleUsingSubstring(5)); + } + +} \ No newline at end of file diff --git a/algorithms-miscellaneous-3/src/test/java/com/baeldung/algorithms/printtriangles/PrintTriangleExamplesUnitTest.java b/algorithms-miscellaneous-3/src/test/java/com/baeldung/algorithms/printtriangles/PrintTriangleExamplesUnitTest.java new file mode 100644 index 000000000000..6fa6584b8eb4 --- /dev/null +++ b/algorithms-miscellaneous-3/src/test/java/com/baeldung/algorithms/printtriangles/PrintTriangleExamplesUnitTest.java @@ -0,0 +1,93 @@ +package com.baeldung.algorithms.printtriangles; + +import junitparams.JUnitParamsRunner; +import junitparams.Parameters; +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.assertEquals; + +@RunWith(JUnitParamsRunner.class) +public class PrintTriangleExamplesUnitTest { + + private static Object[][] rightAngledTriangles() { + String expected0 = ""; + + String expected2 = "*" + System.lineSeparator() + + "**" + System.lineSeparator(); + + String expected5 = "*" + System.lineSeparator() + + "**" + System.lineSeparator() + + "***" + System.lineSeparator() + + "****" + System.lineSeparator() + + "*****" + System.lineSeparator(); + + String expected7 = "*" + System.lineSeparator() + + "**" + System.lineSeparator() + + "***" + System.lineSeparator() + + "****" + System.lineSeparator() + + "*****" + System.lineSeparator() + + "******" + System.lineSeparator() + + "*******" + System.lineSeparator(); + + return new Object[][] { + { 0, expected0 }, + { 2, expected2 }, + { 5, expected5 }, + { 7, expected7 } + }; + } + + @Test + @Parameters(method = "rightAngledTriangles") + public void whenPrintARightAngledTriangleIsCalled_ThenTheCorrectStringIsReturned(int nrOfRows, String expected) { + String actual = PrintTriangleExamples.printARightAngledTriangle(nrOfRows); + + assertEquals(expected, actual); + } + + private static Object[][] isoscelesTriangles() { + String expected0 = ""; + + String expected2 = " *" + System.lineSeparator() + + "***" + System.lineSeparator(); + + String expected5 = " *" + System.lineSeparator() + + " ***" + System.lineSeparator() + + " *****" + System.lineSeparator() + + " *******" + System.lineSeparator() + + "*********" + System.lineSeparator(); + + String expected7 = " *" + System.lineSeparator() + + " ***" + System.lineSeparator() + + " *****" + System.lineSeparator() + + " *******" + System.lineSeparator() + + " *********" + System.lineSeparator() + + " ***********" + System.lineSeparator() + + "*************" + System.lineSeparator(); + + return new Object[][] { + { 0, expected0 }, + { 2, expected2 }, + { 5, expected5 }, + { 7, expected7 } + }; + } + + @Test + @Parameters(method = "isoscelesTriangles") + public void whenPrintAnIsoscelesTriangleIsCalled_ThenTheCorrectStringIsReturned(int nrOfRows, String expected) { + String actual = PrintTriangleExamples.printAnIsoscelesTriangle(nrOfRows); + + assertEquals(expected, actual); + } + + @Test + @Parameters(method = "isoscelesTriangles") + public void whenPrintAnIsoscelesTriangleUsingSubstringIsCalled_ThenTheCorrectStringIsReturned(int nrOfRows, String expected) { + String actual = PrintTriangleExamples.printAnIsoscelesTriangleUsingSubstring(nrOfRows); + + assertEquals(expected, actual); + } + +} From b891c53dccc38882525ea9816f7e51bee6f25568 Mon Sep 17 00:00:00 2001 From: Justin Albano Date: Sat, 10 Aug 2019 12:40:34 -0400 Subject: [PATCH 98/99] BAEL-3141: Created new module for 'Converting Java String to Double' and other newly created string articles. (#7548) --- java-strings-3/README.md | 3 + java-strings-3/pom.xml | 155 ++++++++++++++++++ .../main/java/com/baeldung/string/README.md | 3 + java-strings-3/src/main/resources/.gitignore | 13 ++ .../StringToDoubleConversionUnitTest.java | 112 ++++++------- java-strings-3/src/test/resources/.gitignore | 13 ++ pom.xml | 2 + 7 files changed, 245 insertions(+), 56 deletions(-) create mode 100644 java-strings-3/README.md create mode 100644 java-strings-3/pom.xml create mode 100644 java-strings-3/src/main/java/com/baeldung/string/README.md create mode 100644 java-strings-3/src/main/resources/.gitignore rename {java-strings-2 => java-strings-3}/src/test/java/com/baeldung/string/todouble/StringToDoubleConversionUnitTest.java (97%) create mode 100644 java-strings-3/src/test/resources/.gitignore diff --git a/java-strings-3/README.md b/java-strings-3/README.md new file mode 100644 index 000000000000..6c2339028fad --- /dev/null +++ b/java-strings-3/README.md @@ -0,0 +1,3 @@ +## Relevant Articles: + +- [Converting Java String to Double](https://www.baeldung.com/java-string-to-double) diff --git a/java-strings-3/pom.xml b/java-strings-3/pom.xml new file mode 100644 index 000000000000..1e5f757943e2 --- /dev/null +++ b/java-strings-3/pom.xml @@ -0,0 +1,155 @@ + + 4.0.0 + java-strings-3 + 0.1.0-SNAPSHOT + jar + java-strings-3 + + + com.baeldung + parent-java + 0.0.1-SNAPSHOT + ../parent-java + + + + + org.openjdk.jmh + jmh-core + ${jmh-core.version} + + + org.openjdk.jmh + jmh-generator-annprocess + ${jmh-core.version} + + + com.ibm.icu + icu4j + ${icu4j.version} + + + com.google.guava + guava + ${guava.version} + + + org.apache.commons + commons-lang3 + ${commons-lang3.version} + + + commons-io + commons-io + ${commons-io.version} + + + commons-codec + commons-codec + ${commons-codec.version} + + + junit + junit + ${junit.version} + test + + + org.hamcrest + hamcrest-library + ${org.hamcrest.version} + test + + + org.assertj + assertj-core + ${assertj.version} + test + + + + + org.passay + passay + ${passay.version} + + + org.apache.commons + commons-text + ${commons-text.version} + + + com.vdurmont + emoji-java + ${emoji-java.version} + + + org.ahocorasick + ahocorasick + ${ahocorasick.version} + + + javax.validation + validation-api + ${validation-api.version} + + + org.hibernate.validator + hibernate-validator + ${hibernate-validator.version} + + + javax.el + javax.el-api + ${javax.el-api.version} + + + org.glassfish.web + javax.el + ${javax.el.version} + + + + + java-strings-3 + + + src/main/resources + true + + + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + ${java.version} + ${java.version} + -parameters + + + + + + + 3.8.1 + 1.10 + 1.3.1 + + 3.6.1 + 4.0.0 + 0.4.0 + 61.1 + 28.0-jre + 1.4 + 2.0.0.Final + 6.0.2.Final + 3.0.0 + 2.2.6 + + + \ No newline at end of file diff --git a/java-strings-3/src/main/java/com/baeldung/string/README.md b/java-strings-3/src/main/java/com/baeldung/string/README.md new file mode 100644 index 000000000000..e02980e93f38 --- /dev/null +++ b/java-strings-3/src/main/java/com/baeldung/string/README.md @@ -0,0 +1,3 @@ +This file exists to ensure this empty directory is committed in Git. + +Please remove this file when this directory is populated. \ No newline at end of file diff --git a/java-strings-3/src/main/resources/.gitignore b/java-strings-3/src/main/resources/.gitignore new file mode 100644 index 000000000000..83c05e60c802 --- /dev/null +++ b/java-strings-3/src/main/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/java-strings-2/src/test/java/com/baeldung/string/todouble/StringToDoubleConversionUnitTest.java b/java-strings-3/src/test/java/com/baeldung/string/todouble/StringToDoubleConversionUnitTest.java similarity index 97% rename from java-strings-2/src/test/java/com/baeldung/string/todouble/StringToDoubleConversionUnitTest.java rename to java-strings-3/src/test/java/com/baeldung/string/todouble/StringToDoubleConversionUnitTest.java index 9abb7ac453ff..2c87af53f896 100644 --- a/java-strings-2/src/test/java/com/baeldung/string/todouble/StringToDoubleConversionUnitTest.java +++ b/java-strings-3/src/test/java/com/baeldung/string/todouble/StringToDoubleConversionUnitTest.java @@ -1,56 +1,56 @@ -package com.baeldung.string.todouble; - -import static org.junit.Assert.assertEquals; - -import java.text.DecimalFormat; -import java.text.ParseException; - -import org.junit.Test; - -public class StringToDoubleConversionUnitTest { - - @Test - public void givenValidString_WhenParseDouble_ThenResultIsPrimitiveDouble() { - assertEquals(1.23, Double.parseDouble("1.23"), 0.000001); - } - - @Test(expected = NullPointerException.class) - public void givenNullString_WhenParseDouble_ThenNullPointerExceptionIsThrown() { - Double.parseDouble(null); - } - - @Test(expected = NumberFormatException.class) - public void givenInalidString_WhenParseDouble_ThenNumberFormatExceptionIsThrown() { - Double.parseDouble("&"); - } - - @Test - public void givenValidString_WhenValueOf_ThenResultIsPrimitiveDouble() { - assertEquals(1.23, Double.valueOf("1.23"), 0.000001); - } - - @Test(expected = NullPointerException.class) - public void givenNullString_WhenValueOf_ThenNullPointerExceptionIsThrown() { - Double.valueOf(null); - } - - @Test(expected = NumberFormatException.class) - public void givenInalidString_WhenValueOf_ThenNumberFormatExceptionIsThrown() { - Double.valueOf("&"); - } - - @Test - public void givenValidString_WhenDecimalFormat_ThenResultIsValidDouble() throws ParseException { - assertEquals(1.23, new DecimalFormat("#").parse("1.23").doubleValue(), 0.000001); - } - - @Test(expected = NullPointerException.class) - public void givenNullString_WhenDecimalFormat_ThenNullPointerExceptionIsThrown() throws ParseException { - new DecimalFormat("#").parse(null); - } - - @Test(expected = ParseException.class) - public void givenInvalidString_WhenDecimalFormat_ThenParseExceptionIsThrown() throws ParseException { - new DecimalFormat("#").parse("&"); - } -} +package com.baeldung.string.todouble; + +import static org.junit.Assert.assertEquals; + +import java.text.DecimalFormat; +import java.text.ParseException; + +import org.junit.Test; + +public class StringToDoubleConversionUnitTest { + + @Test + public void givenValidString_WhenParseDouble_ThenResultIsPrimitiveDouble() { + assertEquals(1.23, Double.parseDouble("1.23"), 0.000001); + } + + @Test(expected = NullPointerException.class) + public void givenNullString_WhenParseDouble_ThenNullPointerExceptionIsThrown() { + Double.parseDouble(null); + } + + @Test(expected = NumberFormatException.class) + public void givenInalidString_WhenParseDouble_ThenNumberFormatExceptionIsThrown() { + Double.parseDouble("&"); + } + + @Test + public void givenValidString_WhenValueOf_ThenResultIsPrimitiveDouble() { + assertEquals(1.23, Double.valueOf("1.23"), 0.000001); + } + + @Test(expected = NullPointerException.class) + public void givenNullString_WhenValueOf_ThenNullPointerExceptionIsThrown() { + Double.valueOf(null); + } + + @Test(expected = NumberFormatException.class) + public void givenInalidString_WhenValueOf_ThenNumberFormatExceptionIsThrown() { + Double.valueOf("&"); + } + + @Test + public void givenValidString_WhenDecimalFormat_ThenResultIsValidDouble() throws ParseException { + assertEquals(1.23, new DecimalFormat("#").parse("1.23").doubleValue(), 0.000001); + } + + @Test(expected = NullPointerException.class) + public void givenNullString_WhenDecimalFormat_ThenNullPointerExceptionIsThrown() throws ParseException { + new DecimalFormat("#").parse(null); + } + + @Test(expected = ParseException.class) + public void givenInvalidString_WhenDecimalFormat_ThenParseExceptionIsThrown() throws ParseException { + new DecimalFormat("#").parse("&"); + } +} diff --git a/java-strings-3/src/test/resources/.gitignore b/java-strings-3/src/test/resources/.gitignore new file mode 100644 index 000000000000..83c05e60c802 --- /dev/null +++ b/java-strings-3/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 b60d7ae4e6c2..afe165cf4d4e 100644 --- a/pom.xml +++ b/pom.xml @@ -469,6 +469,7 @@ java-strings java-strings-2 + java-strings-3 java-strings-ops java-vavr-stream java-websocket @@ -1164,6 +1165,7 @@ java-strings java-strings-2 + java-strings-3 java-strings-ops java-vavr-stream java-websocket From 2aeb078fd19eda47fe17bbb8ec61afbc1f78f1c6 Mon Sep 17 00:00:00 2001 From: Kevin Kraus Date: Sat, 10 Aug 2019 13:26:35 -0500 Subject: [PATCH 99/99] BAEL-3154 (#7479) * BAEL-3154 * BAEL-3154 add Apache Commons Lang example * Moved to java-strings-3 --- .../StringEqualsIgnoreCaseUnitTest.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 java-strings-3/src/test/java/com/baeldung/string/equalsIgnoreCase/StringEqualsIgnoreCaseUnitTest.java diff --git a/java-strings-3/src/test/java/com/baeldung/string/equalsIgnoreCase/StringEqualsIgnoreCaseUnitTest.java b/java-strings-3/src/test/java/com/baeldung/string/equalsIgnoreCase/StringEqualsIgnoreCaseUnitTest.java new file mode 100644 index 000000000000..5aab63db9476 --- /dev/null +++ b/java-strings-3/src/test/java/com/baeldung/string/equalsIgnoreCase/StringEqualsIgnoreCaseUnitTest.java @@ -0,0 +1,26 @@ +package com.baeldung.string.equalsIgnoreCase; + +import org.apache.commons.lang3.StringUtils; +import org.junit.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +public class StringEqualsIgnoreCaseUnitTest { + private String string1 = "equals ignore case"; + private String string2 = "EQUALS IGNORE CASE"; + + @Test + public void givenEqualStringsWithDifferentCase_whenUsingEqualsIgnoreCase_ThenTheyAreEqual() { + assertThat(string1.equalsIgnoreCase(string2)).isTrue(); + } + + @Test + public void givenEqualStringsWithDifferentCase_whenUsingApacheCommonsEqualsIgnoreCase_ThenTheyAreEqual() { + assertThat(StringUtils.equalsIgnoreCase(string1, string2)).isTrue(); + } + + @Test + public void givenAStringAndNullValue_whenUsingApacheCommonsEqualsIgnoreCase_ThenTheyAreNotEqual() { + assertThat(StringUtils.equalsIgnoreCase(string1, null)).isFalse(); + } +}