From 3af6986dab25cf0a03358e45c671d8b5b6a99496 Mon Sep 17 00:00:00 2001 From: glopez Date: Mon, 8 Jul 2019 07:25:28 -0300 Subject: [PATCH 001/140] 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 0000000000..ca31627ebc --- /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 0000000000..0bfd040222 --- /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 0000000000..653ab83a18 --- /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 0000000000..7d900d8ea8 --- /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 51cc401332..f23040fbdc 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 6a236f0840..1f16bee3ba 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 ba3baf6636..05b2c8e090 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 002/140] 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 f24a307d9e..45c84ffb11 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 0000000000..62456ba31c --- /dev/null +++ b/spring-di/pom.xml @@ -0,0 +1,101 @@ + + + 4.0.0 + spring-di + 1.0-SNAPSHOT + war + + + parent-boot-2 + com.baeldung + 0.0.1-SNAPSHOT + ../parent-boot-2 + + + + + + org.springframework + spring-context + + + + javax.annotation + javax.annotation-api + ${annotation-api.version} + + + + + org.springframework + spring-test + test + + + + + + + + org.springframework + spring-framework-bom + ${org.springframework.version} + pom + import + + + org.springframework + spring-core + ${org.springframework.version} + + + + + + spring-di + + + src/main/resources + true + + + + + org.apache.maven.plugins + maven-war-plugin + 3.2.2 + + false + + + + + + + + dev + + true + + + dev + + + + prod + + prod + + + + + + org.baeldung.org.baeldung.sample.App + + 5.0.6.RELEASE + 1.3.2 + + + \ No newline at end of file diff --git a/spring-di/src/main/java/org/baeldung/sample/App.java b/spring-di/src/main/java/org/baeldung/sample/App.java new file mode 100644 index 0000000000..17fc49fc8c --- /dev/null +++ b/spring-di/src/main/java/org/baeldung/sample/App.java @@ -0,0 +1,11 @@ +package org.baeldung.sample; + +import org.springframework.context.annotation.AnnotationConfigApplicationContext; + +public class App { + public static void main(String[] args) { + AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class); + FooService fooService = ctx.getBean(FooService.class); + fooService.doStuff(); + } +} diff --git a/spring-di/src/main/java/org/baeldung/sample/AppConfig.java b/spring-di/src/main/java/org/baeldung/sample/AppConfig.java new file mode 100644 index 0000000000..8a177d2611 --- /dev/null +++ b/spring-di/src/main/java/org/baeldung/sample/AppConfig.java @@ -0,0 +1,10 @@ +package org.baeldung.sample; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ComponentScan("org.baeldung.sample") +public class AppConfig { + +} diff --git a/spring-di/src/main/java/org/baeldung/sample/Bar.java b/spring-di/src/main/java/org/baeldung/sample/Bar.java new file mode 100644 index 0000000000..54e8d54418 --- /dev/null +++ b/spring-di/src/main/java/org/baeldung/sample/Bar.java @@ -0,0 +1,5 @@ +package org.baeldung.sample; + +public class Bar { + +} diff --git a/spring-di/src/main/java/org/baeldung/sample/BarFormatter.java b/spring-di/src/main/java/org/baeldung/sample/BarFormatter.java new file mode 100644 index 0000000000..8396653970 --- /dev/null +++ b/spring-di/src/main/java/org/baeldung/sample/BarFormatter.java @@ -0,0 +1,13 @@ +package org.baeldung.sample; + +import org.springframework.stereotype.Component; + +@FormatterType("Bar") +@Component +public class BarFormatter implements Formatter { + + public String format() { + return "bar"; + } + +} diff --git a/spring-di/src/main/java/org/baeldung/sample/Foo.java b/spring-di/src/main/java/org/baeldung/sample/Foo.java new file mode 100644 index 0000000000..562a00121a --- /dev/null +++ b/spring-di/src/main/java/org/baeldung/sample/Foo.java @@ -0,0 +1,5 @@ +package org.baeldung.sample; + +public class Foo { + +} diff --git a/spring-di/src/main/java/org/baeldung/sample/FooDAO.java b/spring-di/src/main/java/org/baeldung/sample/FooDAO.java new file mode 100644 index 0000000000..151c0c38de --- /dev/null +++ b/spring-di/src/main/java/org/baeldung/sample/FooDAO.java @@ -0,0 +1,5 @@ +package org.baeldung.sample; + +public class FooDAO { + +} diff --git a/spring-di/src/main/java/org/baeldung/sample/FooFormatter.java b/spring-di/src/main/java/org/baeldung/sample/FooFormatter.java new file mode 100644 index 0000000000..68cb7f81f2 --- /dev/null +++ b/spring-di/src/main/java/org/baeldung/sample/FooFormatter.java @@ -0,0 +1,13 @@ +package org.baeldung.sample; + +import org.springframework.stereotype.Component; + +@FormatterType("Foo") +@Component +public class FooFormatter implements Formatter { + + public String format() { + return "foo"; + } + +} diff --git a/spring-di/src/main/java/org/baeldung/sample/FooService.java b/spring-di/src/main/java/org/baeldung/sample/FooService.java new file mode 100644 index 0000000000..711711f205 --- /dev/null +++ b/spring-di/src/main/java/org/baeldung/sample/FooService.java @@ -0,0 +1,17 @@ +package org.baeldung.sample; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class FooService { + + @Autowired + @FormatterType("Foo") + private Formatter formatter; + + public String doStuff() { + return formatter.format(); + } + +} diff --git a/spring-di/src/main/java/org/baeldung/sample/Formatter.java b/spring-di/src/main/java/org/baeldung/sample/Formatter.java new file mode 100644 index 0000000000..ab29c2b848 --- /dev/null +++ b/spring-di/src/main/java/org/baeldung/sample/Formatter.java @@ -0,0 +1,7 @@ +package org.baeldung.sample; + +public interface Formatter { + + String format(); + +} diff --git a/spring-di/src/main/java/org/baeldung/sample/FormatterType.java b/spring-di/src/main/java/org/baeldung/sample/FormatterType.java new file mode 100644 index 0000000000..a00a9750bf --- /dev/null +++ b/spring-di/src/main/java/org/baeldung/sample/FormatterType.java @@ -0,0 +1,17 @@ +package org.baeldung.sample; + +import org.springframework.beans.factory.annotation.Qualifier; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Qualifier +@Target({ ElementType.FIELD, ElementType.METHOD, ElementType.TYPE, ElementType.PARAMETER }) +@Retention(RetentionPolicy.RUNTIME) +public @interface FormatterType { + + String value(); + +} diff --git a/spring-di/src/test/java/org/baeldung/sample/FooServiceIntegrationTest.java b/spring-di/src/test/java/org/baeldung/sample/FooServiceIntegrationTest.java new file mode 100644 index 0000000000..6b518395a1 --- /dev/null +++ b/spring-di/src/test/java/org/baeldung/sample/FooServiceIntegrationTest.java @@ -0,0 +1,22 @@ +package org.baeldung.sample; + +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.AnnotationConfigContextLoader; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = AppConfig.class, loader = AnnotationConfigContextLoader.class) +public class FooServiceIntegrationTest { + + @Autowired + FooService fooService; + + @Test + public void whenFooFormatterType_thenReturnFoo() { + Assert.assertEquals("foo", fooService.doStuff()); + } +} From 1f4dfef8db56afd2ba9324fc30d6b62159a96dcf Mon Sep 17 00:00:00 2001 From: vatsalgosar Date: Sat, 13 Jul 2019 05:49:41 +0530 Subject: [PATCH 003/140] BAEL-2728 | vatsalgosar@gmail.com - Sprint Boot application implementation using @SpringBootConfiguration annotation --- spring-boot-configuration/.gitignore | 31 ++++++++ spring-boot-configuration/README.md | 10 +++ spring-boot-configuration/pom.xml | 72 +++++++++++++++++++ .../main/java/com/baeldung/Application.java | 20 ++++++ .../main/java/com/baeldung/SwaggerConfig.java | 22 ++++++ .../baeldung/controller/PersonController.java | 39 ++++++++++ .../main/java/com/baeldung/domain/Person.java | 38 ++++++++++ .../exception/PersonNotFoundException.java | 8 +++ .../baeldung/repository/PersonRepository.java | 9 +++ .../com/baeldung/service/PersonService.java | 34 +++++++++ .../src/main/resources/application.properties | 3 + .../src/main/resources/schema.sql | 5 ++ .../java/com/baeldung/ApplicationTests.java | 16 +++++ 13 files changed, 307 insertions(+) create mode 100644 spring-boot-configuration/.gitignore create mode 100644 spring-boot-configuration/README.md create mode 100644 spring-boot-configuration/pom.xml create mode 100644 spring-boot-configuration/src/main/java/com/baeldung/Application.java create mode 100644 spring-boot-configuration/src/main/java/com/baeldung/SwaggerConfig.java create mode 100644 spring-boot-configuration/src/main/java/com/baeldung/controller/PersonController.java create mode 100644 spring-boot-configuration/src/main/java/com/baeldung/domain/Person.java create mode 100644 spring-boot-configuration/src/main/java/com/baeldung/exception/PersonNotFoundException.java create mode 100644 spring-boot-configuration/src/main/java/com/baeldung/repository/PersonRepository.java create mode 100644 spring-boot-configuration/src/main/java/com/baeldung/service/PersonService.java create mode 100644 spring-boot-configuration/src/main/resources/application.properties create mode 100644 spring-boot-configuration/src/main/resources/schema.sql create mode 100644 spring-boot-configuration/src/test/java/com/baeldung/ApplicationTests.java diff --git a/spring-boot-configuration/.gitignore b/spring-boot-configuration/.gitignore new file mode 100644 index 0000000000..a2a3040aa8 --- /dev/null +++ b/spring-boot-configuration/.gitignore @@ -0,0 +1,31 @@ +HELP.md +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/** +!**/src/test/** + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ + +### VS Code ### +.vscode/ diff --git a/spring-boot-configuration/README.md b/spring-boot-configuration/README.md new file mode 100644 index 0000000000..35472d575a --- /dev/null +++ b/spring-boot-configuration/README.md @@ -0,0 +1,10 @@ +Article: +SprintBootConfiguration annotation + +commands: +mvn clean install +mvn spring-boot:run + +Swagger endpoints: +http://localhost:8080/v2/api-docs +http://localhost:8080/swagger-ui.html \ No newline at end of file diff --git a/spring-boot-configuration/pom.xml b/spring-boot-configuration/pom.xml new file mode 100644 index 0000000000..ede2504272 --- /dev/null +++ b/spring-boot-configuration/pom.xml @@ -0,0 +1,72 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.1.6.RELEASE + + + com.baeldung + spring-boot-configuration + 0.0.1-SNAPSHOT + spring-boot-configuration + Demo project for Spring Boot Configuration + + + 1.8 + + + + + org.springframework.boot + spring-boot-starter-data-jpa + + + org.springframework.boot + spring-boot-starter-web + + + + + com.h2database + h2 + runtime + + + + + org.hibernate + hibernate-entitymanager + + + + + io.springfox + springfox-swagger2 + 2.9.2 + + + io.springfox + springfox-swagger-ui + 2.9.2 + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/spring-boot-configuration/src/main/java/com/baeldung/Application.java b/spring-boot-configuration/src/main/java/com/baeldung/Application.java new file mode 100644 index 0000000000..019cc5b57c --- /dev/null +++ b/spring-boot-configuration/src/main/java/com/baeldung/Application.java @@ -0,0 +1,20 @@ +package com.baeldung; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.SpringBootConfiguration; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Import; + +@EnableAutoConfiguration +@ComponentScan(basePackages = {"com.baeldung.*"}) +@SpringBootConfiguration +@Import({SwaggerConfig.class}) +public class Application { + + public static void main(String[] args) { + + SpringApplication.run(Application.class, args); + } +} + diff --git a/spring-boot-configuration/src/main/java/com/baeldung/SwaggerConfig.java b/spring-boot-configuration/src/main/java/com/baeldung/SwaggerConfig.java new file mode 100644 index 0000000000..c69e65bc4e --- /dev/null +++ b/spring-boot-configuration/src/main/java/com/baeldung/SwaggerConfig.java @@ -0,0 +1,22 @@ +package com.baeldung; + +import org.springframework.boot.SpringBootConfiguration; +import org.springframework.context.annotation.Bean; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.swagger2.annotations.EnableSwagger2; + +@SpringBootConfiguration +@EnableSwagger2 +public class SwaggerConfig { + @Bean + public Docket api() { + return new Docket(DocumentationType.SWAGGER_2) + .select() + .apis(RequestHandlerSelectors.any()) + .paths(PathSelectors.any()) + .build(); + } +} diff --git a/spring-boot-configuration/src/main/java/com/baeldung/controller/PersonController.java b/spring-boot-configuration/src/main/java/com/baeldung/controller/PersonController.java new file mode 100644 index 0000000000..10d7386132 --- /dev/null +++ b/spring-boot-configuration/src/main/java/com/baeldung/controller/PersonController.java @@ -0,0 +1,39 @@ +package com.baeldung.controller; + +import com.baeldung.domain.Person; +import com.baeldung.exception.PersonNotFoundException; +import com.baeldung.service.PersonService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping("/persons") +public class PersonController { + + @Autowired + PersonService personService; + + @GetMapping + public List getPersons() { + return personService.getPersons(); + } + + @PostMapping + public void addPerson(@RequestBody Person person) { + personService.add(person); + } + + @GetMapping("/{id}") + public Person getPersonById(@PathVariable(required = true) long id) throws PersonNotFoundException { + return personService.getPersonById(id); + } + + @DeleteMapping("/{id}") + public void removePerson(@PathVariable(required = true) long id) { + personService.delete(id); + } + + +} diff --git a/spring-boot-configuration/src/main/java/com/baeldung/domain/Person.java b/spring-boot-configuration/src/main/java/com/baeldung/domain/Person.java new file mode 100644 index 0000000000..e63836420c --- /dev/null +++ b/spring-boot-configuration/src/main/java/com/baeldung/domain/Person.java @@ -0,0 +1,38 @@ +package com.baeldung.domain; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; + +@Entity +public class Person { + + @Id + @GeneratedValue + private long id; + private String name; + + public Person() {} + + public Person(long id, String name) { + this.id = id; + this.name = name; + } + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} + diff --git a/spring-boot-configuration/src/main/java/com/baeldung/exception/PersonNotFoundException.java b/spring-boot-configuration/src/main/java/com/baeldung/exception/PersonNotFoundException.java new file mode 100644 index 0000000000..048197a072 --- /dev/null +++ b/spring-boot-configuration/src/main/java/com/baeldung/exception/PersonNotFoundException.java @@ -0,0 +1,8 @@ +package com.baeldung.exception; + +public class PersonNotFoundException extends Exception { + + public PersonNotFoundException(String message) { + super(message); + } +} diff --git a/spring-boot-configuration/src/main/java/com/baeldung/repository/PersonRepository.java b/spring-boot-configuration/src/main/java/com/baeldung/repository/PersonRepository.java new file mode 100644 index 0000000000..b542b5ea0b --- /dev/null +++ b/spring-boot-configuration/src/main/java/com/baeldung/repository/PersonRepository.java @@ -0,0 +1,9 @@ +package com.baeldung.repository; + +import com.baeldung.domain.Person; +import org.springframework.data.repository.CrudRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface PersonRepository extends CrudRepository { +} diff --git a/spring-boot-configuration/src/main/java/com/baeldung/service/PersonService.java b/spring-boot-configuration/src/main/java/com/baeldung/service/PersonService.java new file mode 100644 index 0000000000..e5929177de --- /dev/null +++ b/spring-boot-configuration/src/main/java/com/baeldung/service/PersonService.java @@ -0,0 +1,34 @@ +package com.baeldung.service; + +import com.baeldung.domain.Person; +import com.baeldung.exception.PersonNotFoundException; +import com.baeldung.repository.PersonRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Optional; + +@Service +public class PersonService { + + @Autowired + PersonRepository personRepository; + + public void add(Person person) { + personRepository.save(person); + } + + public void delete(long id) { + personRepository.deleteById(id); + } + + public List getPersons() { + return (List) personRepository.findAll(); + } + + public Person getPersonById(long id) throws PersonNotFoundException { + Optional optionalDog = personRepository.findById(id); + return optionalDog.orElseThrow(() -> new PersonNotFoundException("Couldn't find a Person with id: " + id)); + } +} diff --git a/spring-boot-configuration/src/main/resources/application.properties b/spring-boot-configuration/src/main/resources/application.properties new file mode 100644 index 0000000000..7de28fe306 --- /dev/null +++ b/spring-boot-configuration/src/main/resources/application.properties @@ -0,0 +1,3 @@ +# H2 +spring.h2.console.enabled=true +spring.h2.console.path=/h2 diff --git a/spring-boot-configuration/src/main/resources/schema.sql b/spring-boot-configuration/src/main/resources/schema.sql new file mode 100644 index 0000000000..02a7aca232 --- /dev/null +++ b/spring-boot-configuration/src/main/resources/schema.sql @@ -0,0 +1,5 @@ +CREATE TABLE `person` ( + `id` INT(11) NOT NULL, + `name` VARCHAR(50) NULL DEFAULT NULL, + PRIMARY KEY (`id`) +); \ No newline at end of file diff --git a/spring-boot-configuration/src/test/java/com/baeldung/ApplicationTests.java b/spring-boot-configuration/src/test/java/com/baeldung/ApplicationTests.java new file mode 100644 index 0000000000..f239fc76cc --- /dev/null +++ b/spring-boot-configuration/src/test/java/com/baeldung/ApplicationTests.java @@ -0,0 +1,16 @@ +package com.baeldung; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class ApplicationTests { + + @Test + public void contextLoads() { + } + +} From c498f080b942319199e027a88c3e9db26f418193 Mon Sep 17 00:00:00 2001 From: Dhawal Kapil Date: Sun, 14 Jul 2019 14:24:16 +0530 Subject: [PATCH 004/140] 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 f40659bc16..d7048d8cf5 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 005/140] 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 0bfd040222..5e04a99f89 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 006/140] 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 302080a8b4..7b641ffa79 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 0000000000..ff86301f7d --- /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 0000000000..387f7049e1 --- /dev/null +++ b/spring-5-mvc/src/main/java/com/baeldung/idc/Book.java @@ -0,0 +1,55 @@ +package com.baeldung.idc; + +import org.springframework.stereotype.Component; + +@Component +public class Book { + + private final int id; + + private final String title; + + private final String author; + + private final String genre; + + public Book() { + this(-1, "", "", ""); + } + + public Book(int id, String title, String author, String genre) { + this.id = id; + this.title = title; + this.author = author; + this.genre = genre; + } + + /** + * @return the id + */ + public int getId() { + return id; + } + + /** + * @return the title + */ + public String getTitle() { + return title; + } + + /** + * @return the author + */ + public String getAuthor() { + return author; + } + + /** + * @return the genre + */ + public String getGenre() { + return genre; + } + +} diff --git a/spring-5-mvc/src/main/java/com/baeldung/idc/BookController.java b/spring-5-mvc/src/main/java/com/baeldung/idc/BookController.java new file mode 100644 index 0000000000..5b2349715d --- /dev/null +++ b/spring-5-mvc/src/main/java/com/baeldung/idc/BookController.java @@ -0,0 +1,34 @@ +package com.baeldung.idc; + +import java.util.List; +import java.util.Optional; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/book") +public class BookController implements BookOperations { + + private BookRepository repo; + + public BookController(BookRepository repo) { + this.repo = repo; + } + + @Override + public List getAll() { + return repo.getItems(); + } + + @Override + public Optional getById(int id) { + return repo.getById(id); + } + + @Override + public void save(Book book, int id) { + repo.save(id, book); + } + +} diff --git a/spring-5-mvc/src/main/java/com/baeldung/idc/BookOperations.java b/spring-5-mvc/src/main/java/com/baeldung/idc/BookOperations.java new file mode 100644 index 0000000000..70b44561af --- /dev/null +++ b/spring-5-mvc/src/main/java/com/baeldung/idc/BookOperations.java @@ -0,0 +1,23 @@ +package com.baeldung.idc; + +import java.util.List; +import java.util.Optional; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; + +@RequestMapping("/default") +public interface BookOperations { + + @GetMapping("/") + List getAll(); + + @GetMapping("/{id}") + Optional getById(@PathVariable int id); + + @PostMapping("/save/{id}") + public void save(@RequestBody Book book, @PathVariable int id); +} diff --git a/spring-5-mvc/src/main/java/com/baeldung/idc/BookRepository.java b/spring-5-mvc/src/main/java/com/baeldung/idc/BookRepository.java new file mode 100644 index 0000000000..0550b3b79a --- /dev/null +++ b/spring-5-mvc/src/main/java/com/baeldung/idc/BookRepository.java @@ -0,0 +1,61 @@ +package com.baeldung.idc; + +import java.util.List; +import java.util.Locale; +import java.util.Optional; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +import javax.annotation.PostConstruct; + +import org.springframework.stereotype.Component; + +import com.github.javafaker.Faker; + +/** + * Repository for storing the books. + * + * It serves just for illustrative purposes and is completely in-memory. It uses Java Faker library in order to generate data. + * + * @author A.Shcherbakov + * + */ +@Component +public class BookRepository { + + private List items; + + @PostConstruct + public void init() { + Faker faker = new Faker(Locale.ENGLISH); + final com.github.javafaker.Book book = faker.book(); + this.items = IntStream.range(1, faker.random() + .nextInt(10, 20)) + .mapToObj(i -> new Book(i, book.title(), book.author(), book.genre())) + .collect(Collectors.toList()); + + } + + public int getCount() { + return items.size(); + } + + public List getItems() { + return items; + } + + public Optional getById(int id) { + return this.items.stream() + .filter(item -> id == item.getId()) + .findFirst(); + } + + public void save(int id, Book book) { + IntStream.range(0, items.size()) + .filter(i -> items.get(i) + .getId() == id) + .findFirst() + .ifPresent(i -> this.items.set(i, book)); + } + +} diff --git a/spring-5-mvc/src/main/resources/custom.properties b/spring-5-mvc/src/main/resources/custom.properties new file mode 100644 index 0000000000..78c6675b26 --- /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 007/140] 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 1b95cac43c..ddf71e2ea1 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 0000000000..55a7f7c38e --- /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 0000000000..bfa7874010 --- /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 0000000000..06c66153c7 --- /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 0000000000..594ff08467 --- /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 0000000000..e23c7bccbb --- /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 0000000000..680c13160e --- /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 0000000000..252ec3bef3 --- /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 008/140] 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 ddf71e2ea1..d31e5fa7f6 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 009/140] 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 bfa7874010..a1db0f0262 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: myList contains red and green: - \ No newline at end of file + From f43db12fcbdac8b0c47cede959066f7de53ea46d Mon Sep 17 00:00:00 2001 From: vatsalgosar Date: Tue, 16 Jul 2019 01:55:08 +0530 Subject: [PATCH 010/140] BAEL-2728 | vatsalgosar@gmail.com - Adding spring-boot-configuration project to spring-boot-bootstrap module --- .../spring-boot-configuration}/README.md | 0 .../spring-boot-configuration}/pom.xml | 14 +-------- .../main/java/com/baeldung/Application.java | 9 ++++-- .../baeldung/controller/PersonController.java | 0 .../main/java/com/baeldung/domain/Person.java | 0 .../exception/PersonNotFoundException.java | 0 .../baeldung/repository/PersonRepository.java | 0 .../com/baeldung/service/PersonService.java | 2 +- .../src/main/resources/application.properties | 0 .../src/main/resources/schema.sql | 0 .../java/com/baeldung/ApplicationTests.java | 0 spring-boot-configuration/.gitignore | 31 ------------------- .../main/java/com/baeldung/SwaggerConfig.java | 22 ------------- 13 files changed, 9 insertions(+), 69 deletions(-) rename {spring-boot-configuration => spring-boot-bootstrap/spring-boot-configuration}/README.md (100%) rename {spring-boot-configuration => spring-boot-bootstrap/spring-boot-configuration}/pom.xml (84%) rename {spring-boot-configuration => spring-boot-bootstrap/spring-boot-configuration}/src/main/java/com/baeldung/Application.java (75%) rename {spring-boot-configuration => spring-boot-bootstrap/spring-boot-configuration}/src/main/java/com/baeldung/controller/PersonController.java (100%) rename {spring-boot-configuration => spring-boot-bootstrap/spring-boot-configuration}/src/main/java/com/baeldung/domain/Person.java (100%) rename {spring-boot-configuration => spring-boot-bootstrap/spring-boot-configuration}/src/main/java/com/baeldung/exception/PersonNotFoundException.java (100%) rename {spring-boot-configuration => spring-boot-bootstrap/spring-boot-configuration}/src/main/java/com/baeldung/repository/PersonRepository.java (100%) rename {spring-boot-configuration => spring-boot-bootstrap/spring-boot-configuration}/src/main/java/com/baeldung/service/PersonService.java (98%) rename {spring-boot-configuration => spring-boot-bootstrap/spring-boot-configuration}/src/main/resources/application.properties (100%) rename {spring-boot-configuration => spring-boot-bootstrap/spring-boot-configuration}/src/main/resources/schema.sql (100%) rename {spring-boot-configuration => spring-boot-bootstrap/spring-boot-configuration}/src/test/java/com/baeldung/ApplicationTests.java (100%) delete mode 100644 spring-boot-configuration/.gitignore delete mode 100644 spring-boot-configuration/src/main/java/com/baeldung/SwaggerConfig.java diff --git a/spring-boot-configuration/README.md b/spring-boot-bootstrap/spring-boot-configuration/README.md similarity index 100% rename from spring-boot-configuration/README.md rename to spring-boot-bootstrap/spring-boot-configuration/README.md diff --git a/spring-boot-configuration/pom.xml b/spring-boot-bootstrap/spring-boot-configuration/pom.xml similarity index 84% rename from spring-boot-configuration/pom.xml rename to spring-boot-bootstrap/spring-boot-configuration/pom.xml index ede2504272..02b2e53159 100644 --- a/spring-boot-configuration/pom.xml +++ b/spring-boot-bootstrap/spring-boot-configuration/pom.xml @@ -40,19 +40,7 @@ org.hibernate hibernate-entitymanager - - - - io.springfox - springfox-swagger2 - 2.9.2 - - - io.springfox - springfox-swagger-ui - 2.9.2 - - + org.springframework.boot spring-boot-starter-test diff --git a/spring-boot-configuration/src/main/java/com/baeldung/Application.java b/spring-boot-bootstrap/spring-boot-configuration/src/main/java/com/baeldung/Application.java similarity index 75% rename from spring-boot-configuration/src/main/java/com/baeldung/Application.java rename to spring-boot-bootstrap/spring-boot-configuration/src/main/java/com/baeldung/Application.java index 019cc5b57c..7021ae62fa 100644 --- a/spring-boot-configuration/src/main/java/com/baeldung/Application.java +++ b/spring-boot-bootstrap/spring-boot-configuration/src/main/java/com/baeldung/Application.java @@ -1,20 +1,25 @@ package com.baeldung; +import com.baeldung.service.PersonService; import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringBootConfiguration; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Import; @EnableAutoConfiguration @ComponentScan(basePackages = {"com.baeldung.*"}) @SpringBootConfiguration -@Import({SwaggerConfig.class}) public class Application { public static void main(String[] args) { - SpringApplication.run(Application.class, args); } + + @Bean + public PersonService personService() { + return new PersonService(); + } } diff --git a/spring-boot-configuration/src/main/java/com/baeldung/controller/PersonController.java b/spring-boot-bootstrap/spring-boot-configuration/src/main/java/com/baeldung/controller/PersonController.java similarity index 100% rename from spring-boot-configuration/src/main/java/com/baeldung/controller/PersonController.java rename to spring-boot-bootstrap/spring-boot-configuration/src/main/java/com/baeldung/controller/PersonController.java diff --git a/spring-boot-configuration/src/main/java/com/baeldung/domain/Person.java b/spring-boot-bootstrap/spring-boot-configuration/src/main/java/com/baeldung/domain/Person.java similarity index 100% rename from spring-boot-configuration/src/main/java/com/baeldung/domain/Person.java rename to spring-boot-bootstrap/spring-boot-configuration/src/main/java/com/baeldung/domain/Person.java diff --git a/spring-boot-configuration/src/main/java/com/baeldung/exception/PersonNotFoundException.java b/spring-boot-bootstrap/spring-boot-configuration/src/main/java/com/baeldung/exception/PersonNotFoundException.java similarity index 100% rename from spring-boot-configuration/src/main/java/com/baeldung/exception/PersonNotFoundException.java rename to spring-boot-bootstrap/spring-boot-configuration/src/main/java/com/baeldung/exception/PersonNotFoundException.java diff --git a/spring-boot-configuration/src/main/java/com/baeldung/repository/PersonRepository.java b/spring-boot-bootstrap/spring-boot-configuration/src/main/java/com/baeldung/repository/PersonRepository.java similarity index 100% rename from spring-boot-configuration/src/main/java/com/baeldung/repository/PersonRepository.java rename to spring-boot-bootstrap/spring-boot-configuration/src/main/java/com/baeldung/repository/PersonRepository.java diff --git a/spring-boot-configuration/src/main/java/com/baeldung/service/PersonService.java b/spring-boot-bootstrap/spring-boot-configuration/src/main/java/com/baeldung/service/PersonService.java similarity index 98% rename from spring-boot-configuration/src/main/java/com/baeldung/service/PersonService.java rename to spring-boot-bootstrap/spring-boot-configuration/src/main/java/com/baeldung/service/PersonService.java index e5929177de..74f7cb0a70 100644 --- a/spring-boot-configuration/src/main/java/com/baeldung/service/PersonService.java +++ b/spring-boot-bootstrap/spring-boot-configuration/src/main/java/com/baeldung/service/PersonService.java @@ -9,7 +9,7 @@ import org.springframework.stereotype.Service; import java.util.List; import java.util.Optional; -@Service +//@Service public class PersonService { @Autowired diff --git a/spring-boot-configuration/src/main/resources/application.properties b/spring-boot-bootstrap/spring-boot-configuration/src/main/resources/application.properties similarity index 100% rename from spring-boot-configuration/src/main/resources/application.properties rename to spring-boot-bootstrap/spring-boot-configuration/src/main/resources/application.properties diff --git a/spring-boot-configuration/src/main/resources/schema.sql b/spring-boot-bootstrap/spring-boot-configuration/src/main/resources/schema.sql similarity index 100% rename from spring-boot-configuration/src/main/resources/schema.sql rename to spring-boot-bootstrap/spring-boot-configuration/src/main/resources/schema.sql diff --git a/spring-boot-configuration/src/test/java/com/baeldung/ApplicationTests.java b/spring-boot-bootstrap/spring-boot-configuration/src/test/java/com/baeldung/ApplicationTests.java similarity index 100% rename from spring-boot-configuration/src/test/java/com/baeldung/ApplicationTests.java rename to spring-boot-bootstrap/spring-boot-configuration/src/test/java/com/baeldung/ApplicationTests.java diff --git a/spring-boot-configuration/.gitignore b/spring-boot-configuration/.gitignore deleted file mode 100644 index a2a3040aa8..0000000000 --- a/spring-boot-configuration/.gitignore +++ /dev/null @@ -1,31 +0,0 @@ -HELP.md -target/ -!.mvn/wrapper/maven-wrapper.jar -!**/src/main/** -!**/src/test/** - -### STS ### -.apt_generated -.classpath -.factorypath -.project -.settings -.springBeans -.sts4-cache - -### IntelliJ IDEA ### -.idea -*.iws -*.iml -*.ipr - -### NetBeans ### -/nbproject/private/ -/nbbuild/ -/dist/ -/nbdist/ -/.nb-gradle/ -build/ - -### VS Code ### -.vscode/ diff --git a/spring-boot-configuration/src/main/java/com/baeldung/SwaggerConfig.java b/spring-boot-configuration/src/main/java/com/baeldung/SwaggerConfig.java deleted file mode 100644 index c69e65bc4e..0000000000 --- a/spring-boot-configuration/src/main/java/com/baeldung/SwaggerConfig.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.baeldung; - -import org.springframework.boot.SpringBootConfiguration; -import org.springframework.context.annotation.Bean; -import springfox.documentation.builders.PathSelectors; -import springfox.documentation.builders.RequestHandlerSelectors; -import springfox.documentation.spi.DocumentationType; -import springfox.documentation.spring.web.plugins.Docket; -import springfox.documentation.swagger2.annotations.EnableSwagger2; - -@SpringBootConfiguration -@EnableSwagger2 -public class SwaggerConfig { - @Bean - public Docket api() { - return new Docket(DocumentationType.SWAGGER_2) - .select() - .apis(RequestHandlerSelectors.any()) - .paths(PathSelectors.any()) - .build(); - } -} From bc3ed2671687b829fbdac4d1331aee1bf3811ba0 Mon Sep 17 00:00:00 2001 From: Chirag Dewan Date: Tue, 16 Jul 2019 17:20:12 +0530 Subject: [PATCH 011/140] 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 ff73888b69..c6be8df38d 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 0000000000..08470cc5cd --- /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 0000000000..8e53a9f155 --- /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 0000000000..bd9c8b0a17 --- /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 0000000000..e3a9e49633 --- /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 0000000000..930820009c --- /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 05c719ec7c..90cea73a9d 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 012/140] 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 930820009c..5040bfc9e0 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 @@ import org.junit.jupiter.api.Test; 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 @@ class EmployeeBuilderUnitTest { .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 013/140] 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 e3a9e49633..abdd213de5 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 ee6012a4decab36c07f4e16bd2e981c559faa528 Mon Sep 17 00:00:00 2001 From: Krzysztof Majewski Date: Wed, 17 Jul 2019 16:34:38 +0200 Subject: [PATCH 014/140] BAEL-2825 --- .../main/java/com/baeldung/jpa/entity/Article.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 persistence-modules/java-jpa/src/main/java/com/baeldung/jpa/entity/Article.java diff --git a/persistence-modules/java-jpa/src/main/java/com/baeldung/jpa/entity/Article.java b/persistence-modules/java-jpa/src/main/java/com/baeldung/jpa/entity/Article.java new file mode 100644 index 0000000000..02082c3d92 --- /dev/null +++ b/persistence-modules/java-jpa/src/main/java/com/baeldung/jpa/entity/Article.java @@ -0,0 +1,12 @@ +package com.baeldung.jpa.entity; + +import javax.persistence.Entity; +import javax.persistence.Table; + +@Entity(name = "MyArticle") +@Table(name = Article.TABLE_NAME) +public class Article { + + public static final String TABLE_NAME = "ARTICLES"; + +} From 3671997f72973e616dfa357658c75966a9263b21 Mon Sep 17 00:00:00 2001 From: Kamlesh Kumar Date: Sun, 14 Jul 2019 14:13:41 +0530 Subject: [PATCH 015/140] 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 0000000000..2fb26c2db6 --- /dev/null +++ b/persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/hibernate/dynamicupdate/AccountRepository.java @@ -0,0 +1,11 @@ +package com.baeldung.hibernate.dynamicupdate; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import com.baeldung.hibernate.dynamicupdate.model.Account; + +@Repository +public interface AccountRepository extends JpaRepository { + +} diff --git a/persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/hibernate/dynamicupdate/DynamicUpdateConfig.java b/persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/hibernate/dynamicupdate/DynamicUpdateConfig.java new file mode 100644 index 0000000000..4871a3d1e2 --- /dev/null +++ b/persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/hibernate/dynamicupdate/DynamicUpdateConfig.java @@ -0,0 +1,80 @@ +package com.baeldung.hibernate.dynamicupdate; + +import java.util.Properties; + +import javax.persistence.EntityManagerFactory; +import javax.sql.DataSource; + +import org.apache.tomcat.dbcp.dbcp2.BasicDataSource; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.PropertySource; +import org.springframework.core.env.Environment; +import org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor; +import org.springframework.data.jpa.repository.config.EnableJpaRepositories; +import org.springframework.orm.jpa.JpaTransactionManager; +import org.springframework.orm.jpa.JpaVendorAdapter; +import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; +import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter; +import org.springframework.transaction.PlatformTransactionManager; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +import com.google.common.base.Preconditions; + +@EnableTransactionManagement +@Configuration +@PropertySource({ "classpath:persistence-h2.properties" }) +@EnableJpaRepositories(basePackages = { "com.baeldung.hibernate.dynamicupdate" }) +@ComponentScan({ "com.baeldung.hibernate.dynamicupdate" }) +public class DynamicUpdateConfig { + + @Autowired + private Environment env; + + @Bean + public LocalContainerEntityManagerFactoryBean entityManagerFactory() { + LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean(); + em.setDataSource(dataSource()); + em.setPackagesToScan(new String[] { "com.baeldung.hibernate.dynamicupdate.model" }); + + JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); + em.setJpaVendorAdapter(vendorAdapter); + em.setJpaProperties(additionalProperties()); + + return em; + } + + @Bean + public DataSource dataSource() { + final BasicDataSource dataSource = new BasicDataSource(); + dataSource.setDriverClassName(Preconditions.checkNotNull(env.getProperty("jdbc.driverClassName"))); + dataSource.setUrl(Preconditions.checkNotNull(env.getProperty("jdbc.url"))); + dataSource.setUsername(env.getProperty("jdbc.user")); + dataSource.setPassword(env.getProperty("jdbc.pass")); + + return dataSource; + } + + @Bean + public PlatformTransactionManager transactionManager(EntityManagerFactory emf) { + JpaTransactionManager transactionManager = new JpaTransactionManager(); + transactionManager.setEntityManagerFactory(emf); + + return transactionManager; + } + + @Bean + public PersistenceExceptionTranslationPostProcessor exceptionTranslation() { + return new PersistenceExceptionTranslationPostProcessor(); + } + + Properties additionalProperties() { + Properties properties = new Properties(); + properties.setProperty("hibernate.hbm2ddl.auto", Preconditions.checkNotNull(env.getProperty("hibernate.hbm2ddl.auto"))); + properties.setProperty("hibernate.dialect", Preconditions.checkNotNull(env.getProperty("hibernate.dialect"))); + properties.setProperty("hibernate.show_sql", "true"); + return properties; + } +} \ No newline at end of file diff --git a/persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/hibernate/dynamicupdate/model/Account.java b/persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/hibernate/dynamicupdate/model/Account.java new file mode 100644 index 0000000000..b3753112fe --- /dev/null +++ b/persistence-modules/spring-hibernate-5/src/main/java/com/baeldung/hibernate/dynamicupdate/model/Account.java @@ -0,0 +1,97 @@ +package com.baeldung.hibernate.dynamicupdate.model; + +import java.text.MessageFormat; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; + +import org.hibernate.annotations.DynamicUpdate; + +@Entity +@DynamicUpdate +public class Account { + + @Id + private int id; + + @Column + private String name; + + @Column + private String type; + + @Column + private boolean active; + + public Account() { + } + + public Account(int id, String name, String type, boolean active) { + super(); + this.id = id; + this.name = name; + this.type = type; + this.active = active; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public boolean isActive() { + return active; + } + + public void setActive(boolean active) { + this.active = active; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + id; + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Account other = (Account) obj; + if (id != other.id) + return false; + return true; + } + + @Override + public String toString() { + return MessageFormat.format("id:{0}, name:{1}, active:{2}, type:{3}", id, name, active, type); + } + +} diff --git a/persistence-modules/spring-hibernate-5/src/main/resources/logback.xml b/persistence-modules/spring-hibernate-5/src/main/resources/logback.xml index ec0dc2469a..035520aa15 100644 --- a/persistence-modules/spring-hibernate-5/src/main/resources/logback.xml +++ b/persistence-modules/spring-hibernate-5/src/main/resources/logback.xml @@ -1,19 +1,19 @@ - - - - - web - %date [%thread] %-5level %logger{36} - %message%n - - - - - - - - - - - - - + + + + + web - %date [%thread] %-5level %logger{36} - %message%n + + + + + + + + + + + + + \ No newline at end of file diff --git a/persistence-modules/spring-hibernate-5/src/test/java/com/baeldung/hibernate/dynamicupdate/DynamicUpdateIntegrationTest.java b/persistence-modules/spring-hibernate-5/src/test/java/com/baeldung/hibernate/dynamicupdate/DynamicUpdateIntegrationTest.java new file mode 100644 index 0000000000..fc183d1f19 --- /dev/null +++ b/persistence-modules/spring-hibernate-5/src/test/java/com/baeldung/hibernate/dynamicupdate/DynamicUpdateIntegrationTest.java @@ -0,0 +1,44 @@ +package com.baeldung.hibernate.dynamicupdate; + +import javax.transaction.Transactional; + +import org.junit.FixMethodOrder; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.MethodSorters; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.annotation.Commit; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.AnnotationConfigContextLoader; + +import com.baeldung.hibernate.dynamicupdate.model.Account; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = DynamicUpdateConfig.class, loader = AnnotationConfigContextLoader.class) +@Transactional +@FixMethodOrder(MethodSorters.NAME_ASCENDING) +public class DynamicUpdateIntegrationTest { + + private static final Integer ACCOUNT_ID = 1; + + @Autowired + private AccountRepository accountRepository; + + @Test + @Commit + public void testA_whenTestAccountIsSaved_thenSuccess() { + Account account = new Account(ACCOUNT_ID, "account1", "regional", true); + accountRepository.save(account); + } + + @Test + @Commit + // Enable Hibernate's debug logging in logback.xml to see the generated SQL statement. + public void testB_whenAccountNameUpdated_thenSuccess() { + Account account = accountRepository.findOne(ACCOUNT_ID); + account.setName("Test Account"); + accountRepository.save(account); + } + +} From eaa0c63620d0ac7807a6ea65d95defcd8202d879 Mon Sep 17 00:00:00 2001 From: vatsalgosar Date: Wed, 24 Jul 2019 00:18:45 +0530 Subject: [PATCH 016/140] BAEL-2728 - Removed unnecessary code --- .../spring-boot-configuration/README.md | 4 - .../spring-boot-configuration/pom.xml | 88 ++++++++----------- .../main/java/com/baeldung/Application.java | 24 +++-- .../ServiceImpl/PersonServiceImpl.java | 6 ++ .../baeldung/controller/PersonController.java | 39 -------- .../main/java/com/baeldung/domain/Person.java | 38 -------- .../exception/PersonNotFoundException.java | 8 -- .../baeldung/repository/PersonRepository.java | 9 -- .../com/baeldung/service/PersonService.java | 32 +------ .../src/main/resources/application.properties | 3 - .../src/main/resources/schema.sql | 5 -- .../java/com/baeldung/ApplicationTests.java | 6 +- 12 files changed, 56 insertions(+), 206 deletions(-) create mode 100644 spring-boot-bootstrap/spring-boot-configuration/src/main/java/com/baeldung/ServiceImpl/PersonServiceImpl.java delete mode 100644 spring-boot-bootstrap/spring-boot-configuration/src/main/java/com/baeldung/controller/PersonController.java delete mode 100644 spring-boot-bootstrap/spring-boot-configuration/src/main/java/com/baeldung/domain/Person.java delete mode 100644 spring-boot-bootstrap/spring-boot-configuration/src/main/java/com/baeldung/exception/PersonNotFoundException.java delete mode 100644 spring-boot-bootstrap/spring-boot-configuration/src/main/java/com/baeldung/repository/PersonRepository.java delete mode 100644 spring-boot-bootstrap/spring-boot-configuration/src/main/resources/application.properties delete mode 100644 spring-boot-bootstrap/spring-boot-configuration/src/main/resources/schema.sql diff --git a/spring-boot-bootstrap/spring-boot-configuration/README.md b/spring-boot-bootstrap/spring-boot-configuration/README.md index 35472d575a..d5ec5f63da 100644 --- a/spring-boot-bootstrap/spring-boot-configuration/README.md +++ b/spring-boot-bootstrap/spring-boot-configuration/README.md @@ -4,7 +4,3 @@ SprintBootConfiguration annotation commands: mvn clean install mvn spring-boot:run - -Swagger endpoints: -http://localhost:8080/v2/api-docs -http://localhost:8080/swagger-ui.html \ No newline at end of file diff --git a/spring-boot-bootstrap/spring-boot-configuration/pom.xml b/spring-boot-bootstrap/spring-boot-configuration/pom.xml index 02b2e53159..d7b4122c20 100644 --- a/spring-boot-bootstrap/spring-boot-configuration/pom.xml +++ b/spring-boot-bootstrap/spring-boot-configuration/pom.xml @@ -1,60 +1,42 @@ - 4.0.0 - - org.springframework.boot - spring-boot-starter-parent - 2.1.6.RELEASE - - - com.baeldung - spring-boot-configuration - 0.0.1-SNAPSHOT - spring-boot-configuration - Demo project for Spring Boot Configuration + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.1.6.RELEASE + + + com.baeldung + spring-boot-configuration + 0.0.1-SNAPSHOT + spring-boot-configuration + Demo project for Spring Boot Configuration - - 1.8 - + + 1.8 + - - - org.springframework.boot - spring-boot-starter-data-jpa - - - org.springframework.boot - spring-boot-starter-web - + + + org.springframework.boot + spring-boot-starter-data-jpa + + + org.springframework.boot + spring-boot-starter-test + test + + - - - com.h2database - h2 - runtime - - - - - org.hibernate - hibernate-entitymanager - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - + + + + org.springframework.boot + spring-boot-maven-plugin + + + diff --git a/spring-boot-bootstrap/spring-boot-configuration/src/main/java/com/baeldung/Application.java b/spring-boot-bootstrap/spring-boot-configuration/src/main/java/com/baeldung/Application.java index 7021ae62fa..15adb4bb3e 100644 --- a/spring-boot-bootstrap/spring-boot-configuration/src/main/java/com/baeldung/Application.java +++ b/spring-boot-bootstrap/spring-boot-configuration/src/main/java/com/baeldung/Application.java @@ -1,25 +1,23 @@ package com.baeldung; -import com.baeldung.service.PersonService; import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringBootConfiguration; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Import; -@EnableAutoConfiguration -@ComponentScan(basePackages = {"com.baeldung.*"}) +import com.baeldung.ServiceImpl.PersonServiceImpl; +import com.baeldung.service.PersonService; + +@ComponentScan(basePackages = { "com.baeldung.*" }) @SpringBootConfiguration public class Application { - public static void main(String[] args) { - SpringApplication.run(Application.class, args); - } + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } - @Bean - public PersonService personService() { - return new PersonService(); - } + @Bean + public PersonService personService() { + return new PersonServiceImpl(); + } } - diff --git a/spring-boot-bootstrap/spring-boot-configuration/src/main/java/com/baeldung/ServiceImpl/PersonServiceImpl.java b/spring-boot-bootstrap/spring-boot-configuration/src/main/java/com/baeldung/ServiceImpl/PersonServiceImpl.java new file mode 100644 index 0000000000..f08fbaa7f2 --- /dev/null +++ b/spring-boot-bootstrap/spring-boot-configuration/src/main/java/com/baeldung/ServiceImpl/PersonServiceImpl.java @@ -0,0 +1,6 @@ +package com.baeldung.ServiceImpl; + +import com.baeldung.service.PersonService; + +public class PersonServiceImpl implements PersonService { +} diff --git a/spring-boot-bootstrap/spring-boot-configuration/src/main/java/com/baeldung/controller/PersonController.java b/spring-boot-bootstrap/spring-boot-configuration/src/main/java/com/baeldung/controller/PersonController.java deleted file mode 100644 index 10d7386132..0000000000 --- a/spring-boot-bootstrap/spring-boot-configuration/src/main/java/com/baeldung/controller/PersonController.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.baeldung.controller; - -import com.baeldung.domain.Person; -import com.baeldung.exception.PersonNotFoundException; -import com.baeldung.service.PersonService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -@RestController -@RequestMapping("/persons") -public class PersonController { - - @Autowired - PersonService personService; - - @GetMapping - public List getPersons() { - return personService.getPersons(); - } - - @PostMapping - public void addPerson(@RequestBody Person person) { - personService.add(person); - } - - @GetMapping("/{id}") - public Person getPersonById(@PathVariable(required = true) long id) throws PersonNotFoundException { - return personService.getPersonById(id); - } - - @DeleteMapping("/{id}") - public void removePerson(@PathVariable(required = true) long id) { - personService.delete(id); - } - - -} diff --git a/spring-boot-bootstrap/spring-boot-configuration/src/main/java/com/baeldung/domain/Person.java b/spring-boot-bootstrap/spring-boot-configuration/src/main/java/com/baeldung/domain/Person.java deleted file mode 100644 index e63836420c..0000000000 --- a/spring-boot-bootstrap/spring-boot-configuration/src/main/java/com/baeldung/domain/Person.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.baeldung.domain; - -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; - -@Entity -public class Person { - - @Id - @GeneratedValue - private long id; - private String name; - - public Person() {} - - public Person(long id, String name) { - this.id = id; - this.name = name; - } - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } -} - diff --git a/spring-boot-bootstrap/spring-boot-configuration/src/main/java/com/baeldung/exception/PersonNotFoundException.java b/spring-boot-bootstrap/spring-boot-configuration/src/main/java/com/baeldung/exception/PersonNotFoundException.java deleted file mode 100644 index 048197a072..0000000000 --- a/spring-boot-bootstrap/spring-boot-configuration/src/main/java/com/baeldung/exception/PersonNotFoundException.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.baeldung.exception; - -public class PersonNotFoundException extends Exception { - - public PersonNotFoundException(String message) { - super(message); - } -} diff --git a/spring-boot-bootstrap/spring-boot-configuration/src/main/java/com/baeldung/repository/PersonRepository.java b/spring-boot-bootstrap/spring-boot-configuration/src/main/java/com/baeldung/repository/PersonRepository.java deleted file mode 100644 index b542b5ea0b..0000000000 --- a/spring-boot-bootstrap/spring-boot-configuration/src/main/java/com/baeldung/repository/PersonRepository.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.baeldung.repository; - -import com.baeldung.domain.Person; -import org.springframework.data.repository.CrudRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface PersonRepository extends CrudRepository { -} diff --git a/spring-boot-bootstrap/spring-boot-configuration/src/main/java/com/baeldung/service/PersonService.java b/spring-boot-bootstrap/spring-boot-configuration/src/main/java/com/baeldung/service/PersonService.java index 74f7cb0a70..e959e3b835 100644 --- a/spring-boot-bootstrap/spring-boot-configuration/src/main/java/com/baeldung/service/PersonService.java +++ b/spring-boot-bootstrap/spring-boot-configuration/src/main/java/com/baeldung/service/PersonService.java @@ -1,34 +1,4 @@ package com.baeldung.service; -import com.baeldung.domain.Person; -import com.baeldung.exception.PersonNotFoundException; -import com.baeldung.repository.PersonRepository; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.List; -import java.util.Optional; - -//@Service -public class PersonService { - - @Autowired - PersonRepository personRepository; - - public void add(Person person) { - personRepository.save(person); - } - - public void delete(long id) { - personRepository.deleteById(id); - } - - public List getPersons() { - return (List) personRepository.findAll(); - } - - public Person getPersonById(long id) throws PersonNotFoundException { - Optional optionalDog = personRepository.findById(id); - return optionalDog.orElseThrow(() -> new PersonNotFoundException("Couldn't find a Person with id: " + id)); - } +public interface PersonService { } diff --git a/spring-boot-bootstrap/spring-boot-configuration/src/main/resources/application.properties b/spring-boot-bootstrap/spring-boot-configuration/src/main/resources/application.properties deleted file mode 100644 index 7de28fe306..0000000000 --- a/spring-boot-bootstrap/spring-boot-configuration/src/main/resources/application.properties +++ /dev/null @@ -1,3 +0,0 @@ -# H2 -spring.h2.console.enabled=true -spring.h2.console.path=/h2 diff --git a/spring-boot-bootstrap/spring-boot-configuration/src/main/resources/schema.sql b/spring-boot-bootstrap/spring-boot-configuration/src/main/resources/schema.sql deleted file mode 100644 index 02a7aca232..0000000000 --- a/spring-boot-bootstrap/spring-boot-configuration/src/main/resources/schema.sql +++ /dev/null @@ -1,5 +0,0 @@ -CREATE TABLE `person` ( - `id` INT(11) NOT NULL, - `name` VARCHAR(50) NULL DEFAULT NULL, - PRIMARY KEY (`id`) -); \ No newline at end of file diff --git a/spring-boot-bootstrap/spring-boot-configuration/src/test/java/com/baeldung/ApplicationTests.java b/spring-boot-bootstrap/spring-boot-configuration/src/test/java/com/baeldung/ApplicationTests.java index f239fc76cc..3bd3cc2ec6 100644 --- a/spring-boot-bootstrap/spring-boot-configuration/src/test/java/com/baeldung/ApplicationTests.java +++ b/spring-boot-bootstrap/spring-boot-configuration/src/test/java/com/baeldung/ApplicationTests.java @@ -9,8 +9,8 @@ import org.springframework.test.context.junit4.SpringRunner; @SpringBootTest public class ApplicationTests { - @Test - public void contextLoads() { - } + @Test + public void contextLoads() { + } } From 97e38d338ff145cff3f069d4de86dbc1e0fdd21d Mon Sep 17 00:00:00 2001 From: Chirag Dewan Date: Wed, 24 Jul 2019 21:32:42 +0530 Subject: [PATCH 017/140] 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 08470cc5cd..d486c18a06 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 bd9c8b0a17..6509676cb4 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 @@ 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 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 class Employee { 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 class Employee { 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 abdd213de5..c73e2be8a6 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 class EmployeeBuilderUnitTest { } @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 5040bfc9e0..e54a1dbd78 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 @@ class EmployeeBuilderUnitTest { .setName(NAME) .setAge(12) .setDepartment("Builder Pattern") - .setDesignation("Author") - .setEmail("abc@xyz.com") - .setPermanent(true) - .setSupervisorName("Admin") - .setPhoneNumber(4445566) .build(); //then From ba8d468603c6544d3269b495080e2858d6ae1695 Mon Sep 17 00:00:00 2001 From: vatsalgosar Date: Fri, 26 Jul 2019 02:01:33 +0530 Subject: [PATCH 018/140] module changed --- .../spring-boot-configuration/README.md | 6 --- .../spring-boot-configuration/pom.xml | 42 ------------------- .../ServiceImpl/PersonServiceImpl.java | 6 --- .../com/baeldung/service/PersonService.java | 4 -- .../java/com/baeldung/ApplicationTests.java | 16 ------- .../springbootconfiguration}/Application.java | 6 +-- .../ServiceImpl/PersonServiceImpl.java | 6 +++ .../service/PersonService.java | 4 ++ 8 files changed, 13 insertions(+), 77 deletions(-) delete mode 100644 spring-boot-bootstrap/spring-boot-configuration/README.md delete mode 100644 spring-boot-bootstrap/spring-boot-configuration/pom.xml delete mode 100644 spring-boot-bootstrap/spring-boot-configuration/src/main/java/com/baeldung/ServiceImpl/PersonServiceImpl.java delete mode 100644 spring-boot-bootstrap/spring-boot-configuration/src/main/java/com/baeldung/service/PersonService.java delete mode 100644 spring-boot-bootstrap/spring-boot-configuration/src/test/java/com/baeldung/ApplicationTests.java rename spring-boot-bootstrap/{spring-boot-configuration/src/main/java/com/baeldung => src/main/java/com/baeldung/springbootconfiguration}/Application.java (74%) create mode 100644 spring-boot-bootstrap/src/main/java/com/baeldung/springbootconfiguration/ServiceImpl/PersonServiceImpl.java create mode 100644 spring-boot-bootstrap/src/main/java/com/baeldung/springbootconfiguration/service/PersonService.java diff --git a/spring-boot-bootstrap/spring-boot-configuration/README.md b/spring-boot-bootstrap/spring-boot-configuration/README.md deleted file mode 100644 index d5ec5f63da..0000000000 --- a/spring-boot-bootstrap/spring-boot-configuration/README.md +++ /dev/null @@ -1,6 +0,0 @@ -Article: -SprintBootConfiguration annotation - -commands: -mvn clean install -mvn spring-boot:run diff --git a/spring-boot-bootstrap/spring-boot-configuration/pom.xml b/spring-boot-bootstrap/spring-boot-configuration/pom.xml deleted file mode 100644 index d7b4122c20..0000000000 --- a/spring-boot-bootstrap/spring-boot-configuration/pom.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - 4.0.0 - - org.springframework.boot - spring-boot-starter-parent - 2.1.6.RELEASE - - - com.baeldung - spring-boot-configuration - 0.0.1-SNAPSHOT - spring-boot-configuration - Demo project for Spring Boot Configuration - - - 1.8 - - - - - org.springframework.boot - spring-boot-starter-data-jpa - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - - diff --git a/spring-boot-bootstrap/spring-boot-configuration/src/main/java/com/baeldung/ServiceImpl/PersonServiceImpl.java b/spring-boot-bootstrap/spring-boot-configuration/src/main/java/com/baeldung/ServiceImpl/PersonServiceImpl.java deleted file mode 100644 index f08fbaa7f2..0000000000 --- a/spring-boot-bootstrap/spring-boot-configuration/src/main/java/com/baeldung/ServiceImpl/PersonServiceImpl.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.baeldung.ServiceImpl; - -import com.baeldung.service.PersonService; - -public class PersonServiceImpl implements PersonService { -} diff --git a/spring-boot-bootstrap/spring-boot-configuration/src/main/java/com/baeldung/service/PersonService.java b/spring-boot-bootstrap/spring-boot-configuration/src/main/java/com/baeldung/service/PersonService.java deleted file mode 100644 index e959e3b835..0000000000 --- a/spring-boot-bootstrap/spring-boot-configuration/src/main/java/com/baeldung/service/PersonService.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.baeldung.service; - -public interface PersonService { -} diff --git a/spring-boot-bootstrap/spring-boot-configuration/src/test/java/com/baeldung/ApplicationTests.java b/spring-boot-bootstrap/spring-boot-configuration/src/test/java/com/baeldung/ApplicationTests.java deleted file mode 100644 index 3bd3cc2ec6..0000000000 --- a/spring-boot-bootstrap/spring-boot-configuration/src/test/java/com/baeldung/ApplicationTests.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.baeldung; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest -public class ApplicationTests { - - @Test - public void contextLoads() { - } - -} diff --git a/spring-boot-bootstrap/spring-boot-configuration/src/main/java/com/baeldung/Application.java b/spring-boot-bootstrap/src/main/java/com/baeldung/springbootconfiguration/Application.java similarity index 74% rename from spring-boot-bootstrap/spring-boot-configuration/src/main/java/com/baeldung/Application.java rename to spring-boot-bootstrap/src/main/java/com/baeldung/springbootconfiguration/Application.java index 15adb4bb3e..ef9df2bf4a 100644 --- a/spring-boot-bootstrap/spring-boot-configuration/src/main/java/com/baeldung/Application.java +++ b/spring-boot-bootstrap/src/main/java/com/baeldung/springbootconfiguration/Application.java @@ -1,12 +1,12 @@ -package com.baeldung; +package com.baeldung.springbootconfiguration; import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringBootConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; -import com.baeldung.ServiceImpl.PersonServiceImpl; -import com.baeldung.service.PersonService; +import com.baeldung.springbootconfiguration.ServiceImpl.PersonServiceImpl; +import com.baeldung.springbootconfiguration.service.PersonService; @ComponentScan(basePackages = { "com.baeldung.*" }) @SpringBootConfiguration diff --git a/spring-boot-bootstrap/src/main/java/com/baeldung/springbootconfiguration/ServiceImpl/PersonServiceImpl.java b/spring-boot-bootstrap/src/main/java/com/baeldung/springbootconfiguration/ServiceImpl/PersonServiceImpl.java new file mode 100644 index 0000000000..3bec4e4b12 --- /dev/null +++ b/spring-boot-bootstrap/src/main/java/com/baeldung/springbootconfiguration/ServiceImpl/PersonServiceImpl.java @@ -0,0 +1,6 @@ +package com.baeldung.springbootconfiguration.ServiceImpl; + +import com.baeldung.springbootconfiguration.service.PersonService; + +public class PersonServiceImpl implements PersonService { +} diff --git a/spring-boot-bootstrap/src/main/java/com/baeldung/springbootconfiguration/service/PersonService.java b/spring-boot-bootstrap/src/main/java/com/baeldung/springbootconfiguration/service/PersonService.java new file mode 100644 index 0000000000..5a18edde33 --- /dev/null +++ b/spring-boot-bootstrap/src/main/java/com/baeldung/springbootconfiguration/service/PersonService.java @@ -0,0 +1,4 @@ +package com.baeldung.springbootconfiguration.service; + +public interface PersonService { +} From 85f4a100db5e80263911470eac65bb365dfa31be Mon Sep 17 00:00:00 2001 From: vatsalgosar Date: Fri, 26 Jul 2019 10:05:46 +0530 Subject: [PATCH 019/140] updated packages --- .../com/baeldung/springbootconfiguration/Application.java | 3 --- .../com/baeldung/springbootconfiguration/PersonService.java | 4 ++++ .../baeldung/springbootconfiguration/PersonServiceImpl.java | 4 ++++ .../ServiceImpl/PersonServiceImpl.java | 6 ------ .../springbootconfiguration/service/PersonService.java | 4 ---- 5 files changed, 8 insertions(+), 13 deletions(-) create mode 100644 spring-boot-bootstrap/src/main/java/com/baeldung/springbootconfiguration/PersonService.java create mode 100644 spring-boot-bootstrap/src/main/java/com/baeldung/springbootconfiguration/PersonServiceImpl.java delete mode 100644 spring-boot-bootstrap/src/main/java/com/baeldung/springbootconfiguration/ServiceImpl/PersonServiceImpl.java delete mode 100644 spring-boot-bootstrap/src/main/java/com/baeldung/springbootconfiguration/service/PersonService.java diff --git a/spring-boot-bootstrap/src/main/java/com/baeldung/springbootconfiguration/Application.java b/spring-boot-bootstrap/src/main/java/com/baeldung/springbootconfiguration/Application.java index ef9df2bf4a..146d59a81b 100644 --- a/spring-boot-bootstrap/src/main/java/com/baeldung/springbootconfiguration/Application.java +++ b/spring-boot-bootstrap/src/main/java/com/baeldung/springbootconfiguration/Application.java @@ -5,9 +5,6 @@ import org.springframework.boot.SpringBootConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; -import com.baeldung.springbootconfiguration.ServiceImpl.PersonServiceImpl; -import com.baeldung.springbootconfiguration.service.PersonService; - @ComponentScan(basePackages = { "com.baeldung.*" }) @SpringBootConfiguration public class Application { diff --git a/spring-boot-bootstrap/src/main/java/com/baeldung/springbootconfiguration/PersonService.java b/spring-boot-bootstrap/src/main/java/com/baeldung/springbootconfiguration/PersonService.java new file mode 100644 index 0000000000..4909d957e5 --- /dev/null +++ b/spring-boot-bootstrap/src/main/java/com/baeldung/springbootconfiguration/PersonService.java @@ -0,0 +1,4 @@ +package com.baeldung.springbootconfiguration; + +public interface PersonService { +} diff --git a/spring-boot-bootstrap/src/main/java/com/baeldung/springbootconfiguration/PersonServiceImpl.java b/spring-boot-bootstrap/src/main/java/com/baeldung/springbootconfiguration/PersonServiceImpl.java new file mode 100644 index 0000000000..9f2af33e8e --- /dev/null +++ b/spring-boot-bootstrap/src/main/java/com/baeldung/springbootconfiguration/PersonServiceImpl.java @@ -0,0 +1,4 @@ +package com.baeldung.springbootconfiguration; + +public class PersonServiceImpl implements PersonService { +} diff --git a/spring-boot-bootstrap/src/main/java/com/baeldung/springbootconfiguration/ServiceImpl/PersonServiceImpl.java b/spring-boot-bootstrap/src/main/java/com/baeldung/springbootconfiguration/ServiceImpl/PersonServiceImpl.java deleted file mode 100644 index 3bec4e4b12..0000000000 --- a/spring-boot-bootstrap/src/main/java/com/baeldung/springbootconfiguration/ServiceImpl/PersonServiceImpl.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.baeldung.springbootconfiguration.ServiceImpl; - -import com.baeldung.springbootconfiguration.service.PersonService; - -public class PersonServiceImpl implements PersonService { -} diff --git a/spring-boot-bootstrap/src/main/java/com/baeldung/springbootconfiguration/service/PersonService.java b/spring-boot-bootstrap/src/main/java/com/baeldung/springbootconfiguration/service/PersonService.java deleted file mode 100644 index 5a18edde33..0000000000 --- a/spring-boot-bootstrap/src/main/java/com/baeldung/springbootconfiguration/service/PersonService.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.baeldung.springbootconfiguration.service; - -public interface PersonService { -} From aa0658c823736fdc2d8c171f2f852a328674a76f Mon Sep 17 00:00:00 2001 From: vatsalgosar Date: Fri, 26 Jul 2019 10:09:08 +0530 Subject: [PATCH 020/140] changed package scan --- .../java/com/baeldung/springbootconfiguration/Application.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-boot-bootstrap/src/main/java/com/baeldung/springbootconfiguration/Application.java b/spring-boot-bootstrap/src/main/java/com/baeldung/springbootconfiguration/Application.java index 146d59a81b..ae81b4872f 100644 --- a/spring-boot-bootstrap/src/main/java/com/baeldung/springbootconfiguration/Application.java +++ b/spring-boot-bootstrap/src/main/java/com/baeldung/springbootconfiguration/Application.java @@ -5,7 +5,7 @@ import org.springframework.boot.SpringBootConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; -@ComponentScan(basePackages = { "com.baeldung.*" }) +@ComponentScan(basePackages = {"com.baeldung.springbootconfiguration"}) @SpringBootConfiguration public class Application { From 78881a0a016ed94d139f85d9dab158bf19bf8ec4 Mon Sep 17 00:00:00 2001 From: vatsalgosar Date: Fri, 26 Jul 2019 10:10:46 +0530 Subject: [PATCH 021/140] package scan --- .../java/com/baeldung/springbootconfiguration/Application.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-boot-bootstrap/src/main/java/com/baeldung/springbootconfiguration/Application.java b/spring-boot-bootstrap/src/main/java/com/baeldung/springbootconfiguration/Application.java index ae81b4872f..d4c8010d2b 100644 --- a/spring-boot-bootstrap/src/main/java/com/baeldung/springbootconfiguration/Application.java +++ b/spring-boot-bootstrap/src/main/java/com/baeldung/springbootconfiguration/Application.java @@ -5,7 +5,7 @@ import org.springframework.boot.SpringBootConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; -@ComponentScan(basePackages = {"com.baeldung.springbootconfiguration"}) +@ComponentScan(basePackages = {"com.baeldung.springbootconfiguration.*"}) @SpringBootConfiguration public class Application { From f1d68f74f6298025354adb494feae9f7df5e5d65 Mon Sep 17 00:00:00 2001 From: Krzysztof Majewski Date: Fri, 26 Jul 2019 12:33:04 +0200 Subject: [PATCH 022/140] add new module --- persistence-modules/java-jpa-2/README.md | 1 + persistence-modules/java-jpa-2/pom.xml | 115 ++++++++++++++++++ .../java/com/baeldung/jpa/entity/Article.java | 0 .../java-jpa-2/src/main/resources/logback.xml | 13 ++ persistence-modules/pom.xml | 1 + pom.xml | 2 + 6 files changed, 132 insertions(+) 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/entity/Article.java (100%) create mode 100644 persistence-modules/java-jpa-2/src/main/resources/logback.xml diff --git a/persistence-modules/java-jpa-2/README.md b/persistence-modules/java-jpa-2/README.md new file mode 100644 index 0000000000..e65ce65a95 --- /dev/null +++ b/persistence-modules/java-jpa-2/README.md @@ -0,0 +1 @@ +# Relevant Articles diff --git a/persistence-modules/java-jpa-2/pom.xml b/persistence-modules/java-jpa-2/pom.xml new file mode 100644 index 0000000000..c8c9a24599 --- /dev/null +++ b/persistence-modules/java-jpa-2/pom.xml @@ -0,0 +1,115 @@ + + + 4.0.0 + java-jpa-2 + java-jpa-2 + + + parent-modules + com.baeldung + 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} + + + + + 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.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 + + + diff --git a/persistence-modules/java-jpa/src/main/java/com/baeldung/jpa/entity/Article.java b/persistence-modules/java-jpa-2/src/main/java/com/baeldung/jpa/entity/Article.java similarity index 100% rename from persistence-modules/java-jpa/src/main/java/com/baeldung/jpa/entity/Article.java rename to persistence-modules/java-jpa-2/src/main/java/com/baeldung/jpa/entity/Article.java 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 0000000000..7d900d8ea8 --- /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/pom.xml b/persistence-modules/pom.xml index 390bcc9d51..79879fc2ff 100644 --- a/persistence-modules/pom.xml +++ b/persistence-modules/pom.xml @@ -29,6 +29,7 @@ java-cockroachdb java-jdbi java-jpa + java-jpa-2 java-mongodb jnosql liquibase diff --git a/pom.xml b/pom.xml index 2e34254bf5..a4e74f8423 100644 --- a/pom.xml +++ b/pom.xml @@ -988,6 +988,7 @@ persistence-modules/hibernate5 persistence-modules/hibernate-mapping persistence-modules/java-jpa + persistence-modules/java-jpa-2 persistence-modules/java-mongodb persistence-modules/jnosql @@ -1500,6 +1501,7 @@ persistence-modules/hibernate5 persistence-modules/java-jpa + persistence-modules/java-jpa-2 persistence-modules/java-mongodb persistence-modules/jnosql From a49bd1ad2b2c02117be79d21d936025fa28a428c Mon Sep 17 00:00:00 2001 From: Anshul Bansal Date: Sat, 27 Jul 2019 19:25:02 +0300 Subject: [PATCH 023/140] 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 0000000000..34ca8014d4 --- /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 0000000000..65591cae8d --- /dev/null +++ b/core-groovy-2/src/main/groovy/com/baeldung/metaprogramming/extension/BasicExtensions.groovy @@ -0,0 +1,30 @@ +package com.baeldung.metaprogramming.extension + +import com.baeldung.metaprogramming.Employee + +class BasicExtensions { + + static int getYearOfBirth(Employee self) { + return (new Date().getYear() + 1900) - self.age; + } + + static String capitalize(String self) { + return self.substring(0, 1).toUpperCase() + self.substring(1) + } + + static void printCounter(Integer self) { + while (self>0) { + println self + self-- + } + } + + static Long square(Long self) { + return self*self + } + + static BigDecimal cube(BigDecimal self) { + return self*self*self + } + +} \ No newline at end of file diff --git a/core-groovy-2/src/main/groovy/com/baeldung/metaprogramming/extension/StaticEmployeeExtension.groovy b/core-groovy-2/src/main/groovy/com/baeldung/metaprogramming/extension/StaticEmployeeExtension.groovy new file mode 100644 index 0000000000..ab2aac38ea --- /dev/null +++ b/core-groovy-2/src/main/groovy/com/baeldung/metaprogramming/extension/StaticEmployeeExtension.groovy @@ -0,0 +1,10 @@ +package com.baeldung.metaprogramming.extension + +import com.baeldung.metaprogramming.Employee + +class StaticEmployeeExtension { + + static Employee getDefaultObj(Employee self) { + return new Employee(firstName: "firstName", lastName: "lastName", age: 20) + } +} \ No newline at end of file diff --git a/core-groovy-2/src/main/resources/META-INF/services/org.codehaus.groovy.runtime.ExtensionModule b/core-groovy-2/src/main/resources/META-INF/services/org.codehaus.groovy.runtime.ExtensionModule new file mode 100644 index 0000000000..967108b846 --- /dev/null +++ b/core-groovy-2/src/main/resources/META-INF/services/org.codehaus.groovy.runtime.ExtensionModule @@ -0,0 +1,4 @@ +moduleName=core-groovy-2 +moduleVersion=1.0-SNAPSHOT +extensionClasses=com.baeldung.metaprogramming.extension.BasicExtensions +staticExtensionClasses=com.baeldung.metaprogramming.extension.StaticEmployeeExtension diff --git a/core-groovy-2/src/test/groovy/com/baeldung/metaprogramming/MetaprogrammingUnitTest.groovy b/core-groovy-2/src/test/groovy/com/baeldung/metaprogramming/MetaprogrammingUnitTest.groovy new file mode 100644 index 0000000000..bafd1f8a63 --- /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 024/140] 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 34ca8014d4..d0af18fe3d 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 a16e5eb4afb278127ff2e337e12150bf205d650d Mon Sep 17 00:00:00 2001 From: Loredana Date: Sun, 28 Jul 2019 10:21:08 +0300 Subject: [PATCH 025/140] remove extra files --- .../server/web/AuthorizationEndpoint.java | 209 ------------------ .../server/web/TokenEndpoint.java | 70 ------ 2 files changed, 279 deletions(-) delete mode 100644 oauth2-framework-impl/oauth2-authorization-server/src/main/java/com/baeldung/oauth2/authorization/server/web/AuthorizationEndpoint.java delete mode 100644 oauth2-framework-impl/oauth2-authorization-server/src/main/java/com/baeldung/oauth2/authorization/server/web/TokenEndpoint.java diff --git a/oauth2-framework-impl/oauth2-authorization-server/src/main/java/com/baeldung/oauth2/authorization/server/web/AuthorizationEndpoint.java b/oauth2-framework-impl/oauth2-authorization-server/src/main/java/com/baeldung/oauth2/authorization/server/web/AuthorizationEndpoint.java deleted file mode 100644 index 84b9a89c54..0000000000 --- a/oauth2-framework-impl/oauth2-authorization-server/src/main/java/com/baeldung/oauth2/authorization/server/web/AuthorizationEndpoint.java +++ /dev/null @@ -1,209 +0,0 @@ -//package com.baeldung.security.oauth2.server.web; -// -//import AuthorizationCode; -//import Client; -//import User; -//import com.baeldung.security.oauth2.server.service.AuthCodeService; -// -//import javax.ejb.EJB; -//import javax.enterprise.context.RequestScoped; -//import javax.inject.Inject; -//import javax.persistence.EntityManager; -//import javax.persistence.PersistenceContext; -//import javax.security.enterprise.SecurityContext; -//import javax.security.enterprise.authentication.mechanism.http.FormAuthenticationMechanismDefinition; -//import javax.security.enterprise.authentication.mechanism.http.LoginToContinue; -//import javax.servlet.ServletException; -//import javax.servlet.annotation.HttpConstraint; -//import javax.servlet.annotation.ServletSecurity; -//import javax.servlet.annotation.WebServlet; -//import javax.servlet.http.HttpServlet; -//import javax.servlet.http.HttpServletRequest; -//import javax.servlet.http.HttpServletResponse; -//import java.io.IOException; -//import java.security.Principal; -//import java.util.*; -// -///** -// * 1. GET http://localhost:8080/app/ (302) -// * 2. GET http://localhost:8080/uaa/authorize?client_id=app&redirect_uri=http://localhost:8080/app/&response_type=code&state=A123 (302) -// * 3. GET http://localhost:8080/uaa/login (200) with initial request as hidden input -// * 4. POST http://localhost:8080/uaa/login (username, password, initial client request) (302) -// * 5. GET http://localhost:8080/uaa/authorize?client_id=app&redirect_uri=http://localhost:8080/app/&response_type=code&state=A123 (200) -// * 7. POST http://localhost:8080/uaa/authorize?client_id=app&redirect_uri=http://localhost:8080/app/&response_type=code&state=A123 (302) -// * 8. GET http://localhost:8080/app/?code=rkWijq06mL&state=A123 (200) -// */ -///* -// -//Query Params: -// client_id: app -// redirect_uri: http://localhost:8080/app/ -// response_type: code -// state: A123 -// -// ==> GET user login WITH client request as hidden input: -// -// -// ==> After user login ==> Initial client request -// ==> gen code -// == redirect to redirect uri + params code & state : 302, location : http://localhost:8080/app/?code=w6A0YQFzzg&state=A123 -//*/ -// -////authorize?client_id=app&redirect_uri=http://localhost:8080/app/&response_type=code&state=A123 -////http://localhost:9080/authorize?response_type=code&client_id=client_id_1&redirect_uri=http://localhost:9080/app&state=A123 -// -////@RequestScoped -//@FormAuthenticationMechanismDefinition( -// loginToContinue = @LoginToContinue( -// loginPage = "/login-servlet", -// errorPage = "/login-error-servlet" -// ) -//) -//@WebServlet({"/authorize"}) -//@ServletSecurity(@HttpConstraint(rolesAllowed = "user")) -////@Stateless -//@RequestScoped -//public class AuthorizationEndpoint extends HttpServlet { -// -// private static final List authorizedResponseTypes = Arrays.asList("code", "token"); -// -// @Inject -// private SecurityContext securityContext; -// -// @PersistenceContext(name = "jpa-oauth2-pu") -// private EntityManager entityManager; -// -// @EJB -// private AuthCodeService authCodeService; -// -// //HTTP GET IS A MUST, POST IS OPTIONAL -// @Override -// protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { -// -// String error = ""; -// -// //1. User Authentication -// Principal principal = securityContext.getCallerPrincipal(); -// -// //2. Check for a valid client_id -// String clientId = request.getParameter("client_id"); -// if (clientId == null) { -// request.setAttribute("error", "The client " + clientId + " doesn't exist."); -// } -// request.setAttribute("clientId", clientId); -// Client client = entityManager.find(Client.class, clientId); -// if (client == null) { -// request.setAttribute("error", "The client " + clientId + " doesn't exist."); -// } -// -// //3. check for a valid response_type -// String responseType = request.getParameter("response_type"); -// if (!authorizedResponseTypes.contains(responseType)) { -// error = "invalid_grant :" + responseType + ", response_type params should be one of :" + authorizedResponseTypes; -// request.setAttribute("error", error); -// request.getRequestDispatcher("/error.jsp") -// .forward(request, response); -// } -// -// //4. Optional redirect_uri, if provided should match -// String redirectUri = request.getParameter("redirect_uri"); -// checkRedirectUri(client, redirectUri); -// -// //save params -// String currentUri = request.getRequestURI(); -// request.setAttribute("post_redirect_uri", currentUri); -// -// String state = request.getParameter("state"); -// Map requestMap = new HashMap<>(); -// requestMap.put("response_type", responseType); -// requestMap.put("client_id", clientId); -// requestMap.put("redirect_uri", redirectUri); -// requestMap.put("state", state); -// request.setAttribute("requestMap", requestMap); -// -// //5.scope: Optional -// String requestedScope = request.getParameter("scope"); -// if (requestedScope.isEmpty()) { -// requestedScope = client.getScope(); -// } -// //requestedScope should be a subset of the client scope: clientScopes.containsAll(requestedScopes) -// //checkRequestedScope(requestedScope, client.getScope()); -// -// //sub set of user scope -// //allowed scope by the user -// -// User user = entityManager.find(User.class, principal.getName()); -// request.setAttribute("scopes", requestedScope); -// -// -// forward("/authorize.jsp", request, response); -// } -// -// @Override -// protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { -// String clientId = request.getParameter("client_id"); -// -// String responseType = request.getParameter("response_type"); -// if (!authorizedResponseTypes.contains(responseType)) { -// String error = "invalid_grant :" + responseType + ", response_type params should be one of :" + authorizedResponseTypes; -// request.setAttribute("error", error); -// forward("/error.jsp", request, response); -// } -// -// Client client = entityManager.find(Client.class, clientId); -// Objects.requireNonNull(client); -// -// String userId = securityContext.getCallerPrincipal().getName(); -// AuthorizationCode authorizationCode = new AuthorizationCode(); -// authorizationCode.setClientId(clientId); -// authorizationCode.setUserId(userId); -// String redirectUri = request.getParameter("redirect_uri"); -// authorizationCode.setRedirectUri(redirectUri); -// -// redirectUri = checkRedirectUri(client, redirectUri); -// -// String[] scope = request.getParameterValues("scope"); -// if (scope == null) { -// request.setAttribute("error", "User doesn't approved any scope"); -// forward("/error.jsp", request, response); -// } -// -// String approvedScopes = String.join(" ", scope); -// authorizationCode.setApprovedScopes(approvedScopes); -// -// //entityManager.persist(authorizationCode); -// authCodeService.save(authorizationCode); -// String code = authorizationCode.getCode(); -// -// StringBuilder sb = new StringBuilder(redirectUri); -// sb.append("?code=").append(code); -// -// //If the client send a state, Send it back -// String state = request.getParameter("state"); -// if (state != null) { -// sb.append("&state=").append(state); -// } -// response.sendRedirect(sb.toString()); -// } -// -// private String checkRedirectUri(Client client, String redirectUri) { -// //redirect uri -// if (redirectUri == null) { -// //erreur: param redirect_uri && client redirect_uri don't match. -// redirectUri = client.getRedirectUri(); -// if (redirectUri == null) { -// throw new IllegalStateException("redirectUri shloud be not null, unless a registred client have a redirect_uri."); -// } -// } else if (!redirectUri.equals(client.getRedirectUri())) { -// throw new IllegalStateException("request redirectUri and client registred redirect_uri should match."); -// } -// return redirectUri; -// } -// -// private void forward(String path, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { -// request.getRequestDispatcher(path) -// .forward(request, response); -// } -//} diff --git a/oauth2-framework-impl/oauth2-authorization-server/src/main/java/com/baeldung/oauth2/authorization/server/web/TokenEndpoint.java b/oauth2-framework-impl/oauth2-authorization-server/src/main/java/com/baeldung/oauth2/authorization/server/web/TokenEndpoint.java deleted file mode 100644 index 73085a68d1..0000000000 --- a/oauth2-framework-impl/oauth2-authorization-server/src/main/java/com/baeldung/oauth2/authorization/server/web/TokenEndpoint.java +++ /dev/null @@ -1,70 +0,0 @@ -//package com.baeldung.security.oauth2.server.web; -// -//import AuthorizationGrantTypeHandler; -//import TokenResponse; -//import com.baeldung.security.oauth2.server.security.Authenticated; -//import com.nimbusds.jose.JOSEException; -// -//import javax.enterprise.inject.Instance; -//import javax.enterprise.inject.literal.NamedLiteral; -//import javax.inject.Inject; -//import javax.security.enterprise.SecurityContext; -//import javax.ws.rs.Consumes; -//import javax.ws.rs.POST; -//import javax.ws.rs.Path; -//import javax.ws.rs.Produces; -//import javax.ws.rs.core.MediaType; -//import javax.ws.rs.core.MultivaluedMap; -//import javax.ws.rs.core.Response; -//import java.security.Principal; -//import java.util.Arrays; -//import java.util.List; -//import java.util.Objects; -// -///** -// * { -// * "access_token" : "acb6803a48114d9fb4761e403c17f812", -// * "token_type" : "bearer", -// * "id_token" : "eyJhbGciOiJIUzI1NiIsImprdSI6Imh0dHBzOi8vbG9jYWxob3N0OjgwODAvdWFhL3Rva2VuX2tleXMiLCJraWQiOiJsZWdhY3ktdG9rZW4ta2V5IiwidHlwIjoiSldUIn0.eyJzdWIiOiIwNzYzZTM2MS02ODUwLTQ3N2ItYjk1Ny1iMmExZjU3MjczMTQiLCJhdWQiOlsibG9naW4iXSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgwL3VhYS9vYXV0aC90b2tlbiIsImV4cCI6MTU1NzgzMDM4NSwiaWF0IjoxNTU3Nzg3MTg1LCJhenAiOiJsb2dpbiIsInNjb3BlIjpbIm9wZW5pZCJdLCJlbWFpbCI6IndyaHBONUB0ZXN0Lm9yZyIsInppZCI6InVhYSIsIm9yaWdpbiI6InVhYSIsImp0aSI6ImFjYjY4MDNhNDgxMTRkOWZiNDc2MWU0MDNjMTdmODEyIiwiZW1haWxfdmVyaWZpZWQiOnRydWUsImNsaWVudF9pZCI6ImxvZ2luIiwiY2lkIjoibG9naW4iLCJncmFudF90eXBlIjoiYXV0aG9yaXphdGlvbl9jb2RlIiwidXNlcl9uYW1lIjoid3JocE41QHRlc3Qub3JnIiwicmV2X3NpZyI6ImI3MjE5ZGYxIiwidXNlcl9pZCI6IjA3NjNlMzYxLTY4NTAtNDc3Yi1iOTU3LWIyYTFmNTcyNzMxNCIsImF1dGhfdGltZSI6MTU1Nzc4NzE4NX0.Fo8wZ_Zq9mwFks3LfXQ1PfJ4ugppjWvioZM6jSqAAQQ", -// * "refresh_token" : "f59dcb5dcbca45f981f16ce519d61486-r", -// * "expires_in" : 43199, -// * "scope" : "openid oauth.approvals", -// * "jti" : "acb6803a48114d9fb4761e403c17f812" -// * } -// */ -//@Path("token") -//public class TokenEndpoint { -// -// List supportedGrantTypes = Arrays.asList("authorization_code", "password", "refresh_token", "client_credentials"); -// -// @Inject -// private SecurityContext securityContext; -// -// @Inject -// Instance authorizationGrantTypeHandlers; -// -// @POST -// @Produces(MediaType.APPLICATION_JSON) -// @Consumes(MediaType.APPLICATION_FORM_URLENCODED) -// @Authenticated -// public Response token(MultivaluedMap params) throws JOSEException { -// //Authenticate client with [basic] http authentication mechanism -// Principal principal = securityContext.getCallerPrincipal(); -// Objects.requireNonNull(principal, "Client not authenticated!"); -// -// //Check grant_type params -// String grantType = params.getFirst("grant_type"); -// Objects.requireNonNull(grantType, "grant_type params is required"); -// //authorization_code, password, refresh, client_credentials -// if (!supportedGrantTypes.contains(grantType)) { -// throw new RuntimeException("grant_type parameter should be one of the following :" + supportedGrantTypes); -// } -// AuthorizationGrantTypeHandler authorizationGrantTypeHandler = authorizationGrantTypeHandlers.select(NamedLiteral.of(grantType)).get(); -// TokenResponse tokenResponse = authorizationGrantTypeHandler.createAccessToken(principal.getName(), params); -// Response response = Response.ok(tokenResponse) -// .header("Cache-Control", "no-store") -// .header("Pragma", "no-cache") -// .build(); -// return response; -// } -//} From 6a29eab8209128fd479544dd29cb7d7afb768805 Mon Sep 17 00:00:00 2001 From: Chirag Dewan Date: Sun, 28 Jul 2019 16:05:17 +0530 Subject: [PATCH 026/140] 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 c73e2be8a6..fef60d9e7c 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 class EmployeeBuilderUnitTest { 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 class EmployeeBuilderUnitTest { 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 class EmployeeBuilderUnitTest { 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 class EmployeeBuilderUnitTest { 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 class EmployeeBuilderUnitTest { 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 class EmployeeBuilderUnitTest { 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 8a664d7689802641cd553e30c949be80778aa170 Mon Sep 17 00:00:00 2001 From: binary-joe Date: Tue, 16 Jul 2019 21:16:37 +0200 Subject: [PATCH 027/140] BAEL-3006 WebClient filters --- spring-5-reactive/pom.xml | 8 + .../client/filter/WebClientFilters.java | 57 +++++++ .../filter/FilteredWebClientUnitTest.java | 145 ++++++++++++++++++ 3 files changed, 210 insertions(+) create mode 100644 spring-5-reactive/src/main/java/com/baeldung/debugging/client/filter/WebClientFilters.java create mode 100644 spring-5-reactive/src/test/java/com/baeldung/debugging/client/filter/FilteredWebClientUnitTest.java diff --git a/spring-5-reactive/pom.xml b/spring-5-reactive/pom.xml index 8d5324a673..4932ac79e4 100644 --- a/spring-5-reactive/pom.xml +++ b/spring-5-reactive/pom.xml @@ -120,6 +120,13 @@ ${project-reactor-test} test + + + com.github.tomakehurst + wiremock-jre8 + ${wiremock.version} + test + @@ -165,6 +172,7 @@ 1.0 4.1 3.2.3.RELEASE + 2.24.0 diff --git a/spring-5-reactive/src/main/java/com/baeldung/debugging/client/filter/WebClientFilters.java b/spring-5-reactive/src/main/java/com/baeldung/debugging/client/filter/WebClientFilters.java new file mode 100644 index 0000000000..3aa757c815 --- /dev/null +++ b/spring-5-reactive/src/main/java/com/baeldung/debugging/client/filter/WebClientFilters.java @@ -0,0 +1,57 @@ +package com.baeldung.debugging.client.filter; + +import java.io.PrintStream; +import java.net.URI; +import java.util.concurrent.atomic.AtomicInteger; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.HttpMethod; +import org.springframework.web.reactive.function.client.ClientRequest; +import org.springframework.web.reactive.function.client.ExchangeFilterFunction; + +public class WebClientFilters { + + private static final Logger LOG = LoggerFactory.getLogger(WebClientFilters.class); + + public static ExchangeFilterFunction demoFilter() { + ExchangeFilterFunction filterFunction = (clientRequest, nextFilter) -> { + LOG.info("WebClient fitler executed"); + return nextFilter.exchange(clientRequest); + }; + return filterFunction; + } + + public static ExchangeFilterFunction countingFilter(AtomicInteger getCounter) { + ExchangeFilterFunction countingFilter = (clientRequest, nextFilter) -> { + HttpMethod httpMethod = clientRequest.method(); + if (httpMethod == HttpMethod.GET) { + getCounter.incrementAndGet(); + } + return nextFilter.exchange(clientRequest); + }; + return countingFilter; + } + + public static ExchangeFilterFunction urlModifyingFilter(String version) { + ExchangeFilterFunction urlModifyingFilter = (clientRequest, nextFilter) -> { + String oldUrl = clientRequest.url() + .toString(); + URI newUrl = URI.create(oldUrl + "/" + version); + ClientRequest filteredRequest = ClientRequest.from(clientRequest) + .url(newUrl) + .build(); + return nextFilter.exchange(filteredRequest); + }; + return urlModifyingFilter; + } + + public static ExchangeFilterFunction loggingFilter(PrintStream printStream) { + ExchangeFilterFunction loggingFilter = (clientRequest, nextFilter) -> { + printStream.print("Sending request " + clientRequest.method() + " " + clientRequest.url()); + return nextFilter.exchange(clientRequest); + }; + return loggingFilter; + } + +} diff --git a/spring-5-reactive/src/test/java/com/baeldung/debugging/client/filter/FilteredWebClientUnitTest.java b/spring-5-reactive/src/test/java/com/baeldung/debugging/client/filter/FilteredWebClientUnitTest.java new file mode 100644 index 0000000000..11cc76029a --- /dev/null +++ b/spring-5-reactive/src/test/java/com/baeldung/debugging/client/filter/FilteredWebClientUnitTest.java @@ -0,0 +1,145 @@ +package com.baeldung.debugging.client.filter; + +import static com.baeldung.debugging.client.filter.WebClientFilters.countingFilter; +import static com.baeldung.debugging.client.filter.WebClientFilters.loggingFilter; +import static com.baeldung.debugging.client.filter.WebClientFilters.urlModifyingFilter; +import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; +import static com.github.tomakehurst.wiremock.client.WireMock.containing; +import static com.github.tomakehurst.wiremock.client.WireMock.get; +import static com.github.tomakehurst.wiremock.client.WireMock.getRequestedFor; +import static com.github.tomakehurst.wiremock.client.WireMock.post; +import static com.github.tomakehurst.wiremock.client.WireMock.stubFor; +import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo; +import static com.github.tomakehurst.wiremock.client.WireMock.verify; +import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.wireMockConfig; +import static org.assertj.core.api.Assertions.assertThat; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.PrintStream; +import java.net.URI; +import java.util.concurrent.atomic.AtomicInteger; + +import org.junit.Rule; +import org.junit.Test; +import org.springframework.web.reactive.function.client.ExchangeFilterFunctions; +import org.springframework.web.reactive.function.client.WebClient; + +import com.github.tomakehurst.wiremock.junit.WireMockRule; + +public class FilteredWebClientUnitTest { + + private static final String PATH = "/filter/test"; + + @Rule + public WireMockRule wireMockRule = new WireMockRule(wireMockConfig().dynamicPort() + .dynamicHttpsPort()); + + @Test + public void whenNoUrlModifyingFilter_thenPathUnchanged() { + stubFor(get(urlPathEqualTo(PATH)).willReturn(aResponse().withStatus(200) + .withBody("done"))); + + WebClient webClient = WebClient.create(); + String actual = sendGetRequest(webClient); + + assertThat(actual).isEqualTo("done"); + verify(getRequestedFor(urlPathEqualTo(PATH))); + } + + @Test + public void whenUrlModifyingFilter_thenPathModified() { + stubFor(get(urlPathEqualTo(PATH + "/1.0")).willReturn(aResponse().withStatus(200) + .withBody("done"))); + + WebClient webClient = WebClient.builder() + .filter(urlModifyingFilter("1.0")) + .build(); + String actual = sendGetRequest(webClient); + + assertThat(actual).isEqualTo("done"); + verify(getRequestedFor(urlPathEqualTo(PATH + "/1.0"))); + } + + @Test + public void givenCountingFilter_whenGet_thenIncreaseCounter() { + stubFor(get(urlPathEqualTo(PATH)).willReturn(aResponse().withStatus(200) + .withBody("done"))); + AtomicInteger counter = new AtomicInteger(10); + + WebClient webClient = WebClient.builder() + .filter(countingFilter(counter)) + .build(); + String actual = sendGetRequest(webClient); + + assertThat(actual).isEqualTo("done"); + assertThat(counter.get()).isEqualTo(11); + } + + @Test + public void givenCountingFilter_whenPost_thenDoNotIncreaseCounter() { + stubFor(post(urlPathEqualTo(PATH)).willReturn(aResponse().withStatus(200) + .withBody("done"))); + AtomicInteger counter = new AtomicInteger(10); + + WebClient webClient = WebClient.builder() + .filter(countingFilter(counter)) + .build(); + String actual = sendPostRequest(webClient); + + assertThat(actual).isEqualTo("done"); + assertThat(counter.get()).isEqualTo(10); + } + + @Test + public void testLoggingFilter() throws IOException { + stubFor(get(urlPathEqualTo(PATH)).willReturn(aResponse().withStatus(200) + .withBody("done"))); + + try (ByteArrayOutputStream baos = new ByteArrayOutputStream(); PrintStream ps = new PrintStream(baos);) { + WebClient webClient = WebClient.builder() + .filter(loggingFilter(ps)) + .build(); + String actual = sendGetRequest(webClient); + + assertThat(actual).isEqualTo("done"); + assertThat(baos.toString()).isEqualTo("Sending request GET " + getUrl()); + } + } + + @Test + public void testBasicAuthFilter() { + stubFor(get(urlPathEqualTo(PATH)).willReturn(aResponse().withStatus(200) + .withBody("authorized"))); + + WebClient webClient = WebClient.builder() + .filter(ExchangeFilterFunctions.basicAuthentication("user", "password")) + .build(); + String actual = sendGetRequest(webClient); + + assertThat(actual).isEqualTo("authorized"); + verify(getRequestedFor(urlPathEqualTo(PATH)).withHeader("Authorization", containing("Basic"))); + } + + private String sendGetRequest(WebClient webClient) { + return webClient.get() + .uri(getUrl()) + .retrieve() + .bodyToMono(String.class) + .block(); + } + + private String sendPostRequest(WebClient webClient) { + return webClient.post() + .uri(URI.create(getUrl())) + .retrieve() + .bodyToMono(String.class) + .block(); + } + + private String getUrl() { + return "http://localhost:" + wireMockRule.port() + PATH; + + } + +} From d187a05fbe752e190df12045e085feb2632e5057 Mon Sep 17 00:00:00 2001 From: pazis Date: Sun, 28 Jul 2019 19:19:43 +0000 Subject: [PATCH 028/140] MyHttpServlet --- .../com/baeldung/servlets/MyHttpServlet.java | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 javax-servlets/src/main/java/com/baeldung/servlets/MyHttpServlet.java diff --git a/javax-servlets/src/main/java/com/baeldung/servlets/MyHttpServlet.java b/javax-servlets/src/main/java/com/baeldung/servlets/MyHttpServlet.java new file mode 100644 index 0000000000..b4d80db0ab --- /dev/null +++ b/javax-servlets/src/main/java/com/baeldung/servlets/MyHttpServlet.java @@ -0,0 +1,57 @@ +package com.baeldung.servlets; + +import java.io.IOException; +import java.io.PrintWriter; + +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +@WebServlet(name = "MyHttpServlet", urlPatterns = "/servlet-mapping") +public class MyHttpServlet extends HttpServlet { + + public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { + PrintWriter writer = response.getWriter(); + writer.println(request.getParameter("function")); + if ("getContextPath".equals(request.getParameter("function"))) { + writer.println(request.getContextPath()); + } else if ("getLocalAddr".equals(request.getParameter("function"))) { + writer.println(request.getLocalAddr()); + } else if ("getLocalName".equals(request.getParameter("function"))) { + writer.println(request.getLocalName()); + } else if ("getLocalAPort".equals(request.getParameter("function"))) { + writer.println(request.getLocalPort()); + } else if ("getMethod".equals(request.getParameter("function"))) { + writer.println(request.getMethod()); + } else if ("getParameterNames".equals(request.getParameter("function"))) { + writer.println(request.getParameterNames()); + } else if ("getPathInfo".equals(request.getParameter("function"))) { + writer.println(request.getPathInfo()); + } else if ("getProtocol".equals(request.getParameter("function"))) { + writer.println(request.getProtocol()); + } else if ("getQueryString".equals(request.getParameter("function"))) { + writer.println(request.getQueryString()); + } else if ("getRequestedSessionId".equals(request.getParameter("function"))) { + writer.println(request.getRequestedSessionId()); + } else if ("getRequestURI".equals(request.getParameter("function"))) { + writer.println(request.getRequestURI()); + } else if ("getRequestURL".equals(request.getParameter("function"))) { + writer.println(request.getRequestURL()); + } else if ("getScheme".equals(request.getParameter("function"))) { + writer.println(request.getScheme()); + } else if ("getServerName".equals(request.getParameter("function"))) { + writer.println(request.getServerName()); + } else if ("getServerPort".equals(request.getParameter("function"))) { + writer.println(request.getServerPort()); + } else if ("getServletPath".equals(request.getParameter("function"))) { + writer.println(request.getServletPath()); + } else { + writer.println("INVALID FUNCTION"); + } + writer.flush(); + } + +} + + From f71224ed2cda1ab093764347ca636c412b111ff8 Mon Sep 17 00:00:00 2001 From: Chirag Dewan Date: Mon, 29 Jul 2019 21:15:24 +0530 Subject: [PATCH 029/140] 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 fef60d9e7c..4427d3cb69 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 class EmployeeBuilderUnitTest { .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 030/140] 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 d0af18fe3d..f49d0f906b 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 bafd1f8a63..8066b10f9b 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 8e3f2ae495116db8bfaf35f035351fe2c4d73218 Mon Sep 17 00:00:00 2001 From: Krzysztof Majewski Date: Tue, 30 Jul 2019 08:35:24 +0200 Subject: [PATCH 031/140] update --- persistence-modules/java-jpa-2/pom.xml | 96 +++++++++---------- .../java-jpa-2/src/main/resources/logback.xml | 13 --- 2 files changed, 48 insertions(+), 61 deletions(-) delete mode 100644 persistence-modules/java-jpa-2/src/main/resources/logback.xml diff --git a/persistence-modules/java-jpa-2/pom.xml b/persistence-modules/java-jpa-2/pom.xml index c8c9a24599..12586db1b7 100644 --- a/persistence-modules/java-jpa-2/pom.xml +++ b/persistence-modules/java-jpa-2/pom.xml @@ -19,11 +19,11 @@ hibernate-core ${hibernate.version} - - org.hibernate - hibernate-jpamodelgen - ${hibernate.version} - + + org.hibernate + hibernate-jpamodelgen + ${hibernate.version} + com.h2database h2 @@ -52,8 +52,8 @@ - - + + org.apache.maven.plugins maven-compiler-plugin @@ -62,48 +62,48 @@ -proc:none - - org.bsc.maven - maven-processor-plugin - 3.3.3 - - - process - - process - - generate-sources - - target/metamodel - - org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor - - - - - + + 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 - - - - - - - + + org.codehaus.mojo + build-helper-maven-plugin + 3.0.0 + + + add-source + generate-sources + + add-source + + + + target/metamodel + + + + + + + 5.4.0.Final diff --git a/persistence-modules/java-jpa-2/src/main/resources/logback.xml b/persistence-modules/java-jpa-2/src/main/resources/logback.xml deleted file mode 100644 index 7d900d8ea8..0000000000 --- a/persistence-modules/java-jpa-2/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 2aa2f078ddb720ebf555f84cdd98bc237a363012 Mon Sep 17 00:00:00 2001 From: "sreekanth.nair" Date: Tue, 30 Jul 2019 12:55:29 +0530 Subject: [PATCH 032/140] [BAEL-3121] Added source for finding number of lines in a file --- .../main/java/com/baeldung/files/Main.java | 24 ++++ .../baeldung/files/NumberOfLineFinder.java | 112 ++++++++++++++++++ .../file/NumberOfLineFinderUnitTest.java | 60 ++++++++++ 3 files changed, 196 insertions(+) create mode 100644 core-java-modules/core-java-io/src/main/java/com/baeldung/files/Main.java create mode 100644 core-java-modules/core-java-io/src/main/java/com/baeldung/files/NumberOfLineFinder.java create mode 100644 core-java-modules/core-java-io/src/test/java/com/baeldung/file/NumberOfLineFinderUnitTest.java diff --git a/core-java-modules/core-java-io/src/main/java/com/baeldung/files/Main.java b/core-java-modules/core-java-io/src/main/java/com/baeldung/files/Main.java new file mode 100644 index 0000000000..c3bcd048a4 --- /dev/null +++ b/core-java-modules/core-java-io/src/main/java/com/baeldung/files/Main.java @@ -0,0 +1,24 @@ +package com.baeldung.files; + +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; + +public class Main { + + private static final String INPUT_FILE_NAME = "src/main/resources/input.txt"; + + public static void main(String... args) throws Exception { + System.out.printf("Total Number of Lines Using BufferedReader: %s%n", getTotalNumberOfLinesUsingBufferedReader(INPUT_FILE_NAME)); + 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 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-io/src/main/java/com/baeldung/files/NumberOfLineFinder.java new file mode 100644 index 0000000000..076825d76c --- /dev/null +++ b/core-java-modules/core-java-io/src/main/java/com/baeldung/files/NumberOfLineFinder.java @@ -0,0 +1,112 @@ +package com.baeldung.files; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.io.LineNumberReader; +import java.nio.ByteBuffer; +import java.nio.channels.FileChannel; +import java.nio.channels.FileChannel.MapMode; +import java.nio.charset.Charset; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.nio.file.StandardOpenOption; +import java.util.List; +import java.util.Scanner; +import java.util.stream.Stream; + +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.LineIterator; + +public class NumberOfLineFinder { + + public static int getTotalNumberOfLinesUsingBufferedReader(String fileName) { + int lines = 0; + try (BufferedReader reader = new BufferedReader(new FileReader(fileName))) { + while (reader.readLine() != null) { + lines++; + } + } catch (IOException ioe) { + ioe.printStackTrace(); + } + return lines; + } + + public static int getTotalNumberOfLinesUsingLineNumberReader(String fileName) { + int lines = 0; + try (LineNumberReader reader = new LineNumberReader(new FileReader(fileName))) { + reader.skip(Integer.MAX_VALUE); + lines = reader.getLineNumber() + 1; + } catch (IOException ioe) { + ioe.printStackTrace(); + } + return lines; + } + + public static int getTotalNumberOfLinesUsingScanner(String fileName) { + int lines = 0; + try (Scanner scanner = new Scanner(new FileReader(fileName))) { + while (scanner.hasNextLine()) { + scanner.nextLine(); + lines++; + } + } catch (IOException ioe) { + ioe.printStackTrace(); + } + return lines; + } + + public static int getTotalNumberOfLinesUsingNIOFiles(String fileName) { + int lines = 0; + try (Stream fileStream = Files.lines(Paths.get(fileName))) { + lines = (int) fileStream.count(); + } 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)) { + ByteBuffer byteBuffer = channel.map(MapMode.READ_ONLY, 0, channel.size()); + while (byteBuffer.hasRemaining()) { + byte currentChar = byteBuffer.get(); + if (currentChar == '\n') { + lines++; + } + } + } catch (IOException ioe) { + ioe.printStackTrace(); + } + return lines; + } + + public static int getTotalNumberOfLinesUsingApacheCommonsIO(String fileName) { + int lines = 0; + try { + LineIterator lineIterator = FileUtils.lineIterator(new File(fileName)); + while (lineIterator.hasNext()) { + lineIterator.nextLine(); + lines++; + } + } catch (IOException ioe) { + ioe.printStackTrace(); + } + return lines; + } + + public static int getTotalNumberOfLinesUsingGoogleGuava(String fileName) { + int lines = 0; + try { + List lineItems = com.google.common.io.Files.readLines(Paths.get(fileName) + .toFile(), Charset.defaultCharset()); + lines = lineItems.size(); + } catch (IOException ioe) { + ioe.printStackTrace(); + } + return lines; + } + +} diff --git a/core-java-modules/core-java-io/src/test/java/com/baeldung/file/NumberOfLineFinderUnitTest.java b/core-java-modules/core-java-io/src/test/java/com/baeldung/file/NumberOfLineFinderUnitTest.java new file mode 100644 index 0000000000..6f0427ebd2 --- /dev/null +++ b/core-java-modules/core-java-io/src/test/java/com/baeldung/file/NumberOfLineFinderUnitTest.java @@ -0,0 +1,60 @@ +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 org.junit.Assert.assertEquals; + +import org.junit.Test; + +public class NumberOfLineFinderUnitTest { + private static final String INPUT_FILE_NAME = "src/main/resources/input.txt"; + private static final int ACTUAL_LINE_COUNT = 45; + + @Test + public void whenUsingBufferedReader_thenReturnTotalNumberOfLines() { + int lines = getTotalNumberOfLinesUsingBufferedReader(INPUT_FILE_NAME); + assertEquals(ACTUAL_LINE_COUNT, lines); + } + + @Test + public void whenUsingLineNumberReader_thenReturnTotalNumberOfLines() { + int lines = getTotalNumberOfLinesUsingLineNumberReader(INPUT_FILE_NAME); + assertEquals(ACTUAL_LINE_COUNT, lines); + } + + @Test + public void whenUsingScanner_thenReturnTotalNumberOfLines() { + int lines = getTotalNumberOfLinesUsingScanner(INPUT_FILE_NAME); + assertEquals(ACTUAL_LINE_COUNT, lines); + } + + @Test + public void whenUsingNIOFiles_thenReturnTotalNumberOfLines() { + int lines = getTotalNumberOfLinesUsingNIOFiles(INPUT_FILE_NAME); + assertEquals(ACTUAL_LINE_COUNT, lines); + } + + @Test + public void whenUsingNIOFileChannel_thenReturnTotalNumberOfLines() { + int lines = getTotalNumberOfLinesUsingNIOFileChannel(INPUT_FILE_NAME); + assertEquals(ACTUAL_LINE_COUNT, lines); + } + + @Test + public void whenUsingApacheCommonsIO_thenReturnTotalNumberOfLines() { + int lines = getTotalNumberOfLinesUsingApacheCommonsIO(INPUT_FILE_NAME); + assertEquals(ACTUAL_LINE_COUNT, lines); + } + + @Test + public void whenUsingGoogleGuava_thenReturnTotalNumberOfLines() { + int lines = getTotalNumberOfLinesUsingGoogleGuava(INPUT_FILE_NAME); + assertEquals(ACTUAL_LINE_COUNT, lines); + } + +} From 970889ad14d80da42f3b7eff5c23f48fb17f3141 Mon Sep 17 00:00:00 2001 From: Eugen Paraschiv Date: Wed, 31 Jul 2019 12:04:14 +0300 Subject: [PATCH 033/140] minor cleanup work --- pom.xml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index 5b5058763d..f66250a8fd 100644 --- a/pom.xml +++ b/pom.xml @@ -10,10 +10,6 @@ parent-modules pom - - quarkus - - @@ -1589,4 +1585,5 @@ 1.16.12 1.4.197 + From b04073514dd57a1a2ed14e86598fae9dc02af252 Mon Sep 17 00:00:00 2001 From: isaolmez Date: Wed, 31 Jul 2019 12:09:36 +0300 Subject: [PATCH 034/140] 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 a1db0f0262..2d874791d7 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 704f68c8da890a1aa31c1b15b8d87c7539ec6ac6 Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Wed, 31 Jul 2019 20:04:40 +0300 Subject: [PATCH 035/140] Delete SpringContextTest.java --- .../java/org/baeldung/SpringContextTest.java | 18 ------------------ 1 file changed, 18 deletions(-) delete mode 100644 spring-userservice/src/test/java/org/baeldung/SpringContextTest.java diff --git a/spring-userservice/src/test/java/org/baeldung/SpringContextTest.java b/spring-userservice/src/test/java/org/baeldung/SpringContextTest.java deleted file mode 100644 index 2853a955fa..0000000000 --- a/spring-userservice/src/test/java/org/baeldung/SpringContextTest.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.baeldung; - -import org.baeldung.custom.config.MvcConfig; -import org.baeldung.custom.config.PersistenceDerbyJPAConfig; -import org.baeldung.custom.config.SecSecurityConfig; -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 = { MvcConfig.class, PersistenceDerbyJPAConfig.class, SecSecurityConfig.class }) -public class SpringContextTest { - - @Test - public void whenSpringContextIsBootstrapped_thenNoExceptions() { - } -} From 4b6871b1fc6b6a1b2ffb8c4c3b68576e3181b713 Mon Sep 17 00:00:00 2001 From: vatsalgosar Date: Fri, 2 Aug 2019 00:12:03 +0530 Subject: [PATCH 036/140] BAEL-3118 (#7458) * BAEL-3118 - Increment Decrement Unary Operators * BAEL-3118 - Added UnitTests for Increment Decrement Unary Operators * BAEL-3118 --- ...crementDecrementUnaryOperatorUnitTest.java | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create 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/test/java/com/baeldung/incrementdecrementunaryoperator/IncrementDecrementUnaryOperatorUnitTest.java b/core-java-modules/core-java-lang-syntax/src/test/java/com/baeldung/incrementdecrementunaryoperator/IncrementDecrementUnaryOperatorUnitTest.java new file mode 100644 index 0000000000..ee17c1e8ea --- /dev/null +++ b/core-java-modules/core-java-lang-syntax/src/test/java/com/baeldung/incrementdecrementunaryoperator/IncrementDecrementUnaryOperatorUnitTest.java @@ -0,0 +1,63 @@ +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 b91a78aa0d4674342b147370dcaffa7d14b4cf52 Mon Sep 17 00:00:00 2001 From: dupirefr Date: Fri, 2 Aug 2019 06:32:25 +0200 Subject: [PATCH 037/140] [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 f71577b707..b5c31c4487 100644 --- a/java-math/pom.xml +++ b/java-math/pom.xml @@ -17,6 +17,26 @@ commons-math3 ${commons-math3.version} + + org.ejml + ejml-all + ${ejml.version} + + + org.nd4j + nd4j-native + ${nd4j.version} + + + org.la4j + la4j + ${la4j.version} + + + colt + colt + ${colt.version} + com.google.guava guava @@ -44,6 +64,17 @@ combinatoricslib3 ${combinatoricslib3.version} + + + org.openjdk.jmh + jmh-core + ${jmh.version} + + + org.openjdk.jmh + jmh-generator-annprocess + ${jmh.version} + @@ -64,6 +95,11 @@ 1.11 27.0.1-jre 3.3.0 + 0.38 + 1.0.0-beta4 + 1.2.0 + 0.6.0 + 1.19 \ No newline at end of file diff --git a/libraries-2/src/test/java/com/baeldung/matrices/MatrixMultiplicationBenchmarking.java b/java-math/src/test/java/com/baeldung/matrices/MatrixMultiplicationBenchmarking.java similarity index 100% rename from libraries-2/src/test/java/com/baeldung/matrices/MatrixMultiplicationBenchmarking.java rename to java-math/src/test/java/com/baeldung/matrices/MatrixMultiplicationBenchmarking.java diff --git a/libraries-2/src/test/java/com/baeldung/matrices/apache/RealMatrixUnitTest.java b/java-math/src/test/java/com/baeldung/matrices/apache/RealMatrixUnitTest.java similarity index 100% rename from libraries-2/src/test/java/com/baeldung/matrices/apache/RealMatrixUnitTest.java rename to java-math/src/test/java/com/baeldung/matrices/apache/RealMatrixUnitTest.java diff --git a/libraries-2/src/test/java/com/baeldung/matrices/colt/DoubleMatrix2DUnitTest.java b/java-math/src/test/java/com/baeldung/matrices/colt/DoubleMatrix2DUnitTest.java similarity index 100% rename from libraries-2/src/test/java/com/baeldung/matrices/colt/DoubleMatrix2DUnitTest.java rename to java-math/src/test/java/com/baeldung/matrices/colt/DoubleMatrix2DUnitTest.java diff --git a/libraries-2/src/test/java/com/baeldung/matrices/ejml/SimpleMatrixUnitTest.java b/java-math/src/test/java/com/baeldung/matrices/ejml/SimpleMatrixUnitTest.java similarity index 100% rename from libraries-2/src/test/java/com/baeldung/matrices/ejml/SimpleMatrixUnitTest.java rename to java-math/src/test/java/com/baeldung/matrices/ejml/SimpleMatrixUnitTest.java diff --git a/libraries-2/src/test/java/com/baeldung/matrices/homemade/HomemadeMatrixUnitTest.java b/java-math/src/test/java/com/baeldung/matrices/homemade/HomemadeMatrixUnitTest.java similarity index 100% rename from libraries-2/src/test/java/com/baeldung/matrices/homemade/HomemadeMatrixUnitTest.java rename to java-math/src/test/java/com/baeldung/matrices/homemade/HomemadeMatrixUnitTest.java diff --git a/libraries-2/src/test/java/com/baeldung/matrices/la4j/Basic2DMatrixUnitTest.java b/java-math/src/test/java/com/baeldung/matrices/la4j/Basic2DMatrixUnitTest.java similarity index 100% rename from libraries-2/src/test/java/com/baeldung/matrices/la4j/Basic2DMatrixUnitTest.java rename to java-math/src/test/java/com/baeldung/matrices/la4j/Basic2DMatrixUnitTest.java diff --git a/libraries-2/src/test/java/com/baeldung/matrices/nd4j/INDArrayUnitTest.java b/java-math/src/test/java/com/baeldung/matrices/nd4j/INDArrayUnitTest.java similarity index 100% rename from libraries-2/src/test/java/com/baeldung/matrices/nd4j/INDArrayUnitTest.java rename to java-math/src/test/java/com/baeldung/matrices/nd4j/INDArrayUnitTest.java diff --git a/libraries-2/pom.xml b/libraries-2/pom.xml index ff73888b69..83adf1e199 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 ec46f6de26060e3e92eaed8a10f71cbb7a84935c Mon Sep 17 00:00:00 2001 From: Amit Pandey Date: Fri, 2 Aug 2019 10:14:32 +0530 Subject: [PATCH 038/140] [BAEL-12899] - Splitted the java-strings module (#7410) --- java-strings-2/README.MD | 15 +++ java-strings-2/pom.xml | 52 ++++++++- .../java/com/baeldung/string/MatchWords.java | 0 .../java/com/baeldung/string/Pangram.java | 0 .../string/padding/StringPaddingUtil.java | 0 .../password/RandomPasswordGenerator.java | 0 .../RemoveLeadingAndTrailingZeroes.java | 0 .../RemoveDuplicateFromString.java | 0 .../baeldung/ConvertStringToListUnitTest.java | 0 .../baeldung/StringConcatenationUnitTest.java | 0 .../FileToBase64StringConversionUnitTest.java | 0 .../ApacheCommonsEncodeDecodeUnitTest.java | 0 .../base64/Java8EncodeDecodeUnitTest.java | 0 .../base64/StringToByteArrayUnitTest.java | 0 .../baeldung/string/MatchWordsUnitTest.java | 0 .../com/baeldung/string/PangramUnitTest.java | 0 .../RemovingEmojiFromStringUnitTest.java | 0 .../StringFromPrimitiveArrayUnitTest.java | 0 .../DateToStringFormatterUnitTest.java | 0 .../StringFormatterExampleUnitTest.java | 0 .../string/interview/LocaleUnitTest.java | 0 .../interview/StringAnagramUnitTest.java | 0 .../interview/StringChangeCaseUnitTest.java | 0 .../StringCountOccurrencesUnitTest.java | 0 .../interview/StringFormatUnitTest.java | 0 .../interview/StringInternUnitTest.java | 0 .../interview/StringJoinerUnitTest.java | 0 .../interview/StringPalindromeUnitTest.java | 0 .../interview/StringReverseUnitTest.java | 0 .../string/interview/StringSplitUnitTest.java | 0 .../interview/StringToByteArrayUnitTest.java | 0 .../interview/StringToCharArrayUnitTest.java | 0 .../interview/StringToIntegerUnitTest.java | 0 .../padding/StringPaddingUtilUnitTest.java | 0 .../password/StringPasswordUnitTest.java | 0 ...emoveLeadingAndTrailingZeroesUnitTest.java | 0 .../RemoveDuplicateFromStringUnitTest.java | 0 .../src/test/resources/test_image.jpg | Bin java-strings-ops/README.md | 22 ++++ java-strings-ops/pom.xml | 99 ++++++++++++++++++ .../baeldung/datetime/UseLocalDateTime.java | 0 .../string/AppendCharAtPositionX.java | 0 .../java/com/baeldung/string/Palindrome.java | 0 .../com/baeldung/string/StringHelper.java | 0 .../baeldung/string/tostring/Customer.java | 0 .../tostring/CustomerArrayToString.java | 0 .../CustomerComplexObjectToString.java | 0 .../tostring/CustomerPrimitiveToString.java | 0 .../tostring/CustomerReflectionToString.java | 0 .../CustomerWrapperCollectionToString.java | 0 .../com/baeldung/string/tostring/Order.java | 0 .../src/main/resources/logback.xml | 13 +++ .../com/baeldung/CharToStringUnitTest.java | 0 .../com/baeldung/java/conversion/README.md | 0 .../conversion/StringConversionUnitTest.java | 0 .../CountCharsExampleUnitTest.java | 0 .../string/AppendCharAtPositionXUnitTest.java | 0 .../string/CharSequenceVsStringUnitTest.java | 0 .../baeldung/string/PalindromeUnitTest.java | 0 .../com/baeldung/string/SplitUnitTest.java | 0 .../string/StringBufferStringBuilder.java | 0 .../string/StringComparisonUnitTest.java | 0 .../baeldung/string/StringHelperUnitTest.java | 0 .../baeldung/string/SubstringUnitTest.java | 0 .../conversion/ByteArrayToStringUnitTest.java | 0 .../conversion/StringToByteArrayUnitTest.java | 0 .../CustomerArrayToStringUnitTest.java | 0 ...CustomerComplexObjectToStringUnitTest.java | 0 .../CustomerPrimitiveToStringUnitTest.java | 0 ...omerWrapperCollectionToStringUnitTest.java | 0 .../CoreJavaIsNumericUnitTest.java | 0 .../stringpool/StringPoolUnitTest.java | 0 .../src/test/resources/.gitignore | 13 +++ java-strings/README.md | 35 +------ java-strings/pom.xml | 27 ----- pom.xml | 2 + 76 files changed, 212 insertions(+), 66 deletions(-) rename {java-strings => java-strings-2}/src/main/java/com/baeldung/string/MatchWords.java (100%) rename {java-strings => java-strings-2}/src/main/java/com/baeldung/string/Pangram.java (100%) rename {java-strings => java-strings-2}/src/main/java/com/baeldung/string/padding/StringPaddingUtil.java (100%) rename {java-strings => java-strings-2}/src/main/java/com/baeldung/string/password/RandomPasswordGenerator.java (100%) rename {java-strings => java-strings-2}/src/main/java/com/baeldung/string/removeleadingtrailingchar/RemoveLeadingAndTrailingZeroes.java (100%) rename {java-strings => java-strings-2}/src/main/java/com/baeldung/stringduplicates/RemoveDuplicateFromString.java (100%) rename {java-strings => java-strings-2}/src/test/java/com/baeldung/ConvertStringToListUnitTest.java (100%) rename {java-strings => java-strings-2}/src/test/java/com/baeldung/StringConcatenationUnitTest.java (100%) rename {java-strings => java-strings-2}/src/test/java/com/baeldung/fileToBase64StringConversion/FileToBase64StringConversionUnitTest.java (100%) rename {java-strings => java-strings-2}/src/test/java/com/baeldung/java8/base64/ApacheCommonsEncodeDecodeUnitTest.java (100%) rename {java-strings => java-strings-2}/src/test/java/com/baeldung/java8/base64/Java8EncodeDecodeUnitTest.java (100%) rename {java-strings => java-strings-2}/src/test/java/com/baeldung/java8/base64/StringToByteArrayUnitTest.java (100%) rename {java-strings => java-strings-2}/src/test/java/com/baeldung/string/MatchWordsUnitTest.java (100%) rename {java-strings => java-strings-2}/src/test/java/com/baeldung/string/PangramUnitTest.java (100%) rename {java-strings => java-strings-2}/src/test/java/com/baeldung/string/RemovingEmojiFromStringUnitTest.java (100%) rename {java-strings => java-strings-2}/src/test/java/com/baeldung/string/StringFromPrimitiveArrayUnitTest.java (100%) rename {java-strings => java-strings-2}/src/test/java/com/baeldung/string/formatter/DateToStringFormatterUnitTest.java (100%) rename {java-strings => java-strings-2}/src/test/java/com/baeldung/string/formatter/StringFormatterExampleUnitTest.java (100%) rename {java-strings => java-strings-2}/src/test/java/com/baeldung/string/interview/LocaleUnitTest.java (100%) rename {java-strings => java-strings-2}/src/test/java/com/baeldung/string/interview/StringAnagramUnitTest.java (100%) rename {java-strings => java-strings-2}/src/test/java/com/baeldung/string/interview/StringChangeCaseUnitTest.java (100%) rename {java-strings => java-strings-2}/src/test/java/com/baeldung/string/interview/StringCountOccurrencesUnitTest.java (100%) rename {java-strings => java-strings-2}/src/test/java/com/baeldung/string/interview/StringFormatUnitTest.java (100%) rename {java-strings => java-strings-2}/src/test/java/com/baeldung/string/interview/StringInternUnitTest.java (100%) rename {java-strings => java-strings-2}/src/test/java/com/baeldung/string/interview/StringJoinerUnitTest.java (100%) rename {java-strings => java-strings-2}/src/test/java/com/baeldung/string/interview/StringPalindromeUnitTest.java (100%) rename {java-strings => java-strings-2}/src/test/java/com/baeldung/string/interview/StringReverseUnitTest.java (100%) rename {java-strings => java-strings-2}/src/test/java/com/baeldung/string/interview/StringSplitUnitTest.java (100%) rename {java-strings => java-strings-2}/src/test/java/com/baeldung/string/interview/StringToByteArrayUnitTest.java (100%) rename {java-strings => java-strings-2}/src/test/java/com/baeldung/string/interview/StringToCharArrayUnitTest.java (100%) rename {java-strings => java-strings-2}/src/test/java/com/baeldung/string/interview/StringToIntegerUnitTest.java (100%) rename {java-strings => java-strings-2}/src/test/java/com/baeldung/string/padding/StringPaddingUtilUnitTest.java (100%) rename {java-strings => java-strings-2}/src/test/java/com/baeldung/string/password/StringPasswordUnitTest.java (100%) rename {java-strings => java-strings-2}/src/test/java/com/baeldung/string/removeleadingtrailingchar/RemoveLeadingAndTrailingZeroesUnitTest.java (100%) rename {java-strings => java-strings-2}/src/test/java/com/baeldung/stringduplicates/RemoveDuplicateFromStringUnitTest.java (100%) rename {java-strings => java-strings-2}/src/test/resources/test_image.jpg (100%) create mode 100644 java-strings-ops/README.md create mode 100644 java-strings-ops/pom.xml rename {java-strings => java-strings-ops}/src/main/java/com/baeldung/datetime/UseLocalDateTime.java (100%) rename {java-strings => java-strings-ops}/src/main/java/com/baeldung/string/AppendCharAtPositionX.java (100%) rename {java-strings => java-strings-ops}/src/main/java/com/baeldung/string/Palindrome.java (100%) rename {java-strings => java-strings-ops}/src/main/java/com/baeldung/string/StringHelper.java (100%) rename {java-strings => java-strings-ops}/src/main/java/com/baeldung/string/tostring/Customer.java (100%) rename {java-strings => java-strings-ops}/src/main/java/com/baeldung/string/tostring/CustomerArrayToString.java (100%) rename {java-strings => java-strings-ops}/src/main/java/com/baeldung/string/tostring/CustomerComplexObjectToString.java (100%) rename {java-strings => java-strings-ops}/src/main/java/com/baeldung/string/tostring/CustomerPrimitiveToString.java (100%) rename {java-strings => java-strings-ops}/src/main/java/com/baeldung/string/tostring/CustomerReflectionToString.java (100%) rename {java-strings => java-strings-ops}/src/main/java/com/baeldung/string/tostring/CustomerWrapperCollectionToString.java (100%) rename {java-strings => java-strings-ops}/src/main/java/com/baeldung/string/tostring/Order.java (100%) create mode 100644 java-strings-ops/src/main/resources/logback.xml rename {java-strings => java-strings-ops}/src/test/java/com/baeldung/CharToStringUnitTest.java (100%) rename {java-strings => java-strings-ops}/src/test/java/com/baeldung/java/conversion/README.md (100%) rename {java-strings => java-strings-ops}/src/test/java/com/baeldung/java/conversion/StringConversionUnitTest.java (100%) rename {java-strings => java-strings-ops}/src/test/java/com/baeldung/java/countingChars/CountCharsExampleUnitTest.java (100%) rename {java-strings => java-strings-ops}/src/test/java/com/baeldung/string/AppendCharAtPositionXUnitTest.java (100%) rename {java-strings => java-strings-ops}/src/test/java/com/baeldung/string/CharSequenceVsStringUnitTest.java (100%) rename {java-strings => java-strings-ops}/src/test/java/com/baeldung/string/PalindromeUnitTest.java (100%) rename {java-strings => java-strings-ops}/src/test/java/com/baeldung/string/SplitUnitTest.java (100%) rename {java-strings/src/main => java-strings-ops/src/test}/java/com/baeldung/string/StringBufferStringBuilder.java (100%) rename {java-strings => java-strings-ops}/src/test/java/com/baeldung/string/StringComparisonUnitTest.java (100%) rename {java-strings => java-strings-ops}/src/test/java/com/baeldung/string/StringHelperUnitTest.java (100%) rename {java-strings => java-strings-ops}/src/test/java/com/baeldung/string/SubstringUnitTest.java (100%) rename {java-strings => java-strings-ops}/src/test/java/com/baeldung/string/conversion/ByteArrayToStringUnitTest.java (100%) rename {java-strings => java-strings-ops}/src/test/java/com/baeldung/string/conversion/StringToByteArrayUnitTest.java (100%) rename {java-strings => java-strings-ops}/src/test/java/com/baeldung/string/tostring/CustomerArrayToStringUnitTest.java (100%) rename {java-strings => java-strings-ops}/src/test/java/com/baeldung/string/tostring/CustomerComplexObjectToStringUnitTest.java (100%) rename {java-strings => java-strings-ops}/src/test/java/com/baeldung/string/tostring/CustomerPrimitiveToStringUnitTest.java (100%) rename {java-strings => java-strings-ops}/src/test/java/com/baeldung/string/tostring/CustomerWrapperCollectionToStringUnitTest.java (100%) rename {java-strings => java-strings-ops}/src/test/java/com/baeldung/stringisnumeric/CoreJavaIsNumericUnitTest.java (100%) rename {java-strings => java-strings-ops}/src/test/java/com/baeldung/stringpool/StringPoolUnitTest.java (100%) create mode 100644 java-strings-ops/src/test/resources/.gitignore diff --git a/java-strings-2/README.MD b/java-strings-2/README.MD index c6d4f0222a..b4b16fbaef 100644 --- a/java-strings-2/README.MD +++ b/java-strings-2/README.MD @@ -3,5 +3,20 @@ - [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) - [Removing Stopwords from a String in Java](https://www.baeldung.com/java-string-remove-stopwords) +- [Java – Generate Random String](http://www.baeldung.com/java-random-string) +- [Image to Base64 String Conversion](http://www.baeldung.com/java-base64-image-string) +- [Java Base64 Encoding and Decoding](https://www.baeldung.com/java-base64-encode-and-decode) +- [Generate a Secure Random Password in Java](https://www.baeldung.com/java-generate-secure-password) +- [Removing Repeated Characters from a String](https://www.baeldung.com/java-remove-repeated-char) +- [Join Array of Primitives with Separator in Java](https://www.baeldung.com/java-join-primitive-array) +- [Pad a String with Zeros or Spaces in Java](https://www.baeldung.com/java-pad-string) +- [Remove Emojis from a Java String](https://www.baeldung.com/java-string-remove-emojis) +- [Convert a Comma Separated String to a List in Java](https://www.baeldung.com/java-string-with-separator-to-list) +- [Guide to java.util.Formatter](http://www.baeldung.com/java-string-formatter) +- [Remove Leading and Trailing Characters from a String](https://www.baeldung.com/java-remove-trailing-characters) +- [Concatenating Strings In Java](https://www.baeldung.com/java-strings-concatenation) +- [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) - [String Initialization in Java](https://www.baeldung.com/java-string-initialization) diff --git a/java-strings-2/pom.xml b/java-strings-2/pom.xml index 7342953d15..be47b1ec89 100755 --- a/java-strings-2/pom.xml +++ b/java-strings-2/pom.xml @@ -40,6 +40,16 @@ commons-lang3 ${commons-lang3.version} + + commons-io + commons-io + ${commons-io.version} + + + commons-codec + commons-codec + ${commons-codec.version} + junit junit @@ -52,32 +62,54 @@ ${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 - 2.0.0.Final + ${validation-api.version} org.hibernate.validator hibernate-validator - 6.0.2.Final + ${hibernate-validator.version} javax.el javax.el-api - 3.0.0 + ${javax.el-api.version} org.glassfish.web javax.el - 2.2.6 + ${javax.el.version} - @@ -105,9 +137,19 @@ 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/src/main/java/com/baeldung/string/MatchWords.java b/java-strings-2/src/main/java/com/baeldung/string/MatchWords.java similarity index 100% rename from java-strings/src/main/java/com/baeldung/string/MatchWords.java rename to java-strings-2/src/main/java/com/baeldung/string/MatchWords.java diff --git a/java-strings/src/main/java/com/baeldung/string/Pangram.java b/java-strings-2/src/main/java/com/baeldung/string/Pangram.java similarity index 100% rename from java-strings/src/main/java/com/baeldung/string/Pangram.java rename to java-strings-2/src/main/java/com/baeldung/string/Pangram.java diff --git a/java-strings/src/main/java/com/baeldung/string/padding/StringPaddingUtil.java b/java-strings-2/src/main/java/com/baeldung/string/padding/StringPaddingUtil.java similarity index 100% rename from java-strings/src/main/java/com/baeldung/string/padding/StringPaddingUtil.java rename to java-strings-2/src/main/java/com/baeldung/string/padding/StringPaddingUtil.java diff --git a/java-strings/src/main/java/com/baeldung/string/password/RandomPasswordGenerator.java b/java-strings-2/src/main/java/com/baeldung/string/password/RandomPasswordGenerator.java similarity index 100% rename from java-strings/src/main/java/com/baeldung/string/password/RandomPasswordGenerator.java rename to java-strings-2/src/main/java/com/baeldung/string/password/RandomPasswordGenerator.java diff --git a/java-strings/src/main/java/com/baeldung/string/removeleadingtrailingchar/RemoveLeadingAndTrailingZeroes.java b/java-strings-2/src/main/java/com/baeldung/string/removeleadingtrailingchar/RemoveLeadingAndTrailingZeroes.java similarity index 100% rename from java-strings/src/main/java/com/baeldung/string/removeleadingtrailingchar/RemoveLeadingAndTrailingZeroes.java rename to java-strings-2/src/main/java/com/baeldung/string/removeleadingtrailingchar/RemoveLeadingAndTrailingZeroes.java diff --git a/java-strings/src/main/java/com/baeldung/stringduplicates/RemoveDuplicateFromString.java b/java-strings-2/src/main/java/com/baeldung/stringduplicates/RemoveDuplicateFromString.java similarity index 100% rename from java-strings/src/main/java/com/baeldung/stringduplicates/RemoveDuplicateFromString.java rename to java-strings-2/src/main/java/com/baeldung/stringduplicates/RemoveDuplicateFromString.java diff --git a/java-strings/src/test/java/com/baeldung/ConvertStringToListUnitTest.java b/java-strings-2/src/test/java/com/baeldung/ConvertStringToListUnitTest.java similarity index 100% rename from java-strings/src/test/java/com/baeldung/ConvertStringToListUnitTest.java rename to java-strings-2/src/test/java/com/baeldung/ConvertStringToListUnitTest.java diff --git a/java-strings/src/test/java/com/baeldung/StringConcatenationUnitTest.java b/java-strings-2/src/test/java/com/baeldung/StringConcatenationUnitTest.java similarity index 100% rename from java-strings/src/test/java/com/baeldung/StringConcatenationUnitTest.java rename to java-strings-2/src/test/java/com/baeldung/StringConcatenationUnitTest.java diff --git a/java-strings/src/test/java/com/baeldung/fileToBase64StringConversion/FileToBase64StringConversionUnitTest.java b/java-strings-2/src/test/java/com/baeldung/fileToBase64StringConversion/FileToBase64StringConversionUnitTest.java similarity index 100% rename from java-strings/src/test/java/com/baeldung/fileToBase64StringConversion/FileToBase64StringConversionUnitTest.java rename to java-strings-2/src/test/java/com/baeldung/fileToBase64StringConversion/FileToBase64StringConversionUnitTest.java diff --git a/java-strings/src/test/java/com/baeldung/java8/base64/ApacheCommonsEncodeDecodeUnitTest.java b/java-strings-2/src/test/java/com/baeldung/java8/base64/ApacheCommonsEncodeDecodeUnitTest.java similarity index 100% rename from java-strings/src/test/java/com/baeldung/java8/base64/ApacheCommonsEncodeDecodeUnitTest.java rename to java-strings-2/src/test/java/com/baeldung/java8/base64/ApacheCommonsEncodeDecodeUnitTest.java diff --git a/java-strings/src/test/java/com/baeldung/java8/base64/Java8EncodeDecodeUnitTest.java b/java-strings-2/src/test/java/com/baeldung/java8/base64/Java8EncodeDecodeUnitTest.java similarity index 100% rename from java-strings/src/test/java/com/baeldung/java8/base64/Java8EncodeDecodeUnitTest.java rename to java-strings-2/src/test/java/com/baeldung/java8/base64/Java8EncodeDecodeUnitTest.java diff --git a/java-strings/src/test/java/com/baeldung/java8/base64/StringToByteArrayUnitTest.java b/java-strings-2/src/test/java/com/baeldung/java8/base64/StringToByteArrayUnitTest.java similarity index 100% rename from java-strings/src/test/java/com/baeldung/java8/base64/StringToByteArrayUnitTest.java rename to java-strings-2/src/test/java/com/baeldung/java8/base64/StringToByteArrayUnitTest.java diff --git a/java-strings/src/test/java/com/baeldung/string/MatchWordsUnitTest.java b/java-strings-2/src/test/java/com/baeldung/string/MatchWordsUnitTest.java similarity index 100% rename from java-strings/src/test/java/com/baeldung/string/MatchWordsUnitTest.java rename to java-strings-2/src/test/java/com/baeldung/string/MatchWordsUnitTest.java diff --git a/java-strings/src/test/java/com/baeldung/string/PangramUnitTest.java b/java-strings-2/src/test/java/com/baeldung/string/PangramUnitTest.java similarity index 100% rename from java-strings/src/test/java/com/baeldung/string/PangramUnitTest.java rename to java-strings-2/src/test/java/com/baeldung/string/PangramUnitTest.java diff --git a/java-strings/src/test/java/com/baeldung/string/RemovingEmojiFromStringUnitTest.java b/java-strings-2/src/test/java/com/baeldung/string/RemovingEmojiFromStringUnitTest.java similarity index 100% rename from java-strings/src/test/java/com/baeldung/string/RemovingEmojiFromStringUnitTest.java rename to java-strings-2/src/test/java/com/baeldung/string/RemovingEmojiFromStringUnitTest.java diff --git a/java-strings/src/test/java/com/baeldung/string/StringFromPrimitiveArrayUnitTest.java b/java-strings-2/src/test/java/com/baeldung/string/StringFromPrimitiveArrayUnitTest.java similarity index 100% rename from java-strings/src/test/java/com/baeldung/string/StringFromPrimitiveArrayUnitTest.java rename to java-strings-2/src/test/java/com/baeldung/string/StringFromPrimitiveArrayUnitTest.java diff --git a/java-strings/src/test/java/com/baeldung/string/formatter/DateToStringFormatterUnitTest.java b/java-strings-2/src/test/java/com/baeldung/string/formatter/DateToStringFormatterUnitTest.java similarity index 100% rename from java-strings/src/test/java/com/baeldung/string/formatter/DateToStringFormatterUnitTest.java rename to java-strings-2/src/test/java/com/baeldung/string/formatter/DateToStringFormatterUnitTest.java diff --git a/java-strings/src/test/java/com/baeldung/string/formatter/StringFormatterExampleUnitTest.java b/java-strings-2/src/test/java/com/baeldung/string/formatter/StringFormatterExampleUnitTest.java similarity index 100% rename from java-strings/src/test/java/com/baeldung/string/formatter/StringFormatterExampleUnitTest.java rename to java-strings-2/src/test/java/com/baeldung/string/formatter/StringFormatterExampleUnitTest.java diff --git a/java-strings/src/test/java/com/baeldung/string/interview/LocaleUnitTest.java b/java-strings-2/src/test/java/com/baeldung/string/interview/LocaleUnitTest.java similarity index 100% rename from java-strings/src/test/java/com/baeldung/string/interview/LocaleUnitTest.java rename to java-strings-2/src/test/java/com/baeldung/string/interview/LocaleUnitTest.java diff --git a/java-strings/src/test/java/com/baeldung/string/interview/StringAnagramUnitTest.java b/java-strings-2/src/test/java/com/baeldung/string/interview/StringAnagramUnitTest.java similarity index 100% rename from java-strings/src/test/java/com/baeldung/string/interview/StringAnagramUnitTest.java rename to java-strings-2/src/test/java/com/baeldung/string/interview/StringAnagramUnitTest.java diff --git a/java-strings/src/test/java/com/baeldung/string/interview/StringChangeCaseUnitTest.java b/java-strings-2/src/test/java/com/baeldung/string/interview/StringChangeCaseUnitTest.java similarity index 100% rename from java-strings/src/test/java/com/baeldung/string/interview/StringChangeCaseUnitTest.java rename to java-strings-2/src/test/java/com/baeldung/string/interview/StringChangeCaseUnitTest.java diff --git a/java-strings/src/test/java/com/baeldung/string/interview/StringCountOccurrencesUnitTest.java b/java-strings-2/src/test/java/com/baeldung/string/interview/StringCountOccurrencesUnitTest.java similarity index 100% rename from java-strings/src/test/java/com/baeldung/string/interview/StringCountOccurrencesUnitTest.java rename to java-strings-2/src/test/java/com/baeldung/string/interview/StringCountOccurrencesUnitTest.java diff --git a/java-strings/src/test/java/com/baeldung/string/interview/StringFormatUnitTest.java b/java-strings-2/src/test/java/com/baeldung/string/interview/StringFormatUnitTest.java similarity index 100% rename from java-strings/src/test/java/com/baeldung/string/interview/StringFormatUnitTest.java rename to java-strings-2/src/test/java/com/baeldung/string/interview/StringFormatUnitTest.java diff --git a/java-strings/src/test/java/com/baeldung/string/interview/StringInternUnitTest.java b/java-strings-2/src/test/java/com/baeldung/string/interview/StringInternUnitTest.java similarity index 100% rename from java-strings/src/test/java/com/baeldung/string/interview/StringInternUnitTest.java rename to java-strings-2/src/test/java/com/baeldung/string/interview/StringInternUnitTest.java diff --git a/java-strings/src/test/java/com/baeldung/string/interview/StringJoinerUnitTest.java b/java-strings-2/src/test/java/com/baeldung/string/interview/StringJoinerUnitTest.java similarity index 100% rename from java-strings/src/test/java/com/baeldung/string/interview/StringJoinerUnitTest.java rename to java-strings-2/src/test/java/com/baeldung/string/interview/StringJoinerUnitTest.java diff --git a/java-strings/src/test/java/com/baeldung/string/interview/StringPalindromeUnitTest.java b/java-strings-2/src/test/java/com/baeldung/string/interview/StringPalindromeUnitTest.java similarity index 100% rename from java-strings/src/test/java/com/baeldung/string/interview/StringPalindromeUnitTest.java rename to java-strings-2/src/test/java/com/baeldung/string/interview/StringPalindromeUnitTest.java diff --git a/java-strings/src/test/java/com/baeldung/string/interview/StringReverseUnitTest.java b/java-strings-2/src/test/java/com/baeldung/string/interview/StringReverseUnitTest.java similarity index 100% rename from java-strings/src/test/java/com/baeldung/string/interview/StringReverseUnitTest.java rename to java-strings-2/src/test/java/com/baeldung/string/interview/StringReverseUnitTest.java diff --git a/java-strings/src/test/java/com/baeldung/string/interview/StringSplitUnitTest.java b/java-strings-2/src/test/java/com/baeldung/string/interview/StringSplitUnitTest.java similarity index 100% rename from java-strings/src/test/java/com/baeldung/string/interview/StringSplitUnitTest.java rename to java-strings-2/src/test/java/com/baeldung/string/interview/StringSplitUnitTest.java diff --git a/java-strings/src/test/java/com/baeldung/string/interview/StringToByteArrayUnitTest.java b/java-strings-2/src/test/java/com/baeldung/string/interview/StringToByteArrayUnitTest.java similarity index 100% rename from java-strings/src/test/java/com/baeldung/string/interview/StringToByteArrayUnitTest.java rename to java-strings-2/src/test/java/com/baeldung/string/interview/StringToByteArrayUnitTest.java diff --git a/java-strings/src/test/java/com/baeldung/string/interview/StringToCharArrayUnitTest.java b/java-strings-2/src/test/java/com/baeldung/string/interview/StringToCharArrayUnitTest.java similarity index 100% rename from java-strings/src/test/java/com/baeldung/string/interview/StringToCharArrayUnitTest.java rename to java-strings-2/src/test/java/com/baeldung/string/interview/StringToCharArrayUnitTest.java diff --git a/java-strings/src/test/java/com/baeldung/string/interview/StringToIntegerUnitTest.java b/java-strings-2/src/test/java/com/baeldung/string/interview/StringToIntegerUnitTest.java similarity index 100% rename from java-strings/src/test/java/com/baeldung/string/interview/StringToIntegerUnitTest.java rename to java-strings-2/src/test/java/com/baeldung/string/interview/StringToIntegerUnitTest.java diff --git a/java-strings/src/test/java/com/baeldung/string/padding/StringPaddingUtilUnitTest.java b/java-strings-2/src/test/java/com/baeldung/string/padding/StringPaddingUtilUnitTest.java similarity index 100% rename from java-strings/src/test/java/com/baeldung/string/padding/StringPaddingUtilUnitTest.java rename to java-strings-2/src/test/java/com/baeldung/string/padding/StringPaddingUtilUnitTest.java diff --git a/java-strings/src/test/java/com/baeldung/string/password/StringPasswordUnitTest.java b/java-strings-2/src/test/java/com/baeldung/string/password/StringPasswordUnitTest.java similarity index 100% rename from java-strings/src/test/java/com/baeldung/string/password/StringPasswordUnitTest.java rename to java-strings-2/src/test/java/com/baeldung/string/password/StringPasswordUnitTest.java diff --git a/java-strings/src/test/java/com/baeldung/string/removeleadingtrailingchar/RemoveLeadingAndTrailingZeroesUnitTest.java b/java-strings-2/src/test/java/com/baeldung/string/removeleadingtrailingchar/RemoveLeadingAndTrailingZeroesUnitTest.java similarity index 100% rename from java-strings/src/test/java/com/baeldung/string/removeleadingtrailingchar/RemoveLeadingAndTrailingZeroesUnitTest.java rename to java-strings-2/src/test/java/com/baeldung/string/removeleadingtrailingchar/RemoveLeadingAndTrailingZeroesUnitTest.java diff --git a/java-strings/src/test/java/com/baeldung/stringduplicates/RemoveDuplicateFromStringUnitTest.java b/java-strings-2/src/test/java/com/baeldung/stringduplicates/RemoveDuplicateFromStringUnitTest.java similarity index 100% rename from java-strings/src/test/java/com/baeldung/stringduplicates/RemoveDuplicateFromStringUnitTest.java rename to java-strings-2/src/test/java/com/baeldung/stringduplicates/RemoveDuplicateFromStringUnitTest.java diff --git a/java-strings/src/test/resources/test_image.jpg b/java-strings-2/src/test/resources/test_image.jpg similarity index 100% rename from java-strings/src/test/resources/test_image.jpg rename to java-strings-2/src/test/resources/test_image.jpg diff --git a/java-strings-ops/README.md b/java-strings-ops/README.md new file mode 100644 index 0000000000..d909f171a7 --- /dev/null +++ b/java-strings-ops/README.md @@ -0,0 +1,22 @@ +========= + +## Java Strings Cookbooks and Examples + +### Relevant Articles: +- [Convert char to String in Java](http://www.baeldung.com/java-convert-char-to-string) +- [Convert String to int or Integer in Java](http://www.baeldung.com/java-convert-string-to-int-or-integer) +- [Java String Conversions](https://www.baeldung.com/java-string-conversions) +- [Check if a String is a Palindrome](http://www.baeldung.com/java-palindrome) +- [Comparing Strings in Java](http://www.baeldung.com/java-compare-strings) +- [Check If a String Is Numeric in Java](http://www.baeldung.com/java-check-string-number) +- [Get Substring from String in Java](https://www.baeldung.com/java-substring) +- [How to Remove the Last Character of a String?](http://www.baeldung.com/java-remove-last-character-of-string) +- [Add a Character to a String at a Given Position](https://www.baeldung.com/java-add-character-to-string) +- [Count Occurrences of a Char in a String](http://www.baeldung.com/java-count-chars) +- [Guide to Java String Pool](http://www.baeldung.com/java-string-pool) +- [Split a String in Java](http://www.baeldung.com/java-split-string) +- [Common String Operations in Java](https://www.baeldung.com/java-string-operations) +- [Convert String to Byte Array and Reverse in Java](https://www.baeldung.com/java-string-to-byte-array) +- [Java toString() Method](https://www.baeldung.com/java-tostring) +- [CharSequence vs. String in Java](http://www.baeldung.com/java-char-sequence-string) +- [StringBuilder and StringBuffer in Java](http://www.baeldung.com/java-string-builder-string-buffer) \ No newline at end of file diff --git a/java-strings-ops/pom.xml b/java-strings-ops/pom.xml new file mode 100644 index 0000000000..b6a7ea2728 --- /dev/null +++ b/java-strings-ops/pom.xml @@ -0,0 +1,99 @@ + + 4.0.0 + com.baeldung + java-strings-ops + 0.1.0-SNAPSHOT + jar + java-strings-ops + + + com.baeldung + parent-java + 0.0.1-SNAPSHOT + ../parent-java + + + + + org.apache.commons + commons-lang3 + ${commons-lang3.version} + + + log4j + log4j + ${log4j.version} + + + + org.assertj + assertj-core + ${assertj.version} + test + + + org.openjdk.jmh + jmh-core + ${jmh-core.version} + + + org.openjdk.jmh + jmh-generator-annprocess + ${jmh-generator.version} + + + com.google.guava + guava + ${guava.version} + + + + org.junit.jupiter + junit-jupiter-api + ${junit-jupiter-api.version} + test + + + + org.hamcrest + hamcrest-library + ${org.hamcrest.version} + test + + + + + + java-strings-ops + + + src/main/resources + true + + + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + ${java.version} + ${java.version} + -parameters + + + + + + + + 3.8.1 + + 3.6.1 + 27.0.1-jre + 5.3.1 + + + diff --git a/java-strings/src/main/java/com/baeldung/datetime/UseLocalDateTime.java b/java-strings-ops/src/main/java/com/baeldung/datetime/UseLocalDateTime.java similarity index 100% rename from java-strings/src/main/java/com/baeldung/datetime/UseLocalDateTime.java rename to java-strings-ops/src/main/java/com/baeldung/datetime/UseLocalDateTime.java diff --git a/java-strings/src/main/java/com/baeldung/string/AppendCharAtPositionX.java b/java-strings-ops/src/main/java/com/baeldung/string/AppendCharAtPositionX.java similarity index 100% rename from java-strings/src/main/java/com/baeldung/string/AppendCharAtPositionX.java rename to java-strings-ops/src/main/java/com/baeldung/string/AppendCharAtPositionX.java diff --git a/java-strings/src/main/java/com/baeldung/string/Palindrome.java b/java-strings-ops/src/main/java/com/baeldung/string/Palindrome.java similarity index 100% rename from java-strings/src/main/java/com/baeldung/string/Palindrome.java rename to java-strings-ops/src/main/java/com/baeldung/string/Palindrome.java diff --git a/java-strings/src/main/java/com/baeldung/string/StringHelper.java b/java-strings-ops/src/main/java/com/baeldung/string/StringHelper.java similarity index 100% rename from java-strings/src/main/java/com/baeldung/string/StringHelper.java rename to java-strings-ops/src/main/java/com/baeldung/string/StringHelper.java diff --git a/java-strings/src/main/java/com/baeldung/string/tostring/Customer.java b/java-strings-ops/src/main/java/com/baeldung/string/tostring/Customer.java similarity index 100% rename from java-strings/src/main/java/com/baeldung/string/tostring/Customer.java rename to java-strings-ops/src/main/java/com/baeldung/string/tostring/Customer.java diff --git a/java-strings/src/main/java/com/baeldung/string/tostring/CustomerArrayToString.java b/java-strings-ops/src/main/java/com/baeldung/string/tostring/CustomerArrayToString.java similarity index 100% rename from java-strings/src/main/java/com/baeldung/string/tostring/CustomerArrayToString.java rename to java-strings-ops/src/main/java/com/baeldung/string/tostring/CustomerArrayToString.java diff --git a/java-strings/src/main/java/com/baeldung/string/tostring/CustomerComplexObjectToString.java b/java-strings-ops/src/main/java/com/baeldung/string/tostring/CustomerComplexObjectToString.java similarity index 100% rename from java-strings/src/main/java/com/baeldung/string/tostring/CustomerComplexObjectToString.java rename to java-strings-ops/src/main/java/com/baeldung/string/tostring/CustomerComplexObjectToString.java diff --git a/java-strings/src/main/java/com/baeldung/string/tostring/CustomerPrimitiveToString.java b/java-strings-ops/src/main/java/com/baeldung/string/tostring/CustomerPrimitiveToString.java similarity index 100% rename from java-strings/src/main/java/com/baeldung/string/tostring/CustomerPrimitiveToString.java rename to java-strings-ops/src/main/java/com/baeldung/string/tostring/CustomerPrimitiveToString.java diff --git a/java-strings/src/main/java/com/baeldung/string/tostring/CustomerReflectionToString.java b/java-strings-ops/src/main/java/com/baeldung/string/tostring/CustomerReflectionToString.java similarity index 100% rename from java-strings/src/main/java/com/baeldung/string/tostring/CustomerReflectionToString.java rename to java-strings-ops/src/main/java/com/baeldung/string/tostring/CustomerReflectionToString.java diff --git a/java-strings/src/main/java/com/baeldung/string/tostring/CustomerWrapperCollectionToString.java b/java-strings-ops/src/main/java/com/baeldung/string/tostring/CustomerWrapperCollectionToString.java similarity index 100% rename from java-strings/src/main/java/com/baeldung/string/tostring/CustomerWrapperCollectionToString.java rename to java-strings-ops/src/main/java/com/baeldung/string/tostring/CustomerWrapperCollectionToString.java diff --git a/java-strings/src/main/java/com/baeldung/string/tostring/Order.java b/java-strings-ops/src/main/java/com/baeldung/string/tostring/Order.java similarity index 100% rename from java-strings/src/main/java/com/baeldung/string/tostring/Order.java rename to java-strings-ops/src/main/java/com/baeldung/string/tostring/Order.java diff --git a/java-strings-ops/src/main/resources/logback.xml b/java-strings-ops/src/main/resources/logback.xml new file mode 100644 index 0000000000..7d900d8ea8 --- /dev/null +++ b/java-strings-ops/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/java-strings/src/test/java/com/baeldung/CharToStringUnitTest.java b/java-strings-ops/src/test/java/com/baeldung/CharToStringUnitTest.java similarity index 100% rename from java-strings/src/test/java/com/baeldung/CharToStringUnitTest.java rename to java-strings-ops/src/test/java/com/baeldung/CharToStringUnitTest.java diff --git a/java-strings/src/test/java/com/baeldung/java/conversion/README.md b/java-strings-ops/src/test/java/com/baeldung/java/conversion/README.md similarity index 100% rename from java-strings/src/test/java/com/baeldung/java/conversion/README.md rename to java-strings-ops/src/test/java/com/baeldung/java/conversion/README.md diff --git a/java-strings/src/test/java/com/baeldung/java/conversion/StringConversionUnitTest.java b/java-strings-ops/src/test/java/com/baeldung/java/conversion/StringConversionUnitTest.java similarity index 100% rename from java-strings/src/test/java/com/baeldung/java/conversion/StringConversionUnitTest.java rename to java-strings-ops/src/test/java/com/baeldung/java/conversion/StringConversionUnitTest.java diff --git a/java-strings/src/test/java/com/baeldung/java/countingChars/CountCharsExampleUnitTest.java b/java-strings-ops/src/test/java/com/baeldung/java/countingChars/CountCharsExampleUnitTest.java similarity index 100% rename from java-strings/src/test/java/com/baeldung/java/countingChars/CountCharsExampleUnitTest.java rename to java-strings-ops/src/test/java/com/baeldung/java/countingChars/CountCharsExampleUnitTest.java diff --git a/java-strings/src/test/java/com/baeldung/string/AppendCharAtPositionXUnitTest.java b/java-strings-ops/src/test/java/com/baeldung/string/AppendCharAtPositionXUnitTest.java similarity index 100% rename from java-strings/src/test/java/com/baeldung/string/AppendCharAtPositionXUnitTest.java rename to java-strings-ops/src/test/java/com/baeldung/string/AppendCharAtPositionXUnitTest.java diff --git a/java-strings/src/test/java/com/baeldung/string/CharSequenceVsStringUnitTest.java b/java-strings-ops/src/test/java/com/baeldung/string/CharSequenceVsStringUnitTest.java similarity index 100% rename from java-strings/src/test/java/com/baeldung/string/CharSequenceVsStringUnitTest.java rename to java-strings-ops/src/test/java/com/baeldung/string/CharSequenceVsStringUnitTest.java diff --git a/java-strings/src/test/java/com/baeldung/string/PalindromeUnitTest.java b/java-strings-ops/src/test/java/com/baeldung/string/PalindromeUnitTest.java similarity index 100% rename from java-strings/src/test/java/com/baeldung/string/PalindromeUnitTest.java rename to java-strings-ops/src/test/java/com/baeldung/string/PalindromeUnitTest.java diff --git a/java-strings/src/test/java/com/baeldung/string/SplitUnitTest.java b/java-strings-ops/src/test/java/com/baeldung/string/SplitUnitTest.java similarity index 100% rename from java-strings/src/test/java/com/baeldung/string/SplitUnitTest.java rename to java-strings-ops/src/test/java/com/baeldung/string/SplitUnitTest.java diff --git a/java-strings/src/main/java/com/baeldung/string/StringBufferStringBuilder.java b/java-strings-ops/src/test/java/com/baeldung/string/StringBufferStringBuilder.java similarity index 100% rename from java-strings/src/main/java/com/baeldung/string/StringBufferStringBuilder.java rename to java-strings-ops/src/test/java/com/baeldung/string/StringBufferStringBuilder.java diff --git a/java-strings/src/test/java/com/baeldung/string/StringComparisonUnitTest.java b/java-strings-ops/src/test/java/com/baeldung/string/StringComparisonUnitTest.java similarity index 100% rename from java-strings/src/test/java/com/baeldung/string/StringComparisonUnitTest.java rename to java-strings-ops/src/test/java/com/baeldung/string/StringComparisonUnitTest.java diff --git a/java-strings/src/test/java/com/baeldung/string/StringHelperUnitTest.java b/java-strings-ops/src/test/java/com/baeldung/string/StringHelperUnitTest.java similarity index 100% rename from java-strings/src/test/java/com/baeldung/string/StringHelperUnitTest.java rename to java-strings-ops/src/test/java/com/baeldung/string/StringHelperUnitTest.java diff --git a/java-strings/src/test/java/com/baeldung/string/SubstringUnitTest.java b/java-strings-ops/src/test/java/com/baeldung/string/SubstringUnitTest.java similarity index 100% rename from java-strings/src/test/java/com/baeldung/string/SubstringUnitTest.java rename to java-strings-ops/src/test/java/com/baeldung/string/SubstringUnitTest.java diff --git a/java-strings/src/test/java/com/baeldung/string/conversion/ByteArrayToStringUnitTest.java b/java-strings-ops/src/test/java/com/baeldung/string/conversion/ByteArrayToStringUnitTest.java similarity index 100% rename from java-strings/src/test/java/com/baeldung/string/conversion/ByteArrayToStringUnitTest.java rename to java-strings-ops/src/test/java/com/baeldung/string/conversion/ByteArrayToStringUnitTest.java diff --git a/java-strings/src/test/java/com/baeldung/string/conversion/StringToByteArrayUnitTest.java b/java-strings-ops/src/test/java/com/baeldung/string/conversion/StringToByteArrayUnitTest.java similarity index 100% rename from java-strings/src/test/java/com/baeldung/string/conversion/StringToByteArrayUnitTest.java rename to java-strings-ops/src/test/java/com/baeldung/string/conversion/StringToByteArrayUnitTest.java diff --git a/java-strings/src/test/java/com/baeldung/string/tostring/CustomerArrayToStringUnitTest.java b/java-strings-ops/src/test/java/com/baeldung/string/tostring/CustomerArrayToStringUnitTest.java similarity index 100% rename from java-strings/src/test/java/com/baeldung/string/tostring/CustomerArrayToStringUnitTest.java rename to java-strings-ops/src/test/java/com/baeldung/string/tostring/CustomerArrayToStringUnitTest.java diff --git a/java-strings/src/test/java/com/baeldung/string/tostring/CustomerComplexObjectToStringUnitTest.java b/java-strings-ops/src/test/java/com/baeldung/string/tostring/CustomerComplexObjectToStringUnitTest.java similarity index 100% rename from java-strings/src/test/java/com/baeldung/string/tostring/CustomerComplexObjectToStringUnitTest.java rename to java-strings-ops/src/test/java/com/baeldung/string/tostring/CustomerComplexObjectToStringUnitTest.java diff --git a/java-strings/src/test/java/com/baeldung/string/tostring/CustomerPrimitiveToStringUnitTest.java b/java-strings-ops/src/test/java/com/baeldung/string/tostring/CustomerPrimitiveToStringUnitTest.java similarity index 100% rename from java-strings/src/test/java/com/baeldung/string/tostring/CustomerPrimitiveToStringUnitTest.java rename to java-strings-ops/src/test/java/com/baeldung/string/tostring/CustomerPrimitiveToStringUnitTest.java diff --git a/java-strings/src/test/java/com/baeldung/string/tostring/CustomerWrapperCollectionToStringUnitTest.java b/java-strings-ops/src/test/java/com/baeldung/string/tostring/CustomerWrapperCollectionToStringUnitTest.java similarity index 100% rename from java-strings/src/test/java/com/baeldung/string/tostring/CustomerWrapperCollectionToStringUnitTest.java rename to java-strings-ops/src/test/java/com/baeldung/string/tostring/CustomerWrapperCollectionToStringUnitTest.java diff --git a/java-strings/src/test/java/com/baeldung/stringisnumeric/CoreJavaIsNumericUnitTest.java b/java-strings-ops/src/test/java/com/baeldung/stringisnumeric/CoreJavaIsNumericUnitTest.java similarity index 100% rename from java-strings/src/test/java/com/baeldung/stringisnumeric/CoreJavaIsNumericUnitTest.java rename to java-strings-ops/src/test/java/com/baeldung/stringisnumeric/CoreJavaIsNumericUnitTest.java diff --git a/java-strings/src/test/java/com/baeldung/stringpool/StringPoolUnitTest.java b/java-strings-ops/src/test/java/com/baeldung/stringpool/StringPoolUnitTest.java similarity index 100% rename from java-strings/src/test/java/com/baeldung/stringpool/StringPoolUnitTest.java rename to java-strings-ops/src/test/java/com/baeldung/stringpool/StringPoolUnitTest.java diff --git a/java-strings-ops/src/test/resources/.gitignore b/java-strings-ops/src/test/resources/.gitignore new file mode 100644 index 0000000000..83c05e60c8 --- /dev/null +++ b/java-strings-ops/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/java-strings/README.md b/java-strings/README.md index b342f53918..ef536b4099 100644 --- a/java-strings/README.md +++ b/java-strings/README.md @@ -6,51 +6,18 @@ - [String Operations with Java Streams](http://www.baeldung.com/java-stream-operations-on-strings) - [Converting String to Stream of chars](http://www.baeldung.com/java-string-to-stream) - [Java 8 StringJoiner](http://www.baeldung.com/java-string-joiner) -- [Image to Base64 String Conversion](http://www.baeldung.com/java-base64-image-string) -- [Java – Generate Random String](http://www.baeldung.com/java-random-string) -- [Convert char to String in Java](http://www.baeldung.com/java-convert-char-to-string) -- [Convert String to int or Integer in Java](http://www.baeldung.com/java-convert-string-to-int-or-integer) -- [Java String Conversions](https://www.baeldung.com/java-string-conversions) - [Converting Strings to Enums in Java](http://www.baeldung.com/java-string-to-enum) - [Quick Guide to the Java StringTokenizer](http://www.baeldung.com/java-stringtokenizer) -- [Count Occurrences of a Char in a String](http://www.baeldung.com/java-count-chars) -- [Split a String in Java](http://www.baeldung.com/java-split-string) -- [How to Remove the Last Character of a String?](http://www.baeldung.com/java-remove-last-character-of-string) -- [CharSequence vs. String in Java](http://www.baeldung.com/java-char-sequence-string) -- [StringBuilder and StringBuffer in Java](http://www.baeldung.com/java-string-builder-string-buffer) -- [Guide to Java String Pool](http://www.baeldung.com/java-string-pool) -- [Check if a String is a Palindrome](http://www.baeldung.com/java-palindrome) -- [Comparing Strings in Java](http://www.baeldung.com/java-compare-strings) -- [Check If a String Is Numeric in Java](http://www.baeldung.com/java-check-string-number) - [Use char[] Array Over a String for Manipulating Passwords in Java?](http://www.baeldung.com/java-storing-passwords) - [Convert a String to Title Case](http://www.baeldung.com/java-string-title-case) - [Compact Strings in Java 9](http://www.baeldung.com/java-9-compact-string) - [Java Check a String for Lowercase/Uppercase Letter, Special Character and Digit](https://www.baeldung.com/java-lowercase-uppercase-special-character-digit-regex) - [Convert java.util.Date to String](https://www.baeldung.com/java-util-date-to-string) -- [Get Substring from String in Java](https://www.baeldung.com/java-substring) - [Converting a Stack Trace to a String in Java](https://www.baeldung.com/java-stacktrace-to-string) - [Sorting a String Alphabetically in Java](https://www.baeldung.com/java-sort-string-alphabetically) -- [Remove Emojis from a Java String](https://www.baeldung.com/java-string-remove-emojis) - [String Not Empty Test Assertions in Java](https://www.baeldung.com/java-assert-string-not-empty) - [String Performance Hints](https://www.baeldung.com/java-string-performance) - [Using indexOf to Find All Occurrences of a Word in a String](https://www.baeldung.com/java-indexOf-find-string-occurrences) -- [Convert String to Byte Array and Reverse in Java](https://www.baeldung.com/java-string-to-byte-array) -- [Java Base64 Encoding and Decoding](https://www.baeldung.com/java-base64-encode-and-decode) -- [Generate a Secure Random Password in Java](https://www.baeldung.com/java-generate-secure-password) -- [Removing Repeated Characters from a String](https://www.baeldung.com/java-remove-repeated-char) -- [Join Array of Primitives with Separator in Java](https://www.baeldung.com/java-join-primitive-array) -- [Convert String to Byte Array and Reverse in Java](https://www.baeldung.com/java-string-to-byte-array) -- [Pad a String with Zeros or Spaces in Java](https://www.baeldung.com/java-pad-string) - [Adding a Newline Character to a String in Java](https://www.baeldung.com/java-string-newline) - [Remove or Replace part of a String in Java](https://www.baeldung.com/java-remove-replace-string-part) -- [Replace a Character at a Specific Index in a String in Java](https://www.baeldung.com/java-replace-character-at-index) -- [Convert a Comma Separated String to a List in Java](https://www.baeldung.com/java-string-with-separator-to-list) -- [Guide to java.util.Formatter](http://www.baeldung.com/java-string-formatter) -- [Add a Character to a String at a Given Position](https://www.baeldung.com/java-add-character-to-string) -- [Remove Leading and Trailing Characters from a String](https://www.baeldung.com/java-remove-trailing-characters) -- [Concatenating Strings In Java](https://www.baeldung.com/java-strings-concatenation) -- [Java toString() Method](https://www.baeldung.com/java-tostring) -- [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) -- [Common String Operations in Java](https://www.baeldung.com/java-string-operations) +- [Replace a Character at a Specific Index in a String in Java](https://www.baeldung.com/java-replace-character-at-index) \ No newline at end of file diff --git a/java-strings/pom.xml b/java-strings/pom.xml index 7f66b95355..42a57bfb42 100755 --- a/java-strings/pom.xml +++ b/java-strings/pom.xml @@ -62,12 +62,6 @@ guava ${guava.version} - - - com.vdurmont - emoji-java - ${emoji-java.version} - org.junit.jupiter @@ -83,24 +77,6 @@ test - - - org.passay - passay - ${passay.version} - - - org.apache.commons - commons-text - ${commons-text.version} - - - - org.ahocorasick - ahocorasick - ${ahocorasick.version} - - @@ -134,11 +110,8 @@ 3.6.1 61.1 27.0.1-jre - 4.0.0 5.3.1 - 1.3.1 1.4 - 0.4.0 diff --git a/pom.xml b/pom.xml index 9b47ffe3a6..352da33fee 100644 --- a/pom.xml +++ b/pom.xml @@ -469,6 +469,7 @@ java-strings java-strings-2 + java-strings-ops java-vavr-stream java-websocket javafx @@ -1163,6 +1164,7 @@ java-strings java-strings-2 + java-strings-ops java-vavr-stream java-websocket javafx From 21eb2764288b739ae646ad634202f5b6460bb899 Mon Sep 17 00:00:00 2001 From: Rodrigo Graciano Date: Fri, 2 Aug 2019 02:10:36 -0400 Subject: [PATCH 039/140] Fix quarkus version on pom.xml (#7466) --- quarkus/pom.xml | 2 +- quarkus/src/main/java/com/baeldung/quarkus/HelloService.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/quarkus/pom.xml b/quarkus/pom.xml index d8f274df6d..ceb2e2c0d4 100644 --- a/quarkus/pom.xml +++ b/quarkus/pom.xml @@ -7,7 +7,7 @@ 1.0-SNAPSHOT 2.22.0 - 0.13.1 + 0.15.0 1.8 UTF-8 1.8 diff --git a/quarkus/src/main/java/com/baeldung/quarkus/HelloService.java b/quarkus/src/main/java/com/baeldung/quarkus/HelloService.java index 4b19de1b63..4c505fbabe 100644 --- a/quarkus/src/main/java/com/baeldung/quarkus/HelloService.java +++ b/quarkus/src/main/java/com/baeldung/quarkus/HelloService.java @@ -8,7 +8,7 @@ import javax.enterprise.context.ApplicationScoped; public class HelloService { @ConfigProperty(name = "greeting") - private String greeting; + String greeting; public String politeHello(String name){ return greeting + " " + name; From 5fabe70b8acac154b1e820ac8ebe05b7c3f489b3 Mon Sep 17 00:00:00 2001 From: DOHA Date: Fri, 2 Aug 2019 14:35:36 +0300 Subject: [PATCH 040/140] move upload files code to new package --- .../baeldung/mongodb/{ => file}/daos/PhotoRepository.java | 4 ++-- .../java/com/baeldung/mongodb/{ => file}/models/Photo.java | 2 +- .../java/com/baeldung/mongodb/{ => file}/models/Video.java | 2 +- .../baeldung/mongodb/{ => file}/services/PhotoService.java | 6 +++--- .../baeldung/mongodb/{ => file}/services/VideoService.java | 4 ++-- .../baeldung/mongodb/{ => file}/web/PhotoController.java | 6 +++--- .../baeldung/mongodb/{ => file}/web/VideoController.java | 6 +++--- 7 files changed, 15 insertions(+), 15 deletions(-) rename persistence-modules/spring-boot-persistence-mongodb/src/main/java/com/baeldung/mongodb/{ => file}/daos/PhotoRepository.java (62%) rename persistence-modules/spring-boot-persistence-mongodb/src/main/java/com/baeldung/mongodb/{ => file}/models/Photo.java (95%) rename persistence-modules/spring-boot-persistence-mongodb/src/main/java/com/baeldung/mongodb/{ => file}/models/Video.java (93%) rename persistence-modules/spring-boot-persistence-mongodb/src/main/java/com/baeldung/mongodb/{ => file}/services/PhotoService.java (83%) rename persistence-modules/spring-boot-persistence-mongodb/src/main/java/com/baeldung/mongodb/{ => file}/services/VideoService.java (94%) rename persistence-modules/spring-boot-persistence-mongodb/src/main/java/com/baeldung/mongodb/{ => file}/web/PhotoController.java (90%) rename persistence-modules/spring-boot-persistence-mongodb/src/main/java/com/baeldung/mongodb/{ => file}/web/VideoController.java (92%) diff --git a/persistence-modules/spring-boot-persistence-mongodb/src/main/java/com/baeldung/mongodb/daos/PhotoRepository.java b/persistence-modules/spring-boot-persistence-mongodb/src/main/java/com/baeldung/mongodb/file/daos/PhotoRepository.java similarity index 62% rename from persistence-modules/spring-boot-persistence-mongodb/src/main/java/com/baeldung/mongodb/daos/PhotoRepository.java rename to persistence-modules/spring-boot-persistence-mongodb/src/main/java/com/baeldung/mongodb/file/daos/PhotoRepository.java index d38e11c055..dc18df7b0a 100644 --- a/persistence-modules/spring-boot-persistence-mongodb/src/main/java/com/baeldung/mongodb/daos/PhotoRepository.java +++ b/persistence-modules/spring-boot-persistence-mongodb/src/main/java/com/baeldung/mongodb/file/daos/PhotoRepository.java @@ -1,8 +1,8 @@ -package com.baeldung.mongodb.daos; +package com.baeldung.mongodb.file.daos; import org.springframework.data.mongodb.repository.MongoRepository; -import com.baeldung.mongodb.models.Photo; +import com.baeldung.mongodb.file.models.Photo; public interface PhotoRepository extends MongoRepository { diff --git a/persistence-modules/spring-boot-persistence-mongodb/src/main/java/com/baeldung/mongodb/models/Photo.java b/persistence-modules/spring-boot-persistence-mongodb/src/main/java/com/baeldung/mongodb/file/models/Photo.java similarity index 95% rename from persistence-modules/spring-boot-persistence-mongodb/src/main/java/com/baeldung/mongodb/models/Photo.java rename to persistence-modules/spring-boot-persistence-mongodb/src/main/java/com/baeldung/mongodb/file/models/Photo.java index 13f1a3cd19..afb79b4dbb 100644 --- a/persistence-modules/spring-boot-persistence-mongodb/src/main/java/com/baeldung/mongodb/models/Photo.java +++ b/persistence-modules/spring-boot-persistence-mongodb/src/main/java/com/baeldung/mongodb/file/models/Photo.java @@ -1,4 +1,4 @@ -package com.baeldung.mongodb.models; +package com.baeldung.mongodb.file.models; import org.bson.types.Binary; import org.springframework.data.annotation.Id; diff --git a/persistence-modules/spring-boot-persistence-mongodb/src/main/java/com/baeldung/mongodb/models/Video.java b/persistence-modules/spring-boot-persistence-mongodb/src/main/java/com/baeldung/mongodb/file/models/Video.java similarity index 93% rename from persistence-modules/spring-boot-persistence-mongodb/src/main/java/com/baeldung/mongodb/models/Video.java rename to persistence-modules/spring-boot-persistence-mongodb/src/main/java/com/baeldung/mongodb/file/models/Video.java index 617f0cdbfd..9e60fd1746 100644 --- a/persistence-modules/spring-boot-persistence-mongodb/src/main/java/com/baeldung/mongodb/models/Video.java +++ b/persistence-modules/spring-boot-persistence-mongodb/src/main/java/com/baeldung/mongodb/file/models/Video.java @@ -1,4 +1,4 @@ -package com.baeldung.mongodb.models; +package com.baeldung.mongodb.file.models; import java.io.InputStream; diff --git a/persistence-modules/spring-boot-persistence-mongodb/src/main/java/com/baeldung/mongodb/services/PhotoService.java b/persistence-modules/spring-boot-persistence-mongodb/src/main/java/com/baeldung/mongodb/file/services/PhotoService.java similarity index 83% rename from persistence-modules/spring-boot-persistence-mongodb/src/main/java/com/baeldung/mongodb/services/PhotoService.java rename to persistence-modules/spring-boot-persistence-mongodb/src/main/java/com/baeldung/mongodb/file/services/PhotoService.java index d8d7541c76..8d0313b280 100644 --- a/persistence-modules/spring-boot-persistence-mongodb/src/main/java/com/baeldung/mongodb/services/PhotoService.java +++ b/persistence-modules/spring-boot-persistence-mongodb/src/main/java/com/baeldung/mongodb/file/services/PhotoService.java @@ -1,4 +1,4 @@ -package com.baeldung.mongodb.services; +package com.baeldung.mongodb.file.services; import java.io.IOException; @@ -8,8 +8,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; -import com.baeldung.mongodb.daos.PhotoRepository; -import com.baeldung.mongodb.models.Photo; +import com.baeldung.mongodb.file.daos.PhotoRepository; +import com.baeldung.mongodb.file.models.Photo; @Service public class PhotoService { diff --git a/persistence-modules/spring-boot-persistence-mongodb/src/main/java/com/baeldung/mongodb/services/VideoService.java b/persistence-modules/spring-boot-persistence-mongodb/src/main/java/com/baeldung/mongodb/file/services/VideoService.java similarity index 94% rename from persistence-modules/spring-boot-persistence-mongodb/src/main/java/com/baeldung/mongodb/services/VideoService.java rename to persistence-modules/spring-boot-persistence-mongodb/src/main/java/com/baeldung/mongodb/file/services/VideoService.java index ade1f7c73a..e4d3237bb1 100644 --- a/persistence-modules/spring-boot-persistence-mongodb/src/main/java/com/baeldung/mongodb/services/VideoService.java +++ b/persistence-modules/spring-boot-persistence-mongodb/src/main/java/com/baeldung/mongodb/file/services/VideoService.java @@ -1,4 +1,4 @@ -package com.baeldung.mongodb.services; +package com.baeldung.mongodb.file.services; import java.io.IOException; @@ -11,7 +11,7 @@ import org.springframework.data.mongodb.gridfs.GridFsTemplate; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; -import com.baeldung.mongodb.models.Video; +import com.baeldung.mongodb.file.models.Video; import com.mongodb.BasicDBObject; import com.mongodb.DBObject; import com.mongodb.client.gridfs.model.GridFSFile; diff --git a/persistence-modules/spring-boot-persistence-mongodb/src/main/java/com/baeldung/mongodb/web/PhotoController.java b/persistence-modules/spring-boot-persistence-mongodb/src/main/java/com/baeldung/mongodb/file/web/PhotoController.java similarity index 90% rename from persistence-modules/spring-boot-persistence-mongodb/src/main/java/com/baeldung/mongodb/web/PhotoController.java rename to persistence-modules/spring-boot-persistence-mongodb/src/main/java/com/baeldung/mongodb/file/web/PhotoController.java index 4d5746f0d8..55de8ffd1d 100644 --- a/persistence-modules/spring-boot-persistence-mongodb/src/main/java/com/baeldung/mongodb/web/PhotoController.java +++ b/persistence-modules/spring-boot-persistence-mongodb/src/main/java/com/baeldung/mongodb/file/web/PhotoController.java @@ -1,4 +1,4 @@ -package com.baeldung.mongodb.web; +package com.baeldung.mongodb.file.web; import java.io.IOException; import java.util.Base64; @@ -12,8 +12,8 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; -import com.baeldung.mongodb.models.Photo; -import com.baeldung.mongodb.services.PhotoService; +import com.baeldung.mongodb.file.models.Photo; +import com.baeldung.mongodb.file.services.PhotoService; @Controller public class PhotoController { diff --git a/persistence-modules/spring-boot-persistence-mongodb/src/main/java/com/baeldung/mongodb/web/VideoController.java b/persistence-modules/spring-boot-persistence-mongodb/src/main/java/com/baeldung/mongodb/file/web/VideoController.java similarity index 92% rename from persistence-modules/spring-boot-persistence-mongodb/src/main/java/com/baeldung/mongodb/web/VideoController.java rename to persistence-modules/spring-boot-persistence-mongodb/src/main/java/com/baeldung/mongodb/file/web/VideoController.java index 313ce9e650..cbe8c5d7da 100644 --- a/persistence-modules/spring-boot-persistence-mongodb/src/main/java/com/baeldung/mongodb/web/VideoController.java +++ b/persistence-modules/spring-boot-persistence-mongodb/src/main/java/com/baeldung/mongodb/file/web/VideoController.java @@ -1,4 +1,4 @@ -package com.baeldung.mongodb.web; +package com.baeldung.mongodb.file.web; import java.io.IOException; @@ -14,8 +14,8 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; -import com.baeldung.mongodb.models.Video; -import com.baeldung.mongodb.services.VideoService; +import com.baeldung.mongodb.file.models.Video; +import com.baeldung.mongodb.file.services.VideoService; @Controller public class VideoController { From b96425265b7cb59946ecb2bbf871741675e9d2d0 Mon Sep 17 00:00:00 2001 From: DOHA Date: Fri, 2 Aug 2019 14:35:52 +0300 Subject: [PATCH 041/140] minor fix --- .../main/java/com/baeldung/graph/Graph.java | 20 ++++++++++--------- .../java/com/baeldung/tree/BinaryTree.java | 15 ++++++++------ .../com/baeldung/graph/GraphUnitTest.java | 5 ++++- 3 files changed, 24 insertions(+), 16 deletions(-) diff --git a/data-structures/src/main/java/com/baeldung/graph/Graph.java b/data-structures/src/main/java/com/baeldung/graph/Graph.java index 16b7e04297..40df2c713a 100644 --- a/data-structures/src/main/java/com/baeldung/graph/Graph.java +++ b/data-structures/src/main/java/com/baeldung/graph/Graph.java @@ -2,6 +2,7 @@ package com.baeldung.graph; import java.util.ArrayList; import java.util.HashMap; +import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Stack; @@ -29,7 +30,7 @@ public class Graph { while (!stack.isEmpty()) { int current = stack.pop(); isVisited[current] = true; - System.out.print(" " + current); + visit(current); for (int dest : adjVertices.get(current)) { if (!isVisited[dest]) stack.push(dest); @@ -44,29 +45,30 @@ public class Graph { private void dfsRecursive(int current, boolean[] isVisited) { isVisited[current] = true; - System.out.print(" " + current); + visit(current); for (int dest : adjVertices.get(current)) { if (!isVisited[dest]) dfsRecursive(dest, isVisited); } } - public void topologicalSort(int start) { - Stack result = new Stack(); + public List topologicalSort(int start) { + LinkedList result = new LinkedList(); boolean[] isVisited = new boolean[adjVertices.size()]; topologicalSortRecursive(start, isVisited, result); - while (!result.isEmpty()) { - System.out.print(" " + result.pop()); - } + return result; } - private void topologicalSortRecursive(int current, boolean[] isVisited, Stack result) { + private void topologicalSortRecursive(int current, boolean[] isVisited, LinkedList result) { isVisited[current] = true; for (int dest : adjVertices.get(current)) { if (!isVisited[dest]) topologicalSortRecursive(dest, isVisited, result); } - result.push(current); + result.addFirst(current); } + private void visit(int value) { + System.out.print(" " + value); + } } diff --git a/data-structures/src/main/java/com/baeldung/tree/BinaryTree.java b/data-structures/src/main/java/com/baeldung/tree/BinaryTree.java index ff73ee8e54..bb62714006 100644 --- a/data-structures/src/main/java/com/baeldung/tree/BinaryTree.java +++ b/data-structures/src/main/java/com/baeldung/tree/BinaryTree.java @@ -103,14 +103,14 @@ public class BinaryTree { public void traverseInOrder(Node node) { if (node != null) { traverseInOrder(node.left); - System.out.print(" " + node.value); + visit(node.value); traverseInOrder(node.right); } } public void traversePreOrder(Node node) { if (node != null) { - System.out.print(" " + node.value); + visit(node.value); traversePreOrder(node.left); traversePreOrder(node.right); } @@ -120,7 +120,7 @@ public class BinaryTree { if (node != null) { traversePostOrder(node.left); traversePostOrder(node.right); - System.out.print(" " + node.value); + visit(node.value); } } @@ -159,7 +159,7 @@ public class BinaryTree { stack.push(current); } current = stack.pop(); - System.out.print(" " + current.value); + visit(current.value); if(current.right != null) { current = current.right; stack.push(current); @@ -173,7 +173,7 @@ public class BinaryTree { stack.push(root); while(! stack.isEmpty()) { current = stack.pop(); - System.out.print(" " + current.value); + visit(current.value); if(current.right != null) stack.push(current.right); @@ -196,7 +196,7 @@ public class BinaryTree { if (!hasChild || isPrevLastChild) { current = stack.pop(); - System.out.print(" " + current.value); + visit(current.value); prev = current; } else { if (current.right != null) { @@ -209,6 +209,9 @@ public class BinaryTree { } } + private void visit(int value) { + System.out.print(" " + value); + } class Node { int value; diff --git a/data-structures/src/test/java/com/baeldung/graph/GraphUnitTest.java b/data-structures/src/test/java/com/baeldung/graph/GraphUnitTest.java index 249cb6e093..09b92115d2 100644 --- a/data-structures/src/test/java/com/baeldung/graph/GraphUnitTest.java +++ b/data-structures/src/test/java/com/baeldung/graph/GraphUnitTest.java @@ -1,5 +1,7 @@ package com.baeldung.graph; +import java.util.List; + import org.junit.Test; public class GraphUnitTest { @@ -15,7 +17,8 @@ public class GraphUnitTest { @Test public void givenDirectedGraph_whenGetTopologicalSort_thenPrintValuesSorted() { Graph graph = createDirectedGraph(); - graph.topologicalSort(0); + List list = graph.topologicalSort(0); + System.out.println(list); } private Graph createDirectedGraph() { 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 042/140] 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 0000000000..a5043f965d --- /dev/null +++ b/persistence-modules/spring-boot-mysql/README.md @@ -0,0 +1,3 @@ +## Relevant Articles: + +- [Setting the MySQL JDBC Timezone Using Spring Boot Configuration](https://www.baeldung.com/mysql-jdbc-timezone-spring-boot) 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 043/140] 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 b4b16fbaef..5bdf5a6a90 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 044/140] 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 5bdf5a6a90..44a19a3dd8 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 045/140] 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 1b042ac3c5..cb5898d307 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 046/140] 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 35286115d4..b2f8319e58 100644 --- a/java-dates-2/README.md +++ b/java-dates-2/README.md @@ -1,3 +1,4 @@ ## Relevant Articles: - [Converting Between LocalDate and XMLGregorianCalendar](https://www.baeldung.com/java-localdate-to-xmlgregoriancalendar) - [Convert Time to Milliseconds in Java](https://www.baeldung.com/java-time-milliseconds) +- [Check If a String Is a Valid Date in Java](https://www.baeldung.com/java-string-valid-date) 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 047/140] 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 cb5898d307..6890b29f7b 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 048/140] 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 81c3d6c354..3293e9b23d 100644 --- a/core-java-modules/core-java-lang-syntax/README.md +++ b/core-java-modules/core-java-lang-syntax/README.md @@ -18,3 +18,4 @@ - [The Modulo Operator in Java](https://www.baeldung.com/modulo-java) - [Ternary Operator In Java](https://www.baeldung.com/java-ternary-operator) - [Java instanceof Operator](https://www.baeldung.com/java-instanceof) +- [Breaking Out of Nested Loops](https://www.baeldung.com/java-breaking-out-nested-loop) 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 049/140] 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 0000000000..4c9e3b9ddf --- /dev/null +++ b/spring-core-2/README.MD @@ -0,0 +1,3 @@ +## Relevant Articles: + +- [Understanding getBean() in Spring](https://www.baeldung.com/spring-getbean) 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 050/140] 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 7282a4efad..61a65b2e5a 100644 --- a/testing-modules/junit-5-advanced/README.md +++ b/testing-modules/junit-5-advanced/README.md @@ -1,3 +1,4 @@ -### Relevant Articles +## Relevant Articles: - [JUnit 5 TestWatcher API](https://www.baeldung.com/junit-testwatcher) +- [JUnit Custom Display Name Generator API](https://www.baeldung.com/junit-custom-display-name-generator) 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 051/140] 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 e8302c14ef..bf917e81fb 100644 --- a/xstream/README.md +++ b/xstream/README.md @@ -1,4 +1,6 @@ -### Relevant Articles: +## Relevant Articles: + - [XStream User Guide: JSON](http://www.baeldung.com/xstream-json-processing) - [XStream User Guide: Converting XML to Objects](http://www.baeldung.com/xstream-deserialize-xml-to-object) - [XStream User Guide: Converting Objects to XML](http://www.baeldung.com/xstream-serialize-object-to-xml) +- [Remote Code Execution with XStream](https://www.baeldung.com/java-xstream-remote-code-execution) 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 052/140] 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 0000000000..81e0ffe5c8 --- /dev/null +++ b/spring-cloud/spring-cloud-stream/spring-cloud-stream-kafka/README.MD @@ -0,0 +1,3 @@ +## Relevant Articles: + +- [Guide to Spring Cloud Stream with Kafka, Apache Avro and Confluent Schema Registry](https://www.baeldung.com/spring-cloud-stream-kafka-avro-confluent) 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 053/140] 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 0000000000..117d636bcc --- /dev/null +++ b/testing-modules/easy-random/README.MD @@ -0,0 +1,3 @@ +## Relevant Articles: + +- [Quick Guide to EasyRandom in Java](https://www.baeldung.com/java-easy-random) 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 054/140] 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 d8c233a00e..0af899d474 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 055/140] 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 0af899d474..bb2a58483f 100644 --- a/jackson-2/README.md +++ b/jackson-2/README.md @@ -2,7 +2,7 @@ ## Jackson Cookbooks and Examples -###The Course +### The Course The "REST With Spring" Classes: http://bit.ly/restwithspring ### Relevant Articles: 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 056/140] 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 3fd1d17994..6f0b8c8123 100644 --- a/spring-boot-data/README.md +++ b/spring-boot-data/README.md @@ -1,3 +1,5 @@ -### Relevant Articles: +## Relevant Articles: + - [Formatting JSON Dates in Spring Boot](https://www.baeldung.com/spring-boot-formatting-json-dates) - [Rendering Exceptions in JSON with Spring](https://www.baeldung.com/spring-exceptions-json) +- [Disable Spring Data Auto Configuration](https://www.baeldung.com/spring-data-disable-auto-config) 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 057/140] 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 6890b29f7b..6b98e95725 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 058/140] 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 245fa93ba7..d11510b2aa 100644 --- a/core-java-modules/core-java-8-2/README.md +++ b/core-java-modules/core-java-8-2/README.md @@ -7,3 +7,4 @@ - [How to Delay Code Execution in Java](https://www.baeldung.com/java-delay-code-execution) - [Run JAR Application With Command Line Arguments](https://www.baeldung.com/java-run-jar-with-arguments) - [Java 8 Stream skip() vs limit()](https://www.baeldung.com/java-stream-skip-vs-limit) +- [Guide to Java BiFunction Interface](https://www.baeldung.com/java-bifunction-interface) 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 059/140] 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 b5f71cc253..398ba5b376 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 060/140] 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 0970eabeff..1b06c13953 100644 --- a/testing-modules/spring-testing/README.md +++ b/testing-modules/spring-testing/README.md @@ -1,8 +1,8 @@ -### Relevant Articles: +## Relevant Articles: - [Mockito.mock() vs @Mock vs @MockBean](http://www.baeldung.com/java-spring-mockito-mock-mockbean) - [A Quick Guide to @TestPropertySource](https://www.baeldung.com/spring-test-property-source) - [Guide to ReflectionTestUtils for Unit Testing](https://www.baeldung.com/spring-reflection-test-utils) - [How to Test the @Scheduled Annotation](https://www.baeldung.com/spring-testing-scheduled-annotation) - [Using SpringJUnit4ClassRunner with Parameterized](https://www.baeldung.com/springjunit4classrunner-parameterized) -- [Override properties in Spring]() +- [Override Properties in Spring’s Tests](https://www.baeldung.com/spring-tests-override-properties) 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 061/140] 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 b5e91d8d60..d3296bd457 100644 --- a/spring-all/README.md +++ b/spring-all/README.md @@ -34,3 +34,4 @@ The "REST With Spring" Classes: http://bit.ly/restwithspring - [Spring Events](https://www.baeldung.com/spring-events) - [Spring Null-Safety Annotations](https://www.baeldung.com/spring-null-safety-annotations) - [Using @Autowired in Abstract Classes](https://www.baeldung.com/spring-autowired-abstract-class) +- [The Spring @Qualifier Annotation](https://www.baeldung.com/spring-qualifier-annotation) 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 062/140] 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 44a19a3dd8..ad00bd5799 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 063/140] 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 ad00bd5799..ac44d06e1f 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 064/140] 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 0000000000..9bd441a6bd --- /dev/null +++ b/spring-thymeleaf-2/README.md @@ -0,0 +1,3 @@ +## Relevant Articles: + +- [Working with Enums in Thymeleaf](https://www.baeldung.com/thymeleaf-enums) From 47f03c50e66e217600c4afbdb189aa2a016c7faf Mon Sep 17 00:00:00 2001 From: Sjmillington Date: Fri, 2 Aug 2019 15:14:18 +0100 Subject: [PATCH 065/140] [BAEL-9020] updated ApplicationIntegrationTest to ApplicationLiveTest to reflect test requirements --- ...ApplicationIntegrationTest.java => ApplicationLiveTest.java} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename twitter4j/src/test/java/com/baeldung/{ApplicationIntegrationTest.java => ApplicationLiveTest.java} (95%) diff --git a/twitter4j/src/test/java/com/baeldung/ApplicationIntegrationTest.java b/twitter4j/src/test/java/com/baeldung/ApplicationLiveTest.java similarity index 95% rename from twitter4j/src/test/java/com/baeldung/ApplicationIntegrationTest.java rename to twitter4j/src/test/java/com/baeldung/ApplicationLiveTest.java index 4696283faa..0d4114e72d 100644 --- a/twitter4j/src/test/java/com/baeldung/ApplicationIntegrationTest.java +++ b/twitter4j/src/test/java/com/baeldung/ApplicationLiveTest.java @@ -9,7 +9,7 @@ import org.junit.Test; import twitter4j.TwitterException; -public class ApplicationIntegrationTest { +public class ApplicationLiveTest { /** * In order run this jUnit test you need to configure your API details in the twitter4j.properties 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 066/140] 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 9526b15be5..a833ca30bb 100644 --- a/core-java-modules/core-java-security/README.md +++ b/core-java-modules/core-java-security/README.md @@ -10,3 +10,4 @@ - [SSL Handshake Failures](https://www.baeldung.com/java-ssl-handshake-failures) - [SHA-256 and SHA3-256 Hashing in Java](https://www.baeldung.com/sha-256-hashing-java) - [Enabling TLS v1.2 in Java 7](https://www.baeldung.com/java-7-tls-v12) +- [The Java SecureRandom Class](https://www.baeldung.com/java-secure-random) 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 067/140] 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 6b98e95725..349744740c 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 068/140] 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 349744740c..400aa475d1 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 069/140] 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 dc6bcd0716..b5392f5883 100644 --- a/libraries-server/README.md +++ b/libraries-server/README.md @@ -1,4 +1,4 @@ -### Relevant articles +## Relevant Articles: - [Embedded Jetty Server in Java](http://www.baeldung.com/jetty-embedded) - [Introduction to Netty](http://www.baeldung.com/netty) @@ -8,3 +8,4 @@ - [Testing Netty with EmbeddedChannel](http://www.baeldung.com/testing-netty-embedded-channel) - [MQTT Client in Java](https://www.baeldung.com/java-mqtt-client) - [Guide to XMPP Smack Client](https://www.baeldung.com/xmpp-smack-chat-client) +- [A Guide to NanoHTTPD](https://www.baeldung.com/nanohttpd) 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 070/140] 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 398ba5b376..45feff3edc 100644 --- a/core-java-modules/core-java-arrays/README.md +++ b/core-java-modules/core-java-arrays/README.md @@ -7,7 +7,7 @@ - [Check if a Java Array Contains a Value](http://www.baeldung.com/java-array-contains-value) - [Initializing Arrays in Java](http://www.baeldung.com/java-initialize-array) - [Guide to the java.util.Arrays Class](http://www.baeldung.com/java-util-arrays) -- [Jagged Arrays In Java](http://www.baeldung.com/java-jagged-arrays) +- [Multi-Dimensional Arrays In Java](http://www.baeldung.com/java-jagged-arrays) - [Find Sum and Average in a Java Array](http://www.baeldung.com/java-array-sum-average) - [Arrays in Java: A Reference Guide](https://www.baeldung.com/java-arrays-guide) - [How to Invert an Array in Java](http://www.baeldung.com/java-invert-array) 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 071/140] 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 9034c3b3b1..1ac3b6c089 100644 --- a/core-java-modules/core-java-nio/README.md +++ b/core-java-modules/core-java-nio/README.md @@ -1,3 +1,3 @@ -## Relevant articles: +## Relevant Articles: -- [Determine File Creating Date in Java](https://www.baeldung.com/java-file-creation-date) +- [Determine File Creation Date in Java](https://www.baeldung.com/java-file-creation-date) 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 072/140] 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 cd3711d573..6a38df484a 100644 --- a/algorithms-miscellaneous-3/README.md +++ b/algorithms-miscellaneous-3/README.md @@ -1,4 +1,4 @@ -## Relevant articles: +## Relevant Articles: - [Java Two Pointer Technique](https://www.baeldung.com/java-two-pointer-technique) - [Implementing Simple State Machines with Java Enums](https://www.baeldung.com/java-enum-simple-state-machine) 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 073/140] 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 ac44d06e1f..55760bfac7 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 074/140] 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 075/140] 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 076/140] 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 077/140] [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 0000000000..8101138c0e --- /dev/null +++ b/libraries-data-2/README.md @@ -0,0 +1,11 @@ +### Relevant articles +- [Introduction to Apache Flink with Java](http://www.baeldung.com/apache-flink) +- [Guide to the HyperLogLog Algorithm](http://www.baeldung.com/java-hyperloglog) +- [Introduction to Conflict-Free Replicated Data Types](http://www.baeldung.com/java-conflict-free-replicated-data-types) +- [Introduction to javax.measure](http://www.baeldung.com/javax-measure) +- [Introduction To Docx4J](http://www.baeldung.com/docx4j) +- [Interact with Google Sheets from Java](http://www.baeldung.com/google-sheets-java-client) +- [Introduction To OpenCSV](http://www.baeldung.com/opencsv) +- [Introduction to Smooks](http://www.baeldung.com/smooks) +- [A Guide to Infinispan in Java](http://www.baeldung.com/infinispan) + diff --git a/libraries-data-2/log4j.properties b/libraries-data-2/log4j.properties new file mode 100644 index 0000000000..2173c5d96f --- /dev/null +++ b/libraries-data-2/log4j.properties @@ -0,0 +1 @@ +log4j.rootLogger=INFO, stdout diff --git a/libraries-data-2/pom.xml b/libraries-data-2/pom.xml new file mode 100644 index 0000000000..97820859ba --- /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 0000000000..6fe29d26e3 --- /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 0000000000..d02b1bcb83 --- /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 0000000000..f4e322f1e8 --- /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 0000000000..fc5064bafa --- /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 0000000000..514085f9c4 --- /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 0000000000..8e6f3f8f37 --- /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 0000000000..268ceec7f3 --- /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 0000000000..b3f75256ae --- /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 0000000000..c39b8413d1 --- /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 0000000000..05828d9588 --- /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 0000000000..f9103d225c --- /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 0000000000..967b266bb6 --- /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 0000000000..9aaf8b9877 --- /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 0000000000..641fae42dd --- /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 0000000000..8a78d50551 --- /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 0000000000..eda511d7a7 --- /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 0000000000..942a2fb62d --- /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 0000000000..85c0d539a3 --- /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 0000000000..de30cd5c8e --- /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 0000000000..26862b8d65 --- /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 0000000000..f3675ae689 --- /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 0000000000..fd7e4d82d4 --- /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 0000000000..f7978acf24 --- /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 0000000000..af9caaae12 --- /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 0000000000..d9e5f96333 --- /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 0000000000..799006e2f9 --- /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 0000000000..f145f67f11 --- /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 0000000000..086f32677e --- /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 0000000000..bacfdcff3d --- /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 0000000000..6f52160ba8 --- /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 0000000000..9a46fbc495 --- /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 0000000000..79366e3d20 --- /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 0000000000..fa317f93b7 --- /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 0000000000..3975921da0 --- /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 0000000000..3e1f4a7ef4 --- /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 0000000000..047e1fe8a3 --- /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 0000000000..53c50bdf46 --- /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 0000000000..827a0fc907 --- /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 0000000000..840263e430 --- /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 0000000000..f46fffbb59 --- /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 0000000000..8a98dae4b5 --- /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 0000000000..5c788e86d6 --- /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 0000000000..358b3390f9 --- /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 0000000000..2c8113771e --- /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 0000000000..2a9d430430 --- /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 0000000000..46cc77cbba --- /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 0000000000..800c6c2775 --- /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 0000000000..e23eea1714 --- /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 0000000000..fca96684ad --- /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 0000000000..df7fea58f8 --- /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 078/140] 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 079/140] 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 0d4114e72d..4696283faa 100644 --- a/twitter4j/src/test/java/com/baeldung/ApplicationIntegrationTest.java +++ b/twitter4j/src/test/java/com/baeldung/ApplicationIntegrationTest.java @@ -9,7 +9,7 @@ import org.junit.Test; import twitter4j.TwitterException; -public class ApplicationLiveTest { +public class ApplicationIntegrationTest { /** * In order run this jUnit test you need to configure your API details in the twitter4j.properties From 4f948b26f8b6367f133c183838b6253ea755c3e7 Mon Sep 17 00:00:00 2001 From: pcoates Date: Fri, 2 Aug 2019 16:43:35 +0100 Subject: [PATCH 080/140] 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 f0e921bf37..a91766f772 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 92fa28ed6f..5a2f6e4c96 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.Configuration; 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 868cfff0ac..35f906a7fc 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.Arrays; 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 03cb34eeb5..d51017d07a 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 b0d16c9305..5e29011995 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 c021bd49ff..642d35b44e 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 42d7e88cbd..0000000000 --- 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 b4067ed795..0000000000 --- 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 f6a966b0f6..0000000000 --- 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 7d900d8ea8..0000000000 --- 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 081/140] 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 0000000000..12c5987cc4 --- /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 0000000000..d90087ec5c --- /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 0000000000..25dcdf29c1 --- /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 082/140] 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 642d35b44e..b84279a3b2 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 083/140] 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 a176247d4c..0000000000 --- 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 45cdc066a0..0000000000 --- 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 6eb13c18f6..0000000000 --- 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 deef22c4d6..0000000000 --- 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 225f37bdd0..0000000000 --- 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 b84a49a230..0000000000 --- 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 5a2f6e4c96..0000000000 --- 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 35f906a7fc..0000000000 --- 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 0ae04ea092..0000000000 --- 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 75d4d20e55..0000000000 --- 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 590da24962..0000000000 --- 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 47e7a3b9e0..0000000000 --- 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 7d900d8ea8..0000000000 --- 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 d51017d07a..0000000000 --- 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 aa7a91bac5..0000000000 --- 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 084/140] 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 b84279a3b2..3dcad69d97 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 d90087ec5c..64bf3ffb93 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 org.springframework.context.annotation.Bean; 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 085/140] 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 a91766f772..f0e921bf37 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 086/140] 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 3dcad69d97..3e6789dcb6 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 087/140] 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 352da33fee..c351d4ded2 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 95c467aa1259b8ef706f1cabc3a782d7dfd984f1 Mon Sep 17 00:00:00 2001 From: eric-martin Date: Fri, 2 Aug 2019 21:38:25 -0500 Subject: [PATCH 088/140] Remove extra .gitignore files --- .../core-java-networking-2/.gitignore | 25 ------------------ java-numbers-2/.gitignore | 26 ------------------- 2 files changed, 51 deletions(-) delete mode 100644 core-java-modules/core-java-networking-2/.gitignore delete mode 100644 java-numbers-2/.gitignore diff --git a/core-java-modules/core-java-networking-2/.gitignore b/core-java-modules/core-java-networking-2/.gitignore deleted file mode 100644 index 374c8bf907..0000000000 --- a/core-java-modules/core-java-networking-2/.gitignore +++ /dev/null @@ -1,25 +0,0 @@ -*.class - -0.* - -#folders# -/target -/neoDb* -/data -/src/main/webapp/WEB-INF/classes -*/META-INF/* -.resourceCache - -# Packaged files # -*.jar -*.war -*.ear - -# Files generated by integration tests -backup-pom.xml -/bin/ -/temp - -#IntelliJ specific -.idea/ -*.iml \ No newline at end of file diff --git a/java-numbers-2/.gitignore b/java-numbers-2/.gitignore deleted file mode 100644 index 3de4cc647e..0000000000 --- a/java-numbers-2/.gitignore +++ /dev/null @@ -1,26 +0,0 @@ -*.class - -0.* - -#folders# -/target -/neoDb* -/data -/src/main/webapp/WEB-INF/classes -*/META-INF/* -.resourceCache - -# Packaged files # -*.jar -*.war -*.ear - -# Files generated by integration tests -*.txt -backup-pom.xml -/bin/ -/temp - -#IntelliJ specific -.idea/ -*.iml \ No newline at end of file From ef787e65257cdf95b4bb9c70af8207cf74fdbe05 Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Sat, 3 Aug 2019 13:54:33 +0300 Subject: [PATCH 089/140] Update README.md --- data-structures/README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/data-structures/README.md b/data-structures/README.md index 2d92068390..5ea9657173 100644 --- a/data-structures/README.md +++ b/data-structures/README.md @@ -1,4 +1,5 @@ ## Relevant articles: -[The Trie Data Structure in Java](https://www.baeldung.com/trie-java) -[Implementing a Binary Tree in Java](https://www.baeldung.com/java-binary-tree) +- [The Trie Data Structure in Java](https://www.baeldung.com/trie-java) +- [Implementing a Binary Tree in Java](https://www.baeldung.com/java-binary-tree) +- [Depth First Search in Java](https://www.baeldung.com/java-depth-first-search) From e6a38aada17da71d2de8763f934af4aa83a5dfbd Mon Sep 17 00:00:00 2001 From: DOHA Date: Sat, 3 Aug 2019 15:24:39 +0300 Subject: [PATCH 090/140] 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 0000000000..8ccd2c773b --- /dev/null +++ b/spring-all/src/main/java/com/baeldung/scheduling/ScheduledFixedRateExample.java @@ -0,0 +1,18 @@ +package com.baeldung.scheduling; + +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +@Component +@EnableAsync +public class ScheduledFixedRateExample { + @Async + @Scheduled(fixedRate = 1000) + public void scheduleFixedRateTaskAsync() throws InterruptedException { + System.out.println("Fixed rate task async - " + System.currentTimeMillis() / 1000); + Thread.sleep(2000); + } + +} diff --git a/spring-all/src/main/java/com/baeldung/scheduling/SpringSchedulingFixedRateConfig.java b/spring-all/src/main/java/com/baeldung/scheduling/SpringSchedulingFixedRateConfig.java new file mode 100644 index 0000000000..6000f75ec2 --- /dev/null +++ b/spring-all/src/main/java/com/baeldung/scheduling/SpringSchedulingFixedRateConfig.java @@ -0,0 +1,12 @@ +package com.baeldung.scheduling; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.EnableScheduling; + +@Configuration +@EnableScheduling +@ComponentScan("com.baeldung.scheduling") +public class SpringSchedulingFixedRateConfig { + +} \ No newline at end of file diff --git a/spring-all/src/test/java/com/baeldung/scheduling/ScheduledFixedRateExampleIntegrationTest.java b/spring-all/src/test/java/com/baeldung/scheduling/ScheduledFixedRateExampleIntegrationTest.java new file mode 100644 index 0000000000..ef7c7c68fd --- /dev/null +++ b/spring-all/src/test/java/com/baeldung/scheduling/ScheduledFixedRateExampleIntegrationTest.java @@ -0,0 +1,17 @@ +package com.baeldung.scheduling; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.AnnotationConfigContextLoader; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = { SpringSchedulingFixedRateConfig.class }, loader = AnnotationConfigContextLoader.class) +public class ScheduledFixedRateExampleIntegrationTest { + + @Test + public void testScheduledFixedRateAnnotation() throws InterruptedException { + Thread.sleep(5000); + } +} From 6d7ff4f62a34e657ff6d15144ca62bbc7e69ecaf Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Sun, 4 Aug 2019 01:04:05 +0300 Subject: [PATCH 091/140] Create README.md --- core-java-modules/core-java-jpms/README.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 core-java-modules/core-java-jpms/README.md diff --git a/core-java-modules/core-java-jpms/README.md b/core-java-modules/core-java-jpms/README.md new file mode 100644 index 0000000000..5c424711bc --- /dev/null +++ b/core-java-modules/core-java-jpms/README.md @@ -0,0 +1,3 @@ +### Relevant Articles + +- [Design Strategies for Decoupling Java Modules](https://www.baeldung.com/java-modules-decoupling-design-strategies) From c06471c72708ef0f288563b279eab75bbdf235a3 Mon Sep 17 00:00:00 2001 From: Joel Juarez Date: Sun, 4 Aug 2019 02:26:11 +0200 Subject: [PATCH 092/140] BAEL-3043: Datastax Java Driver for Apache Cassandra (#7290) --- persistence-modules/java-cassandra/pom.xml | 17 +++- .../datastax/cassandra/Application.java | 46 +++++++++ .../cassandra/CassandraConnector.java | 28 ++++++ .../datastax/cassandra/domain/Video.java | 51 ++++++++++ .../repository/KeyspaceRepository.java | 27 ++++++ .../cassandra/repository/VideoRepository.java | 94 +++++++++++++++++++ 6 files changed, 262 insertions(+), 1 deletion(-) create mode 100644 persistence-modules/java-cassandra/src/main/java/com/baeldung/datastax/cassandra/Application.java create mode 100644 persistence-modules/java-cassandra/src/main/java/com/baeldung/datastax/cassandra/CassandraConnector.java create mode 100644 persistence-modules/java-cassandra/src/main/java/com/baeldung/datastax/cassandra/domain/Video.java create mode 100644 persistence-modules/java-cassandra/src/main/java/com/baeldung/datastax/cassandra/repository/KeyspaceRepository.java create mode 100644 persistence-modules/java-cassandra/src/main/java/com/baeldung/datastax/cassandra/repository/VideoRepository.java diff --git a/persistence-modules/java-cassandra/pom.xml b/persistence-modules/java-cassandra/pom.xml index 708d2b3c76..e7c93bc4e5 100644 --- a/persistence-modules/java-cassandra/pom.xml +++ b/persistence-modules/java-cassandra/pom.xml @@ -4,7 +4,7 @@ com.baeldung java-cassandra 1.0.0-SNAPSHOT - java-cassandra + java-cassandra com.baeldung @@ -29,6 +29,19 @@ ${cassandra-unit.version} + + + com.datastax.oss + java-driver-core + ${datastax-cassandra.version} + + + + io.netty + netty-handler + ${io-netty.version} + + @@ -39,6 +52,8 @@ 3.1.2 3.1.1.0 + 4.1.0 + 4.1.34.Final 18.0 diff --git a/persistence-modules/java-cassandra/src/main/java/com/baeldung/datastax/cassandra/Application.java b/persistence-modules/java-cassandra/src/main/java/com/baeldung/datastax/cassandra/Application.java new file mode 100644 index 0000000000..23140e0455 --- /dev/null +++ b/persistence-modules/java-cassandra/src/main/java/com/baeldung/datastax/cassandra/Application.java @@ -0,0 +1,46 @@ +package com.baeldung.datastax.cassandra; + +import com.baeldung.datastax.cassandra.domain.Video; +import com.baeldung.datastax.cassandra.repository.KeyspaceRepository; +import com.baeldung.datastax.cassandra.repository.VideoRepository; +import com.datastax.oss.driver.api.core.CqlSession; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.time.Instant; +import java.time.temporal.ChronoUnit; +import java.util.List; + +public class Application { + + private static final Logger LOG = LoggerFactory.getLogger(Application.class); + + public static void main(String[] args) { + new Application().run(); + } + + public void run() { + CassandraConnector connector = new CassandraConnector(); + connector.connect("127.0.0.1", 9042, "datacenter1"); + CqlSession session = connector.getSession(); + + KeyspaceRepository keyspaceRepository = new KeyspaceRepository(session); + + keyspaceRepository.createKeyspace("testKeyspace", "SimpleStrategy", 1); + keyspaceRepository.useKeyspace("testKeyspace"); + + VideoRepository videoRepository = new VideoRepository(session); + + videoRepository.createTable(); + + videoRepository.insertVideo(new Video("Video Title 1", Instant.now())); + videoRepository.insertVideo(new Video("Video Title 2", + Instant.now().minus(1, ChronoUnit.DAYS))); + + List - 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 55b2f34289..ab34271273 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 0000000000..522c43252f --- /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 0000000000..e5c6830393 --- /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 b269f547ec..d534e5cea6 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 d543b9b09b..14e018a5f9 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 59954784f9..8fe57016e3 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 ec108353a0..0012a63012 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 4a7829e867..135ef1054a 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 099/140] 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 7d900d8ea8..e0098e7c7e 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 4f320935cf..55ee0e6e59 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 class JPAQueryParamsUnitTest { 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 class JPAQueryParamsUnitTest { 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 class JPAQueryParamsUnitTest { 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 class JPAQueryParamsUnitTest { 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 class JPAQueryParamsUnitTest { 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 class JPAQueryParamsUnitTest { 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 100/140] 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 ee17c1e8ea..0000000000 --- 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 101/140] 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 6dd1ae67f3..9b1d12a3be 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 102/140] [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 97820859ba..5570761d91 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 d02b1bcb83..0000000000 --- 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 f4e322f1e8..0000000000 --- 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 fc5064bafa..0000000000 --- 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 514085f9c4..0000000000 --- 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 8e6f3f8f37..0000000000 --- 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 268ceec7f3..0000000000 --- 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 b3f75256ae..0000000000 --- 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 c39b8413d1..0000000000 --- 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 05828d9588..0000000000 --- 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 f9103d225c..0000000000 --- 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 967b266bb6..0000000000 --- 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 9aaf8b9877..0000000000 --- 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 f46fffbb59..0000000000 --- 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 8a98dae4b5..0000000000 --- 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 5c788e86d6..0000000000 --- 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 e8ffde5f99..438fe6a519 100644 --- a/libraries/pom.xml +++ b/libraries/pom.xml @@ -36,12 +36,6 @@ cglib ${cglib.version} - - - com.opencsv - opencsv - ${opencsv.version} - org.apache.commons commons-lang3 @@ -52,11 +46,6 @@ commons-net ${commons-net.version} - - tec.units - unit-ri - ${unit-ri.version} - org.jasypt jasypt @@ -347,11 +336,6 @@ ${org.hamcrest.java-hamcrest.version} test - - net.agkn - hll - ${hll.version} - net.bytebuddy byte-buddy @@ -464,21 +448,6 @@ jgrapht-core ${jgrapht.version} - - com.netopyr.wurmloch - wurmloch-crdt - ${crdt.version} - - - org.docx4j - docx4j - ${docx4j.version} - - - javax.xml.bind - jaxb-api - ${jaxb-api.version} - com.github.ben-manes.caffeine caffeine @@ -509,11 +478,6 @@ google-http-client-gson ${googleclient.version} - - org.infinispan - infinispan-core - ${infinispan.version} - @@ -553,11 +517,6 @@ google-oauth-client-jetty ${google-api.version} - - com.google.apis - google-api-services-sheets - ${google-sheets.version} - org.apache.kafka kafka-streams @@ -581,12 +540,6 @@ test test - - - org.milyn - milyn-smooks-all - ${smooks.version} - com.mashape.unirest unirest-java @@ -815,7 +768,6 @@ 4.0.0 1.21 1.23.0 - 0.1.0 0.7.0 3.2.7 1.9.2 @@ -839,7 +791,6 @@ 3.5.0 3.0.0 2.0.0.0 - 1.6.0 1.7.1 2.1.2 1.0 @@ -852,17 +803,13 @@ 2.10 1.5.1 1.15 - 1.0.3 1.0.0 3.10.2 2.5.5 1.23.0 v4-rev493-1.21.0 2.0.0 - 1.7.0 3.0.14 - 9.1.5.Final - 4.1 1.4.9 2.1.2 1.10.L001 @@ -893,8 +840,6 @@ 1.2.6 4.8.1 1.0.1 - 3.3.5 - 2.1 1.58 1.19.4 1.6.0 diff --git a/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 641fae42dd..0000000000 --- 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 8a78d50551..0000000000 --- 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 eda511d7a7..0000000000 --- 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 942a2fb62d..0000000000 --- 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 85c0d539a3..0000000000 --- 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 de30cd5c8e..0000000000 --- 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 26862b8d65..0000000000 --- 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 f3675ae689..0000000000 --- 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 fd7e4d82d4..0000000000 --- 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 f7978acf24..0000000000 --- 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 af9caaae12..0000000000 --- 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 d9e5f96333..0000000000 --- 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 799006e2f9..0000000000 --- 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 f145f67f11..0000000000 --- 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 086f32677e..0000000000 --- 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 bacfdcff3d..0000000000 --- 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 6f52160ba8..0000000000 --- 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 9a46fbc495..0000000000 --- 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 79366e3d20..0000000000 --- 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 fa317f93b7..0000000000 --- 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 3975921da0..0000000000 --- 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 3e1f4a7ef4..0000000000 --- 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 047e1fe8a3..0000000000 --- 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 53c50bdf46..0000000000 --- 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 827a0fc907..0000000000 --- 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 840263e430..0000000000 --- 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 358b3390f9..0000000000 --- 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 2c8113771e..0000000000 --- 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 2a9d430430..0000000000 --- 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 46cc77cbba..0000000000 --- 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 800c6c2775..0000000000 --- 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 e23eea1714..0000000000 --- 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 fca96684ad..0000000000 --- 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 df7fea58f8..0000000000 --- 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 103/140] [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 5570761d91..87c620f438 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 104/140] BAEL-2928 - Solve conflicts in pom.xml --- pom.xml | 1687 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 846 insertions(+), 841 deletions(-) diff --git a/pom.xml b/pom.xml index 45c84ffb11..0f7e0edd3e 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 + 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 + blade - bootique + 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 + 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 + 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 + + 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 + + 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 + mapstruct + maven + maven-archetype + + maven-polyglot/maven-polyglot-json-extension + + mesos-marathon + metrics + + microprofile + msf4j + + mustache + mybatis - optaplanner - orika - osgi + optaplanner + orika + osgi - patterns - pdf - performance-tests - - protobuffer + patterns + pdf + performance-tests + + protobuffer - persistence-modules - quarkus + persistence-modules + quarkus - rabbitmq - - ratpack - reactor-core - rest-with-spark-java - resteasy - restx - - rule-engines + 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 - - + + 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 - - - + + 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 + + parent-boot-1 + parent-boot-2 + parent-spring-4 + parent-spring-5 + parent-java + parent-kotlin - saas - spark-java + saas + spark-java - spring-4 + 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-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-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 + 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-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-cloud - spring-cloud-bus - - spring-cloud-data-flow + + + + + - spring-core - spring-core-2 - spring-cucumber + spring-core + spring-core-2 + spring-cucumber - spring-data-rest - spring-data-rest-querydsl - spring-dispatcher-servlet - spring-drools - spring-di + spring-data-rest + + spring-dispatcher-servlet + spring-drools + spring-di + spring-ehcache + + spring-exceptions - spring-ehcache - spring-ejb - spring-exceptions + spring-freemarker - spring-freemarker + spring-groovy - spring-groovy + spring-integration - spring-integration + spring-jenkins-pipeline + spring-jersey + spring-jinq + spring-jms + spring-jooq - spring-jenkins-pipeline - spring-jersey - spring-jinq - spring-jms - spring-jooq + spring-kafka + spring-katharsis - spring-kafka - spring-katharsis + spring-ldap - 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-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-protobuf - + spring-quartz - 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-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-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-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-thymeleaf - spring-userservice + + spring-vertx - spring-vault - spring-vertx + - spring-webflux-amqp + spring-zuul - spring-zuul + static-analysis + stripe + structurizr + struts-2 - static-analysis - stripe - structurizr - struts-2 + testing-modules - testing-modules + twilio + twitter4j - twilio - Twitter4J + undertow - undertow + vertx + vertx-and-rxjava + video-tutorials + vraptor - vavr - vertx - vertx-and-rxjava - video-tutorials - vraptor + wicket - wicket - - xml - xmlunit-2 - xstream + 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 - - + + 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 - - - + + 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 + + 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 + core-java-modules/core-java-concurrency-advanced + core-kotlin + core-kotlin-2 + core-kotlin-io - jenkins/hello-world - jws + jenkins/hello-world + jhipster + jws - libraries + libraries + persistence-modules/hibernate5 + persistence-modules/hibernate-mapping + persistence-modules/java-jpa + persistence-modules/java-jpa-2 + persistence-modules/java-mongodb + persistence-modules/jnosql - persistence-modules/hibernate5 - persistence-modules/hibernate-mapping - persistence-modules/java-jpa - persistence-modules/java-mongodb - persistence-modules/jnosql + vaadin + vavr + + - vaadin - - + + integration-lite-first - - integration-lite-first + + + + org.apache.maven.plugins + maven-surefire-plugin + + + **/*ManualTest.java + **/*LiveTest.java + + + **/*IntegrationTest.java + **/*IntTest.java + + + + + - - - - 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 - - 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 - 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 - 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 + dagger + data-structures + ddd + deeplearning4j + disruptor + dozer + drools + dubbo - dagger - data-structures - ddd - deeplearning4j - disruptor - dozer - drools - dubbo + ethereum - ethereum + feign + flyway-cdi-extension - feign - flyway-cdi-extension + geotools + google-cloud + google-web-toolkit + + + graphql/graphql-java + grpc + gson + guava + guava-collections + guava-modules + + guice - geotools - google-cloud - google-web-toolkit - - - graphql/graphql-java - grpc - gson - guava - guava-collections - guava-modules - - guice + hazelcast + helidon + httpclient + httpclient-simple + hystrix - hazelcast - helidon - httpclient - httpclient-simple - hystrix + image-processing + immutables - 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-rmi - java-spi - java-streams - - java-strings - java-strings-2 - java-vavr-stream - java-websocket - javafx - javax-servlets - javaxval - jaxb - + 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 + jee-7-security + jersey + jgit + jgroups + jhipster-5 + jib + jjwt + jmeter + jmh + jni + jooby + jsf + json + json-path + jsoup + jta - - kotlin-libraries + + kotlin-libraries - - libraries - libraries-data - libraries-apache-commons - libraries-security - libraries-server - libraries-http - linkrest - logging-modules - lombok - lucene + + 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 + mapstruct + maven + + maven-archetype + + maven-polyglot/maven-polyglot-json-extension + + mesos-marathon + metrics + + microprofile + msf4j + + mustache + mybatis - optaplanner - orika - osgi + optaplanner + orika + osgi - patterns - pdf - performance-tests - - protobuffer + patterns + pdf + performance-tests + + protobuffer - persistence-modules + persistence-modules - rabbitmq - - ratpack - reactor-core - rest-with-spark-java - resteasy - restx - - rule-engines - rsocket - rxjava - rxjava-2 + rabbitmq + + ratpack + reactor-core + resteasy + restx + + rule-engines + rsocket + rxjava + rxjava-2 + oauth2-framework-impl - + - + - - integration-lite-second + + integration-lite-second - - - - org.apache.maven.plugins - maven-surefire-plugin - - - **/*ManualTest.java - **/*LiveTest.java - - - **/*IntegrationTest.java - **/*IntTest.java - - - - - + + + + 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 + + parent-boot-1 + parent-boot-2 + parent-spring-4 + parent-spring-5 + parent-java + parent-kotlin - saas - spark-java + saas + spark-java - spring-4 + 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-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-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-cloud + spring-cloud-bus + + spring-cloud-data-flow - spring-core - spring-core-2 - spring-cucumber + spring-core + spring-core-2 + spring-cucumber - spring-data-rest - spring-data-rest-querydsl - spring-dispatcher-servlet - spring-drools - spring-di + spring-data-rest + spring-data-rest-querydsl + spring-dispatcher-servlet + spring-drools + spring-di spring-ehcache - spring-ejb - spring-exceptions + spring-ejb + spring-exceptions - spring-freemarker + spring-freemarker - spring-groovy + spring-groovy - spring-integration + spring-integration - spring-jenkins-pipeline - spring-jersey - spring-jinq - spring-jms - spring-jooq + spring-jenkins-pipeline + spring-jersey + spring-jinq + spring-jms + spring-jooq - spring-kafka - spring-katharsis + spring-kafka + spring-katharsis - spring-ldap + 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-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-protobuf + - spring-quartz + 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-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-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-security-client + spring-thymeleaf - 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-vault + spring-vertx - spring-thymeleaf + spring-webflux-amqp - spring-userservice + spring-zuul - spring-vault - spring-vertx + static-analysis + stripe + structurizr + struts-2 - spring-webflux-amqp + testing-modules - spring-zuul + twilio + twitter4j - static-analysis - stripe - structurizr - struts-2 + undertow - testing-modules + vertx + vertx-and-rxjava + video-tutorials + vraptor - twilio - Twitter4J + wicket - undertow + xml + xstream + - vavr - vertx - vertx-and-rxjava - video-tutorials - vraptor + - wicket + + integration-heavy - xml - xmlunit-2 - xstream + + + + 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 - - integration-heavy + jenkins/hello-world + jhipster + jws - - - - org.apache.maven.plugins - maven-surefire-plugin - - - **/*ManualTest.java - **/*LiveTest.java - - - **/*IntegrationTest.java - **/*IntTest.java - - - - - + libraries - - parent-boot-1 - parent-boot-2 - parent-spring-4 - parent-spring-5 - parent-java - parent-kotlin + persistence-modules/hibernate5 + persistence-modules/java-jpa + persistence-modules/java-jpa-2 + persistence-modules/java-mongodb + persistence-modules/jnosql - core-java-modules/core-java - core-java-modules/core-java-concurrency-advanced - core-kotlin - core-kotlin-2 + vaadin + vavr + - jenkins/hello-world - jws - - libraries - - persistence-modules/hibernate5 - persistence-modules/java-jpa - persistence-modules/java-mongodb - persistence-modules/jnosql - - vaadin - - - + @@ -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 105/140] 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 ff86301f7d..7288aded73 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 78c6675b26..0000000000 --- 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 aa7b95e6a156c03e5a3c0f04f6314566d8553660 Mon Sep 17 00:00:00 2001 From: vatsalgosar Date: Mon, 5 Aug 2019 23:28:19 +0530 Subject: [PATCH 106/140] BAEL-3115 - GCD implementation methods using Brute force, Euclid's Algo and Stein's Algo --- .../algorithms/gcd/GCDImplementation.java | 51 +++++++++++++++++++ .../gcd/GCDImplementationUnitTest.java | 32 ++++++++++++ 2 files changed, 83 insertions(+) create mode 100644 java-math/src/main/java/com/baeldung/algorithms/gcd/GCDImplementation.java create mode 100644 java-math/src/test/java/com/baeldung/algorithms/gcd/GCDImplementationUnitTest.java diff --git a/java-math/src/main/java/com/baeldung/algorithms/gcd/GCDImplementation.java b/java-math/src/main/java/com/baeldung/algorithms/gcd/GCDImplementation.java new file mode 100644 index 0000000000..df12c97162 --- /dev/null +++ b/java-math/src/main/java/com/baeldung/algorithms/gcd/GCDImplementation.java @@ -0,0 +1,51 @@ +package com.baeldung.algorithms.gcd; + +public class GCDImplementation { + + public static int gcdByBruteForce(int n1, int n2) { + int gcd = 1; + for (int i = 1; i <= n1 && i <= n2; i++) + if (n1 % i == 0 && n2 % i == 0) + gcd = i; + + return gcd; + } + + public static int gcdByEuclidsAlgorithm(int n1, int n2) { + if (n2 == 0) + return n1; + return gcdByEuclidsAlgorithm(n2, n1 % n2); + } + + public static int gcdBySteinsAlgorithm(int n1, int n2) { + + if (n1 == 0) + return n2; + + if (n2 == 0) + return n1; + + int n; + for (n = 0; ((n1 | n2) & 1) == 0; n++) { + n1 >>= 1; + n2 >>= 1; + } + + while ((n1 & 1) == 0) + n1 >>= 1; + + do { + while ((n2 & 1) == 0) + n2 >>= 1; + + if (n1 > n2) { + int temp = n1; + n1 = n2; + n2 = temp; + } + n2 = (n2 - n1); + } while (n2 != 0); + + return n1 << n; + } +} diff --git a/java-math/src/test/java/com/baeldung/algorithms/gcd/GCDImplementationUnitTest.java b/java-math/src/test/java/com/baeldung/algorithms/gcd/GCDImplementationUnitTest.java new file mode 100644 index 0000000000..d2c91a2eb8 --- /dev/null +++ b/java-math/src/test/java/com/baeldung/algorithms/gcd/GCDImplementationUnitTest.java @@ -0,0 +1,32 @@ +package com.baeldung.algorithms.gcd; + +import org.junit.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +public class GCDImplementationUnitTest { + + @Test + public void whenCalculatingGCDByBruteForceMethod_thenCorrect() { + int n1 = 60; + int n2 = 90; + int gcd = GCDImplementation.gcdByBruteForce(n1, n2); + assertThat(gcd).isEqualTo(30); + } + + @Test + public void whenCalculatingGCDByEuclidsAlgorithm_thenCorrect() { + int n1 = 60; + int n2 = 90; + int gcd = GCDImplementation.gcdByEuclidsAlgorithm(n1, n2); + assertThat(gcd).isEqualTo(30); + } + + @Test + public void whenCalculatingGCDBySteinsAlgorithm_thenCorrect() { + int n1 = 60; + int n2 = 90; + int gcd = GCDImplementation.gcdBySteinsAlgorithm(n1, n2); + assertThat(gcd).isEqualTo(30); + } +} From 88444addaa5c9b32a0e4983ace06fb0d9eef1d3e Mon Sep 17 00:00:00 2001 From: vatsalgosar Date: Tue, 6 Aug 2019 00:21:13 +0530 Subject: [PATCH 107/140] refactoring --- .../algorithms/gcd/GCDImplementation.java | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/java-math/src/main/java/com/baeldung/algorithms/gcd/GCDImplementation.java b/java-math/src/main/java/com/baeldung/algorithms/gcd/GCDImplementation.java index df12c97162..d4844abd9c 100644 --- a/java-math/src/main/java/com/baeldung/algorithms/gcd/GCDImplementation.java +++ b/java-math/src/main/java/com/baeldung/algorithms/gcd/GCDImplementation.java @@ -4,26 +4,29 @@ public class GCDImplementation { public static int gcdByBruteForce(int n1, int n2) { int gcd = 1; - for (int i = 1; i <= n1 && i <= n2; i++) - if (n1 % i == 0 && n2 % i == 0) + for (int i = 1; i <= n1 && i <= n2; i++) { + if (n1 % i == 0 && n2 % i == 0) { gcd = i; - + } + } return gcd; } public static int gcdByEuclidsAlgorithm(int n1, int n2) { - if (n2 == 0) + if (n2 == 0) { return n1; + } return gcdByEuclidsAlgorithm(n2, n1 % n2); } public static int gcdBySteinsAlgorithm(int n1, int n2) { - - if (n1 == 0) + if (n1 == 0) { return n2; + } - if (n2 == 0) + if (n2 == 0) { return n1; + } int n; for (n = 0; ((n1 | n2) & 1) == 0; n++) { @@ -31,12 +34,14 @@ public class GCDImplementation { n2 >>= 1; } - while ((n1 & 1) == 0) + while ((n1 & 1) == 0) { n1 >>= 1; + } do { - while ((n2 & 1) == 0) + while ((n2 & 1) == 0) { n2 >>= 1; + } if (n1 > n2) { int temp = n1; @@ -45,7 +50,6 @@ public class GCDImplementation { } n2 = (n2 - n1); } while (n2 != 0); - return n1 << n; } } From ab0477a4b29115a18229c33b5532edb99b7abf5c Mon Sep 17 00:00:00 2001 From: Sumeet Gajbhar Date: Tue, 6 Aug 2019 01:55:25 +0530 Subject: [PATCH 108/140] 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 effdee07ad..62cead726f 100644 --- a/java-numbers-2/src/main/java/com/baeldung/binarynumbers/BinaryNumbers.java +++ b/java-numbers-2/src/main/java/com/baeldung/binarynumbers/BinaryNumbers.java @@ -1,148 +1,140 @@ -package com.baeldung.binarynumbers; - -public class BinaryNumbers { - - /** - * This method takes a decimal number and convert it into a binary number. - * example:- input:10, output:1010 - * - * @param decimalNumber - * @return binary number - */ - public Integer convertDecimalToBinary(Integer decimalNumber) { - - if (decimalNumber == 0) { - return decimalNumber; - } - - StringBuilder binaryNumber = new StringBuilder(); - - while (decimalNumber > 0) { - - int remainder = decimalNumber % 2; - int result = decimalNumber / 2; - - binaryNumber.append(remainder); - decimalNumber = result; - } - - binaryNumber = binaryNumber.reverse(); - - return Integer.valueOf(binaryNumber.toString()); - } - - /** - * This method takes a binary number and convert it into a decimal number. - * example:- input:101, output:5 - * - * @param binary number - * @return decimal Number - */ - public Integer convertBinaryToDecimal(Integer binaryNumber) { - - Integer result = 0; - Integer base = 1; - - while (binaryNumber > 0) { - - int lastDigit = binaryNumber % 10; - binaryNumber = binaryNumber / 10; - - result += lastDigit * base; - - base = base * 2; - } - return result; - } - - /** - * This method accepts two binary numbers and returns sum of input numbers. - * Example:- firstNum: 101, secondNum: 100, output: 1001 - * - * @param firstNum - * @param secondNum - * @return addition of input numbers - */ - public Integer addBinaryNumber(Integer firstNum, Integer secondNum) { - - StringBuilder output = new StringBuilder(); - - int carry = 0; - int temp; - - while (firstNum != 0 || secondNum != 0) { - - temp = (firstNum % 10 + secondNum % 10 + carry) % 2; - output.append(temp); - - carry = (firstNum % 10 + secondNum % 10 + carry) / 2; - - firstNum = firstNum / 10; - secondNum = secondNum / 10; - } - - if (carry != 0) { - output.append(carry); - } - - return Integer.valueOf(output.reverse() - .toString()); - } - - /** - * This method takes two binary number as input and subtract second number from the first number. - * example:- firstNum: 1000, secondNum: 11, output: 101 - * @param firstNum - * @param secondNum - * @return Result of subtraction of secondNum from first - */ - public Integer substractBinaryNumber(Integer firstNum, Integer secondNum) { - - int onesComplement = Integer.valueOf(getOnesComplement(secondNum)); - - StringBuilder output = new StringBuilder(); - - int carry = 0; - int temp; - - while (firstNum != 0 || onesComplement != 0) { - - temp = (firstNum % 10 + onesComplement % 10 + carry) % 2; - output.append(temp); - - carry = (firstNum % 10 + onesComplement % 10 + carry) / 2; - - firstNum = firstNum / 10; - onesComplement = onesComplement / 10; - } - - String additionOfFirstNumAndOnesComplement = output.reverse() - .toString(); - - if (carry == 1) { - return addBinaryNumber(Integer.valueOf(additionOfFirstNumAndOnesComplement), carry); - } else { - return getOnesComplement(Integer.valueOf(additionOfFirstNumAndOnesComplement)); - } - - } - - public Integer getOnesComplement(Integer num) { - - StringBuilder onesComplement = new StringBuilder(); - - while (num > 0) { - int lastDigit = num % 10; - if (lastDigit == 0) { - onesComplement.append(1); - } else { - onesComplement.append(0); - } - num = num / 10; - } - - return Integer.valueOf(onesComplement.reverse() - .toString()); - } - -} +package com.baeldung.binarynumbers; + +public class BinaryNumbers { + + /** + * This method takes a decimal number and convert it into a binary number. + * example:- input:10, output:1010 + * + * @param decimalNumber + * @return binary number + */ + public Integer convertDecimalToBinary(Integer decimalNumber) { + + if (decimalNumber == 0) { + return decimalNumber; + } + + StringBuilder binaryNumber = new StringBuilder(); + Integer quotient = decimalNumber; + + while (quotient > 0) { + + int remainder = quotient % 2; + binaryNumber.append(remainder); + quotient /= 2; + } + + binaryNumber = binaryNumber.reverse(); + return Integer.valueOf(binaryNumber.toString()); + } + + /** + * This method takes a binary number and convert it into a decimal number. + * example:- input:101, output:5 + * + * @param binary number + * @return decimal Number + */ + public Integer convertBinaryToDecimal(Integer binaryNumber) { + + Integer decimalNumber = 0; + Integer base = 1; + + while (binaryNumber > 0) { + + int lastDigit = binaryNumber % 10; + binaryNumber = binaryNumber / 10; + + decimalNumber += lastDigit * base; + base = base * 2; + } + return decimalNumber; + } + + /** + * This method accepts two binary numbers and returns sum of input numbers. + * Example:- firstNum: 101, secondNum: 100, output: 1001 + * + * @param firstNum + * @param secondNum + * @return addition of input numbers + */ + public Integer addBinaryNumber(Integer firstNum, Integer secondNum) { + + StringBuilder output = new StringBuilder(); + + int carry = 0; + int temp; + + while (firstNum != 0 || secondNum != 0) { + + temp = (firstNum % 10 + secondNum % 10 + carry) % 2; + output.append(temp); + + carry = (firstNum % 10 + secondNum % 10 + carry) / 2; + + firstNum = firstNum / 10; + secondNum = secondNum / 10; + } + + if (carry != 0) { + output.append(carry); + } + + return Integer.valueOf(output.reverse() + .toString()); + } + + /** + * This method takes two binary number as input and subtract second number from the first number. + * example:- firstNum: 1000, secondNum: 11, output: 101 + * @param firstNum + * @param secondNum + * @return Result of subtraction of secondNum from first + */ + public Integer substractBinaryNumber(Integer firstNum, Integer secondNum) { + + int onesComplement = Integer.valueOf(getOnesComplement(secondNum)); + StringBuilder output = new StringBuilder(); + int carry = 0; + int temp; + + while (firstNum != 0 || onesComplement != 0) { + + temp = (firstNum % 10 + onesComplement % 10 + carry) % 2; + output.append(temp); + + carry = (firstNum % 10 + onesComplement % 10 + carry) / 2; + + firstNum = firstNum / 10; + onesComplement = onesComplement / 10; + } + + String additionOfFirstNumAndOnesComplement = output.reverse() + .toString(); + + if (carry == 1) { + return addBinaryNumber(Integer.valueOf(additionOfFirstNumAndOnesComplement), carry); + } else { + return getOnesComplement(Integer.valueOf(additionOfFirstNumAndOnesComplement)); + } + } + + public Integer getOnesComplement(Integer num) { + + StringBuilder onesComplement = new StringBuilder(); + while (num > 0) { + int lastDigit = num % 10; + if (lastDigit == 0) { + onesComplement.append(1); + } else { + onesComplement.append(0); + } + num = num / 10; + } + return Integer.valueOf(onesComplement.reverse() + .toString()); + } + +} \ No newline at end of file From a02fcfbb064daa85f5367ba0dbf5a14246c294af Mon Sep 17 00:00:00 2001 From: Juan Moreno Date: Mon, 5 Aug 2019 19:35:34 -0300 Subject: [PATCH 109/140] 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 a1922ad224..d4fdeb0d58 100644 --- a/xml/src/main/java/com/baeldung/xml/attribute/Dom4jTransformer.java +++ b/xml/src/main/java/com/baeldung/xml/attribute/Dom4jTransformer.java @@ -3,6 +3,7 @@ package com.baeldung.xml.attribute; import org.dom4j.*; import org.dom4j.io.DocumentSource; import org.dom4j.io.SAXReader; +import org.xml.sax.SAXException; import javax.xml.XMLConstants; import javax.xml.transform.OutputKeys; @@ -17,9 +18,12 @@ import java.util.List; public class Dom4jTransformer { private final Document input; - public Dom4jTransformer(String resourcePath) throws DocumentException { + public Dom4jTransformer(String resourcePath) throws DocumentException, SAXException { // 1- Build the doc from the XML file SAXReader xmlReader = new SAXReader(); + xmlReader.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); + xmlReader.setFeature("http://xml.org/sax/features/external-general-entities", false); + xmlReader.setFeature("http://xml.org/sax/features/external-parameter-entities", false); this.input = xmlReader.read(resourcePath); } diff --git a/xml/src/main/java/com/baeldung/xml/attribute/JaxpTransformer.java b/xml/src/main/java/com/baeldung/xml/attribute/JaxpTransformer.java index a2266a2b44..a55b00950c 100644 --- a/xml/src/main/java/com/baeldung/xml/attribute/JaxpTransformer.java +++ b/xml/src/main/java/com/baeldung/xml/attribute/JaxpTransformer.java @@ -32,7 +32,8 @@ public class JaxpTransformer { // 1- Build the doc from the XML file DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); - input = factory.newDocumentBuilder() + factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); + this.input = factory.newDocumentBuilder() .parse(resourcePath); } @@ -40,24 +41,24 @@ public class JaxpTransformer { // 2- Locate the node(s) with xpath XPath xpath = XPathFactory.newInstance() .newXPath(); - NodeList nodes = (NodeList) xpath.evaluate(String.format("//*[contains(@%s, '%s')]", attribute, oldValue), input, XPathConstants.NODESET); + NodeList nodes = (NodeList) xpath.evaluate(String.format("//*[contains(@%s, '%s')]", attribute, oldValue), this.input, XPathConstants.NODESET); // 3- Make the change on the selected nodes for (int i = 0; i < nodes.getLength(); i++) { Element value = (Element) nodes.item(i); value.setAttribute(attribute, newValue); } - //Stream api syntax - // IntStream - // .range(0, nodes.getLength()) - // .mapToObj(i -> (Element) nodes.item(i)) - // .forEach(value -> value.setAttribute(attribute, newValue)); + // Stream api syntax + // IntStream + // .range(0, nodes.getLength()) + // .mapToObj(i -> (Element) nodes.item(i)) + // .forEach(value -> value.setAttribute(attribute, newValue)); // 4- Save the result to a new XML doc TransformerFactory factory = TransformerFactory.newInstance(); factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); Transformer xformer = factory.newTransformer(); xformer.setOutputProperty(OutputKeys.INDENT, "yes"); Writer output = new StringWriter(); - xformer.transform(new DOMSource(input), new StreamResult(output)); + xformer.transform(new DOMSource(this.input), new StreamResult(output)); return output.toString(); } } diff --git a/xml/src/main/java/com/baeldung/xml/attribute/jmh/AttributeBenchMark.java b/xml/src/main/java/com/baeldung/xml/attribute/jmh/AttributeBenchMark.java index 064e181713..f5f3a2ce6c 100644 --- a/xml/src/main/java/com/baeldung/xml/attribute/jmh/AttributeBenchMark.java +++ b/xml/src/main/java/com/baeldung/xml/attribute/jmh/AttributeBenchMark.java @@ -1,7 +1,19 @@ package com.baeldung.xml.attribute.jmh; +import java.io.IOException; +import java.util.concurrent.TimeUnit; + +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.TransformerException; +import javax.xml.xpath.XPathExpressionException; + import org.dom4j.DocumentException; -import org.openjdk.jmh.annotations.*; +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.OutputTimeUnit; +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.State; import org.openjdk.jmh.runner.Runner; import org.openjdk.jmh.runner.RunnerException; import org.openjdk.jmh.runner.options.Options; @@ -12,30 +24,23 @@ import com.baeldung.xml.attribute.Dom4jTransformer; import com.baeldung.xml.attribute.JaxpTransformer; import com.baeldung.xml.attribute.JooxTransformer; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.transform.TransformerException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.util.concurrent.TimeUnit; - @BenchmarkMode(Mode.AverageTime) @OutputTimeUnit(TimeUnit.MILLISECONDS) @State(Scope.Benchmark) public class AttributeBenchMark { public static void main(String[] args) throws RunnerException { - Options opt = new OptionsBuilder() - .include(AttributeBenchMark.class.getSimpleName()) - .forks(1) - .build(); + Options opt = new OptionsBuilder().include(AttributeBenchMark.class.getSimpleName()) + .forks(1) + .build(); new Runner(opt).run(); } @Benchmark - public String dom4jBenchmark() throws DocumentException, TransformerException { - String path = getClass() - .getResource("/xml/attribute.xml") - .toString(); + public String dom4jBenchmark() throws DocumentException, TransformerException, SAXException { + String path = this.getClass() + .getResource("/xml/attribute.xml") + .toString(); Dom4jTransformer transformer = new Dom4jTransformer(path); String attribute = "customer"; String oldValue = "true"; @@ -46,9 +51,9 @@ public class AttributeBenchMark { @Benchmark public String jooxBenchmark() throws IOException, SAXException { - String path = getClass() - .getResource("/xml/attribute.xml") - .toString(); + String path = this.getClass() + .getResource("/xml/attribute.xml") + .toString(); JooxTransformer transformer = new JooxTransformer(path); String attribute = "customer"; String oldValue = "true"; @@ -59,9 +64,9 @@ public class AttributeBenchMark { @Benchmark public String jaxpBenchmark() throws TransformerException, ParserConfigurationException, SAXException, IOException, XPathExpressionException { - String path = getClass() - .getResource("/xml/attribute.xml") - .toString(); + String path = this.getClass() + .getResource("/xml/attribute.xml") + .toString(); JaxpTransformer transformer = new JaxpTransformer(path); String attribute = "customer"; String oldValue = "true"; diff --git a/xml/src/test/java/com/baeldung/xml/attribute/Dom4jProcessorUnitTest.java b/xml/src/test/java/com/baeldung/xml/attribute/Dom4jProcessorUnitTest.java index 485744f9a5..351b8bc437 100644 --- a/xml/src/test/java/com/baeldung/xml/attribute/Dom4jProcessorUnitTest.java +++ b/xml/src/test/java/com/baeldung/xml/attribute/Dom4jProcessorUnitTest.java @@ -2,14 +2,19 @@ package com.baeldung.xml.attribute; import org.dom4j.DocumentException; import org.junit.jupiter.api.Test; +import org.xml.sax.SAXException; +import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactoryConfigurationError; +import javax.xml.xpath.XPathExpressionException; + import java.io.IOException; import java.net.URISyntaxException; import java.nio.file.Files; import java.nio.file.Paths; +import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.xmlunit.assertj.XmlAssert.assertThat; /** @@ -18,10 +23,9 @@ import static org.xmlunit.assertj.XmlAssert.assertThat; public class Dom4jProcessorUnitTest { @Test - public void givenXmlWithAttributes_whenModifyAttribute_thenGetXmlUpdated() throws TransformerFactoryConfigurationError, TransformerException, DocumentException { - String path = getClass() - .getResource("/xml/attribute.xml") - .toString(); + public void givenXmlWithAttributes_whenModifyAttribute_thenGetXmlUpdated() throws TransformerFactoryConfigurationError, TransformerException, DocumentException, SAXException { + String path = getClass().getResource("/xml/attribute.xml") + .toString(); Dom4jTransformer transformer = new Dom4jTransformer(path); String attribute = "customer"; String oldValue = "true"; @@ -33,23 +37,32 @@ public class Dom4jProcessorUnitTest { } @Test - public void givenTwoXml_whenModifyAttribute_thenGetSimilarXml() throws IOException, TransformerFactoryConfigurationError, TransformerException, URISyntaxException, DocumentException { - String path = getClass() - .getResource("/xml/attribute.xml") - .toString(); + public void givenTwoXml_whenModifyAttribute_thenGetSimilarXml() throws IOException, TransformerFactoryConfigurationError, TransformerException, URISyntaxException, DocumentException, SAXException { + String path = getClass().getResource("/xml/attribute.xml") + .toString(); Dom4jTransformer transformer = new Dom4jTransformer(path); String attribute = "customer"; String oldValue = "true"; String newValue = "false"; - String expectedXml = new String(Files.readAllBytes((Paths.get(getClass() - .getResource("/xml/attribute_expected.xml") - .toURI())))); + String expectedXml = new String(Files.readAllBytes((Paths.get(getClass().getResource("/xml/attribute_expected.xml") + .toURI())))); String result = transformer.modifyAttribute(attribute, oldValue, newValue); - assertThat(result) - .and(expectedXml) - .areSimilar(); + assertThat(result).and(expectedXml) + .areSimilar(); + } + + @Test + public void givenXmlXee_whenInit_thenThrowException() throws IOException, SAXException, ParserConfigurationException, XPathExpressionException, TransformerFactoryConfigurationError, TransformerException { + String path = getClass().getResource("/xml/xee_attribute.xml") + .toString(); + + assertThatThrownBy(() -> { + + new Dom4jTransformer(path); + + }).isInstanceOf(DocumentException.class); } } diff --git a/xml/src/test/java/com/baeldung/xml/attribute/JaxpProcessorUnitTest.java b/xml/src/test/java/com/baeldung/xml/attribute/JaxpProcessorUnitTest.java index 8394016dbd..8d814783e0 100644 --- a/xml/src/test/java/com/baeldung/xml/attribute/JaxpProcessorUnitTest.java +++ b/xml/src/test/java/com/baeldung/xml/attribute/JaxpProcessorUnitTest.java @@ -1,5 +1,6 @@ package com.baeldung.xml.attribute; +import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.xmlunit.assertj.XmlAssert.assertThat; import java.io.IOException; @@ -11,6 +12,7 @@ import javax.xml.xpath.XPathExpressionException; import org.junit.jupiter.api.Test; import org.xml.sax.SAXException; +import org.xml.sax.SAXParseException; /** * Unit test for {@link JaxpTransformer}. @@ -31,4 +33,16 @@ public class JaxpProcessorUnitTest { assertThat(result).hasXPath("//*[contains(@customer, 'false')]"); } + @Test + public void givenXmlXee_whenInit_thenThrowException() throws IOException, SAXException, ParserConfigurationException, XPathExpressionException, TransformerFactoryConfigurationError, TransformerException { + String path = getClass().getResource("/xml/xee_attribute.xml") + .toString(); + + assertThatThrownBy(() -> { + + new JaxpTransformer(path); + + }).isInstanceOf(SAXParseException.class); + } + } diff --git a/xml/src/test/java/com/baeldung/xml/attribute/JooxProcessorUnitTest.java b/xml/src/test/java/com/baeldung/xml/attribute/JooxProcessorUnitTest.java index 38c7c59789..40d0c671e7 100644 --- a/xml/src/test/java/com/baeldung/xml/attribute/JooxProcessorUnitTest.java +++ b/xml/src/test/java/com/baeldung/xml/attribute/JooxProcessorUnitTest.java @@ -2,13 +2,19 @@ package com.baeldung.xml.attribute; import org.junit.jupiter.api.Test; import org.xml.sax.SAXException; +import org.xml.sax.SAXParseException; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactoryConfigurationError; +import javax.xml.xpath.XPathExpressionException; + import java.io.IOException; import java.net.URISyntaxException; import java.nio.file.Files; import java.nio.file.Paths; +import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.xmlunit.assertj.XmlAssert.assertThat; /** @@ -18,9 +24,8 @@ public class JooxProcessorUnitTest { @Test public void givenXmlWithAttributes_whenModifyAttribute_thenGetXmlUpdated() throws IOException, SAXException, TransformerFactoryConfigurationError { - String path = getClass() - .getResource("/xml/attribute.xml") - .toString(); + String path = getClass().getResource("/xml/attribute.xml") + .toString(); JooxTransformer transformer = new JooxTransformer(path); String attribute = "customer"; String oldValue = "true"; @@ -33,22 +38,31 @@ public class JooxProcessorUnitTest { @Test public void givenTwoXml_whenModifyAttribute_thenGetSimilarXml() throws IOException, TransformerFactoryConfigurationError, URISyntaxException, SAXException { - String path = getClass() - .getResource("/xml/attribute.xml") - .toString(); + String path = getClass().getResource("/xml/attribute.xml") + .toString(); JooxTransformer transformer = new JooxTransformer(path); String attribute = "customer"; String oldValue = "true"; String newValue = "false"; - String expectedXml = new String(Files.readAllBytes((Paths.get(getClass() - .getResource("/xml/attribute_expected.xml") - .toURI())))); + String expectedXml = new String(Files.readAllBytes((Paths.get(getClass().getResource("/xml/attribute_expected.xml") + .toURI())))); String result = transformer.modifyAttribute(attribute, oldValue, newValue); - assertThat(result) - .and(expectedXml) - .areSimilar(); + assertThat(result).and(expectedXml) + .areSimilar(); + } + + @Test + public void givenXmlXee_whenInit_thenThrowException() throws IOException, SAXException, ParserConfigurationException, XPathExpressionException, TransformerFactoryConfigurationError, TransformerException { + String path = getClass().getResource("/xml/xee_attribute.xml") + .toString(); + + assertThatThrownBy(() -> { + + new JooxTransformer(path); + + }).isInstanceOf(SAXParseException.class); } } diff --git a/xml/src/test/resources/xml/xee_attribute.xml b/xml/src/test/resources/xml/xee_attribute.xml new file mode 100644 index 0000000000..9633ca15b0 --- /dev/null +++ b/xml/src/test/resources/xml/xee_attribute.xml @@ -0,0 +1,9 @@ + + ]> + + &xxe; + + john@email.com + mary@email.com + \ No newline at end of file From c3020771206d2e14416bbb936116afabe0629041 Mon Sep 17 00:00:00 2001 From: Chirag Dewan Date: Wed, 7 Aug 2019 21:36:14 +0530 Subject: [PATCH 110/140] 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 a9a818615f..bac601df61 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 111/140] 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 bac601df61..83adf1e199 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 112/140] Update pom.xml --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 14b9d3cf81..aabede4f3a 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 113/140] [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 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 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 b6e157beea..9a2691d3f0 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 97fbf4adc7..0000000000 --- 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 114/140] [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 077961f887..1ad7e94a1f 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 c7b40e3c94..1dd47ef176 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 9b47ffe3a6..139ce65ee5 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 115/140] 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 a405298cbe..f8e26f218b 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 116/140] 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 dd200eb3cb..fdd482f833 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 653ab83a18..560a75070c 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 e0098e7c7e..2527fea245 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 117/140] 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 0000000000..17e95edf06 --- /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 0000000000..85efd1d3da --- /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 118/140] 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 0000000000..e322e89996 --- /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 119/140] 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 51aa8ccac2..98aefcb971 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 @@ import lombok.Setter; 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 0000000000..88692884ad --- /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 0000000000..3f868c10a7 --- /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 0000000000..9b780a244e --- /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 0000000000..430aef1440 --- /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 0000000000..e729e1a2d0 --- /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 120/140] 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 0000000000..ecdcd1d923 --- /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 0000000000..90e4ce6170 --- /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 0000000000..db5b3675f4 --- /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 0000000000..72f754c01d --- /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 0000000000..f02e04e5a1 --- /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 0000000000..6ed82b7934 --- /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 0000000000..86203bf561 --- /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 0000000000..807e1ec624 --- /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 0000000000..531356ffa2 --- /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 0000000000..33071dc0c1 --- /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 0000000000..9298714cb2 --- /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 0000000000..de8974d4ad --- /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 aabede4f3a..d095e8a7bc 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 04c742c2a0b124f13b7dc4cad60172e4571e0180 Mon Sep 17 00:00:00 2001 From: amit2103 Date: Fri, 9 Aug 2019 00:19:18 +0530 Subject: [PATCH 121/140] [BAEL-16684] - Upgrade parent-boot-2 to the latest version of Boot 2.1.7 --- parent-boot-2/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent-boot-2/pom.xml b/parent-boot-2/pom.xml index f0e921bf37..edc115d186 100644 --- a/parent-boot-2/pom.xml +++ b/parent-boot-2/pom.xml @@ -78,6 +78,6 @@ 3.3.0 1.0.22.RELEASE - 2.1.6.RELEASE + 2.1.7.RELEASE From 3613d25ac3d1cfd9852df2d63cfb464d59bbadf1 Mon Sep 17 00:00:00 2001 From: amit2103 Date: Fri, 9 Aug 2019 00:22:05 +0530 Subject: [PATCH 122/140] [BAEL-16683] - Upgrade parent-boot-1 to the latest version of Boot 1.5.22 --- parent-boot-1/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent-boot-1/pom.xml b/parent-boot-1/pom.xml index 1054038623..8f1af24466 100644 --- a/parent-boot-1/pom.xml +++ b/parent-boot-1/pom.xml @@ -55,7 +55,7 @@ 3.1.0 - 1.5.19.RELEASE + 1.5.22.RELEASE From 650dabda9f5aeb6a928b84ba3b6376e9a811eb0e Mon Sep 17 00:00:00 2001 From: amit2103 Date: Fri, 9 Aug 2019 00:27:47 +0530 Subject: [PATCH 123/140] [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 ab66cf19bf..390934ca7b 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 124/140] [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 c3bcd048a4..d8800dd881 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 class Main { 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 076825d76c..3abf82f3fa 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 class NumberOfLineFinder { 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 0000000000..650da894e8 --- /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 6f0427ebd2..40ed6d6bba 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 class NumberOfLineFinderUnitTest { 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 cb3e205871..09e2596d0a 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 125/140] 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 e322e89996..ce784bcae6 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 @@ 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"; @@ -33,8 +33,7 @@ public class JgssIntegrationTest { 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 class JgssIntegrationTest { @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 126/140] 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 b2ae48ea11..6e79eddd16 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 10b876735e..98fff64d68 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 d6158c2946..9e6e81ed40 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 127/140] 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 eff74cfe70..24c2080f8a 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 a5ab1342a1..8a33efef43 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 @@ import com.baeldung.SpringCloudConfigClientApplication; @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 f3382067f9..32e16c72fc 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 83cb8067cf..980c096f5e 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 @@ import org.springframework.test.context.junit4.SpringRunner; @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 c456f69979..5be4f9c077 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 @@ import org.springframework.test.context.junit4.SpringRunner; @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 a2d1cd1087..a3cbb3310d 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 @@ import org.springframework.test.context.junit4.SpringRunner; @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 73fcbe55f0..3be4d96964 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 @@ import org.springframework.test.context.junit4.SpringRunner; @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 5e68a8e64f..5cb0a8167e 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 @@ import com.baeldung.Application; @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 3e9af8a336..bbd3b6c2ba 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 @@ import com.baeldung.springejbclient.SpringEjbClientApplication; @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 307d31a809..b41f2b0338 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 @@ import org.springframework.test.context.junit4.SpringRunner; @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 994f93c24f..b23ce7dbbb 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 @@ import com.baeldung.spring.session.SessionWebApplication; @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 95abe622fa..1b3db59ecb 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 @@ import org.springframework.test.context.junit4.SpringRunner; @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 88d29d5ac0..effe8d2cfa 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 @@ import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class) @SpringBootTest(classes = SpringWebfluxAmqpApplication.class) -public class SpringContextTest { +public class SpringContextLiveTest { @Test public void whenSpringContextIsBootstrapped_thenNoExceptions() { From 8d8bed2216395d7f29c9213f6aa9af14205f9a14 Mon Sep 17 00:00:00 2001 From: amit2103 Date: Sat, 10 Aug 2019 17:53:14 +0530 Subject: [PATCH 128/140] [BAEL-15958] - Upgraded spring-security-core to Boot 2 --- spring-security-core/pom.xml | 8 ++++++-- .../src/main/java/org/baeldung/app/App.java | 2 +- .../src/main/java/org/baeldung/service/TaskService.java | 2 +- .../src/main/resources/application.properties | 1 + 4 files changed, 9 insertions(+), 4 deletions(-) create mode 100644 spring-security-core/src/main/resources/application.properties diff --git a/spring-security-core/pom.xml b/spring-security-core/pom.xml index 41dea087d3..b144357e25 100644 --- a/spring-security-core/pom.xml +++ b/spring-security-core/pom.xml @@ -9,10 +9,10 @@ war - parent-boot-1 + parent-boot-2 com.baeldung 0.0.1-SNAPSHOT - ../parent-boot-1 + ../parent-boot-2 @@ -36,6 +36,10 @@ org.springframework.boot spring-boot-starter-actuator + + org.springframework.boot + spring-boot-starter-web + com.h2database h2 diff --git a/spring-security-core/src/main/java/org/baeldung/app/App.java b/spring-security-core/src/main/java/org/baeldung/app/App.java index db0c9135c4..bf719b3b12 100644 --- a/spring-security-core/src/main/java/org/baeldung/app/App.java +++ b/spring-security-core/src/main/java/org/baeldung/app/App.java @@ -5,7 +5,7 @@ import javax.servlet.Filter; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.domain.EntityScan; -import org.springframework.boot.web.support.SpringBootServletInitializer; +import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; import org.springframework.context.annotation.ComponentScan; import org.springframework.data.jpa.repository.config.EnableJpaRepositories; import org.springframework.web.filter.DelegatingFilterProxy; diff --git a/spring-security-core/src/main/java/org/baeldung/service/TaskService.java b/spring-security-core/src/main/java/org/baeldung/service/TaskService.java index 4a0dae3aac..4efa3b0294 100644 --- a/spring-security-core/src/main/java/org/baeldung/service/TaskService.java +++ b/spring-security-core/src/main/java/org/baeldung/service/TaskService.java @@ -20,7 +20,7 @@ public class TaskService { @PreFilter("hasRole('MANAGER') or filterObject.assignee == authentication.name") public Iterable save(Iterable entities) { - return taskRepository.save(entities); + return taskRepository.saveAll(entities); } } diff --git a/spring-security-core/src/main/resources/application.properties b/spring-security-core/src/main/resources/application.properties new file mode 100644 index 0000000000..709574239b --- /dev/null +++ b/spring-security-core/src/main/resources/application.properties @@ -0,0 +1 @@ +spring.main.allow-bean-definition-overriding=true \ No newline at end of file From 5d410319680f3acbf6d69cd7a5be208f6e924e73 Mon Sep 17 00:00:00 2001 From: Rui Vilao Date: Sat, 10 Aug 2019 16:32:51 +0200 Subject: [PATCH 129/140] Fixes the sql2o link. --- persistence-modules/java-sql2o/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/persistence-modules/java-sql2o/README.md b/persistence-modules/java-sql2o/README.md index a86e45f1c8..d3586dc9ed 100644 --- a/persistence-modules/java-sql2o/README.md +++ b/persistence-modules/java-sql2o/README.md @@ -1,3 +1,3 @@ ### Relevant Articles: -- [A Guide to Sql2o](http://www.baeldung.com/sql2o) +- [A Guide to Sql2o](https://www.baeldung.com/java-sql2o) From 6012245bcf5ea7919454deef95f002acdd8110a0 Mon Sep 17 00:00:00 2001 From: Rui Vilao Date: Sat, 10 Aug 2019 16:52:44 +0200 Subject: [PATCH 130/140] Fixes the autoconfig tutorial. --- .../disableautoconfig/SpringDataJPAIntegrationTest.java | 2 +- .../disableautoconfig/SpringDataMongoDBIntegrationTest.java | 2 +- .../disableautoconfig/SpringDataRedisIntegrationTest.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/spring-boot-data/src/test/java/com/baeldung/disableautoconfig/SpringDataJPAIntegrationTest.java b/spring-boot-data/src/test/java/com/baeldung/disableautoconfig/SpringDataJPAIntegrationTest.java index a465979b3c..ef07df7824 100644 --- a/spring-boot-data/src/test/java/com/baeldung/disableautoconfig/SpringDataJPAIntegrationTest.java +++ b/spring-boot-data/src/test/java/com/baeldung/disableautoconfig/SpringDataJPAIntegrationTest.java @@ -19,7 +19,7 @@ public class SpringDataJPAIntegrationTest { private ApplicationContext context; @Test(expected = NoSuchBeanDefinitionException.class) - public void givenAutoconfigurationIsDisable_whenApplicationStarts_thenContextWillNotHaveTheAutoconfiguredClasses() { + public void givenAutoConfigDisabled_whenStarting_thenNoAutoconfiguredBeansInContext() { context.getBean(DataSource.class); } diff --git a/spring-boot-data/src/test/java/com/baeldung/disableautoconfig/SpringDataMongoDBIntegrationTest.java b/spring-boot-data/src/test/java/com/baeldung/disableautoconfig/SpringDataMongoDBIntegrationTest.java index bdfadf76ce..cc66f71aa2 100644 --- a/spring-boot-data/src/test/java/com/baeldung/disableautoconfig/SpringDataMongoDBIntegrationTest.java +++ b/spring-boot-data/src/test/java/com/baeldung/disableautoconfig/SpringDataMongoDBIntegrationTest.java @@ -18,7 +18,7 @@ public class SpringDataMongoDBIntegrationTest { private ApplicationContext context; @Test(expected = NoSuchBeanDefinitionException.class) - public void givenAutoconfigurationIsDisable_whenApplicationStarts_thenContextWillNotHaveTheAutoconfiguredClasses() { + public void givenAutoConfigDisabled_whenStarting_thenNoAutoconfiguredBeansInContext() { context.getBean(MongoTemplate.class); } diff --git a/spring-boot-data/src/test/java/com/baeldung/disableautoconfig/SpringDataRedisIntegrationTest.java b/spring-boot-data/src/test/java/com/baeldung/disableautoconfig/SpringDataRedisIntegrationTest.java index 10133cace3..657e624db3 100644 --- a/spring-boot-data/src/test/java/com/baeldung/disableautoconfig/SpringDataRedisIntegrationTest.java +++ b/spring-boot-data/src/test/java/com/baeldung/disableautoconfig/SpringDataRedisIntegrationTest.java @@ -18,7 +18,7 @@ public class SpringDataRedisIntegrationTest { private ApplicationContext context; @Test(expected = NoSuchBeanDefinitionException.class) - public void givenAutoconfigurationIsDisable_whenApplicationStarts_thenContextWillNotHaveTheAutoconfiguredClasses() { + public void givenAutoConfigDisabled_whenStarting_thenNoAutoconfiguredBeansInContext() { context.getBean(RedisTemplate.class); } From 7c740b7db35ef7ddbcb587baf81d046346554315 Mon Sep 17 00:00:00 2001 From: Rui Vilao Date: Sat, 10 Aug 2019 17:00:02 +0200 Subject: [PATCH 131/140] Fixes the link in the readme file. --- patterns/backoff-jitter/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/patterns/backoff-jitter/README.md b/patterns/backoff-jitter/README.md index 6459e4c8e0..a3940cc418 100644 --- a/patterns/backoff-jitter/README.md +++ b/patterns/backoff-jitter/README.md @@ -1,2 +1,2 @@ ### Relevant Articles: -- [Better Retries with Exponential Backoff and Jitter](https://baeldung.com/retries-with-exponential-backoff-and-jitter) +- [Better Retries with Exponential Backoff and Jitter](https://www.baeldung.com/resilience4j-backoff-jitter) From 7211b74b111e059be3bdb78806708021daa2236e Mon Sep 17 00:00:00 2001 From: Catalin Burcea Date: Sat, 10 Aug 2019 18:05:51 +0300 Subject: [PATCH 132/140] 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 3cebdd09ac..802cf74320 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 0000000000..a67c54a922 --- /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 0000000000..6fa6584b8e --- /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 133/140] 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 0000000000..6c2339028f --- /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 0000000000..1e5f757943 --- /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 0000000000..e02980e93f --- /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 0000000000..83c05e60c8 --- /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 9abb7ac453..2c87af53f8 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 0000000000..83c05e60c8 --- /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 b60d7ae4e6..afe165cf4d 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 134/140] 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 0000000000..5aab63db94 --- /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(); + } +} From 47512231c82628bb340ab4c289a1096e194e2614 Mon Sep 17 00:00:00 2001 From: vatsalgosar Date: Sun, 11 Aug 2019 01:48:57 +0530 Subject: [PATCH 135/140] BAEL-3118 (#7552) * BAEL-3118 - Increment Decrement Unary Operators * BAEL-3118 - Added UnitTests for Increment Decrement Unary Operators * BAEL-3118 * BAEL-3118 - Added new module core-java-lang-operators/pom - Added increment and decrement unary operators unit tests * BAEL-3118 * modified artifact id * refactoring - poackage renamed --- .../IncrementDecrementUnaryOperatorUnitTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename core-java-modules/core-java-lang-operators/src/test/java/com/baeldung/{incrementdecrementunaryoperators => unaryoperators}/IncrementDecrementUnaryOperatorUnitTest.java (97%) diff --git a/core-java-modules/core-java-lang-operators/src/test/java/com/baeldung/incrementdecrementunaryoperators/IncrementDecrementUnaryOperatorUnitTest.java b/core-java-modules/core-java-lang-operators/src/test/java/com/baeldung/unaryoperators/IncrementDecrementUnaryOperatorUnitTest.java similarity index 97% rename from core-java-modules/core-java-lang-operators/src/test/java/com/baeldung/incrementdecrementunaryoperators/IncrementDecrementUnaryOperatorUnitTest.java rename to core-java-modules/core-java-lang-operators/src/test/java/com/baeldung/unaryoperators/IncrementDecrementUnaryOperatorUnitTest.java index 8fbc2eeab8..cb0f896ec0 100644 --- a/core-java-modules/core-java-lang-operators/src/test/java/com/baeldung/incrementdecrementunaryoperators/IncrementDecrementUnaryOperatorUnitTest.java +++ b/core-java-modules/core-java-lang-operators/src/test/java/com/baeldung/unaryoperators/IncrementDecrementUnaryOperatorUnitTest.java @@ -1,4 +1,4 @@ -package com.baeldung.incrementdecrementunaryoperators; +package com.baeldung.unaryoperators; import static org.assertj.core.api.Assertions.assertThat; From 0fbd9ebca07b19d054d3629675d83948fd2c2f7d Mon Sep 17 00:00:00 2001 From: cdjole Date: Sun, 11 Aug 2019 07:46:49 +0200 Subject: [PATCH 136/140] BAEL-3122 In-Place Sort (#7542) * BAEL-3122 In-Place Sort * BAEL-3122 rename Sort main and test classes * BAEL-3122 Class renaming --- .../algorithms/inoutsort/InOutSort.java | 25 +++++++++++++++++++ .../inoutsort/InOutSortUnitTest.java | 23 +++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 algorithms-sorting/src/main/java/com/baeldung/algorithms/inoutsort/InOutSort.java create mode 100644 algorithms-sorting/src/test/java/com/baeldung/algorithms/inoutsort/InOutSortUnitTest.java diff --git a/algorithms-sorting/src/main/java/com/baeldung/algorithms/inoutsort/InOutSort.java b/algorithms-sorting/src/main/java/com/baeldung/algorithms/inoutsort/InOutSort.java new file mode 100644 index 0000000000..5ba225cead --- /dev/null +++ b/algorithms-sorting/src/main/java/com/baeldung/algorithms/inoutsort/InOutSort.java @@ -0,0 +1,25 @@ +package com.baeldung.algorithms.inoutsort; + +public class InOutSort { + + public static int[] reverseInPlace(int A[]) { + int n = A.length; + for (int i = 0; i < n / 2; i++) { + int temp = A[i]; + A[i] = A[n - 1 - i]; + A[n - 1 - i] = temp; + } + + return A; + } + + public static int[] reverseOutOfPlace(int A[]) { + int n = A.length; + int[] B = new int[n]; + for (int i = 0; i < n; i++) { + B[n - i - 1] = A[i]; + } + + return B; + } +} diff --git a/algorithms-sorting/src/test/java/com/baeldung/algorithms/inoutsort/InOutSortUnitTest.java b/algorithms-sorting/src/test/java/com/baeldung/algorithms/inoutsort/InOutSortUnitTest.java new file mode 100644 index 0000000000..321b905f68 --- /dev/null +++ b/algorithms-sorting/src/test/java/com/baeldung/algorithms/inoutsort/InOutSortUnitTest.java @@ -0,0 +1,23 @@ +package com.baeldung.algorithms.inoutsort; + +import static org.junit.Assert.*; +import static org.junit.Assert.assertArrayEquals; + +import org.junit.Test; + +public class InOutSortUnitTest { + + @Test + public void givenArray_whenInPlaceSort_thenReversed() { + int[] input = {1, 2, 3, 4, 5, 6, 7}; + int[] expected = {7, 6, 5, 4, 3, 2, 1}; + assertArrayEquals("the two arrays are not equal", expected, InOutSort.reverseInPlace(input)); + } + + @Test + public void givenArray_whenOutOfPlaceSort_thenReversed() { + int[] input = {1, 2, 3, 4, 5, 6, 7}; + int[] expected = {7, 6, 5, 4, 3, 2, 1}; + assertArrayEquals("the two arrays are not equal", expected, InOutSort.reverseOutOfPlace(input)); + } +} From 84364759d610bdf2a5242fb87a2949caa18528ec Mon Sep 17 00:00:00 2001 From: amit2103 Date: Sun, 11 Aug 2019 18:30:21 +0530 Subject: [PATCH 137/140] [BAEL-15990] - Moved properties articles --- spring-all/README.md | 1 - spring-boot-properties/README.md | 10 ++- spring-boot-properties/pom.xml | 12 +++ .../properties/AdditionalConfiguration.java | 2 +- .../properties/AdditionalProperties.java | 4 +- .../baeldung/properties/ConfigProperties.java | 17 ++-- .../ConfigPropertiesDemoApplication.java | 0 .../properties/CustomJsonProperties.java | 0 .../java/com}/baeldung/properties/Item.java | 2 +- .../baeldung/properties/JsonProperties.java | 0 .../JsonPropertyContextInitializer.java | 0 .../properties/JsonPropertySourceFactory.java | 0 .../properties/conversion/Employee.java | 0 .../conversion/EmployeeConverter.java | 0 .../PropertiesConversionApplication.java | 0 .../conversion/PropertyConversion.java | 0 .../value/ClassNotManagedBySpring.java | 0 .../com/baeldung/value/InitializerBean.java | 0 .../java/com/baeldung/value/SomeBean.java | 0 .../java/com/baeldung/value/ValuesApp.java | 0 .../ValuesWithDefaultsApp.java | 0 .../java/com/baeldung/yaml/MyApplication.java | 0 .../java/com/baeldung/yaml/YAMLConfig.java | 0 .../core/ComponentInXmlUsingProperties.java | 0 .../core/ComponentUsingProperties.java | 0 .../ExternalPropertiesWithJavaConfig.java | 0 .../ExternalPropertiesWithXmlConfig.java | 0 .../ExternalPropertiesWithXmlConfigOne.java | 0 .../ExternalPropertiesWithXmlConfigTwo.java | 0 .../spring/BasicPropertiesWithJavaConfig.java | 0 .../spring/PropertiesWithJavaConfig.java | 0 .../spring/PropertiesWithJavaConfigOther.java | 0 .../PropertiesWithPlaceHolderConfigurer.java | 0 .../src/main/resources/application.yml | 0 .../src/main/resources/bar.properties | 0 .../resources/basicConfigForProperties.xml | 0 .../resources/basicConfigForPropertiesOne.xml | 0 .../resources/basicConfigForPropertiesTwo.xml | 0 .../src/main/resources/child.properties | 0 .../main/resources/configForProperties.xml | 0 .../main/resources/configForPropertiesOne.xml | 0 .../src/main/resources/configprops.json | 0 .../src/main/resources/configprops.properties | 3 + .../src/main/resources/conversion.properties | 2 + .../src/main/resources/foo.properties | 0 .../src/main/resources/parent.properties | 0 .../src/main/resources/values.properties | 0 .../resources/valueswithdefaults.properties | 0 .../ConfigPropertiesIntegrationTest.java | 3 - .../JsonPropertiesIntegrationTest.java | 2 +- .../PropertiesConversionIntegrationTest.java | 0 ...lassNotManagedBySpringIntegrationTest.java | 0 ...asicPropertiesWithJavaIntegrationTest.java | 0 ...ndedPropertiesWithJavaIntegrationTest.java | 0 .../PropertiesWithJavaIntegrationTest.java | 0 ...ertiesWithMultipleXmlsIntegrationTest.java | 0 .../PropertiesWithXmlIntegrationTest.java | 0 ...rnalPropertiesWithJavaIntegrationTest.java | 0 ...ertiesWithMultipleXmlsIntegrationTest.java | 0 .../ExternalPropertiesWithXmlManualTest.java | 0 ...lePropertiesJavaConfigIntegrationTest.java | 0 ...plePropertiesXmlConfigIntegrationTest.java | 0 .../parentchild/ChildValueHolder.java | 0 ...yPlaceHolderPropertiesIntegrationTest.java | 0 ...opertySourcePropertiesIntegrationTest.java | 0 .../parentchild/ParentValueHolder.java | 0 .../parentchild/config/ChildConfig.java | 0 .../parentchild/config/ChildConfig2.java | 0 .../parentchild/config/ParentConfig.java | 0 .../parentchild/config/ParentConfig2.java | 0 .../baeldung/test/IntegrationTestSuite.java | 0 .../resources/configprops-test.properties | 0 .../src/test/resources/conversion.properties | 11 +++ spring-boot/README.MD | 3 - .../baeldung/properties/ConfigProperties.java | 90 ------------------- .../ConfigPropertiesDemoApplication.java | 18 ---- .../org/baeldung/properties/Credentials.java | 37 -------- .../properties/CustomJsonProperties.java | 71 --------------- .../baeldung/properties/JsonProperties.java | 64 ------------- .../JsonPropertyContextInitializer.java | 68 -------------- .../properties/JsonPropertySourceFactory.java | 21 ----- .../JsonPropertiesIntegrationTest.java | 63 ------------- .../ConfigPropertiesIntegrationTest.java | 63 ------------- spring-core/README.md | 4 - 84 files changed, 55 insertions(+), 516 deletions(-) rename {spring-boot/src/main/java/org => spring-boot-properties/src/main/java/com}/baeldung/properties/AdditionalConfiguration.java (92%) rename {spring-boot/src/main/java/org => spring-boot-properties/src/main/java/com}/baeldung/properties/AdditionalProperties.java (80%) rename {spring-boot => spring-boot-properties}/src/main/java/com/baeldung/properties/ConfigProperties.java (88%) rename {spring-boot => spring-boot-properties}/src/main/java/com/baeldung/properties/ConfigPropertiesDemoApplication.java (100%) rename {spring-boot => spring-boot-properties}/src/main/java/com/baeldung/properties/CustomJsonProperties.java (100%) rename {spring-boot/src/main/java/org => spring-boot-properties/src/main/java/com}/baeldung/properties/Item.java (93%) rename {spring-boot => spring-boot-properties}/src/main/java/com/baeldung/properties/JsonProperties.java (100%) rename {spring-boot => spring-boot-properties}/src/main/java/com/baeldung/properties/JsonPropertyContextInitializer.java (100%) rename {spring-boot => spring-boot-properties}/src/main/java/com/baeldung/properties/JsonPropertySourceFactory.java (100%) rename {spring-boot => spring-boot-properties}/src/main/java/com/baeldung/properties/conversion/Employee.java (100%) rename {spring-boot => spring-boot-properties}/src/main/java/com/baeldung/properties/conversion/EmployeeConverter.java (100%) rename {spring-boot => spring-boot-properties}/src/main/java/com/baeldung/properties/conversion/PropertiesConversionApplication.java (100%) rename {spring-boot => spring-boot-properties}/src/main/java/com/baeldung/properties/conversion/PropertyConversion.java (100%) rename {spring-core => spring-boot-properties}/src/main/java/com/baeldung/value/ClassNotManagedBySpring.java (100%) rename {spring-core => spring-boot-properties}/src/main/java/com/baeldung/value/InitializerBean.java (100%) rename {spring-core => spring-boot-properties}/src/main/java/com/baeldung/value/SomeBean.java (100%) rename {spring-core => spring-boot-properties}/src/main/java/com/baeldung/value/ValuesApp.java (100%) rename {spring-core => spring-boot-properties}/src/main/java/com/baeldung/valuewithdefaults/ValuesWithDefaultsApp.java (100%) rename {spring-core => spring-boot-properties}/src/main/java/com/baeldung/yaml/MyApplication.java (100%) rename {spring-core => spring-boot-properties}/src/main/java/com/baeldung/yaml/YAMLConfig.java (100%) rename {spring-all => spring-boot-properties}/src/main/java/org/baeldung/properties/core/ComponentInXmlUsingProperties.java (100%) rename {spring-all => spring-boot-properties}/src/main/java/org/baeldung/properties/core/ComponentUsingProperties.java (100%) rename {spring-all => spring-boot-properties}/src/main/java/org/baeldung/properties/external/ExternalPropertiesWithJavaConfig.java (100%) rename {spring-all => spring-boot-properties}/src/main/java/org/baeldung/properties/external/ExternalPropertiesWithXmlConfig.java (100%) rename {spring-all => spring-boot-properties}/src/main/java/org/baeldung/properties/external/ExternalPropertiesWithXmlConfigOne.java (100%) rename {spring-all => spring-boot-properties}/src/main/java/org/baeldung/properties/external/ExternalPropertiesWithXmlConfigTwo.java (100%) rename {spring-all => spring-boot-properties}/src/main/java/org/baeldung/properties/spring/BasicPropertiesWithJavaConfig.java (100%) rename {spring-all => spring-boot-properties}/src/main/java/org/baeldung/properties/spring/PropertiesWithJavaConfig.java (100%) rename {spring-all => spring-boot-properties}/src/main/java/org/baeldung/properties/spring/PropertiesWithJavaConfigOther.java (100%) rename {spring-all => spring-boot-properties}/src/main/java/org/baeldung/properties/spring/PropertiesWithPlaceHolderConfigurer.java (100%) rename {spring-core => spring-boot-properties}/src/main/resources/application.yml (100%) rename {spring-all => spring-boot-properties}/src/main/resources/bar.properties (100%) rename {spring-all => spring-boot-properties}/src/main/resources/basicConfigForProperties.xml (100%) rename {spring-all => spring-boot-properties}/src/main/resources/basicConfigForPropertiesOne.xml (100%) rename {spring-all => spring-boot-properties}/src/main/resources/basicConfigForPropertiesTwo.xml (100%) rename {spring-all => spring-boot-properties}/src/main/resources/child.properties (100%) rename {spring-all => spring-boot-properties}/src/main/resources/configForProperties.xml (100%) rename {spring-all => spring-boot-properties}/src/main/resources/configForPropertiesOne.xml (100%) rename {spring-boot => spring-boot-properties}/src/main/resources/configprops.json (100%) rename {spring-boot => spring-boot-properties}/src/main/resources/configprops.properties (89%) create mode 100644 spring-boot-properties/src/main/resources/conversion.properties rename {spring-all => spring-boot-properties}/src/main/resources/foo.properties (100%) rename {spring-all => spring-boot-properties}/src/main/resources/parent.properties (100%) rename {spring-core => spring-boot-properties}/src/main/resources/values.properties (100%) rename {spring-core => spring-boot-properties}/src/main/resources/valueswithdefaults.properties (100%) rename {spring-boot => spring-boot-properties}/src/test/java/com/baeldung/properties/ConfigPropertiesIntegrationTest.java (93%) rename {spring-boot/src/test/java/org => spring-boot-properties/src/test/java/com}/baeldung/properties/JsonPropertiesIntegrationTest.java (98%) rename {spring-boot => spring-boot-properties}/src/test/java/com/baeldung/properties/conversion/PropertiesConversionIntegrationTest.java (100%) rename {spring-core => spring-boot-properties}/src/test/java/com/baeldung/value/ClassNotManagedBySpringIntegrationTest.java (100%) rename {spring-all => spring-boot-properties}/src/test/java/org/baeldung/properties/basic/BasicPropertiesWithJavaIntegrationTest.java (100%) rename {spring-all => spring-boot-properties}/src/test/java/org/baeldung/properties/basic/ExtendedPropertiesWithJavaIntegrationTest.java (100%) rename {spring-all => spring-boot-properties}/src/test/java/org/baeldung/properties/basic/PropertiesWithJavaIntegrationTest.java (100%) rename {spring-all => spring-boot-properties}/src/test/java/org/baeldung/properties/basic/PropertiesWithMultipleXmlsIntegrationTest.java (100%) rename {spring-all => spring-boot-properties}/src/test/java/org/baeldung/properties/basic/PropertiesWithXmlIntegrationTest.java (100%) rename {spring-all => spring-boot-properties}/src/test/java/org/baeldung/properties/external/ExternalPropertiesWithJavaIntegrationTest.java (100%) rename {spring-all => spring-boot-properties}/src/test/java/org/baeldung/properties/external/ExternalPropertiesWithMultipleXmlsIntegrationTest.java (100%) rename {spring-all => spring-boot-properties}/src/test/java/org/baeldung/properties/external/ExternalPropertiesWithXmlManualTest.java (100%) rename {spring-all => spring-boot-properties}/src/test/java/org/baeldung/properties/multiple/MultiplePropertiesJavaConfigIntegrationTest.java (100%) rename {spring-all => spring-boot-properties}/src/test/java/org/baeldung/properties/multiple/MultiplePropertiesXmlConfigIntegrationTest.java (100%) rename {spring-all => spring-boot-properties}/src/test/java/org/baeldung/properties/parentchild/ChildValueHolder.java (100%) rename {spring-all => spring-boot-properties}/src/test/java/org/baeldung/properties/parentchild/ParentChildPropertyPlaceHolderPropertiesIntegrationTest.java (100%) rename {spring-all => spring-boot-properties}/src/test/java/org/baeldung/properties/parentchild/ParentChildPropertySourcePropertiesIntegrationTest.java (100%) rename {spring-all => spring-boot-properties}/src/test/java/org/baeldung/properties/parentchild/ParentValueHolder.java (100%) rename {spring-all => spring-boot-properties}/src/test/java/org/baeldung/properties/parentchild/config/ChildConfig.java (100%) rename {spring-all => spring-boot-properties}/src/test/java/org/baeldung/properties/parentchild/config/ChildConfig2.java (100%) rename {spring-all => spring-boot-properties}/src/test/java/org/baeldung/properties/parentchild/config/ParentConfig.java (100%) rename {spring-all => spring-boot-properties}/src/test/java/org/baeldung/properties/parentchild/config/ParentConfig2.java (100%) rename {spring-all => spring-boot-properties}/src/test/java/org/baeldung/test/IntegrationTestSuite.java (100%) rename {spring-boot => spring-boot-properties}/src/test/resources/configprops-test.properties (100%) create mode 100644 spring-boot-properties/src/test/resources/conversion.properties delete mode 100644 spring-boot/src/main/java/org/baeldung/properties/ConfigProperties.java delete mode 100644 spring-boot/src/main/java/org/baeldung/properties/ConfigPropertiesDemoApplication.java delete mode 100644 spring-boot/src/main/java/org/baeldung/properties/Credentials.java delete mode 100644 spring-boot/src/main/java/org/baeldung/properties/CustomJsonProperties.java delete mode 100644 spring-boot/src/main/java/org/baeldung/properties/JsonProperties.java delete mode 100644 spring-boot/src/main/java/org/baeldung/properties/JsonPropertyContextInitializer.java delete mode 100644 spring-boot/src/main/java/org/baeldung/properties/JsonPropertySourceFactory.java delete mode 100644 spring-boot/src/test/java/com/baeldung/properties/JsonPropertiesIntegrationTest.java delete mode 100644 spring-boot/src/test/java/org/baeldung/properties/ConfigPropertiesIntegrationTest.java diff --git a/spring-all/README.md b/spring-all/README.md index d3296bd457..22c51525f3 100644 --- a/spring-all/README.md +++ b/spring-all/README.md @@ -11,7 +11,6 @@ The "REST With Spring" Classes: http://bit.ly/restwithspring ### Relevant articles: - [Guide to Spring @Autowired](http://www.baeldung.com/spring-autowire) -- [Properties with Spring and Spring Boot](http://www.baeldung.com/properties-with-spring) - checkout the `org.baeldung.properties` package for all scenarios of properties injection and usage - [Spring Profiles](http://www.baeldung.com/spring-profiles) - [A Spring Custom Annotation for a Better DAO](http://www.baeldung.com/spring-annotation-bean-pre-processor) - [What’s New in Spring 4.3?](http://www.baeldung.com/whats-new-in-spring-4-3) diff --git a/spring-boot-properties/README.md b/spring-boot-properties/README.md index c43cf4865c..e467e129dd 100644 --- a/spring-boot-properties/README.md +++ b/spring-boot-properties/README.md @@ -1,2 +1,10 @@ ### Relevant Articles: -- [Reloading Properties in Spring](https://www.baeldung.com/reloading-properties-files-in-spring/) \ No newline at end of file +- [Reloading Properties in Spring](https://www.baeldung.com/reloading-properties-files-in-spring/) +- [Guide to @ConfigurationProperties in Spring Boot](http://www.baeldung.com/configuration-properties-in-spring-boot) +- [Load Spring Boot Properties From a JSON File](https://www.baeldung.com/spring-boot-json-properties) +- [Guide to @EnableConfigurationProperties](https://www.baeldung.com/spring-enable-config-properties) +- [Properties with Spring and Spring Boot](http://www.baeldung.com/properties-with-spring) - checkout the `org.baeldung.properties` package for all scenarios of properties injection and usage +- [A Quick Guide to Spring @Value](http://www.baeldung.com/spring-value-annotation) +- [Spring YAML Configuration](http://www.baeldung.com/spring-yaml) +- [Using Spring @Value with Defaults](http://www.baeldung.com/spring-value-defaults) +- [How to Inject a Property Value Into a Class Not Managed by Spring?](http://www.baeldung.com/inject-properties-value-non-spring-class) \ No newline at end of file diff --git a/spring-boot-properties/pom.xml b/spring-boot-properties/pom.xml index 27ac48252b..ccb9204d96 100644 --- a/spring-boot-properties/pom.xml +++ b/spring-boot-properties/pom.xml @@ -37,6 +37,16 @@ spring-boot-starter-test test + + com.google.guava + guava + ${guava.version} + + + org.apache.httpcomponents + httpcore + ${httpcore.version} + @@ -99,6 +109,8 @@ 1.8 Greenwich.SR1 1.10 + 20.0 + 4.4.11 diff --git a/spring-boot/src/main/java/org/baeldung/properties/AdditionalConfiguration.java b/spring-boot-properties/src/main/java/com/baeldung/properties/AdditionalConfiguration.java similarity index 92% rename from spring-boot/src/main/java/org/baeldung/properties/AdditionalConfiguration.java rename to spring-boot-properties/src/main/java/com/baeldung/properties/AdditionalConfiguration.java index 499666c143..c5ccd20392 100644 --- a/spring-boot/src/main/java/org/baeldung/properties/AdditionalConfiguration.java +++ b/spring-boot-properties/src/main/java/com/baeldung/properties/AdditionalConfiguration.java @@ -1,4 +1,4 @@ -package org.baeldung.properties; +package com.baeldung.properties; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.properties.EnableConfigurationProperties; diff --git a/spring-boot/src/main/java/org/baeldung/properties/AdditionalProperties.java b/spring-boot-properties/src/main/java/com/baeldung/properties/AdditionalProperties.java similarity index 80% rename from spring-boot/src/main/java/org/baeldung/properties/AdditionalProperties.java rename to spring-boot-properties/src/main/java/com/baeldung/properties/AdditionalProperties.java index 64e39b1475..6f6842e5e9 100644 --- a/spring-boot/src/main/java/org/baeldung/properties/AdditionalProperties.java +++ b/spring-boot-properties/src/main/java/com/baeldung/properties/AdditionalProperties.java @@ -1,7 +1,9 @@ -package org.baeldung.properties; +package com.baeldung.properties; import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +@Configuration @ConfigurationProperties(prefix = "additional") public class AdditionalProperties { diff --git a/spring-boot/src/main/java/com/baeldung/properties/ConfigProperties.java b/spring-boot-properties/src/main/java/com/baeldung/properties/ConfigProperties.java similarity index 88% rename from spring-boot/src/main/java/com/baeldung/properties/ConfigProperties.java rename to spring-boot-properties/src/main/java/com/baeldung/properties/ConfigProperties.java index 35b0239287..b690c8e305 100644 --- a/spring-boot/src/main/java/com/baeldung/properties/ConfigProperties.java +++ b/spring-boot-properties/src/main/java/com/baeldung/properties/ConfigProperties.java @@ -10,6 +10,7 @@ import javax.validation.constraints.Pattern; import org.hibernate.validator.constraints.Length; import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; import org.springframework.validation.annotation.Validated; @@ -54,7 +55,7 @@ public class ConfigProperties { } @NotBlank - private String host; + private String hostName; @Min(1025) @Max(65536) @@ -67,12 +68,12 @@ public class ConfigProperties { private List defaultRecipients; private Map additionalHeaders; - public String getHost() { - return host; + public String getHostName() { + return hostName; } - public void setHost(String host) { - this.host = host; + public void setHostName(String hostName) { + this.hostName = hostName; } public int getPort() { @@ -114,4 +115,10 @@ public class ConfigProperties { public void setAdditionalHeaders(Map additionalHeaders) { this.additionalHeaders = additionalHeaders; } + + @Bean + @ConfigurationProperties(prefix = "item") + public Item item(){ + return new Item(); + } } diff --git a/spring-boot/src/main/java/com/baeldung/properties/ConfigPropertiesDemoApplication.java b/spring-boot-properties/src/main/java/com/baeldung/properties/ConfigPropertiesDemoApplication.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/properties/ConfigPropertiesDemoApplication.java rename to spring-boot-properties/src/main/java/com/baeldung/properties/ConfigPropertiesDemoApplication.java diff --git a/spring-boot/src/main/java/com/baeldung/properties/CustomJsonProperties.java b/spring-boot-properties/src/main/java/com/baeldung/properties/CustomJsonProperties.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/properties/CustomJsonProperties.java rename to spring-boot-properties/src/main/java/com/baeldung/properties/CustomJsonProperties.java diff --git a/spring-boot/src/main/java/org/baeldung/properties/Item.java b/spring-boot-properties/src/main/java/com/baeldung/properties/Item.java similarity index 93% rename from spring-boot/src/main/java/org/baeldung/properties/Item.java rename to spring-boot-properties/src/main/java/com/baeldung/properties/Item.java index 0314654ada..741bbba144 100644 --- a/spring-boot/src/main/java/org/baeldung/properties/Item.java +++ b/spring-boot-properties/src/main/java/com/baeldung/properties/Item.java @@ -1,4 +1,4 @@ -package org.baeldung.properties; +package com.baeldung.properties; public class Item { diff --git a/spring-boot/src/main/java/com/baeldung/properties/JsonProperties.java b/spring-boot-properties/src/main/java/com/baeldung/properties/JsonProperties.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/properties/JsonProperties.java rename to spring-boot-properties/src/main/java/com/baeldung/properties/JsonProperties.java diff --git a/spring-boot/src/main/java/com/baeldung/properties/JsonPropertyContextInitializer.java b/spring-boot-properties/src/main/java/com/baeldung/properties/JsonPropertyContextInitializer.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/properties/JsonPropertyContextInitializer.java rename to spring-boot-properties/src/main/java/com/baeldung/properties/JsonPropertyContextInitializer.java diff --git a/spring-boot/src/main/java/com/baeldung/properties/JsonPropertySourceFactory.java b/spring-boot-properties/src/main/java/com/baeldung/properties/JsonPropertySourceFactory.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/properties/JsonPropertySourceFactory.java rename to spring-boot-properties/src/main/java/com/baeldung/properties/JsonPropertySourceFactory.java diff --git a/spring-boot/src/main/java/com/baeldung/properties/conversion/Employee.java b/spring-boot-properties/src/main/java/com/baeldung/properties/conversion/Employee.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/properties/conversion/Employee.java rename to spring-boot-properties/src/main/java/com/baeldung/properties/conversion/Employee.java diff --git a/spring-boot/src/main/java/com/baeldung/properties/conversion/EmployeeConverter.java b/spring-boot-properties/src/main/java/com/baeldung/properties/conversion/EmployeeConverter.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/properties/conversion/EmployeeConverter.java rename to spring-boot-properties/src/main/java/com/baeldung/properties/conversion/EmployeeConverter.java diff --git a/spring-boot/src/main/java/com/baeldung/properties/conversion/PropertiesConversionApplication.java b/spring-boot-properties/src/main/java/com/baeldung/properties/conversion/PropertiesConversionApplication.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/properties/conversion/PropertiesConversionApplication.java rename to spring-boot-properties/src/main/java/com/baeldung/properties/conversion/PropertiesConversionApplication.java diff --git a/spring-boot/src/main/java/com/baeldung/properties/conversion/PropertyConversion.java b/spring-boot-properties/src/main/java/com/baeldung/properties/conversion/PropertyConversion.java similarity index 100% rename from spring-boot/src/main/java/com/baeldung/properties/conversion/PropertyConversion.java rename to spring-boot-properties/src/main/java/com/baeldung/properties/conversion/PropertyConversion.java diff --git a/spring-core/src/main/java/com/baeldung/value/ClassNotManagedBySpring.java b/spring-boot-properties/src/main/java/com/baeldung/value/ClassNotManagedBySpring.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/value/ClassNotManagedBySpring.java rename to spring-boot-properties/src/main/java/com/baeldung/value/ClassNotManagedBySpring.java diff --git a/spring-core/src/main/java/com/baeldung/value/InitializerBean.java b/spring-boot-properties/src/main/java/com/baeldung/value/InitializerBean.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/value/InitializerBean.java rename to spring-boot-properties/src/main/java/com/baeldung/value/InitializerBean.java diff --git a/spring-core/src/main/java/com/baeldung/value/SomeBean.java b/spring-boot-properties/src/main/java/com/baeldung/value/SomeBean.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/value/SomeBean.java rename to spring-boot-properties/src/main/java/com/baeldung/value/SomeBean.java diff --git a/spring-core/src/main/java/com/baeldung/value/ValuesApp.java b/spring-boot-properties/src/main/java/com/baeldung/value/ValuesApp.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/value/ValuesApp.java rename to spring-boot-properties/src/main/java/com/baeldung/value/ValuesApp.java diff --git a/spring-core/src/main/java/com/baeldung/valuewithdefaults/ValuesWithDefaultsApp.java b/spring-boot-properties/src/main/java/com/baeldung/valuewithdefaults/ValuesWithDefaultsApp.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/valuewithdefaults/ValuesWithDefaultsApp.java rename to spring-boot-properties/src/main/java/com/baeldung/valuewithdefaults/ValuesWithDefaultsApp.java diff --git a/spring-core/src/main/java/com/baeldung/yaml/MyApplication.java b/spring-boot-properties/src/main/java/com/baeldung/yaml/MyApplication.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/yaml/MyApplication.java rename to spring-boot-properties/src/main/java/com/baeldung/yaml/MyApplication.java diff --git a/spring-core/src/main/java/com/baeldung/yaml/YAMLConfig.java b/spring-boot-properties/src/main/java/com/baeldung/yaml/YAMLConfig.java similarity index 100% rename from spring-core/src/main/java/com/baeldung/yaml/YAMLConfig.java rename to spring-boot-properties/src/main/java/com/baeldung/yaml/YAMLConfig.java diff --git a/spring-all/src/main/java/org/baeldung/properties/core/ComponentInXmlUsingProperties.java b/spring-boot-properties/src/main/java/org/baeldung/properties/core/ComponentInXmlUsingProperties.java similarity index 100% rename from spring-all/src/main/java/org/baeldung/properties/core/ComponentInXmlUsingProperties.java rename to spring-boot-properties/src/main/java/org/baeldung/properties/core/ComponentInXmlUsingProperties.java diff --git a/spring-all/src/main/java/org/baeldung/properties/core/ComponentUsingProperties.java b/spring-boot-properties/src/main/java/org/baeldung/properties/core/ComponentUsingProperties.java similarity index 100% rename from spring-all/src/main/java/org/baeldung/properties/core/ComponentUsingProperties.java rename to spring-boot-properties/src/main/java/org/baeldung/properties/core/ComponentUsingProperties.java diff --git a/spring-all/src/main/java/org/baeldung/properties/external/ExternalPropertiesWithJavaConfig.java b/spring-boot-properties/src/main/java/org/baeldung/properties/external/ExternalPropertiesWithJavaConfig.java similarity index 100% rename from spring-all/src/main/java/org/baeldung/properties/external/ExternalPropertiesWithJavaConfig.java rename to spring-boot-properties/src/main/java/org/baeldung/properties/external/ExternalPropertiesWithJavaConfig.java diff --git a/spring-all/src/main/java/org/baeldung/properties/external/ExternalPropertiesWithXmlConfig.java b/spring-boot-properties/src/main/java/org/baeldung/properties/external/ExternalPropertiesWithXmlConfig.java similarity index 100% rename from spring-all/src/main/java/org/baeldung/properties/external/ExternalPropertiesWithXmlConfig.java rename to spring-boot-properties/src/main/java/org/baeldung/properties/external/ExternalPropertiesWithXmlConfig.java diff --git a/spring-all/src/main/java/org/baeldung/properties/external/ExternalPropertiesWithXmlConfigOne.java b/spring-boot-properties/src/main/java/org/baeldung/properties/external/ExternalPropertiesWithXmlConfigOne.java similarity index 100% rename from spring-all/src/main/java/org/baeldung/properties/external/ExternalPropertiesWithXmlConfigOne.java rename to spring-boot-properties/src/main/java/org/baeldung/properties/external/ExternalPropertiesWithXmlConfigOne.java diff --git a/spring-all/src/main/java/org/baeldung/properties/external/ExternalPropertiesWithXmlConfigTwo.java b/spring-boot-properties/src/main/java/org/baeldung/properties/external/ExternalPropertiesWithXmlConfigTwo.java similarity index 100% rename from spring-all/src/main/java/org/baeldung/properties/external/ExternalPropertiesWithXmlConfigTwo.java rename to spring-boot-properties/src/main/java/org/baeldung/properties/external/ExternalPropertiesWithXmlConfigTwo.java diff --git a/spring-all/src/main/java/org/baeldung/properties/spring/BasicPropertiesWithJavaConfig.java b/spring-boot-properties/src/main/java/org/baeldung/properties/spring/BasicPropertiesWithJavaConfig.java similarity index 100% rename from spring-all/src/main/java/org/baeldung/properties/spring/BasicPropertiesWithJavaConfig.java rename to spring-boot-properties/src/main/java/org/baeldung/properties/spring/BasicPropertiesWithJavaConfig.java diff --git a/spring-all/src/main/java/org/baeldung/properties/spring/PropertiesWithJavaConfig.java b/spring-boot-properties/src/main/java/org/baeldung/properties/spring/PropertiesWithJavaConfig.java similarity index 100% rename from spring-all/src/main/java/org/baeldung/properties/spring/PropertiesWithJavaConfig.java rename to spring-boot-properties/src/main/java/org/baeldung/properties/spring/PropertiesWithJavaConfig.java diff --git a/spring-all/src/main/java/org/baeldung/properties/spring/PropertiesWithJavaConfigOther.java b/spring-boot-properties/src/main/java/org/baeldung/properties/spring/PropertiesWithJavaConfigOther.java similarity index 100% rename from spring-all/src/main/java/org/baeldung/properties/spring/PropertiesWithJavaConfigOther.java rename to spring-boot-properties/src/main/java/org/baeldung/properties/spring/PropertiesWithJavaConfigOther.java diff --git a/spring-all/src/main/java/org/baeldung/properties/spring/PropertiesWithPlaceHolderConfigurer.java b/spring-boot-properties/src/main/java/org/baeldung/properties/spring/PropertiesWithPlaceHolderConfigurer.java similarity index 100% rename from spring-all/src/main/java/org/baeldung/properties/spring/PropertiesWithPlaceHolderConfigurer.java rename to spring-boot-properties/src/main/java/org/baeldung/properties/spring/PropertiesWithPlaceHolderConfigurer.java diff --git a/spring-core/src/main/resources/application.yml b/spring-boot-properties/src/main/resources/application.yml similarity index 100% rename from spring-core/src/main/resources/application.yml rename to spring-boot-properties/src/main/resources/application.yml diff --git a/spring-all/src/main/resources/bar.properties b/spring-boot-properties/src/main/resources/bar.properties similarity index 100% rename from spring-all/src/main/resources/bar.properties rename to spring-boot-properties/src/main/resources/bar.properties diff --git a/spring-all/src/main/resources/basicConfigForProperties.xml b/spring-boot-properties/src/main/resources/basicConfigForProperties.xml similarity index 100% rename from spring-all/src/main/resources/basicConfigForProperties.xml rename to spring-boot-properties/src/main/resources/basicConfigForProperties.xml diff --git a/spring-all/src/main/resources/basicConfigForPropertiesOne.xml b/spring-boot-properties/src/main/resources/basicConfigForPropertiesOne.xml similarity index 100% rename from spring-all/src/main/resources/basicConfigForPropertiesOne.xml rename to spring-boot-properties/src/main/resources/basicConfigForPropertiesOne.xml diff --git a/spring-all/src/main/resources/basicConfigForPropertiesTwo.xml b/spring-boot-properties/src/main/resources/basicConfigForPropertiesTwo.xml similarity index 100% rename from spring-all/src/main/resources/basicConfigForPropertiesTwo.xml rename to spring-boot-properties/src/main/resources/basicConfigForPropertiesTwo.xml diff --git a/spring-all/src/main/resources/child.properties b/spring-boot-properties/src/main/resources/child.properties similarity index 100% rename from spring-all/src/main/resources/child.properties rename to spring-boot-properties/src/main/resources/child.properties diff --git a/spring-all/src/main/resources/configForProperties.xml b/spring-boot-properties/src/main/resources/configForProperties.xml similarity index 100% rename from spring-all/src/main/resources/configForProperties.xml rename to spring-boot-properties/src/main/resources/configForProperties.xml diff --git a/spring-all/src/main/resources/configForPropertiesOne.xml b/spring-boot-properties/src/main/resources/configForPropertiesOne.xml similarity index 100% rename from spring-all/src/main/resources/configForPropertiesOne.xml rename to spring-boot-properties/src/main/resources/configForPropertiesOne.xml diff --git a/spring-boot/src/main/resources/configprops.json b/spring-boot-properties/src/main/resources/configprops.json similarity index 100% rename from spring-boot/src/main/resources/configprops.json rename to spring-boot-properties/src/main/resources/configprops.json diff --git a/spring-boot/src/main/resources/configprops.properties b/spring-boot-properties/src/main/resources/configprops.properties similarity index 89% rename from spring-boot/src/main/resources/configprops.properties rename to spring-boot-properties/src/main/resources/configprops.properties index 424b3632f9..71e81065ce 100644 --- a/spring-boot/src/main/resources/configprops.properties +++ b/spring-boot-properties/src/main/resources/configprops.properties @@ -22,3 +22,6 @@ item.name=Item name item.size=42 +#Additional properties +additional.unit=km +additional.max=100 \ No newline at end of file diff --git a/spring-boot-properties/src/main/resources/conversion.properties b/spring-boot-properties/src/main/resources/conversion.properties new file mode 100644 index 0000000000..94fadeb951 --- /dev/null +++ b/spring-boot-properties/src/main/resources/conversion.properties @@ -0,0 +1,2 @@ +conversion.timeInDefaultUnit=10 +conversion.timeInNano=9ns \ No newline at end of file diff --git a/spring-all/src/main/resources/foo.properties b/spring-boot-properties/src/main/resources/foo.properties similarity index 100% rename from spring-all/src/main/resources/foo.properties rename to spring-boot-properties/src/main/resources/foo.properties diff --git a/spring-all/src/main/resources/parent.properties b/spring-boot-properties/src/main/resources/parent.properties similarity index 100% rename from spring-all/src/main/resources/parent.properties rename to spring-boot-properties/src/main/resources/parent.properties diff --git a/spring-core/src/main/resources/values.properties b/spring-boot-properties/src/main/resources/values.properties similarity index 100% rename from spring-core/src/main/resources/values.properties rename to spring-boot-properties/src/main/resources/values.properties diff --git a/spring-core/src/main/resources/valueswithdefaults.properties b/spring-boot-properties/src/main/resources/valueswithdefaults.properties similarity index 100% rename from spring-core/src/main/resources/valueswithdefaults.properties rename to spring-boot-properties/src/main/resources/valueswithdefaults.properties diff --git a/spring-boot/src/test/java/com/baeldung/properties/ConfigPropertiesIntegrationTest.java b/spring-boot-properties/src/test/java/com/baeldung/properties/ConfigPropertiesIntegrationTest.java similarity index 93% rename from spring-boot/src/test/java/com/baeldung/properties/ConfigPropertiesIntegrationTest.java rename to spring-boot-properties/src/test/java/com/baeldung/properties/ConfigPropertiesIntegrationTest.java index 8f07b2da35..4777551132 100644 --- a/spring-boot/src/test/java/com/baeldung/properties/ConfigPropertiesIntegrationTest.java +++ b/spring-boot-properties/src/test/java/com/baeldung/properties/ConfigPropertiesIntegrationTest.java @@ -1,8 +1,5 @@ package com.baeldung.properties; -import org.baeldung.properties.AdditionalProperties; -import org.baeldung.properties.ConfigProperties; -import org.baeldung.properties.ConfigPropertiesDemoApplication; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/spring-boot/src/test/java/org/baeldung/properties/JsonPropertiesIntegrationTest.java b/spring-boot-properties/src/test/java/com/baeldung/properties/JsonPropertiesIntegrationTest.java similarity index 98% rename from spring-boot/src/test/java/org/baeldung/properties/JsonPropertiesIntegrationTest.java rename to spring-boot-properties/src/test/java/com/baeldung/properties/JsonPropertiesIntegrationTest.java index e3d4c62953..2f0e5ae408 100644 --- a/spring-boot/src/test/java/org/baeldung/properties/JsonPropertiesIntegrationTest.java +++ b/spring-boot-properties/src/test/java/com/baeldung/properties/JsonPropertiesIntegrationTest.java @@ -1,4 +1,4 @@ -package org.baeldung.properties; +package com.baeldung.properties; import java.util.Arrays; diff --git a/spring-boot/src/test/java/com/baeldung/properties/conversion/PropertiesConversionIntegrationTest.java b/spring-boot-properties/src/test/java/com/baeldung/properties/conversion/PropertiesConversionIntegrationTest.java similarity index 100% rename from spring-boot/src/test/java/com/baeldung/properties/conversion/PropertiesConversionIntegrationTest.java rename to spring-boot-properties/src/test/java/com/baeldung/properties/conversion/PropertiesConversionIntegrationTest.java diff --git a/spring-core/src/test/java/com/baeldung/value/ClassNotManagedBySpringIntegrationTest.java b/spring-boot-properties/src/test/java/com/baeldung/value/ClassNotManagedBySpringIntegrationTest.java similarity index 100% rename from spring-core/src/test/java/com/baeldung/value/ClassNotManagedBySpringIntegrationTest.java rename to spring-boot-properties/src/test/java/com/baeldung/value/ClassNotManagedBySpringIntegrationTest.java diff --git a/spring-all/src/test/java/org/baeldung/properties/basic/BasicPropertiesWithJavaIntegrationTest.java b/spring-boot-properties/src/test/java/org/baeldung/properties/basic/BasicPropertiesWithJavaIntegrationTest.java similarity index 100% rename from spring-all/src/test/java/org/baeldung/properties/basic/BasicPropertiesWithJavaIntegrationTest.java rename to spring-boot-properties/src/test/java/org/baeldung/properties/basic/BasicPropertiesWithJavaIntegrationTest.java diff --git a/spring-all/src/test/java/org/baeldung/properties/basic/ExtendedPropertiesWithJavaIntegrationTest.java b/spring-boot-properties/src/test/java/org/baeldung/properties/basic/ExtendedPropertiesWithJavaIntegrationTest.java similarity index 100% rename from spring-all/src/test/java/org/baeldung/properties/basic/ExtendedPropertiesWithJavaIntegrationTest.java rename to spring-boot-properties/src/test/java/org/baeldung/properties/basic/ExtendedPropertiesWithJavaIntegrationTest.java diff --git a/spring-all/src/test/java/org/baeldung/properties/basic/PropertiesWithJavaIntegrationTest.java b/spring-boot-properties/src/test/java/org/baeldung/properties/basic/PropertiesWithJavaIntegrationTest.java similarity index 100% rename from spring-all/src/test/java/org/baeldung/properties/basic/PropertiesWithJavaIntegrationTest.java rename to spring-boot-properties/src/test/java/org/baeldung/properties/basic/PropertiesWithJavaIntegrationTest.java diff --git a/spring-all/src/test/java/org/baeldung/properties/basic/PropertiesWithMultipleXmlsIntegrationTest.java b/spring-boot-properties/src/test/java/org/baeldung/properties/basic/PropertiesWithMultipleXmlsIntegrationTest.java similarity index 100% rename from spring-all/src/test/java/org/baeldung/properties/basic/PropertiesWithMultipleXmlsIntegrationTest.java rename to spring-boot-properties/src/test/java/org/baeldung/properties/basic/PropertiesWithMultipleXmlsIntegrationTest.java diff --git a/spring-all/src/test/java/org/baeldung/properties/basic/PropertiesWithXmlIntegrationTest.java b/spring-boot-properties/src/test/java/org/baeldung/properties/basic/PropertiesWithXmlIntegrationTest.java similarity index 100% rename from spring-all/src/test/java/org/baeldung/properties/basic/PropertiesWithXmlIntegrationTest.java rename to spring-boot-properties/src/test/java/org/baeldung/properties/basic/PropertiesWithXmlIntegrationTest.java diff --git a/spring-all/src/test/java/org/baeldung/properties/external/ExternalPropertiesWithJavaIntegrationTest.java b/spring-boot-properties/src/test/java/org/baeldung/properties/external/ExternalPropertiesWithJavaIntegrationTest.java similarity index 100% rename from spring-all/src/test/java/org/baeldung/properties/external/ExternalPropertiesWithJavaIntegrationTest.java rename to spring-boot-properties/src/test/java/org/baeldung/properties/external/ExternalPropertiesWithJavaIntegrationTest.java diff --git a/spring-all/src/test/java/org/baeldung/properties/external/ExternalPropertiesWithMultipleXmlsIntegrationTest.java b/spring-boot-properties/src/test/java/org/baeldung/properties/external/ExternalPropertiesWithMultipleXmlsIntegrationTest.java similarity index 100% rename from spring-all/src/test/java/org/baeldung/properties/external/ExternalPropertiesWithMultipleXmlsIntegrationTest.java rename to spring-boot-properties/src/test/java/org/baeldung/properties/external/ExternalPropertiesWithMultipleXmlsIntegrationTest.java diff --git a/spring-all/src/test/java/org/baeldung/properties/external/ExternalPropertiesWithXmlManualTest.java b/spring-boot-properties/src/test/java/org/baeldung/properties/external/ExternalPropertiesWithXmlManualTest.java similarity index 100% rename from spring-all/src/test/java/org/baeldung/properties/external/ExternalPropertiesWithXmlManualTest.java rename to spring-boot-properties/src/test/java/org/baeldung/properties/external/ExternalPropertiesWithXmlManualTest.java diff --git a/spring-all/src/test/java/org/baeldung/properties/multiple/MultiplePropertiesJavaConfigIntegrationTest.java b/spring-boot-properties/src/test/java/org/baeldung/properties/multiple/MultiplePropertiesJavaConfigIntegrationTest.java similarity index 100% rename from spring-all/src/test/java/org/baeldung/properties/multiple/MultiplePropertiesJavaConfigIntegrationTest.java rename to spring-boot-properties/src/test/java/org/baeldung/properties/multiple/MultiplePropertiesJavaConfigIntegrationTest.java diff --git a/spring-all/src/test/java/org/baeldung/properties/multiple/MultiplePropertiesXmlConfigIntegrationTest.java b/spring-boot-properties/src/test/java/org/baeldung/properties/multiple/MultiplePropertiesXmlConfigIntegrationTest.java similarity index 100% rename from spring-all/src/test/java/org/baeldung/properties/multiple/MultiplePropertiesXmlConfigIntegrationTest.java rename to spring-boot-properties/src/test/java/org/baeldung/properties/multiple/MultiplePropertiesXmlConfigIntegrationTest.java diff --git a/spring-all/src/test/java/org/baeldung/properties/parentchild/ChildValueHolder.java b/spring-boot-properties/src/test/java/org/baeldung/properties/parentchild/ChildValueHolder.java similarity index 100% rename from spring-all/src/test/java/org/baeldung/properties/parentchild/ChildValueHolder.java rename to spring-boot-properties/src/test/java/org/baeldung/properties/parentchild/ChildValueHolder.java diff --git a/spring-all/src/test/java/org/baeldung/properties/parentchild/ParentChildPropertyPlaceHolderPropertiesIntegrationTest.java b/spring-boot-properties/src/test/java/org/baeldung/properties/parentchild/ParentChildPropertyPlaceHolderPropertiesIntegrationTest.java similarity index 100% rename from spring-all/src/test/java/org/baeldung/properties/parentchild/ParentChildPropertyPlaceHolderPropertiesIntegrationTest.java rename to spring-boot-properties/src/test/java/org/baeldung/properties/parentchild/ParentChildPropertyPlaceHolderPropertiesIntegrationTest.java diff --git a/spring-all/src/test/java/org/baeldung/properties/parentchild/ParentChildPropertySourcePropertiesIntegrationTest.java b/spring-boot-properties/src/test/java/org/baeldung/properties/parentchild/ParentChildPropertySourcePropertiesIntegrationTest.java similarity index 100% rename from spring-all/src/test/java/org/baeldung/properties/parentchild/ParentChildPropertySourcePropertiesIntegrationTest.java rename to spring-boot-properties/src/test/java/org/baeldung/properties/parentchild/ParentChildPropertySourcePropertiesIntegrationTest.java diff --git a/spring-all/src/test/java/org/baeldung/properties/parentchild/ParentValueHolder.java b/spring-boot-properties/src/test/java/org/baeldung/properties/parentchild/ParentValueHolder.java similarity index 100% rename from spring-all/src/test/java/org/baeldung/properties/parentchild/ParentValueHolder.java rename to spring-boot-properties/src/test/java/org/baeldung/properties/parentchild/ParentValueHolder.java diff --git a/spring-all/src/test/java/org/baeldung/properties/parentchild/config/ChildConfig.java b/spring-boot-properties/src/test/java/org/baeldung/properties/parentchild/config/ChildConfig.java similarity index 100% rename from spring-all/src/test/java/org/baeldung/properties/parentchild/config/ChildConfig.java rename to spring-boot-properties/src/test/java/org/baeldung/properties/parentchild/config/ChildConfig.java diff --git a/spring-all/src/test/java/org/baeldung/properties/parentchild/config/ChildConfig2.java b/spring-boot-properties/src/test/java/org/baeldung/properties/parentchild/config/ChildConfig2.java similarity index 100% rename from spring-all/src/test/java/org/baeldung/properties/parentchild/config/ChildConfig2.java rename to spring-boot-properties/src/test/java/org/baeldung/properties/parentchild/config/ChildConfig2.java diff --git a/spring-all/src/test/java/org/baeldung/properties/parentchild/config/ParentConfig.java b/spring-boot-properties/src/test/java/org/baeldung/properties/parentchild/config/ParentConfig.java similarity index 100% rename from spring-all/src/test/java/org/baeldung/properties/parentchild/config/ParentConfig.java rename to spring-boot-properties/src/test/java/org/baeldung/properties/parentchild/config/ParentConfig.java diff --git a/spring-all/src/test/java/org/baeldung/properties/parentchild/config/ParentConfig2.java b/spring-boot-properties/src/test/java/org/baeldung/properties/parentchild/config/ParentConfig2.java similarity index 100% rename from spring-all/src/test/java/org/baeldung/properties/parentchild/config/ParentConfig2.java rename to spring-boot-properties/src/test/java/org/baeldung/properties/parentchild/config/ParentConfig2.java diff --git a/spring-all/src/test/java/org/baeldung/test/IntegrationTestSuite.java b/spring-boot-properties/src/test/java/org/baeldung/test/IntegrationTestSuite.java similarity index 100% rename from spring-all/src/test/java/org/baeldung/test/IntegrationTestSuite.java rename to spring-boot-properties/src/test/java/org/baeldung/test/IntegrationTestSuite.java diff --git a/spring-boot/src/test/resources/configprops-test.properties b/spring-boot-properties/src/test/resources/configprops-test.properties similarity index 100% rename from spring-boot/src/test/resources/configprops-test.properties rename to spring-boot-properties/src/test/resources/configprops-test.properties diff --git a/spring-boot-properties/src/test/resources/conversion.properties b/spring-boot-properties/src/test/resources/conversion.properties new file mode 100644 index 0000000000..640442ec33 --- /dev/null +++ b/spring-boot-properties/src/test/resources/conversion.properties @@ -0,0 +1,11 @@ +###### time unit +conversion.timeInDefaultUnit=10 +conversion.timeInNano=9ns +conversion.timeInDays=2 + +###### data size +conversion.sizeInDefaultUnit=300 +conversion.sizeInGB=2GB +conversion.sizeInTB=4 + +conversion.employee=john,2000 \ No newline at end of file diff --git a/spring-boot/README.MD b/spring-boot/README.MD index e159220cbc..04d76e438e 100644 --- a/spring-boot/README.MD +++ b/spring-boot/README.MD @@ -14,7 +14,6 @@ The "REST With Spring" Classes: http://bit.ly/restwithspring - [Custom Information in Spring Boot Info Endpoint](http://www.baeldung.com/spring-boot-info-actuator-custom) - [Using @JsonComponent in Spring Boot](http://www.baeldung.com/spring-boot-jsoncomponent) - [Testing in Spring Boot](http://www.baeldung.com/spring-boot-testing) -- [Guide to @ConfigurationProperties in Spring Boot](http://www.baeldung.com/configuration-properties-in-spring-boot) - [How to Get All Spring-Managed Beans?](http://www.baeldung.com/spring-show-all-beans) - [Spring Boot and Togglz Aspect](http://www.baeldung.com/spring-togglz) - [Getting Started with GraphQL and Spring Boot](http://www.baeldung.com/spring-graphql) @@ -29,9 +28,7 @@ The "REST With Spring" Classes: http://bit.ly/restwithspring - [Spring Shutdown Callbacks](http://www.baeldung.com/spring-shutdown-callbacks) - [Container Configuration in Spring Boot 2](http://www.baeldung.com/embeddedservletcontainercustomizer-configurableembeddedservletcontainer-spring-boot) - [Introduction to Chaos Monkey](https://www.baeldung.com/spring-boot-chaos-monkey) -- [Load Spring Boot Properties From a JSON File](https://www.baeldung.com/spring-boot-json-properties) - [Display Auto-Configuration Report in Spring Boot](https://www.baeldung.com/spring-boot-auto-configuration-report) - [Injecting Git Information Into Spring](https://www.baeldung.com/spring-git-information) - [Validation in Spring Boot](https://www.baeldung.com/spring-boot-bean-validation) - [Guide to Creating and Running a Jar File in Java](https://www.baeldung.com/java-create-jar) -- [Guide to @EnableConfigurationProperties](https://www.baeldung.com/spring-enable-config-properties) diff --git a/spring-boot/src/main/java/org/baeldung/properties/ConfigProperties.java b/spring-boot/src/main/java/org/baeldung/properties/ConfigProperties.java deleted file mode 100644 index 1a3c985fe4..0000000000 --- a/spring-boot/src/main/java/org/baeldung/properties/ConfigProperties.java +++ /dev/null @@ -1,90 +0,0 @@ -package org.baeldung.properties; - -import java.util.List; -import java.util.Map; - -import javax.validation.constraints.Max; -import javax.validation.constraints.Min; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.Pattern; - -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.PropertySource; -import org.springframework.validation.annotation.Validated; - -@Configuration -@PropertySource("classpath:configprops.properties") -@ConfigurationProperties(prefix = "mail") -@Validated -public class ConfigProperties { - - @NotBlank - private String hostName; - - @Min(1025) - @Max(65536) - private int port; - - @Pattern(regexp = "^[a-z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,6}$") - private String from; - - private List defaultRecipients; - private Map additionalHeaders; - private Credentials credentials; - - public String getHostName() { - return hostName; - } - - public void setHostName(String hostName) { - this.hostName = hostName; - } - - public int getPort() { - return port; - } - - public void setPort(int port) { - this.port = port; - } - - public String getFrom() { - return from; - } - - public void setFrom(String from) { - this.from = from; - } - - public List getDefaultRecipients() { - return defaultRecipients; - } - - public void setDefaultRecipients(List defaultRecipients) { - this.defaultRecipients = defaultRecipients; - } - - public Map getAdditionalHeaders() { - return additionalHeaders; - } - - public void setAdditionalHeaders(Map additionalHeaders) { - this.additionalHeaders = additionalHeaders; - } - - public Credentials getCredentials() { - return credentials; - } - - public void setCredentials(Credentials credentials) { - this.credentials = credentials; - } - - @Bean - @ConfigurationProperties(prefix = "item") - public Item item(){ - return new Item(); - } -} diff --git a/spring-boot/src/main/java/org/baeldung/properties/ConfigPropertiesDemoApplication.java b/spring-boot/src/main/java/org/baeldung/properties/ConfigPropertiesDemoApplication.java deleted file mode 100644 index 7b8f2c3411..0000000000 --- a/spring-boot/src/main/java/org/baeldung/properties/ConfigPropertiesDemoApplication.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.baeldung.properties; - -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.context.annotation.ComponentScan; - -@SpringBootApplication -@ComponentScan(basePackageClasses = {ConfigProperties.class, - JsonProperties.class, - CustomJsonProperties.class, - AdditionalConfiguration.class}) -public class ConfigPropertiesDemoApplication { - public static void main(String[] args) { - new SpringApplicationBuilder(ConfigPropertiesDemoApplication.class).initializers(new JsonPropertyContextInitializer()) - .run(); - } - -} diff --git a/spring-boot/src/main/java/org/baeldung/properties/Credentials.java b/spring-boot/src/main/java/org/baeldung/properties/Credentials.java deleted file mode 100644 index 2d8ac76e62..0000000000 --- a/spring-boot/src/main/java/org/baeldung/properties/Credentials.java +++ /dev/null @@ -1,37 +0,0 @@ -package org.baeldung.properties; - -import org.hibernate.validator.constraints.Length; -import org.springframework.validation.annotation.Validated; - -@Validated -public class Credentials { - - @Length(max = 4, min = 1) - private String authMethod; - private String username; - private String password; - - public String getAuthMethod() { - return authMethod; - } - - public void setAuthMethod(String authMethod) { - this.authMethod = authMethod; - } - - public String getUsername() { - return username; - } - - public void setUsername(String username) { - this.username = username; - } - - public String getPassword() { - return password; - } - - public void setPassword(String password) { - this.password = password; - } -} diff --git a/spring-boot/src/main/java/org/baeldung/properties/CustomJsonProperties.java b/spring-boot/src/main/java/org/baeldung/properties/CustomJsonProperties.java deleted file mode 100644 index 3fae8a8e98..0000000000 --- a/spring-boot/src/main/java/org/baeldung/properties/CustomJsonProperties.java +++ /dev/null @@ -1,71 +0,0 @@ -package org.baeldung.properties; - -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.stereotype.Component; - -@Component -@ConfigurationProperties(prefix = "custom") -public class CustomJsonProperties { - - private String host; - - private int port; - - private boolean resend; - - private Person sender; - - public static class Person { - - private String name; - private String address; - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getAddress() { - return address; - } - - public void setAddress(String address) { - this.address = address; - } - } - - public String getHost() { - return host; - } - - public void setHost(String host) { - this.host = host; - } - - public int getPort() { - return port; - } - - public void setPort(int port) { - this.port = port; - } - - public boolean isResend() { - return resend; - } - - public void setResend(boolean resend) { - this.resend = resend; - } - - public Person getSender() { - return sender; - } - - public void setSender(Person sender) { - this.sender = sender; - } -} diff --git a/spring-boot/src/main/java/org/baeldung/properties/JsonProperties.java b/spring-boot/src/main/java/org/baeldung/properties/JsonProperties.java deleted file mode 100644 index 5c31cd1344..0000000000 --- a/spring-boot/src/main/java/org/baeldung/properties/JsonProperties.java +++ /dev/null @@ -1,64 +0,0 @@ -package org.baeldung.properties; - -import java.util.LinkedHashMap; -import java.util.List; - -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.context.annotation.PropertySource; -import org.springframework.stereotype.Component; - -@Component -@PropertySource(value = "classpath:configprops.json", factory = JsonPropertySourceFactory.class) -@ConfigurationProperties -public class JsonProperties { - - private String host; - - private int port; - - private boolean resend; - - private List topics; - - private LinkedHashMap sender; - - public LinkedHashMap getSender() { - return sender; - } - - public void setSender(LinkedHashMap sender) { - this.sender = sender; - } - - public List getTopics() { - return topics; - } - - public void setTopics(List topics) { - this.topics = topics; - } - - public int getPort() { - return port; - } - - public void setPort(int port) { - this.port = port; - } - - public boolean isResend() { - return resend; - } - - public void setResend(boolean resend) { - this.resend = resend; - } - - public String getHost() { - return host; - } - - public void setHost(String host) { - this.host = host; - } -} diff --git a/spring-boot/src/main/java/org/baeldung/properties/JsonPropertyContextInitializer.java b/spring-boot/src/main/java/org/baeldung/properties/JsonPropertyContextInitializer.java deleted file mode 100644 index fd9b3f35a5..0000000000 --- a/spring-boot/src/main/java/org/baeldung/properties/JsonPropertyContextInitializer.java +++ /dev/null @@ -1,68 +0,0 @@ -package org.baeldung.properties; - -import java.io.IOException; -import java.util.Collection; -import java.util.Collections; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.Set; -import java.util.stream.Collectors; - -import org.springframework.context.ApplicationContextInitializer; -import org.springframework.context.ConfigurableApplicationContext; -import org.springframework.core.env.MapPropertySource; -import org.springframework.core.env.PropertySource; -import org.springframework.core.io.Resource; - -import com.fasterxml.jackson.databind.ObjectMapper; - -public class JsonPropertyContextInitializer implements ApplicationContextInitializer { - - private final static String CUSTOM_PREFIX = "custom."; - - @Override - @SuppressWarnings("unchecked") - public void initialize(ConfigurableApplicationContext configurableApplicationContext) { - try { - Resource resource = configurableApplicationContext.getResource("classpath:configprops.json"); - Map readValue = new ObjectMapper().readValue(resource.getInputStream(), Map.class); - Set set = readValue.entrySet(); - List propertySources = convertEntrySet(set, Optional.empty()); - for (PropertySource propertySource : propertySources) { - configurableApplicationContext.getEnvironment() - .getPropertySources() - .addFirst(propertySource); - } - } catch (IOException e) { - throw new RuntimeException(e); - } - } - - private static List convertEntrySet(Set entrySet, Optional parentKey) { - return entrySet.stream() - .map((Map.Entry e) -> convertToPropertySourceList(e, parentKey)) - .flatMap(Collection::stream) - .collect(Collectors.toList()); - } - - private static List convertToPropertySourceList(Map.Entry e, Optional parentKey) { - String key = parentKey.map(s -> s + ".") - .orElse("") + (String) e.getKey(); - Object value = e.getValue(); - return covertToPropertySourceList(key, value); - } - - @SuppressWarnings("unchecked") - private static List covertToPropertySourceList(String key, Object value) { - if (value instanceof LinkedHashMap) { - LinkedHashMap map = (LinkedHashMap) value; - Set entrySet = map.entrySet(); - return convertEntrySet(entrySet, Optional.ofNullable(key)); - } - String finalKey = CUSTOM_PREFIX + key; - return Collections.singletonList(new MapPropertySource(finalKey, Collections.singletonMap(finalKey, value))); - } - -} \ No newline at end of file diff --git a/spring-boot/src/main/java/org/baeldung/properties/JsonPropertySourceFactory.java b/spring-boot/src/main/java/org/baeldung/properties/JsonPropertySourceFactory.java deleted file mode 100644 index 9578179519..0000000000 --- a/spring-boot/src/main/java/org/baeldung/properties/JsonPropertySourceFactory.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.baeldung.properties; - -import java.io.IOException; -import java.util.Map; - -import org.springframework.core.env.MapPropertySource; -import org.springframework.core.env.PropertySource; -import org.springframework.core.io.support.EncodedResource; -import org.springframework.core.io.support.PropertySourceFactory; - -import com.fasterxml.jackson.databind.ObjectMapper; - -public class JsonPropertySourceFactory implements PropertySourceFactory { - - @Override - public PropertySource createPropertySource(String name, EncodedResource resource) throws IOException { - Map readValue = new ObjectMapper().readValue(resource.getInputStream(), Map.class); - return new MapPropertySource("json-property", readValue); - } - -} \ No newline at end of file diff --git a/spring-boot/src/test/java/com/baeldung/properties/JsonPropertiesIntegrationTest.java b/spring-boot/src/test/java/com/baeldung/properties/JsonPropertiesIntegrationTest.java deleted file mode 100644 index 48c551d1dd..0000000000 --- a/spring-boot/src/test/java/com/baeldung/properties/JsonPropertiesIntegrationTest.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.baeldung.properties; - -import java.util.Arrays; - -import org.baeldung.properties.ConfigPropertiesDemoApplication; -import org.baeldung.properties.CustomJsonProperties; -import org.baeldung.properties.JsonProperties; -import org.baeldung.properties.JsonPropertyContextInitializer; -import org.hamcrest.Matchers; -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.SpringRunner; - -@RunWith(SpringRunner.class) -@ContextConfiguration(classes = ConfigPropertiesDemoApplication.class, initializers = JsonPropertyContextInitializer.class) -public class JsonPropertiesIntegrationTest { - - @Autowired - private JsonProperties jsonProperties; - - @Autowired - private CustomJsonProperties customJsonProperties; - - @Test - public void whenPropertiesLoadedViaJsonPropertySource_thenLoadFlatValues() { - Assert.assertEquals("mailer@mail.com", jsonProperties.getHost()); - Assert.assertEquals(9090, jsonProperties.getPort()); - Assert.assertTrue(jsonProperties.isResend()); - } - - @Test - public void whenPropertiesLoadedViaJsonPropertySource_thenLoadListValues() { - Assert.assertThat(jsonProperties.getTopics(), Matchers.is(Arrays.asList("spring", "boot"))); - } - - @Test - public void whenPropertiesLoadedViaJsonPropertySource_thenNestedLoadedAsMap() { - Assert.assertEquals("sender", jsonProperties.getSender() - .get("name")); - Assert.assertEquals("street", jsonProperties.getSender() - .get("address")); - } - - @Test - public void whenLoadedIntoEnvironment_thenFlatValuesPopulated() { - Assert.assertEquals("mailer@mail.com", customJsonProperties.getHost()); - Assert.assertEquals(9090, customJsonProperties.getPort()); - Assert.assertTrue(customJsonProperties.isResend()); - } - - @Test - public void whenLoadedIntoEnvironment_thenValuesLoadedIntoClassObject() { - Assert.assertNotNull(customJsonProperties.getSender()); - Assert.assertEquals("sender", customJsonProperties.getSender() - .getName()); - Assert.assertEquals("street", customJsonProperties.getSender() - .getAddress()); - } - -} diff --git a/spring-boot/src/test/java/org/baeldung/properties/ConfigPropertiesIntegrationTest.java b/spring-boot/src/test/java/org/baeldung/properties/ConfigPropertiesIntegrationTest.java deleted file mode 100644 index f864fd4f8c..0000000000 --- a/spring-boot/src/test/java/org/baeldung/properties/ConfigPropertiesIntegrationTest.java +++ /dev/null @@ -1,63 +0,0 @@ -package org.baeldung.properties; - -import java.util.List; -import java.util.Map; - -import org.junit.Assert; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.TestPropertySource; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = ConfigPropertiesDemoApplication.class) -@TestPropertySource("classpath:configprops-test.properties") -public class ConfigPropertiesIntegrationTest { - - @Autowired - private ConfigProperties properties; - - @Test - public void whenSimplePropertyQueriedthenReturnsProperty() throws Exception { - Assert.assertEquals("Incorrectly bound hostName property", "host@mail.com", properties.getHostName()); - Assert.assertEquals("Incorrectly bound port property", 9000, properties.getPort()); - Assert.assertEquals("Incorrectly bound from property", "mailer@mail.com", properties.getFrom()); - } - - @Test - public void whenListPropertyQueriedthenReturnsProperty() throws Exception { - List defaultRecipients = properties.getDefaultRecipients(); - Assert.assertTrue("Couldn't bind list property!", defaultRecipients.size() == 2); - Assert.assertTrue("Incorrectly bound list property. Expected 2 entries!", defaultRecipients.size() == 2); - Assert.assertEquals("Incorrectly bound list[0] property", "admin@mail.com", defaultRecipients.get(0)); - Assert.assertEquals("Incorrectly bound list[1] property", "owner@mail.com", defaultRecipients.get(1)); - } - - @Test - public void whenMapPropertyQueriedthenReturnsProperty() throws Exception { - Map additionalHeaders = properties.getAdditionalHeaders(); - Assert.assertTrue("Couldn't bind map property!", additionalHeaders != null); - Assert.assertTrue("Incorrectly bound map property. Expected 3 Entries!", additionalHeaders.size() == 3); - Assert.assertEquals("Incorrectly bound map[redelivery] property", "true", additionalHeaders.get("redelivery")); - Assert.assertEquals("Incorrectly bound map[secure] property", "true", additionalHeaders.get("secure")); - Assert.assertEquals("Incorrectly bound map[p3] property", "value", additionalHeaders.get("p3")); - } - - @Test - public void whenObjectPropertyQueriedthenReturnsProperty() throws Exception { - Credentials credentials = properties.getCredentials(); - Assert.assertTrue("Couldn't bind map property!", credentials != null); - Assert.assertEquals("Incorrectly bound object property, authMethod", "SHA1", credentials.getAuthMethod()); - Assert.assertEquals("Incorrectly bound object property, username", "john", credentials.getUsername()); - Assert.assertEquals("Incorrectly bound object property, password", "password", credentials.getPassword()); - } - - @Test - public void whenBeanMethodAnnotatedThenPropertiesCorrectlyBound(){ - Item item = properties.item(); - Assert.assertEquals("Incorrectly bound object property, item.name","Test item name", item.getName()); - Assert.assertEquals("Incorrectly bound object property, item.size", 21, item.getSize()); - } -} diff --git a/spring-core/README.md b/spring-core/README.md index 18d14b7ecf..111b034bef 100644 --- a/spring-core/README.md +++ b/spring-core/README.md @@ -4,14 +4,10 @@ - [How to use the Spring FactoryBean?](http://www.baeldung.com/spring-factorybean) - [Constructor Dependency Injection in Spring](http://www.baeldung.com/constructor-injection-in-spring) - [Constructor Injection in Spring with Lombok](http://www.baeldung.com/spring-injection-lombok) -- [A Quick Guide to Spring @Value](http://www.baeldung.com/spring-value-annotation) -- [Spring YAML Configuration](http://www.baeldung.com/spring-yaml) - [Introduction to Spring’s StreamUtils](http://www.baeldung.com/spring-stream-utils) -- [Using Spring @Value with Defaults](http://www.baeldung.com/spring-value-defaults) - [XML-Based Injection in Spring](http://www.baeldung.com/spring-xml-injection) - [A Quick Guide to the Spring @Lazy Annotation](http://www.baeldung.com/spring-lazy-annotation) - [Injecting Prototype Beans into a Singleton Instance in Spring](http://www.baeldung.com/spring-inject-prototype-bean-into-singleton) -- [How to Inject a Property Value Into a Class Not Managed by Spring?](http://www.baeldung.com/inject-properties-value-non-spring-class) - [@Lookup Annotation in Spring](http://www.baeldung.com/spring-lookup) - [BeanNameAware and BeanFactoryAware Interfaces in Spring](http://www.baeldung.com/spring-bean-name-factory-aware) - [Spring – Injecting Collections](http://www.baeldung.com/spring-injecting-collections) From 9cb93861d99aef3121da5ce787bacdca8bdc5896 Mon Sep 17 00:00:00 2001 From: Yavuz Tas <12643010+yavuztas@users.noreply.github.com> Date: Sun, 11 Aug 2019 18:27:36 +0200 Subject: [PATCH 138/140] Add source code for article BAEL-2463 (#7543) --- .../com/baeldung/jackson/entities/File.java | 25 +++ .../com/baeldung/jackson/entities/Folder.java | 82 +++++++++ .../FolderBeanSerializerModifier.java | 21 +++ .../custom/serializer/FolderSerializer.java | 36 ++++ ...derSerializerWithCallingOwnSerializer.java | 30 ++++ ...SerializerWithDefaultSerializerStored.java | 35 ++++ ...derSerializerWithInternalObjectMapper.java | 34 ++++ ...olderSerializerWithSerializerProvider.java | 29 +++ .../CallingDefaultSerializerUnitTest.java | 166 ++++++++++++++++++ 9 files changed, 458 insertions(+) create mode 100644 jackson-2/src/main/java/com/baeldung/jackson/entities/File.java create mode 100644 jackson-2/src/main/java/com/baeldung/jackson/entities/Folder.java create mode 100644 jackson-2/src/main/java/com/baeldung/jackson/serialization/custom/serializer/FolderBeanSerializerModifier.java create mode 100644 jackson-2/src/main/java/com/baeldung/jackson/serialization/custom/serializer/FolderSerializer.java create mode 100644 jackson-2/src/main/java/com/baeldung/jackson/serialization/custom/serializer/FolderSerializerWithCallingOwnSerializer.java create mode 100644 jackson-2/src/main/java/com/baeldung/jackson/serialization/custom/serializer/FolderSerializerWithDefaultSerializerStored.java create mode 100644 jackson-2/src/main/java/com/baeldung/jackson/serialization/custom/serializer/FolderSerializerWithInternalObjectMapper.java create mode 100644 jackson-2/src/main/java/com/baeldung/jackson/serialization/custom/serializer/FolderSerializerWithSerializerProvider.java create mode 100644 jackson-2/src/test/java/com/baeldung/jackson/serialization/custom/serializer/CallingDefaultSerializerUnitTest.java diff --git a/jackson-2/src/main/java/com/baeldung/jackson/entities/File.java b/jackson-2/src/main/java/com/baeldung/jackson/entities/File.java new file mode 100644 index 0000000000..0e8829e927 --- /dev/null +++ b/jackson-2/src/main/java/com/baeldung/jackson/entities/File.java @@ -0,0 +1,25 @@ +package com.baeldung.jackson.entities; + +public class File { + + private Long id; + + private String name; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + +} \ No newline at end of file diff --git a/jackson-2/src/main/java/com/baeldung/jackson/entities/Folder.java b/jackson-2/src/main/java/com/baeldung/jackson/entities/Folder.java new file mode 100644 index 0000000000..c49e46b204 --- /dev/null +++ b/jackson-2/src/main/java/com/baeldung/jackson/entities/Folder.java @@ -0,0 +1,82 @@ +package com.baeldung.jackson.entities; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonIgnore; + +public class Folder { + + private Long id; + + private String name; + + private String owner; + + private Date created; + + private Date modified; + + private Date lastAccess; + + @JsonIgnore + private List files = new ArrayList<>(); + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getOwner() { + return owner; + } + + public void setOwner(String owner) { + this.owner = owner; + } + + public Date getCreated() { + return created; + } + + public void setCreated(Date created) { + this.created = created; + } + + public Date getModified() { + return modified; + } + + public void setModified(Date modified) { + this.modified = modified; + } + + public Date getLastAccess() { + return lastAccess; + } + + public void setLastAccess(Date lastAccess) { + this.lastAccess = lastAccess; + } + + public List getFiles() { + return files; + } + + public void setFiles(List files) { + this.files = files; + } + +} \ No newline at end of file diff --git a/jackson-2/src/main/java/com/baeldung/jackson/serialization/custom/serializer/FolderBeanSerializerModifier.java b/jackson-2/src/main/java/com/baeldung/jackson/serialization/custom/serializer/FolderBeanSerializerModifier.java new file mode 100644 index 0000000000..a3add58dc4 --- /dev/null +++ b/jackson-2/src/main/java/com/baeldung/jackson/serialization/custom/serializer/FolderBeanSerializerModifier.java @@ -0,0 +1,21 @@ +package com.baeldung.jackson.serialization.custom.serializer; + +import com.baeldung.jackson.entities.Folder; +import com.fasterxml.jackson.databind.BeanDescription; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializationConfig; +import com.fasterxml.jackson.databind.ser.BeanSerializerModifier; + +public class FolderBeanSerializerModifier extends BeanSerializerModifier { + + @Override + public JsonSerializer modifySerializer(SerializationConfig config, BeanDescription beanDesc, JsonSerializer serializer) { + + if (beanDesc.getBeanClass().equals(Folder.class)) { + return new FolderSerializerWithDefaultSerializerStored((JsonSerializer) serializer); + } + + return serializer; + } + +} diff --git a/jackson-2/src/main/java/com/baeldung/jackson/serialization/custom/serializer/FolderSerializer.java b/jackson-2/src/main/java/com/baeldung/jackson/serialization/custom/serializer/FolderSerializer.java new file mode 100644 index 0000000000..f385e63e09 --- /dev/null +++ b/jackson-2/src/main/java/com/baeldung/jackson/serialization/custom/serializer/FolderSerializer.java @@ -0,0 +1,36 @@ +package com.baeldung.jackson.serialization.custom.serializer; + +import java.io.IOException; + +import com.baeldung.jackson.entities.File; +import com.baeldung.jackson.entities.Folder; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; + +public class FolderSerializer extends StdSerializer { + + public FolderSerializer() { + super(Folder.class); + } + + @Override + public void serialize(Folder value, JsonGenerator gen, SerializerProvider provider) throws IOException { + + gen.writeStartObject(); + gen.writeStringField("name", value.getName()); + + gen.writeArrayFieldStart("files"); + for (File file : value.getFiles()) { + gen.writeStartObject(); + gen.writeNumberField("id", file.getId()); + gen.writeStringField("name", file.getName()); + gen.writeEndObject(); + } + gen.writeEndArray(); + + gen.writeEndObject(); + + } + +} diff --git a/jackson-2/src/main/java/com/baeldung/jackson/serialization/custom/serializer/FolderSerializerWithCallingOwnSerializer.java b/jackson-2/src/main/java/com/baeldung/jackson/serialization/custom/serializer/FolderSerializerWithCallingOwnSerializer.java new file mode 100644 index 0000000000..ed5d9fffb8 --- /dev/null +++ b/jackson-2/src/main/java/com/baeldung/jackson/serialization/custom/serializer/FolderSerializerWithCallingOwnSerializer.java @@ -0,0 +1,30 @@ +package com.baeldung.jackson.serialization.custom.serializer; + +import java.io.IOException; + +import com.baeldung.jackson.entities.Folder; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; + +public class FolderSerializerWithCallingOwnSerializer extends StdSerializer { + + public FolderSerializerWithCallingOwnSerializer() { + super(Folder.class); + } + + @Override + public void serialize(Folder value, JsonGenerator gen, SerializerProvider provider) throws IOException { + + gen.writeStartObject(); + gen.writeStringField("name", value.getName()); + + provider.defaultSerializeField("files", value.getFiles(), gen); + + provider.defaultSerializeField("details", value, gen); + + gen.writeEndObject(); + + } + +} diff --git a/jackson-2/src/main/java/com/baeldung/jackson/serialization/custom/serializer/FolderSerializerWithDefaultSerializerStored.java b/jackson-2/src/main/java/com/baeldung/jackson/serialization/custom/serializer/FolderSerializerWithDefaultSerializerStored.java new file mode 100644 index 0000000000..d4a95cd939 --- /dev/null +++ b/jackson-2/src/main/java/com/baeldung/jackson/serialization/custom/serializer/FolderSerializerWithDefaultSerializerStored.java @@ -0,0 +1,35 @@ +package com.baeldung.jackson.serialization.custom.serializer; + +import java.io.IOException; + +import com.baeldung.jackson.entities.Folder; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; + +public class FolderSerializerWithDefaultSerializerStored extends StdSerializer { + + private final JsonSerializer defaultSerializer; + + public FolderSerializerWithDefaultSerializerStored(JsonSerializer defaultSerializer) { + super(Folder.class); + this.defaultSerializer = defaultSerializer; + } + + @Override + public void serialize(Folder value, JsonGenerator gen, SerializerProvider provider) throws IOException { + + gen.writeStartObject(); + gen.writeStringField("name", value.getName()); + + provider.defaultSerializeField("files", value.getFiles(), gen); + + gen.writeFieldName("details"); + defaultSerializer.serialize(value, gen, provider); + + gen.writeEndObject(); + + } + +} diff --git a/jackson-2/src/main/java/com/baeldung/jackson/serialization/custom/serializer/FolderSerializerWithInternalObjectMapper.java b/jackson-2/src/main/java/com/baeldung/jackson/serialization/custom/serializer/FolderSerializerWithInternalObjectMapper.java new file mode 100644 index 0000000000..b23dc32205 --- /dev/null +++ b/jackson-2/src/main/java/com/baeldung/jackson/serialization/custom/serializer/FolderSerializerWithInternalObjectMapper.java @@ -0,0 +1,34 @@ +package com.baeldung.jackson.serialization.custom.serializer; + +import java.io.IOException; + +import com.baeldung.jackson.entities.Folder; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; + +public class FolderSerializerWithInternalObjectMapper extends StdSerializer { + + public FolderSerializerWithInternalObjectMapper() { + super(Folder.class); + } + + @Override + public void serialize(Folder value, JsonGenerator gen, SerializerProvider provider) throws IOException { + + gen.writeStartObject(); + gen.writeStringField("name", value.getName()); + + // we access internal mapper to delegate the serialization of File list + ObjectMapper mapper = (ObjectMapper) gen.getCodec(); + + gen.writeFieldName("files"); + String stringValue = mapper.writeValueAsString(value.getFiles()); + gen.writeRawValue(stringValue); + + gen.writeEndObject(); + + } + +} diff --git a/jackson-2/src/main/java/com/baeldung/jackson/serialization/custom/serializer/FolderSerializerWithSerializerProvider.java b/jackson-2/src/main/java/com/baeldung/jackson/serialization/custom/serializer/FolderSerializerWithSerializerProvider.java new file mode 100644 index 0000000000..81990a084d --- /dev/null +++ b/jackson-2/src/main/java/com/baeldung/jackson/serialization/custom/serializer/FolderSerializerWithSerializerProvider.java @@ -0,0 +1,29 @@ +package com.baeldung.jackson.serialization.custom.serializer; + +import java.io.IOException; + +import com.baeldung.jackson.entities.Folder; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; + +public class FolderSerializerWithSerializerProvider extends StdSerializer { + + public FolderSerializerWithSerializerProvider() { + super(Folder.class); + } + + @Override + public void serialize(Folder value, JsonGenerator gen, SerializerProvider provider) throws IOException { + + gen.writeStartObject(); + gen.writeStringField("name", value.getName()); + + // we delegate the File list serialization to its default serializer + provider.defaultSerializeField("files", value.getFiles(), gen); + + gen.writeEndObject(); + + } + +} \ No newline at end of file diff --git a/jackson-2/src/test/java/com/baeldung/jackson/serialization/custom/serializer/CallingDefaultSerializerUnitTest.java b/jackson-2/src/test/java/com/baeldung/jackson/serialization/custom/serializer/CallingDefaultSerializerUnitTest.java new file mode 100644 index 0000000000..b067e7b501 --- /dev/null +++ b/jackson-2/src/test/java/com/baeldung/jackson/serialization/custom/serializer/CallingDefaultSerializerUnitTest.java @@ -0,0 +1,166 @@ +package com.baeldung.jackson.serialization.custom.serializer; + +import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.io.IOException; +import java.time.Instant; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.junit.Before; +import org.junit.Test; + +import com.baeldung.jackson.entities.File; +import com.baeldung.jackson.entities.Folder; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.module.SimpleModule; + +public class CallingDefaultSerializerUnitTest { + + private ObjectMapper mapper; + private Folder mockFolder; + private TypeReference> mapType; + + @Before + public void setup() { + + mapType = new TypeReference>() { + }; + + mapper = new ObjectMapper(); + + mockFolder = new Folder(); + mockFolder.setId(1L); + mockFolder.setName("Root Folder"); + mockFolder.setOwner("root"); + mockFolder.setCreated(Date.from(Instant.now().minusSeconds(60))); + mockFolder.setModified(Date.from(Instant.now().minusSeconds(30))); + mockFolder.setLastAccess(Date.from(Instant.now())); + + File file1 = new File(); + file1.setId(1L); + file1.setName("File 1"); + + File file2 = new File(); + file2.setId(2L); + file2.setName("File 2"); + + List files = new ArrayList<>(); + files.add(file1); + files.add(file2); + mockFolder.setFiles(files); + + } + + @Test + public void givenFolder_whenSerialized_onlyNameAndFilesFieldsSerialized() throws IOException { + + SimpleModule module = new SimpleModule(); + module.addSerializer(new FolderSerializer()); + mapper.registerModule(module); + + String json = mapper.writeValueAsString(mockFolder); + + HashMap actual = mapper.readValue(json, mapType); + + assertTrue(actual.containsKey("name")); + assertTrue(actual.containsKey("files")); + assertEquals(mockFolder.getName(), actual.get("name")); + + List actualFiles = (List) actual.get("files"); + assertEquals(mockFolder.getFiles().size(), actualFiles.size()); + + } + + @Test + public void givenFolder_whenSerializedWithSerializerProvider_onlyNameAndFilesFieldsSerialized() throws IOException { + + SimpleModule module = new SimpleModule(); + module.addSerializer(new FolderSerializerWithSerializerProvider()); + mapper.registerModule(module); + + String json = mapper.writeValueAsString(mockFolder); + + HashMap actual = mapper.readValue(json, mapType); + + assertTrue(actual.containsKey("name")); + assertTrue(actual.containsKey("files")); + assertEquals(mockFolder.getName(), actual.get("name")); + + List actualFiles = (List) actual.get("files"); + assertEquals(mockFolder.getFiles().size(), actualFiles.size()); + + } + + @Test + public void givenFolder_whenSerializedWithInternalObjectMapper_onlyNameAndFilesFieldsSerialized() throws IOException { + + SimpleModule module = new SimpleModule(); + module.addSerializer(new FolderSerializerWithInternalObjectMapper()); + mapper.registerModule(module); + + String json = mapper.writeValueAsString(mockFolder); + + HashMap actual = mapper.readValue(json, mapType); + + assertTrue(actual.containsKey("name")); + assertTrue(actual.containsKey("files")); + assertEquals(mockFolder.getName(), actual.get("name")); + + List actualFiles = (List) actual.get("files"); + assertEquals(mockFolder.getFiles().size(), actualFiles.size()); + + } + + @Test(expected = StackOverflowError.class) + public void givenFolder_whenSerializedWithCallingOwnSerializer_exceptionOccured() throws IOException { + + SimpleModule module = new SimpleModule(); + module.addSerializer(new FolderSerializerWithCallingOwnSerializer()); + mapper.registerModule(module); + + mapper.writeValueAsString(mockFolder); + + } + + @Test + public void givenFolder_whenSerializedWithDefaultSerializerStored_NameAndFilesAndDetailsFieldsSerialized() throws IOException { + + SimpleModule module = new SimpleModule(); + module.setSerializerModifier(new FolderBeanSerializerModifier()); + mapper.registerModule(module); + + String json = mapper.writeValueAsString(mockFolder); + + HashMap actual = mapper.readValue(json, mapType); + + assertTrue(actual.containsKey("name")); + assertTrue(actual.containsKey("files")); + assertEquals(mockFolder.getName(), actual.get("name")); + + List actualFiles = (List) actual.get("files"); + assertEquals(mockFolder.getFiles().size(), actualFiles.size()); + + Map actualDetails = (Map) actual.get("details"); + assertTrue(actualDetails.containsKey("id")); + assertTrue(actualDetails.containsKey("name")); + assertTrue(actualDetails.containsKey("owner")); + assertTrue(actualDetails.containsKey("created")); + assertTrue(actualDetails.containsKey("modified")); + assertTrue(actualDetails.containsKey("lastAccess")); + + assertEquals(mockFolder.getId().longValue(), ((Number)actualDetails.get("id")).longValue()); + assertEquals(mockFolder.getName(), actualDetails.get("name")); + assertEquals(mockFolder.getOwner(), actualDetails.get("owner")); + assertEquals(mockFolder.getCreated(), new Date((long) actualDetails.get("created"))); + assertEquals(mockFolder.getModified(), new Date((long) actualDetails.get("modified"))); + assertEquals(mockFolder.getLastAccess(), new Date((long) actualDetails.get("lastAccess"))); + + } + +} From e9ee1a54661471f05c0541c6299a69e385018421 Mon Sep 17 00:00:00 2001 From: amit2103 Date: Sun, 11 Aug 2019 23:44:42 +0530 Subject: [PATCH 139/140] [BAEL-15958] - Added password encoder --- .../org/baeldung/config/WebSecurityConfig.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/spring-security-core/src/main/java/org/baeldung/config/WebSecurityConfig.java b/spring-security-core/src/main/java/org/baeldung/config/WebSecurityConfig.java index 0b6cd34f3e..df7c7d1611 100644 --- a/spring-security-core/src/main/java/org/baeldung/config/WebSecurityConfig.java +++ b/spring-security-core/src/main/java/org/baeldung/config/WebSecurityConfig.java @@ -1,12 +1,15 @@ package org.baeldung.config; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.security.crypto.password.PasswordEncoder; @Configuration @EnableWebSecurity @@ -21,8 +24,13 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Autowired public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { auth.inMemoryAuthentication() - .withUser("jim").password("jim").roles("USER", "ACTUATOR") - .and().withUser("pam").password("pam").roles("USER") - .and().withUser("michael").password("michael").roles("MANAGER"); + .withUser("jim").password(passwordEncoder().encode("jim")).roles("USER", "ACTUATOR") + .and().withUser("pam").password(passwordEncoder().encode("pam")).roles("USER") + .and().withUser("michael").password(passwordEncoder().encode("michael")).roles("MANAGER"); + } + + @Bean + public PasswordEncoder passwordEncoder() { + return new BCryptPasswordEncoder(); } } From 527e4aa41cd6e29a20fec528c39ae46e966ce687 Mon Sep 17 00:00:00 2001 From: amit2103 Date: Mon, 12 Aug 2019 00:16:26 +0530 Subject: [PATCH 140/140] [BAEL-15990] - Moved org.baeldung to com.baeldung --- spring-boot-properties/extra.properties | 2 +- .../core/ComponentInXmlUsingProperties.java | 2 +- .../properties/core/ComponentUsingProperties.java | 2 +- .../ExternalPropertiesWithJavaConfig.java | 2 +- .../external/ExternalPropertiesWithXmlConfig.java | 2 +- .../ExternalPropertiesWithXmlConfigOne.java | 2 +- .../ExternalPropertiesWithXmlConfigTwo.java | 2 +- .../spring/BasicPropertiesWithJavaConfig.java | 2 +- .../spring/PropertiesWithJavaConfig.java | 2 +- .../spring/PropertiesWithJavaConfigOther.java | 2 +- .../PropertiesWithPlaceHolderConfigurer.java | 2 +- .../src/main/resources/application.properties | 1 + .../src/main/resources/configForProperties.xml | 2 +- .../src/main/resources/configForPropertiesOne.xml | 2 +- .../BasicPropertiesWithJavaIntegrationTest.java | 5 +++-- ...ExtendedPropertiesWithJavaIntegrationTest.java | 7 ++++--- .../basic/PropertiesWithJavaIntegrationTest.java | 5 +++-- ...PropertiesWithMultipleXmlsIntegrationTest.java | 2 +- .../basic/PropertiesWithXmlIntegrationTest.java | 2 +- ...ExternalPropertiesWithJavaIntegrationTest.java | 6 ++++-- ...PropertiesWithMultipleXmlsIntegrationTest.java | 5 ++++- .../ExternalPropertiesWithXmlManualTest.java | 4 +++- ...ltiplePropertiesJavaConfigIntegrationTest.java | 5 +++-- ...ultiplePropertiesXmlConfigIntegrationTest.java | 2 +- .../properties/parentchild/ChildValueHolder.java | 2 +- ...pertyPlaceHolderPropertiesIntegrationTest.java | 7 ++++--- ...ldPropertySourcePropertiesIntegrationTest.java | 7 ++++--- .../properties/parentchild/ParentValueHolder.java | 2 +- .../parentchild/config/ChildConfig.java | 5 +++-- .../parentchild/config/ChildConfig2.java | 5 +++-- .../parentchild/config/ParentConfig.java | 5 +++-- .../parentchild/config/ParentConfig2.java | 5 +++-- .../baeldung/test/IntegrationTestSuite.java | 15 ++++++++------- .../src/test/resources/application.properties | 3 ++- 34 files changed, 73 insertions(+), 53 deletions(-) rename spring-boot-properties/src/main/java/{org => com}/baeldung/properties/core/ComponentInXmlUsingProperties.java (95%) rename spring-boot-properties/src/main/java/{org => com}/baeldung/properties/core/ComponentUsingProperties.java (95%) rename spring-boot-properties/src/main/java/{org => com}/baeldung/properties/external/ExternalPropertiesWithJavaConfig.java (94%) rename spring-boot-properties/src/main/java/{org => com}/baeldung/properties/external/ExternalPropertiesWithXmlConfig.java (90%) rename spring-boot-properties/src/main/java/{org => com}/baeldung/properties/external/ExternalPropertiesWithXmlConfigOne.java (90%) rename spring-boot-properties/src/main/java/{org => com}/baeldung/properties/external/ExternalPropertiesWithXmlConfigTwo.java (88%) rename spring-boot-properties/src/main/java/{org => com}/baeldung/properties/spring/BasicPropertiesWithJavaConfig.java (87%) rename spring-boot-properties/src/main/java/{org => com}/baeldung/properties/spring/PropertiesWithJavaConfig.java (94%) rename spring-boot-properties/src/main/java/{org => com}/baeldung/properties/spring/PropertiesWithJavaConfigOther.java (88%) rename spring-boot-properties/src/main/java/{org => com}/baeldung/properties/spring/PropertiesWithPlaceHolderConfigurer.java (93%) rename spring-boot-properties/src/test/java/{org => com}/baeldung/properties/basic/BasicPropertiesWithJavaIntegrationTest.java (90%) rename spring-boot-properties/src/test/java/{org => com}/baeldung/properties/basic/ExtendedPropertiesWithJavaIntegrationTest.java (86%) rename spring-boot-properties/src/test/java/{org => com}/baeldung/properties/basic/PropertiesWithJavaIntegrationTest.java (90%) rename spring-boot-properties/src/test/java/{org => com}/baeldung/properties/basic/PropertiesWithMultipleXmlsIntegrationTest.java (96%) rename spring-boot-properties/src/test/java/{org => com}/baeldung/properties/basic/PropertiesWithXmlIntegrationTest.java (95%) rename spring-boot-properties/src/test/java/{org => com}/baeldung/properties/external/ExternalPropertiesWithJavaIntegrationTest.java (88%) rename spring-boot-properties/src/test/java/{org => com}/baeldung/properties/external/ExternalPropertiesWithMultipleXmlsIntegrationTest.java (87%) rename spring-boot-properties/src/test/java/{org => com}/baeldung/properties/external/ExternalPropertiesWithXmlManualTest.java (92%) rename spring-boot-properties/src/test/java/{org => com}/baeldung/properties/multiple/MultiplePropertiesJavaConfigIntegrationTest.java (85%) rename spring-boot-properties/src/test/java/{org => com}/baeldung/properties/multiple/MultiplePropertiesXmlConfigIntegrationTest.java (93%) rename spring-boot-properties/src/test/java/{org => com}/baeldung/properties/parentchild/ChildValueHolder.java (90%) rename spring-boot-properties/src/test/java/{org => com}/baeldung/properties/parentchild/ParentChildPropertyPlaceHolderPropertiesIntegrationTest.java (91%) rename spring-boot-properties/src/test/java/{org => com}/baeldung/properties/parentchild/ParentChildPropertySourcePropertiesIntegrationTest.java (91%) rename spring-boot-properties/src/test/java/{org => com}/baeldung/properties/parentchild/ParentValueHolder.java (90%) rename spring-boot-properties/src/test/java/{org => com}/baeldung/properties/parentchild/config/ChildConfig.java (84%) rename spring-boot-properties/src/test/java/{org => com}/baeldung/properties/parentchild/config/ChildConfig2.java (85%) rename spring-boot-properties/src/test/java/{org => com}/baeldung/properties/parentchild/config/ParentConfig.java (84%) rename spring-boot-properties/src/test/java/{org => com}/baeldung/properties/parentchild/config/ParentConfig2.java (85%) rename spring-boot-properties/src/test/java/{org => com}/baeldung/test/IntegrationTestSuite.java (59%) diff --git a/spring-boot-properties/extra.properties b/spring-boot-properties/extra.properties index 8e28a6f889..51874a0415 100644 --- a/spring-boot-properties/extra.properties +++ b/spring-boot-properties/extra.properties @@ -1 +1 @@ -application.theme.color=blue \ No newline at end of file +application.theme.color=red \ No newline at end of file diff --git a/spring-boot-properties/src/main/java/org/baeldung/properties/core/ComponentInXmlUsingProperties.java b/spring-boot-properties/src/main/java/com/baeldung/properties/core/ComponentInXmlUsingProperties.java similarity index 95% rename from spring-boot-properties/src/main/java/org/baeldung/properties/core/ComponentInXmlUsingProperties.java rename to spring-boot-properties/src/main/java/com/baeldung/properties/core/ComponentInXmlUsingProperties.java index dbdcebcb36..675c72e642 100644 --- a/spring-boot-properties/src/main/java/org/baeldung/properties/core/ComponentInXmlUsingProperties.java +++ b/spring-boot-properties/src/main/java/com/baeldung/properties/core/ComponentInXmlUsingProperties.java @@ -1,4 +1,4 @@ -package org.baeldung.properties.core; +package com.baeldung.properties.core; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Autowired; diff --git a/spring-boot-properties/src/main/java/org/baeldung/properties/core/ComponentUsingProperties.java b/spring-boot-properties/src/main/java/com/baeldung/properties/core/ComponentUsingProperties.java similarity index 95% rename from spring-boot-properties/src/main/java/org/baeldung/properties/core/ComponentUsingProperties.java rename to spring-boot-properties/src/main/java/com/baeldung/properties/core/ComponentUsingProperties.java index 7e082702fe..ff6e11d453 100644 --- a/spring-boot-properties/src/main/java/org/baeldung/properties/core/ComponentUsingProperties.java +++ b/spring-boot-properties/src/main/java/com/baeldung/properties/core/ComponentUsingProperties.java @@ -1,4 +1,4 @@ -package org.baeldung.properties.core; +package com.baeldung.properties.core; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Autowired; diff --git a/spring-boot-properties/src/main/java/org/baeldung/properties/external/ExternalPropertiesWithJavaConfig.java b/spring-boot-properties/src/main/java/com/baeldung/properties/external/ExternalPropertiesWithJavaConfig.java similarity index 94% rename from spring-boot-properties/src/main/java/org/baeldung/properties/external/ExternalPropertiesWithJavaConfig.java rename to spring-boot-properties/src/main/java/com/baeldung/properties/external/ExternalPropertiesWithJavaConfig.java index 216f905437..d43f18f6a7 100644 --- a/spring-boot-properties/src/main/java/org/baeldung/properties/external/ExternalPropertiesWithJavaConfig.java +++ b/spring-boot-properties/src/main/java/com/baeldung/properties/external/ExternalPropertiesWithJavaConfig.java @@ -1,4 +1,4 @@ -package org.baeldung.properties.external; +package com.baeldung.properties.external; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; diff --git a/spring-boot-properties/src/main/java/org/baeldung/properties/external/ExternalPropertiesWithXmlConfig.java b/spring-boot-properties/src/main/java/com/baeldung/properties/external/ExternalPropertiesWithXmlConfig.java similarity index 90% rename from spring-boot-properties/src/main/java/org/baeldung/properties/external/ExternalPropertiesWithXmlConfig.java rename to spring-boot-properties/src/main/java/com/baeldung/properties/external/ExternalPropertiesWithXmlConfig.java index ea5bbf1c4d..6d105428d9 100644 --- a/spring-boot-properties/src/main/java/org/baeldung/properties/external/ExternalPropertiesWithXmlConfig.java +++ b/spring-boot-properties/src/main/java/com/baeldung/properties/external/ExternalPropertiesWithXmlConfig.java @@ -1,4 +1,4 @@ -package org.baeldung.properties.external; +package com.baeldung.properties.external; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; diff --git a/spring-boot-properties/src/main/java/org/baeldung/properties/external/ExternalPropertiesWithXmlConfigOne.java b/spring-boot-properties/src/main/java/com/baeldung/properties/external/ExternalPropertiesWithXmlConfigOne.java similarity index 90% rename from spring-boot-properties/src/main/java/org/baeldung/properties/external/ExternalPropertiesWithXmlConfigOne.java rename to spring-boot-properties/src/main/java/com/baeldung/properties/external/ExternalPropertiesWithXmlConfigOne.java index 2698937e1e..6f1e4c8490 100644 --- a/spring-boot-properties/src/main/java/org/baeldung/properties/external/ExternalPropertiesWithXmlConfigOne.java +++ b/spring-boot-properties/src/main/java/com/baeldung/properties/external/ExternalPropertiesWithXmlConfigOne.java @@ -1,4 +1,4 @@ -package org.baeldung.properties.external; +package com.baeldung.properties.external; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; diff --git a/spring-boot-properties/src/main/java/org/baeldung/properties/external/ExternalPropertiesWithXmlConfigTwo.java b/spring-boot-properties/src/main/java/com/baeldung/properties/external/ExternalPropertiesWithXmlConfigTwo.java similarity index 88% rename from spring-boot-properties/src/main/java/org/baeldung/properties/external/ExternalPropertiesWithXmlConfigTwo.java rename to spring-boot-properties/src/main/java/com/baeldung/properties/external/ExternalPropertiesWithXmlConfigTwo.java index efbb995b73..38ecdd2aae 100644 --- a/spring-boot-properties/src/main/java/org/baeldung/properties/external/ExternalPropertiesWithXmlConfigTwo.java +++ b/spring-boot-properties/src/main/java/com/baeldung/properties/external/ExternalPropertiesWithXmlConfigTwo.java @@ -1,4 +1,4 @@ -package org.baeldung.properties.external; +package com.baeldung.properties.external; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.ImportResource; diff --git a/spring-boot-properties/src/main/java/org/baeldung/properties/spring/BasicPropertiesWithJavaConfig.java b/spring-boot-properties/src/main/java/com/baeldung/properties/spring/BasicPropertiesWithJavaConfig.java similarity index 87% rename from spring-boot-properties/src/main/java/org/baeldung/properties/spring/BasicPropertiesWithJavaConfig.java rename to spring-boot-properties/src/main/java/com/baeldung/properties/spring/BasicPropertiesWithJavaConfig.java index 25bfaa20a9..1c7886b34b 100644 --- a/spring-boot-properties/src/main/java/org/baeldung/properties/spring/BasicPropertiesWithJavaConfig.java +++ b/spring-boot-properties/src/main/java/com/baeldung/properties/spring/BasicPropertiesWithJavaConfig.java @@ -1,4 +1,4 @@ -package org.baeldung.properties.spring; +package com.baeldung.properties.spring; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; diff --git a/spring-boot-properties/src/main/java/org/baeldung/properties/spring/PropertiesWithJavaConfig.java b/spring-boot-properties/src/main/java/com/baeldung/properties/spring/PropertiesWithJavaConfig.java similarity index 94% rename from spring-boot-properties/src/main/java/org/baeldung/properties/spring/PropertiesWithJavaConfig.java rename to spring-boot-properties/src/main/java/com/baeldung/properties/spring/PropertiesWithJavaConfig.java index 6589143a94..4a29e5e3ea 100644 --- a/spring-boot-properties/src/main/java/org/baeldung/properties/spring/PropertiesWithJavaConfig.java +++ b/spring-boot-properties/src/main/java/com/baeldung/properties/spring/PropertiesWithJavaConfig.java @@ -1,4 +1,4 @@ -package org.baeldung.properties.spring; +package com.baeldung.properties.spring; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; diff --git a/spring-boot-properties/src/main/java/org/baeldung/properties/spring/PropertiesWithJavaConfigOther.java b/spring-boot-properties/src/main/java/com/baeldung/properties/spring/PropertiesWithJavaConfigOther.java similarity index 88% rename from spring-boot-properties/src/main/java/org/baeldung/properties/spring/PropertiesWithJavaConfigOther.java rename to spring-boot-properties/src/main/java/com/baeldung/properties/spring/PropertiesWithJavaConfigOther.java index 594ba0a09d..54d7814045 100644 --- a/spring-boot-properties/src/main/java/org/baeldung/properties/spring/PropertiesWithJavaConfigOther.java +++ b/spring-boot-properties/src/main/java/com/baeldung/properties/spring/PropertiesWithJavaConfigOther.java @@ -1,4 +1,4 @@ -package org.baeldung.properties.spring; +package com.baeldung.properties.spring; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; diff --git a/spring-boot-properties/src/main/java/org/baeldung/properties/spring/PropertiesWithPlaceHolderConfigurer.java b/spring-boot-properties/src/main/java/com/baeldung/properties/spring/PropertiesWithPlaceHolderConfigurer.java similarity index 93% rename from spring-boot-properties/src/main/java/org/baeldung/properties/spring/PropertiesWithPlaceHolderConfigurer.java rename to spring-boot-properties/src/main/java/com/baeldung/properties/spring/PropertiesWithPlaceHolderConfigurer.java index 97d7fe0ffa..512ecda266 100644 --- a/spring-boot-properties/src/main/java/org/baeldung/properties/spring/PropertiesWithPlaceHolderConfigurer.java +++ b/spring-boot-properties/src/main/java/com/baeldung/properties/spring/PropertiesWithPlaceHolderConfigurer.java @@ -1,4 +1,4 @@ -package org.baeldung.properties.spring; +package com.baeldung.properties.spring; import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer; import org.springframework.context.annotation.Bean; diff --git a/spring-boot-properties/src/main/resources/application.properties b/spring-boot-properties/src/main/resources/application.properties index f976004a04..2e06fad574 100644 --- a/spring-boot-properties/src/main/resources/application.properties +++ b/spring-boot-properties/src/main/resources/application.properties @@ -1,3 +1,4 @@ management.endpoints.web.exposure.include=refresh spring.properties.refreshDelay=1000 spring.config.location=file:extra.properties +spring.main.allow-bean-definition-overriding=true \ No newline at end of file diff --git a/spring-boot-properties/src/main/resources/configForProperties.xml b/spring-boot-properties/src/main/resources/configForProperties.xml index 459aea3ec6..d796f791cb 100644 --- a/spring-boot-properties/src/main/resources/configForProperties.xml +++ b/spring-boot-properties/src/main/resources/configForProperties.xml @@ -9,7 +9,7 @@ - + diff --git a/spring-boot-properties/src/main/resources/configForPropertiesOne.xml b/spring-boot-properties/src/main/resources/configForPropertiesOne.xml index 068c86a840..53072d89bb 100644 --- a/spring-boot-properties/src/main/resources/configForPropertiesOne.xml +++ b/spring-boot-properties/src/main/resources/configForPropertiesOne.xml @@ -9,7 +9,7 @@ - + diff --git a/spring-boot-properties/src/test/java/org/baeldung/properties/basic/BasicPropertiesWithJavaIntegrationTest.java b/spring-boot-properties/src/test/java/com/baeldung/properties/basic/BasicPropertiesWithJavaIntegrationTest.java similarity index 90% rename from spring-boot-properties/src/test/java/org/baeldung/properties/basic/BasicPropertiesWithJavaIntegrationTest.java rename to spring-boot-properties/src/test/java/com/baeldung/properties/basic/BasicPropertiesWithJavaIntegrationTest.java index 049b0d546a..f12808a16b 100644 --- a/spring-boot-properties/src/test/java/org/baeldung/properties/basic/BasicPropertiesWithJavaIntegrationTest.java +++ b/spring-boot-properties/src/test/java/com/baeldung/properties/basic/BasicPropertiesWithJavaIntegrationTest.java @@ -1,6 +1,5 @@ -package org.baeldung.properties.basic; +package com.baeldung.properties.basic; -import org.baeldung.properties.spring.BasicPropertiesWithJavaConfig; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; @@ -10,6 +9,8 @@ import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.support.AnnotationConfigContextLoader; +import com.baeldung.properties.spring.BasicPropertiesWithJavaConfig; + @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { BasicPropertiesWithJavaConfig.class }, loader = AnnotationConfigContextLoader.class) public class BasicPropertiesWithJavaIntegrationTest { diff --git a/spring-boot-properties/src/test/java/org/baeldung/properties/basic/ExtendedPropertiesWithJavaIntegrationTest.java b/spring-boot-properties/src/test/java/com/baeldung/properties/basic/ExtendedPropertiesWithJavaIntegrationTest.java similarity index 86% rename from spring-boot-properties/src/test/java/org/baeldung/properties/basic/ExtendedPropertiesWithJavaIntegrationTest.java rename to spring-boot-properties/src/test/java/com/baeldung/properties/basic/ExtendedPropertiesWithJavaIntegrationTest.java index 28ef76e249..a622029653 100644 --- a/spring-boot-properties/src/test/java/org/baeldung/properties/basic/ExtendedPropertiesWithJavaIntegrationTest.java +++ b/spring-boot-properties/src/test/java/com/baeldung/properties/basic/ExtendedPropertiesWithJavaIntegrationTest.java @@ -1,7 +1,5 @@ -package org.baeldung.properties.basic; +package com.baeldung.properties.basic; -import org.baeldung.properties.spring.BasicPropertiesWithJavaConfig; -import org.baeldung.properties.spring.PropertiesWithJavaConfigOther; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; @@ -11,6 +9,9 @@ import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.support.AnnotationConfigContextLoader; +import com.baeldung.properties.spring.BasicPropertiesWithJavaConfig; +import com.baeldung.properties.spring.PropertiesWithJavaConfigOther; + @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { BasicPropertiesWithJavaConfig.class, PropertiesWithJavaConfigOther.class }, loader = AnnotationConfigContextLoader.class) public class ExtendedPropertiesWithJavaIntegrationTest { diff --git a/spring-boot-properties/src/test/java/org/baeldung/properties/basic/PropertiesWithJavaIntegrationTest.java b/spring-boot-properties/src/test/java/com/baeldung/properties/basic/PropertiesWithJavaIntegrationTest.java similarity index 90% rename from spring-boot-properties/src/test/java/org/baeldung/properties/basic/PropertiesWithJavaIntegrationTest.java rename to spring-boot-properties/src/test/java/com/baeldung/properties/basic/PropertiesWithJavaIntegrationTest.java index c55c1ee783..e43007ea2c 100644 --- a/spring-boot-properties/src/test/java/org/baeldung/properties/basic/PropertiesWithJavaIntegrationTest.java +++ b/spring-boot-properties/src/test/java/com/baeldung/properties/basic/PropertiesWithJavaIntegrationTest.java @@ -1,6 +1,5 @@ -package org.baeldung.properties.basic; +package com.baeldung.properties.basic; -import org.baeldung.properties.spring.PropertiesWithJavaConfig; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; @@ -10,6 +9,8 @@ import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.support.AnnotationConfigContextLoader; +import com.baeldung.properties.spring.PropertiesWithJavaConfig; + @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { PropertiesWithJavaConfig.class }, loader = AnnotationConfigContextLoader.class) public class PropertiesWithJavaIntegrationTest { diff --git a/spring-boot-properties/src/test/java/org/baeldung/properties/basic/PropertiesWithMultipleXmlsIntegrationTest.java b/spring-boot-properties/src/test/java/com/baeldung/properties/basic/PropertiesWithMultipleXmlsIntegrationTest.java similarity index 96% rename from spring-boot-properties/src/test/java/org/baeldung/properties/basic/PropertiesWithMultipleXmlsIntegrationTest.java rename to spring-boot-properties/src/test/java/com/baeldung/properties/basic/PropertiesWithMultipleXmlsIntegrationTest.java index 461f86f559..c3af2dc1d8 100644 --- a/spring-boot-properties/src/test/java/org/baeldung/properties/basic/PropertiesWithMultipleXmlsIntegrationTest.java +++ b/spring-boot-properties/src/test/java/com/baeldung/properties/basic/PropertiesWithMultipleXmlsIntegrationTest.java @@ -1,4 +1,4 @@ -package org.baeldung.properties.basic; +package com.baeldung.properties.basic; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/spring-boot-properties/src/test/java/org/baeldung/properties/basic/PropertiesWithXmlIntegrationTest.java b/spring-boot-properties/src/test/java/com/baeldung/properties/basic/PropertiesWithXmlIntegrationTest.java similarity index 95% rename from spring-boot-properties/src/test/java/org/baeldung/properties/basic/PropertiesWithXmlIntegrationTest.java rename to spring-boot-properties/src/test/java/com/baeldung/properties/basic/PropertiesWithXmlIntegrationTest.java index 5e7689a2d9..85c4ac34e2 100644 --- a/spring-boot-properties/src/test/java/org/baeldung/properties/basic/PropertiesWithXmlIntegrationTest.java +++ b/spring-boot-properties/src/test/java/com/baeldung/properties/basic/PropertiesWithXmlIntegrationTest.java @@ -1,4 +1,4 @@ -package org.baeldung.properties.basic; +package com.baeldung.properties.basic; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/spring-boot-properties/src/test/java/org/baeldung/properties/external/ExternalPropertiesWithJavaIntegrationTest.java b/spring-boot-properties/src/test/java/com/baeldung/properties/external/ExternalPropertiesWithJavaIntegrationTest.java similarity index 88% rename from spring-boot-properties/src/test/java/org/baeldung/properties/external/ExternalPropertiesWithJavaIntegrationTest.java rename to spring-boot-properties/src/test/java/com/baeldung/properties/external/ExternalPropertiesWithJavaIntegrationTest.java index c38a4b5465..2d6b3a74c5 100644 --- a/spring-boot-properties/src/test/java/org/baeldung/properties/external/ExternalPropertiesWithJavaIntegrationTest.java +++ b/spring-boot-properties/src/test/java/com/baeldung/properties/external/ExternalPropertiesWithJavaIntegrationTest.java @@ -1,6 +1,5 @@ -package org.baeldung.properties.external; +package com.baeldung.properties.external; -import org.baeldung.properties.spring.PropertiesWithJavaConfigOther; import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; @@ -11,6 +10,9 @@ import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.support.AnnotationConfigContextLoader; +import com.baeldung.properties.external.ExternalPropertiesWithJavaConfig; +import com.baeldung.properties.spring.PropertiesWithJavaConfigOther; + @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { ExternalPropertiesWithJavaConfig.class, PropertiesWithJavaConfigOther.class }, loader = AnnotationConfigContextLoader.class) @Ignore("manual only") diff --git a/spring-boot-properties/src/test/java/org/baeldung/properties/external/ExternalPropertiesWithMultipleXmlsIntegrationTest.java b/spring-boot-properties/src/test/java/com/baeldung/properties/external/ExternalPropertiesWithMultipleXmlsIntegrationTest.java similarity index 87% rename from spring-boot-properties/src/test/java/org/baeldung/properties/external/ExternalPropertiesWithMultipleXmlsIntegrationTest.java rename to spring-boot-properties/src/test/java/com/baeldung/properties/external/ExternalPropertiesWithMultipleXmlsIntegrationTest.java index fe96ea8f7f..018c655ec2 100644 --- a/spring-boot-properties/src/test/java/org/baeldung/properties/external/ExternalPropertiesWithMultipleXmlsIntegrationTest.java +++ b/spring-boot-properties/src/test/java/com/baeldung/properties/external/ExternalPropertiesWithMultipleXmlsIntegrationTest.java @@ -1,4 +1,4 @@ -package org.baeldung.properties.external; +package com.baeldung.properties.external; import org.junit.Ignore; import org.junit.Test; @@ -10,6 +10,9 @@ import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.support.AnnotationConfigContextLoader; +import com.baeldung.properties.external.ExternalPropertiesWithXmlConfigOne; +import com.baeldung.properties.external.ExternalPropertiesWithXmlConfigTwo; + @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { ExternalPropertiesWithXmlConfigOne.class, ExternalPropertiesWithXmlConfigTwo.class }, loader = AnnotationConfigContextLoader.class) @Ignore("manual only") diff --git a/spring-boot-properties/src/test/java/org/baeldung/properties/external/ExternalPropertiesWithXmlManualTest.java b/spring-boot-properties/src/test/java/com/baeldung/properties/external/ExternalPropertiesWithXmlManualTest.java similarity index 92% rename from spring-boot-properties/src/test/java/org/baeldung/properties/external/ExternalPropertiesWithXmlManualTest.java rename to spring-boot-properties/src/test/java/com/baeldung/properties/external/ExternalPropertiesWithXmlManualTest.java index a8a7bda91c..4f0abbc12c 100644 --- a/spring-boot-properties/src/test/java/org/baeldung/properties/external/ExternalPropertiesWithXmlManualTest.java +++ b/spring-boot-properties/src/test/java/com/baeldung/properties/external/ExternalPropertiesWithXmlManualTest.java @@ -1,4 +1,4 @@ -package org.baeldung.properties.external; +package com.baeldung.properties.external; import org.junit.Ignore; import org.junit.Test; @@ -10,6 +10,8 @@ import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.support.AnnotationConfigContextLoader; +import com.baeldung.properties.external.ExternalPropertiesWithXmlConfig; + @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { ExternalPropertiesWithXmlConfig.class }, loader = AnnotationConfigContextLoader.class) @Ignore("manual only") diff --git a/spring-boot-properties/src/test/java/org/baeldung/properties/multiple/MultiplePropertiesJavaConfigIntegrationTest.java b/spring-boot-properties/src/test/java/com/baeldung/properties/multiple/MultiplePropertiesJavaConfigIntegrationTest.java similarity index 85% rename from spring-boot-properties/src/test/java/org/baeldung/properties/multiple/MultiplePropertiesJavaConfigIntegrationTest.java rename to spring-boot-properties/src/test/java/com/baeldung/properties/multiple/MultiplePropertiesJavaConfigIntegrationTest.java index 9cb41c20f7..c7b9d33803 100644 --- a/spring-boot-properties/src/test/java/org/baeldung/properties/multiple/MultiplePropertiesJavaConfigIntegrationTest.java +++ b/spring-boot-properties/src/test/java/com/baeldung/properties/multiple/MultiplePropertiesJavaConfigIntegrationTest.java @@ -1,10 +1,11 @@ -package org.baeldung.properties.multiple; +package com.baeldung.properties.multiple; -import org.baeldung.properties.spring.PropertiesWithJavaConfig; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Value; import org.springframework.test.context.junit.jupiter.SpringJUnitConfig; +import com.baeldung.properties.spring.PropertiesWithJavaConfig; + import static org.assertj.core.api.Assertions.assertThat; @SpringJUnitConfig(PropertiesWithJavaConfig.class) diff --git a/spring-boot-properties/src/test/java/org/baeldung/properties/multiple/MultiplePropertiesXmlConfigIntegrationTest.java b/spring-boot-properties/src/test/java/com/baeldung/properties/multiple/MultiplePropertiesXmlConfigIntegrationTest.java similarity index 93% rename from spring-boot-properties/src/test/java/org/baeldung/properties/multiple/MultiplePropertiesXmlConfigIntegrationTest.java rename to spring-boot-properties/src/test/java/com/baeldung/properties/multiple/MultiplePropertiesXmlConfigIntegrationTest.java index b4f81f3541..db71e816dd 100644 --- a/spring-boot-properties/src/test/java/org/baeldung/properties/multiple/MultiplePropertiesXmlConfigIntegrationTest.java +++ b/spring-boot-properties/src/test/java/com/baeldung/properties/multiple/MultiplePropertiesXmlConfigIntegrationTest.java @@ -1,4 +1,4 @@ -package org.baeldung.properties.multiple; +package com.baeldung.properties.multiple; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Value; diff --git a/spring-boot-properties/src/test/java/org/baeldung/properties/parentchild/ChildValueHolder.java b/spring-boot-properties/src/test/java/com/baeldung/properties/parentchild/ChildValueHolder.java similarity index 90% rename from spring-boot-properties/src/test/java/org/baeldung/properties/parentchild/ChildValueHolder.java rename to spring-boot-properties/src/test/java/com/baeldung/properties/parentchild/ChildValueHolder.java index 0ed66d3c68..d97e7efb9e 100644 --- a/spring-boot-properties/src/test/java/org/baeldung/properties/parentchild/ChildValueHolder.java +++ b/spring-boot-properties/src/test/java/com/baeldung/properties/parentchild/ChildValueHolder.java @@ -1,4 +1,4 @@ -package org.baeldung.properties.parentchild; +package com.baeldung.properties.parentchild; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; diff --git a/spring-boot-properties/src/test/java/org/baeldung/properties/parentchild/ParentChildPropertyPlaceHolderPropertiesIntegrationTest.java b/spring-boot-properties/src/test/java/com/baeldung/properties/parentchild/ParentChildPropertyPlaceHolderPropertiesIntegrationTest.java similarity index 91% rename from spring-boot-properties/src/test/java/org/baeldung/properties/parentchild/ParentChildPropertyPlaceHolderPropertiesIntegrationTest.java rename to spring-boot-properties/src/test/java/com/baeldung/properties/parentchild/ParentChildPropertyPlaceHolderPropertiesIntegrationTest.java index e0eccc978a..374a502e5c 100644 --- a/spring-boot-properties/src/test/java/org/baeldung/properties/parentchild/ParentChildPropertyPlaceHolderPropertiesIntegrationTest.java +++ b/spring-boot-properties/src/test/java/com/baeldung/properties/parentchild/ParentChildPropertyPlaceHolderPropertiesIntegrationTest.java @@ -1,10 +1,8 @@ -package org.baeldung.properties.parentchild; +package com.baeldung.properties.parentchild; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; -import org.baeldung.properties.parentchild.config.ChildConfig2; -import org.baeldung.properties.parentchild.config.ParentConfig2; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; @@ -15,6 +13,9 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.web.WebAppConfiguration; import org.springframework.web.context.WebApplicationContext; +import com.baeldung.properties.parentchild.config.ChildConfig2; +import com.baeldung.properties.parentchild.config.ParentConfig2; + @RunWith(SpringJUnit4ClassRunner.class) @WebAppConfiguration @ContextHierarchy({ @ContextConfiguration(classes = ParentConfig2.class), @ContextConfiguration(classes = ChildConfig2.class) }) diff --git a/spring-boot-properties/src/test/java/org/baeldung/properties/parentchild/ParentChildPropertySourcePropertiesIntegrationTest.java b/spring-boot-properties/src/test/java/com/baeldung/properties/parentchild/ParentChildPropertySourcePropertiesIntegrationTest.java similarity index 91% rename from spring-boot-properties/src/test/java/org/baeldung/properties/parentchild/ParentChildPropertySourcePropertiesIntegrationTest.java rename to spring-boot-properties/src/test/java/com/baeldung/properties/parentchild/ParentChildPropertySourcePropertiesIntegrationTest.java index e9990523a7..c8d3413a04 100644 --- a/spring-boot-properties/src/test/java/org/baeldung/properties/parentchild/ParentChildPropertySourcePropertiesIntegrationTest.java +++ b/spring-boot-properties/src/test/java/com/baeldung/properties/parentchild/ParentChildPropertySourcePropertiesIntegrationTest.java @@ -1,10 +1,8 @@ -package org.baeldung.properties.parentchild; +package com.baeldung.properties.parentchild; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; -import org.baeldung.properties.parentchild.config.ChildConfig; -import org.baeldung.properties.parentchild.config.ParentConfig; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; @@ -15,6 +13,9 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.web.WebAppConfiguration; import org.springframework.web.context.WebApplicationContext; +import com.baeldung.properties.parentchild.config.ChildConfig; +import com.baeldung.properties.parentchild.config.ParentConfig; + @RunWith(SpringJUnit4ClassRunner.class) @WebAppConfiguration @ContextHierarchy({ @ContextConfiguration(classes = ParentConfig.class), @ContextConfiguration(classes = ChildConfig.class) }) diff --git a/spring-boot-properties/src/test/java/org/baeldung/properties/parentchild/ParentValueHolder.java b/spring-boot-properties/src/test/java/com/baeldung/properties/parentchild/ParentValueHolder.java similarity index 90% rename from spring-boot-properties/src/test/java/org/baeldung/properties/parentchild/ParentValueHolder.java rename to spring-boot-properties/src/test/java/com/baeldung/properties/parentchild/ParentValueHolder.java index abfafa8a7d..0330239f16 100644 --- a/spring-boot-properties/src/test/java/org/baeldung/properties/parentchild/ParentValueHolder.java +++ b/spring-boot-properties/src/test/java/com/baeldung/properties/parentchild/ParentValueHolder.java @@ -1,4 +1,4 @@ -package org.baeldung.properties.parentchild; +package com.baeldung.properties.parentchild; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; diff --git a/spring-boot-properties/src/test/java/org/baeldung/properties/parentchild/config/ChildConfig.java b/spring-boot-properties/src/test/java/com/baeldung/properties/parentchild/config/ChildConfig.java similarity index 84% rename from spring-boot-properties/src/test/java/org/baeldung/properties/parentchild/config/ChildConfig.java rename to spring-boot-properties/src/test/java/com/baeldung/properties/parentchild/config/ChildConfig.java index 23c8db7864..41bc4704c3 100644 --- a/spring-boot-properties/src/test/java/org/baeldung/properties/parentchild/config/ChildConfig.java +++ b/spring-boot-properties/src/test/java/com/baeldung/properties/parentchild/config/ChildConfig.java @@ -1,11 +1,12 @@ -package org.baeldung.properties.parentchild.config; +package com.baeldung.properties.parentchild.config; -import org.baeldung.properties.parentchild.ChildValueHolder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; +import com.baeldung.properties.parentchild.ChildValueHolder; + @Configuration @PropertySource("classpath:child.properties") public class ChildConfig { diff --git a/spring-boot-properties/src/test/java/org/baeldung/properties/parentchild/config/ChildConfig2.java b/spring-boot-properties/src/test/java/com/baeldung/properties/parentchild/config/ChildConfig2.java similarity index 85% rename from spring-boot-properties/src/test/java/org/baeldung/properties/parentchild/config/ChildConfig2.java rename to spring-boot-properties/src/test/java/com/baeldung/properties/parentchild/config/ChildConfig2.java index 2ed14d7701..c15fcbd352 100644 --- a/spring-boot-properties/src/test/java/org/baeldung/properties/parentchild/config/ChildConfig2.java +++ b/spring-boot-properties/src/test/java/com/baeldung/properties/parentchild/config/ChildConfig2.java @@ -1,11 +1,12 @@ -package org.baeldung.properties.parentchild.config; +package com.baeldung.properties.parentchild.config; -import org.baeldung.properties.parentchild.ChildValueHolder; import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.ClassPathResource; +import com.baeldung.properties.parentchild.ChildValueHolder; + @Configuration public class ChildConfig2 { diff --git a/spring-boot-properties/src/test/java/org/baeldung/properties/parentchild/config/ParentConfig.java b/spring-boot-properties/src/test/java/com/baeldung/properties/parentchild/config/ParentConfig.java similarity index 84% rename from spring-boot-properties/src/test/java/org/baeldung/properties/parentchild/config/ParentConfig.java rename to spring-boot-properties/src/test/java/com/baeldung/properties/parentchild/config/ParentConfig.java index ed407e0b52..5cb8cc1639 100644 --- a/spring-boot-properties/src/test/java/org/baeldung/properties/parentchild/config/ParentConfig.java +++ b/spring-boot-properties/src/test/java/com/baeldung/properties/parentchild/config/ParentConfig.java @@ -1,11 +1,12 @@ -package org.baeldung.properties.parentchild.config; +package com.baeldung.properties.parentchild.config; -import org.baeldung.properties.parentchild.ParentValueHolder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; +import com.baeldung.properties.parentchild.ParentValueHolder; + @Configuration @PropertySource("classpath:parent.properties") public class ParentConfig { diff --git a/spring-boot-properties/src/test/java/org/baeldung/properties/parentchild/config/ParentConfig2.java b/spring-boot-properties/src/test/java/com/baeldung/properties/parentchild/config/ParentConfig2.java similarity index 85% rename from spring-boot-properties/src/test/java/org/baeldung/properties/parentchild/config/ParentConfig2.java rename to spring-boot-properties/src/test/java/com/baeldung/properties/parentchild/config/ParentConfig2.java index c38ba8e483..ddb59a5309 100644 --- a/spring-boot-properties/src/test/java/org/baeldung/properties/parentchild/config/ParentConfig2.java +++ b/spring-boot-properties/src/test/java/com/baeldung/properties/parentchild/config/ParentConfig2.java @@ -1,11 +1,12 @@ -package org.baeldung.properties.parentchild.config; +package com.baeldung.properties.parentchild.config; -import org.baeldung.properties.parentchild.ParentValueHolder; import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.ClassPathResource; +import com.baeldung.properties.parentchild.ParentValueHolder; + @Configuration public class ParentConfig2 { diff --git a/spring-boot-properties/src/test/java/org/baeldung/test/IntegrationTestSuite.java b/spring-boot-properties/src/test/java/com/baeldung/test/IntegrationTestSuite.java similarity index 59% rename from spring-boot-properties/src/test/java/org/baeldung/test/IntegrationTestSuite.java rename to spring-boot-properties/src/test/java/com/baeldung/test/IntegrationTestSuite.java index 470ae9e538..722c4fd1c4 100644 --- a/spring-boot-properties/src/test/java/org/baeldung/test/IntegrationTestSuite.java +++ b/spring-boot-properties/src/test/java/com/baeldung/test/IntegrationTestSuite.java @@ -1,15 +1,16 @@ -package org.baeldung.test; +package com.baeldung.test; -import org.baeldung.properties.basic.ExtendedPropertiesWithJavaIntegrationTest; -import org.baeldung.properties.basic.PropertiesWithMultipleXmlsIntegrationTest; -import org.baeldung.properties.basic.PropertiesWithXmlIntegrationTest; -import org.baeldung.properties.external.ExternalPropertiesWithJavaIntegrationTest; -import org.baeldung.properties.external.ExternalPropertiesWithMultipleXmlsIntegrationTest; -import org.baeldung.properties.external.ExternalPropertiesWithXmlManualTest; import org.junit.runner.RunWith; import org.junit.runners.Suite; import org.junit.runners.Suite.SuiteClasses; +import com.baeldung.properties.basic.ExtendedPropertiesWithJavaIntegrationTest; +import com.baeldung.properties.basic.PropertiesWithMultipleXmlsIntegrationTest; +import com.baeldung.properties.basic.PropertiesWithXmlIntegrationTest; +import com.baeldung.properties.external.ExternalPropertiesWithJavaIntegrationTest; +import com.baeldung.properties.external.ExternalPropertiesWithMultipleXmlsIntegrationTest; +import com.baeldung.properties.external.ExternalPropertiesWithXmlManualTest; + @RunWith(Suite.class) @SuiteClasses({ //@formatter:off PropertiesWithXmlIntegrationTest.class, diff --git a/spring-boot-properties/src/test/resources/application.properties b/spring-boot-properties/src/test/resources/application.properties index 6fc241a106..2e06fad574 100644 --- a/spring-boot-properties/src/test/resources/application.properties +++ b/spring-boot-properties/src/test/resources/application.properties @@ -1,3 +1,4 @@ management.endpoints.web.exposure.include=refresh spring.properties.refreshDelay=1000 -spring.config.location=file:extra.properties \ No newline at end of file +spring.config.location=file:extra.properties +spring.main.allow-bean-definition-overriding=true \ No newline at end of file