From a178f09ef49aaf21a3b8cc52690f3140302089b3 Mon Sep 17 00:00:00 2001 From: Pallavi Priyadarshani <50460471+pallavi-priyadarshani@users.noreply.github.com> Date: Tue, 23 Jul 2019 21:53:15 +0530 Subject: [PATCH 01/56] BAEL-3005 | Validating List objects in Spring --- spring-mvc-simple-2/pom.xml | 4 ++ .../SpringListValidationApplication.java | 17 +++++ .../constraint/CustomConstraint.java | 18 +++++ .../constraint/CustomConstraintValidator.java | 17 +++++ .../controller/MovieController.java | 54 +++++++++++++++ .../ConstraintViolationExceptionHandler.java | 30 +++++++++ .../listvalidation/model/Actor.java | 22 +++++++ .../listvalidation/model/Movie.java | 41 ++++++++++++ .../repository/MovieRepository.java | 57 ++++++++++++++++ .../MovieControllerIntegrationTest.java | 65 +++++++++++++++++++ 10 files changed, 325 insertions(+) create mode 100644 spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/SpringListValidationApplication.java create mode 100644 spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/constraint/CustomConstraint.java create mode 100644 spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/constraint/CustomConstraintValidator.java create mode 100644 spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/controller/MovieController.java create mode 100644 spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/exception/ConstraintViolationExceptionHandler.java create mode 100644 spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/model/Actor.java create mode 100644 spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/model/Movie.java create mode 100644 spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/repository/MovieRepository.java create mode 100644 spring-mvc-simple-2/src/test/java/com/baeldung/validation/listvalidation/MovieControllerIntegrationTest.java diff --git a/spring-mvc-simple-2/pom.xml b/spring-mvc-simple-2/pom.xml index 74302cff78..2fe93f1fae 100644 --- a/spring-mvc-simple-2/pom.xml +++ b/spring-mvc-simple-2/pom.xml @@ -18,6 +18,10 @@ org.springframework.boot spring-boot-starter-web + + org.projectlombok + lombok + diff --git a/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/SpringListValidationApplication.java b/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/SpringListValidationApplication.java new file mode 100644 index 0000000000..f16d5f877f --- /dev/null +++ b/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/SpringListValidationApplication.java @@ -0,0 +1,17 @@ +package com.baeldung.validation.listvalidation; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +@ComponentScan(basePackages = "com.baeldung.validation.listvalidation") +@Configuration +@SpringBootApplication +public class SpringListValidationApplication { + + public static void main(String[] args) { + SpringApplication.run(SpringListValidationApplication.class, args); + } + +} diff --git a/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/constraint/CustomConstraint.java b/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/constraint/CustomConstraint.java new file mode 100644 index 0000000000..5d6e2213f1 --- /dev/null +++ b/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/constraint/CustomConstraint.java @@ -0,0 +1,18 @@ +package com.baeldung.validation.listvalidation.constraint; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +import javax.validation.Constraint; +import javax.validation.Payload; + +@Constraint(validatedBy = CustomConstraintValidator.class) +@Retention(RetentionPolicy.RUNTIME) +public @interface CustomConstraint { + + String message() default "Invalid movie name."; + + Class>[] groups() default {}; + + Class extends Payload>[] payload() default {}; +} diff --git a/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/constraint/CustomConstraintValidator.java b/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/constraint/CustomConstraintValidator.java new file mode 100644 index 0000000000..9f18a0c218 --- /dev/null +++ b/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/constraint/CustomConstraintValidator.java @@ -0,0 +1,17 @@ +package com.baeldung.validation.listvalidation.constraint; + +import javax.validation.ConstraintValidator; +import javax.validation.ConstraintValidatorContext; + +public class CustomConstraintValidator implements ConstraintValidator { + + @Override + public boolean isValid(String value, ConstraintValidatorContext context) { + if (value == null || value.isEmpty()) { + return false; + } else { + return true; + } + } + +} diff --git a/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/controller/MovieController.java b/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/controller/MovieController.java new file mode 100644 index 0000000000..6265fd50d0 --- /dev/null +++ b/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/controller/MovieController.java @@ -0,0 +1,54 @@ +package com.baeldung.validation.listvalidation.controller; + +import java.util.List; + +import javax.validation.Valid; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PathVariable; +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.RestController; +import org.springframework.web.server.ResponseStatusException; + +import com.baeldung.validation.listvalidation.model.Movie; +import com.baeldung.validation.listvalidation.repository.MovieRepository; + +@Validated +@RestController +@RequestMapping("/movie") +public class MovieController { + + private final Logger LOGGER = LoggerFactory.getLogger(MovieController.class); + + @Autowired + private MovieRepository movieRepository; + + @RequestMapping(method = RequestMethod.POST) + public void add(@RequestBody @Valid Movie movie, BindingResult bindingResult) { + if (bindingResult.hasErrors()) { + StringBuilder builder = new StringBuilder(); + bindingResult.getAllErrors() + .forEach(error -> builder.append(" " + error.getDefaultMessage())); + LOGGER.error(builder.toString()); + throw new ResponseStatusException(HttpStatus.BAD_REQUEST, bindingResult.toString()); + } + movieRepository.add(movie); + } + + @RequestMapping(value = "/batch", method = RequestMethod.POST) + public void addAll(@RequestBody List<@Valid Movie> movie) { + movieRepository.addAll(movie); + } + + @RequestMapping(method = RequestMethod.GET, value = "/{name}") + public Movie get(@PathVariable String name) throws Exception { + return movieRepository.get(name); + } +} diff --git a/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/exception/ConstraintViolationExceptionHandler.java b/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/exception/ConstraintViolationExceptionHandler.java new file mode 100644 index 0000000000..067a0e08ac --- /dev/null +++ b/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/exception/ConstraintViolationExceptionHandler.java @@ -0,0 +1,30 @@ +package com.baeldung.validation.listvalidation.exception; + +import java.util.Set; + +import javax.validation.ConstraintViolation; +import javax.validation.ConstraintViolationException; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +@RestControllerAdvice +public class ConstraintViolationExceptionHandler { + private final Logger LOGGER = LoggerFactory.getLogger(ConstraintViolationExceptionHandler.class); + + @ExceptionHandler(ConstraintViolationException.class) + public ResponseEntity handle(ConstraintViolationException constraintViolationException) { + Set> violations = constraintViolationException.getConstraintViolations(); + StringBuilder builder = new StringBuilder(); + for (ConstraintViolation> violation : violations) { + builder.append(violation.getMessage()); + + } + LOGGER.error(builder.toString()); + return new ResponseEntity(builder.toString(), HttpStatus.BAD_REQUEST); + } +} diff --git a/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/model/Actor.java b/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/model/Actor.java new file mode 100644 index 0000000000..e6215f00c4 --- /dev/null +++ b/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/model/Actor.java @@ -0,0 +1,22 @@ +package com.baeldung.validation.listvalidation.model; + +import java.util.UUID; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Getter +@Setter +@NoArgsConstructor +public class Actor { + + private String id; + private String name; + + public Actor(String name) { + this.id = UUID.randomUUID() + .toString(); + this.name = name; + } +} diff --git a/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/model/Movie.java b/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/model/Movie.java new file mode 100644 index 0000000000..7ab4bfc34e --- /dev/null +++ b/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/model/Movie.java @@ -0,0 +1,41 @@ +package com.baeldung.validation.listvalidation.model; + +import java.util.List; +import java.util.UUID; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; + +import com.baeldung.validation.listvalidation.constraint.CustomConstraint; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Getter +@Setter +@NoArgsConstructor +public class Movie { + + private String id; + + @CustomConstraint + private String name; + + @Size(min = 2, message = "Atleast 2 genres should be provided.") + private List genres; + + @NotNull(message = "Actor list cannot be null.") + @NotEmpty(message = "Actor list cannot be empty.") + private List actors; + + public Movie(String name, List genres, List actors) { + this.id = UUID.randomUUID() + .toString(); + this.name = name; + this.genres = genres; + this.actors = actors; + } + +} diff --git a/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/repository/MovieRepository.java b/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/repository/MovieRepository.java new file mode 100644 index 0000000000..67cfa6daca --- /dev/null +++ b/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/repository/MovieRepository.java @@ -0,0 +1,57 @@ +package com.baeldung.validation.listvalidation.repository; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Repository; + +import com.baeldung.validation.listvalidation.model.Actor; +import com.baeldung.validation.listvalidation.model.Movie; + +@Repository +public class MovieRepository { + private final Logger LOGGER = LoggerFactory.getLogger(MovieRepository.class); + static List moviesData; + + static { + moviesData = new ArrayList<>(); + + Actor a1 = new Actor("Actor1"); + + Movie m1 = new Movie("MovieABC", Arrays.asList("Drama"), Arrays.asList(a1)); + moviesData.add(m1); + + Movie m2 = new Movie("MovieDEF", Arrays.asList("Drama"), Arrays.asList(a1)); + moviesData.add(m2); + + } + + public void add(Movie movie) { + if (get(movie.getName()) == null) { + moviesData.add(movie); + LOGGER.info("Added new movie."); + } + } + + public Movie get(String name) { + Movie movie = null; + for (Movie m : moviesData) { + if (name.equalsIgnoreCase(m.getName())) { + movie = m; + LOGGER.info("Found movie with name " + name + ":" + movie); + } + } + + return movie; + } + + public void addAll(List movies) { + for (Movie movie : movies) { + add(movie); + } + } + +} diff --git a/spring-mvc-simple-2/src/test/java/com/baeldung/validation/listvalidation/MovieControllerIntegrationTest.java b/spring-mvc-simple-2/src/test/java/com/baeldung/validation/listvalidation/MovieControllerIntegrationTest.java new file mode 100644 index 0000000000..226e609d5f --- /dev/null +++ b/spring-mvc-simple-2/src/test/java/com/baeldung/validation/listvalidation/MovieControllerIntegrationTest.java @@ -0,0 +1,65 @@ +package com.baeldung.validation.listvalidation; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +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.http.MediaType; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; +import org.springframework.test.web.servlet.result.MockMvcResultMatchers; + +import com.baeldung.validation.listvalidation.model.Actor; +import com.baeldung.validation.listvalidation.model.Movie; +import com.fasterxml.jackson.databind.ObjectMapper; + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = SpringListValidationApplication.class) +@AutoConfigureMockMvc +public class MovieControllerIntegrationTest { + + @Autowired + private MockMvc mvc; + + ObjectMapper objectMapper = new ObjectMapper(); + + @Test + public void given1Genre_whenAddingMovie_thenThrowBadRequest() throws Exception { + Actor actor = new Actor("Actor1"); + Movie movie = new Movie("Movie1", Arrays.asList("Drama"), Arrays.asList(actor)); + mvc.perform(MockMvcRequestBuilders.post("/movie") + .contentType(MediaType.APPLICATION_JSON_UTF8) + .content(objectMapper.writeValueAsString(movie))) + .andExpect(MockMvcResultMatchers.status() + .isBadRequest()); + } + + @Test + public void givenWithoutActor_whenAddingMovieList_thenThrowBadRequest() throws Exception { + List actors = new ArrayList<>(); + Movie movie = new Movie("Movie2", Arrays.asList("Action", "Thriller"), actors); + mvc.perform(MockMvcRequestBuilders.post("/movie/batch") + .contentType(MediaType.APPLICATION_JSON_UTF8) + .content(objectMapper.writeValueAsString(Arrays.asList(movie)))) + .andExpect(MockMvcResultMatchers.status() + .isBadRequest()); + } + + @Test + public void givenEmptyMovieName_whenAddingMovie_thenThrowBadRequest() throws Exception { + Actor actor = new Actor("Actor1"); + Movie movie = new Movie("", Arrays.asList("Drama", "History"), Arrays.asList(actor)); + mvc.perform(MockMvcRequestBuilders.post("/movie") + .contentType(MediaType.APPLICATION_JSON_UTF8) + .content(objectMapper.writeValueAsString(movie))) + .andExpect(MockMvcResultMatchers.status() + .isBadRequest()); + } + +} From dd7b922f2bb0e738a3926583cb5199ed888ef793 Mon Sep 17 00:00:00 2001 From: dupirefr Date: Wed, 24 Jul 2019 08:17:58 +0200 Subject: [PATCH 02/56] [BAEL-3090] Added example --- .../com/baeldung/memento/Coordinates.java | 12 ++++++++ .../java/com/baeldung/memento/TextEditor.java | 19 ++++++++++++ .../java/com/baeldung/memento/TextWindow.java | 30 +++++++++++++++++++ .../com/baeldung/memento/TextWindowState.java | 14 +++++++++ 4 files changed, 75 insertions(+) create mode 100644 patterns/design-patterns-2/src/main/java/com/baeldung/memento/Coordinates.java create mode 100644 patterns/design-patterns-2/src/main/java/com/baeldung/memento/TextEditor.java create mode 100644 patterns/design-patterns-2/src/main/java/com/baeldung/memento/TextWindow.java create mode 100644 patterns/design-patterns-2/src/main/java/com/baeldung/memento/TextWindowState.java diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/memento/Coordinates.java b/patterns/design-patterns-2/src/main/java/com/baeldung/memento/Coordinates.java new file mode 100644 index 0000000000..19c1798a93 --- /dev/null +++ b/patterns/design-patterns-2/src/main/java/com/baeldung/memento/Coordinates.java @@ -0,0 +1,12 @@ +package com.baeldung.memento; + +public class Coordinates { + + private int x; + private int y; + + public Coordinates(int x, int y) { + this.x = x; + this.y = y; + } +} diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/memento/TextEditor.java b/patterns/design-patterns-2/src/main/java/com/baeldung/memento/TextEditor.java new file mode 100644 index 0000000000..cf08e2b226 --- /dev/null +++ b/patterns/design-patterns-2/src/main/java/com/baeldung/memento/TextEditor.java @@ -0,0 +1,19 @@ +package com.baeldung.memento; + +public class TextEditor { + + private TextWindow textWindow; + private TextWindowState savedTextWindow; + + public TextEditor(TextWindow textWindow) { + this.textWindow = textWindow; + } + + public void hitSave() { + savedTextWindow = textWindow.save(); + } + + public void hitUndo() { + textWindow.restore(savedTextWindow); + } +} diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/memento/TextWindow.java b/patterns/design-patterns-2/src/main/java/com/baeldung/memento/TextWindow.java new file mode 100644 index 0000000000..5fdfda1998 --- /dev/null +++ b/patterns/design-patterns-2/src/main/java/com/baeldung/memento/TextWindow.java @@ -0,0 +1,30 @@ +package com.baeldung.memento; + +public class TextWindow { + + private StringBuilder currentText; + private Coordinates cursorPosition; + + public TextWindow() { + this.currentText = new StringBuilder(); + this.cursorPosition = new Coordinates(0, 0); + } + + public void addText(String text) { + currentText.append(text); + } + + public TextWindowState save() { + return new TextWindowState(currentText.toString()); + } + + public void restore(TextWindowState save) { + currentText = new StringBuilder(save.getText()); + cursorPosition = atTextEnd(); + } + + private Coordinates atTextEnd() { + String[] lines = currentText.toString().split("\n"); + return new Coordinates(lines[lines.length - 1].length(), lines.length); + } +} diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/memento/TextWindowState.java b/patterns/design-patterns-2/src/main/java/com/baeldung/memento/TextWindowState.java new file mode 100644 index 0000000000..10015a84d1 --- /dev/null +++ b/patterns/design-patterns-2/src/main/java/com/baeldung/memento/TextWindowState.java @@ -0,0 +1,14 @@ +package com.baeldung.memento; + +public class TextWindowState { + + private String text; + + public TextWindowState(String text) { + this.text = text; + } + + public String getText() { + return text; + } +} From 83d8443fef41488ac1dbfa250f947ec26ecd29be Mon Sep 17 00:00:00 2001 From: dupirefr Date: Sat, 27 Jul 2019 11:24:45 +0200 Subject: [PATCH 03/56] [BAEL-3090] Added test + removed cursor --- patterns/design-patterns-2/pom.xml | 7 +++++++ .../main/java/com/baeldung/memento/TextEditor.java | 8 ++++++++ .../main/java/com/baeldung/memento/TextWindow.java | 12 ++++-------- 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/patterns/design-patterns-2/pom.xml b/patterns/design-patterns-2/pom.xml index 392035ab84..574edecb36 100644 --- a/patterns/design-patterns-2/pom.xml +++ b/patterns/design-patterns-2/pom.xml @@ -31,6 +31,12 @@ commons-lang3 ${commons-lang3.version} + + org.assertj + assertj-core + ${assertj.version} + test + @@ -38,5 +44,6 @@ 1.8 1.8 16.0.2 + 3.12.2 diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/memento/TextEditor.java b/patterns/design-patterns-2/src/main/java/com/baeldung/memento/TextEditor.java index cf08e2b226..37ac962773 100644 --- a/patterns/design-patterns-2/src/main/java/com/baeldung/memento/TextEditor.java +++ b/patterns/design-patterns-2/src/main/java/com/baeldung/memento/TextEditor.java @@ -9,6 +9,14 @@ public class TextEditor { this.textWindow = textWindow; } + public void write(String text) { + textWindow.addText(text); + } + + public String print() { + return textWindow.getCurrentText(); + } + public void hitSave() { savedTextWindow = textWindow.save(); } diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/memento/TextWindow.java b/patterns/design-patterns-2/src/main/java/com/baeldung/memento/TextWindow.java index 5fdfda1998..08778561b0 100644 --- a/patterns/design-patterns-2/src/main/java/com/baeldung/memento/TextWindow.java +++ b/patterns/design-patterns-2/src/main/java/com/baeldung/memento/TextWindow.java @@ -3,11 +3,13 @@ package com.baeldung.memento; public class TextWindow { private StringBuilder currentText; - private Coordinates cursorPosition; public TextWindow() { this.currentText = new StringBuilder(); - this.cursorPosition = new Coordinates(0, 0); + } + + public String getCurrentText() { + return currentText.toString(); } public void addText(String text) { @@ -20,11 +22,5 @@ public class TextWindow { public void restore(TextWindowState save) { currentText = new StringBuilder(save.getText()); - cursorPosition = atTextEnd(); - } - - private Coordinates atTextEnd() { - String[] lines = currentText.toString().split("\n"); - return new Coordinates(lines[lines.length - 1].length(), lines.length); } } From c3cc9a83367d21fa0b8499218e6d703d9532831e Mon Sep 17 00:00:00 2001 From: dupirefr Date: Sat, 27 Jul 2019 11:34:42 +0200 Subject: [PATCH 04/56] [BAEL-3090] Removed Coordinates --- .../main/java/com/baeldung/memento/Coordinates.java | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100644 patterns/design-patterns-2/src/main/java/com/baeldung/memento/Coordinates.java diff --git a/patterns/design-patterns-2/src/main/java/com/baeldung/memento/Coordinates.java b/patterns/design-patterns-2/src/main/java/com/baeldung/memento/Coordinates.java deleted file mode 100644 index 19c1798a93..0000000000 --- a/patterns/design-patterns-2/src/main/java/com/baeldung/memento/Coordinates.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.baeldung.memento; - -public class Coordinates { - - private int x; - private int y; - - public Coordinates(int x, int y) { - this.x = x; - this.y = y; - } -} From b9089ce06796d67f89c404749790e203a33fc8fe Mon Sep 17 00:00:00 2001 From: dupirefr Date: Sat, 27 Jul 2019 11:35:16 +0200 Subject: [PATCH 05/56] [BAEL-3090] Really added test this time --- .../com/baeldung/memento/TextEditorTest.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 patterns/design-patterns-2/src/test/java/com/baeldung/memento/TextEditorTest.java diff --git a/patterns/design-patterns-2/src/test/java/com/baeldung/memento/TextEditorTest.java b/patterns/design-patterns-2/src/test/java/com/baeldung/memento/TextEditorTest.java new file mode 100644 index 0000000000..b985753d91 --- /dev/null +++ b/patterns/design-patterns-2/src/test/java/com/baeldung/memento/TextEditorTest.java @@ -0,0 +1,20 @@ +package com.baeldung.memento; + +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +class TextEditorTest { + + @Test + void givenTextEditor_whenAddTextSaveAddMoreAndUndo_thenSavecStateRestored() { + TextEditor textEditor = new TextEditor(new TextWindow()); + textEditor.write("The Memento Design Pattern\n"); + textEditor.write("How to implement it in Java?\n"); + textEditor.hitSave(); + textEditor.write("Buy milk and eggs before coming home\n"); + textEditor.hitUndo(); + + assertThat(textEditor.print()).isEqualTo("The Memento Design Pattern\nHow to implement it in Java?\n"); + } +} \ No newline at end of file From dcc8d524412637e00cb7ee23d9fe8af70c2e471f Mon Sep 17 00:00:00 2001 From: dupirefr Date: Sat, 27 Jul 2019 12:01:37 +0200 Subject: [PATCH 06/56] [BAEL-3090] Renamed test to match PMD --- .../memento/{TextEditorTest.java => TextEditorUnitTest.java} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename patterns/design-patterns-2/src/test/java/com/baeldung/memento/{TextEditorTest.java => TextEditorUnitTest.java} (95%) diff --git a/patterns/design-patterns-2/src/test/java/com/baeldung/memento/TextEditorTest.java b/patterns/design-patterns-2/src/test/java/com/baeldung/memento/TextEditorUnitTest.java similarity index 95% rename from patterns/design-patterns-2/src/test/java/com/baeldung/memento/TextEditorTest.java rename to patterns/design-patterns-2/src/test/java/com/baeldung/memento/TextEditorUnitTest.java index b985753d91..09f6df70a2 100644 --- a/patterns/design-patterns-2/src/test/java/com/baeldung/memento/TextEditorTest.java +++ b/patterns/design-patterns-2/src/test/java/com/baeldung/memento/TextEditorUnitTest.java @@ -4,7 +4,7 @@ import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; -class TextEditorTest { +class TextEditorUnitTest { @Test void givenTextEditor_whenAddTextSaveAddMoreAndUndo_thenSavecStateRestored() { From 2b602b04852b41e963830fffd39d2d2aa6889fc8 Mon Sep 17 00:00:00 2001 From: Marcos Lopez Gonzalez Date: Sun, 28 Jul 2019 16:12:14 +0200 Subject: [PATCH 07/56] actuator httpTrace endpoint --- spring-boot-management/pom.xml | 47 +++++++++++++++++++ .../spring/boot/management/trace/App.java | 13 +++++ .../trace/CustomTraceRepository.java | 28 +++++++++++ .../boot/management/trace/EchoController.java | 15 ++++++ .../management/trace/TraceRequestFilter.java | 27 +++++++++++ .../src/main/resources/application.properties | 3 ++ 6 files changed, 133 insertions(+) create mode 100644 spring-boot-management/pom.xml create mode 100644 spring-boot-management/src/main/java/com/baeldung/spring/boot/management/trace/App.java create mode 100644 spring-boot-management/src/main/java/com/baeldung/spring/boot/management/trace/CustomTraceRepository.java create mode 100644 spring-boot-management/src/main/java/com/baeldung/spring/boot/management/trace/EchoController.java create mode 100644 spring-boot-management/src/main/java/com/baeldung/spring/boot/management/trace/TraceRequestFilter.java create mode 100644 spring-boot-management/src/main/resources/application.properties diff --git a/spring-boot-management/pom.xml b/spring-boot-management/pom.xml new file mode 100644 index 0000000000..2b3e8f5d06 --- /dev/null +++ b/spring-boot-management/pom.xml @@ -0,0 +1,47 @@ + + + 4.0.0 + + com.baeldung + parent-boot-2 + 0.0.1-SNAPSHOT + ../parent-boot-2 + + com.baeldung + spring-boot-management + 0.0.1-SNAPSHOT + spring-boot-management + + + 1.8 + + + + + org.springframework.boot + spring-boot-starter-actuator + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + diff --git a/spring-boot-management/src/main/java/com/baeldung/spring/boot/management/trace/App.java b/spring-boot-management/src/main/java/com/baeldung/spring/boot/management/trace/App.java new file mode 100644 index 0000000000..150e451c57 --- /dev/null +++ b/spring-boot-management/src/main/java/com/baeldung/spring/boot/management/trace/App.java @@ -0,0 +1,13 @@ +package com.baeldung.spring.boot.management.trace; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class App { + + public static void main(String[] args) { + SpringApplication.run(App.class); + } + +} diff --git a/spring-boot-management/src/main/java/com/baeldung/spring/boot/management/trace/CustomTraceRepository.java b/spring-boot-management/src/main/java/com/baeldung/spring/boot/management/trace/CustomTraceRepository.java new file mode 100644 index 0000000000..13a0bdda60 --- /dev/null +++ b/spring-boot-management/src/main/java/com/baeldung/spring/boot/management/trace/CustomTraceRepository.java @@ -0,0 +1,28 @@ +package com.baeldung.spring.boot.management.trace; + +import java.util.ArrayList; +import java.util.List; + +import org.springframework.boot.actuate.trace.http.HttpTrace; +import org.springframework.boot.actuate.trace.http.HttpTraceRepository; +import org.springframework.stereotype.Repository; + +@Repository +public class CustomTraceRepository implements HttpTraceRepository { + + List traces = new ArrayList<>(1); + + @Override + public List findAll() { + return traces; + } + + @Override + public void add(HttpTrace trace) { + if ("GET".equals(trace.getRequest().getMethod())) { + traces.clear(); + traces.add(trace); + } + } + +} diff --git a/spring-boot-management/src/main/java/com/baeldung/spring/boot/management/trace/EchoController.java b/spring-boot-management/src/main/java/com/baeldung/spring/boot/management/trace/EchoController.java new file mode 100644 index 0000000000..70bc27a3bb --- /dev/null +++ b/spring-boot-management/src/main/java/com/baeldung/spring/boot/management/trace/EchoController.java @@ -0,0 +1,15 @@ +package com.baeldung.spring.boot.management.trace; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController("echo") +public class EchoController { + + @GetMapping + public String echo(@RequestParam("msg") String msg) { + return "echoing " + msg; + } + +} diff --git a/spring-boot-management/src/main/java/com/baeldung/spring/boot/management/trace/TraceRequestFilter.java b/spring-boot-management/src/main/java/com/baeldung/spring/boot/management/trace/TraceRequestFilter.java new file mode 100644 index 0000000000..fd6312df47 --- /dev/null +++ b/spring-boot-management/src/main/java/com/baeldung/spring/boot/management/trace/TraceRequestFilter.java @@ -0,0 +1,27 @@ +package com.baeldung.spring.boot.management.trace; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; + +import org.springframework.boot.actuate.trace.http.HttpExchangeTracer; +import org.springframework.boot.actuate.trace.http.HttpTraceRepository; +import org.springframework.boot.actuate.web.trace.servlet.HttpTraceFilter; +import org.springframework.stereotype.Component; + +@Component +public class TraceRequestFilter extends HttpTraceFilter { + /** + * Create a new {@link HttpTraceFilter} instance. + * + * @param repository the trace repository + * @param tracer used to trace exchanges + */ + public TraceRequestFilter(HttpTraceRepository repository, HttpExchangeTracer tracer) { + super(repository, tracer); + } + + @Override + protected boolean shouldNotFilter(HttpServletRequest request) throws ServletException { + return request.getServletPath().contains("actuator"); + } +} diff --git a/spring-boot-management/src/main/resources/application.properties b/spring-boot-management/src/main/resources/application.properties new file mode 100644 index 0000000000..b6c303afdb --- /dev/null +++ b/spring-boot-management/src/main/resources/application.properties @@ -0,0 +1,3 @@ +management.endpoints.web.exposure.include=httptrace +management.trace.http.include=REQUEST_HEADERS + From 07c159ddc19f3c3474de10d9eeb20708e6354d48 Mon Sep 17 00:00:00 2001 From: Marcos Lopez Gonzalez Date: Tue, 30 Jul 2019 19:39:46 +0200 Subject: [PATCH 08/56] added synchronization to HttpTraceRepository --- .../management/trace/CustomTraceRepository.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/spring-boot-management/src/main/java/com/baeldung/spring/boot/management/trace/CustomTraceRepository.java b/spring-boot-management/src/main/java/com/baeldung/spring/boot/management/trace/CustomTraceRepository.java index 13a0bdda60..1478fc90a3 100644 --- a/spring-boot-management/src/main/java/com/baeldung/spring/boot/management/trace/CustomTraceRepository.java +++ b/spring-boot-management/src/main/java/com/baeldung/spring/boot/management/trace/CustomTraceRepository.java @@ -1,6 +1,7 @@ package com.baeldung.spring.boot.management.trace; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import org.springframework.boot.actuate.trace.http.HttpTrace; @@ -14,14 +15,19 @@ public class CustomTraceRepository implements HttpTraceRepository { @Override public List findAll() { - return traces; + synchronized (this.traces) { + return Collections.unmodifiableList(new ArrayList<>(this.traces)); + } } @Override public void add(HttpTrace trace) { - if ("GET".equals(trace.getRequest().getMethod())) { - traces.clear(); - traces.add(trace); + if ("GET".equals(trace.getRequest() + .getMethod())) { + synchronized (this.traces) { + traces.clear(); + traces.add(trace); + } } } From 98b5a7fdb72f1a0722b0d2a5196766add53f700d Mon Sep 17 00:00:00 2001 From: Pallavi Priyadarshani <50460471+pallavi-priyadarshani@users.noreply.github.com> Date: Fri, 2 Aug 2019 16:24:59 +0530 Subject: [PATCH 09/56] BAEL-3005 | updated exception handler --- .../ConstraintViolationExceptionHandler.java | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/exception/ConstraintViolationExceptionHandler.java b/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/exception/ConstraintViolationExceptionHandler.java index 067a0e08ac..742be27f61 100644 --- a/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/exception/ConstraintViolationExceptionHandler.java +++ b/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/exception/ConstraintViolationExceptionHandler.java @@ -14,17 +14,23 @@ import org.springframework.web.bind.annotation.RestControllerAdvice; @RestControllerAdvice public class ConstraintViolationExceptionHandler { - private final Logger LOGGER = LoggerFactory.getLogger(ConstraintViolationExceptionHandler.class); + + private final Logger logger = LoggerFactory.getLogger(ConstraintViolationExceptionHandler.class); @ExceptionHandler(ConstraintViolationException.class) public ResponseEntity handle(ConstraintViolationException constraintViolationException) { Set> violations = constraintViolationException.getConstraintViolations(); - StringBuilder builder = new StringBuilder(); - for (ConstraintViolation> violation : violations) { - builder.append(violation.getMessage()); - + String errorMessage = ""; + if (!violations.isEmpty()) { + StringBuilder builder = new StringBuilder(); + violations.forEach(violation -> builder.append("\n" + violation.getMessage())); + errorMessage = builder.toString(); + } else { + errorMessage = "ConstraintViolationException occured."; } - LOGGER.error(builder.toString()); - return new ResponseEntity(builder.toString(), HttpStatus.BAD_REQUEST); + + logger.error(errorMessage); + return new ResponseEntity<>(errorMessage, HttpStatus.BAD_REQUEST); } + } From 6123255cf4f118feb83bb3d7bfb492cc206ac65c Mon Sep 17 00:00:00 2001 From: Pallavi Priyadarshani <50460471+pallavi-priyadarshani@users.noreply.github.com> Date: Fri, 2 Aug 2019 16:28:56 +0530 Subject: [PATCH 10/56] BAEL--3005 | updated Movie POJO --- .../listvalidation/model/Movie.java | 22 ++++--------------- 1 file changed, 4 insertions(+), 18 deletions(-) diff --git a/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/model/Movie.java b/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/model/Movie.java index 7ab4bfc34e..035c5f4412 100644 --- a/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/model/Movie.java +++ b/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/model/Movie.java @@ -1,13 +1,8 @@ package com.baeldung.validation.listvalidation.model; -import java.util.List; import java.util.UUID; import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; - -import com.baeldung.validation.listvalidation.constraint.CustomConstraint; import lombok.Getter; import lombok.NoArgsConstructor; @@ -20,22 +15,13 @@ public class Movie { private String id; - @CustomConstraint + @NotEmpty(message = "Movie name cannot be empty.") private String name; - - @Size(min = 2, message = "Atleast 2 genres should be provided.") - private List genres; - - @NotNull(message = "Actor list cannot be null.") - @NotEmpty(message = "Actor list cannot be empty.") - private List actors; - - public Movie(String name, List genres, List actors) { + + public Movie(String name) { this.id = UUID.randomUUID() .toString(); this.name = name; - this.genres = genres; - this.actors = actors; } - + } From de91009dfee81bb548275fae4c989bc36396ecdc Mon Sep 17 00:00:00 2001 From: Pallavi Priyadarshani <50460471+pallavi-priyadarshani@users.noreply.github.com> Date: Fri, 2 Aug 2019 16:29:22 +0530 Subject: [PATCH 11/56] Delete Actor.java --- .../listvalidation/model/Actor.java | 22 ------------------- 1 file changed, 22 deletions(-) delete mode 100644 spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/model/Actor.java diff --git a/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/model/Actor.java b/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/model/Actor.java deleted file mode 100644 index e6215f00c4..0000000000 --- a/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/model/Actor.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.baeldung.validation.listvalidation.model; - -import java.util.UUID; - -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; - -@Getter -@Setter -@NoArgsConstructor -public class Actor { - - private String id; - private String name; - - public Actor(String name) { - this.id = UUID.randomUUID() - .toString(); - this.name = name; - } -} From ff21ddbe44d97c326d0ad2173579c7bb353a75dd Mon Sep 17 00:00:00 2001 From: Pallavi Priyadarshani <50460471+pallavi-priyadarshani@users.noreply.github.com> Date: Fri, 2 Aug 2019 16:31:17 +0530 Subject: [PATCH 12/56] Delete MovieRepository.java --- .../repository/MovieRepository.java | 57 ------------------- 1 file changed, 57 deletions(-) delete mode 100644 spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/repository/MovieRepository.java diff --git a/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/repository/MovieRepository.java b/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/repository/MovieRepository.java deleted file mode 100644 index 67cfa6daca..0000000000 --- a/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/repository/MovieRepository.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.baeldung.validation.listvalidation.repository; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Repository; - -import com.baeldung.validation.listvalidation.model.Actor; -import com.baeldung.validation.listvalidation.model.Movie; - -@Repository -public class MovieRepository { - private final Logger LOGGER = LoggerFactory.getLogger(MovieRepository.class); - static List moviesData; - - static { - moviesData = new ArrayList<>(); - - Actor a1 = new Actor("Actor1"); - - Movie m1 = new Movie("MovieABC", Arrays.asList("Drama"), Arrays.asList(a1)); - moviesData.add(m1); - - Movie m2 = new Movie("MovieDEF", Arrays.asList("Drama"), Arrays.asList(a1)); - moviesData.add(m2); - - } - - public void add(Movie movie) { - if (get(movie.getName()) == null) { - moviesData.add(movie); - LOGGER.info("Added new movie."); - } - } - - public Movie get(String name) { - Movie movie = null; - for (Movie m : moviesData) { - if (name.equalsIgnoreCase(m.getName())) { - movie = m; - LOGGER.info("Found movie with name " + name + ":" + movie); - } - } - - return movie; - } - - public void addAll(List movies) { - for (Movie movie : movies) { - add(movie); - } - } - -} From 99fd6d29a23566c897f19a44b777866b45cb6057 Mon Sep 17 00:00:00 2001 From: Pallavi Priyadarshani <50460471+pallavi-priyadarshani@users.noreply.github.com> Date: Fri, 2 Aug 2019 16:37:11 +0530 Subject: [PATCH 13/56] Create MovieService.java --- .../listvalidation/service/MovieService.java | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/service/MovieService.java diff --git a/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/service/MovieService.java b/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/service/MovieService.java new file mode 100644 index 0000000000..0339df595d --- /dev/null +++ b/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/service/MovieService.java @@ -0,0 +1,55 @@ +package com.baeldung.validation.listvalidation.service; + +import java.util.ArrayList; +import java.util.List; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import com.baeldung.validation.listvalidation.model.Movie; + +@Service +public class MovieService { + + private final Logger logger = LoggerFactory.getLogger(MovieService.class); + + private static List moviesData; + + static { + moviesData = new ArrayList<>(); + + Movie m1 = new Movie("MovieABC"); + moviesData.add(m1); + + Movie m2 = new Movie("MovieDEF"); + moviesData.add(m2); + + } + + public Movie get(String name) { + Movie movie = null; + for (Movie m : moviesData) { + if (name.equalsIgnoreCase(m.getName())) { + movie = m; + logger.info("Found movie with name {} : {} ", name, movie); + } + } + + return movie; + } + + public void add(Movie movie) { + if (get(movie.getName()) == null) { + moviesData.add(movie); + logger.info("Added new movie - {}", movie.getName()); + } + } + + public void addAll(List movies) { + for (Movie movie : movies) { + add(movie); + } + } + +} From 90dc6c6d7aa90b2ae34531bf6a236554160a31b4 Mon Sep 17 00:00:00 2001 From: Pallavi Priyadarshani <50460471+pallavi-priyadarshani@users.noreply.github.com> Date: Fri, 2 Aug 2019 16:39:16 +0530 Subject: [PATCH 14/56] Update MovieController.java --- .../controller/MovieController.java | 41 ++++--------------- 1 file changed, 9 insertions(+), 32 deletions(-) diff --git a/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/controller/MovieController.java b/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/controller/MovieController.java index 6265fd50d0..b8db850809 100644 --- a/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/controller/MovieController.java +++ b/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/controller/MovieController.java @@ -3,52 +3,29 @@ package com.baeldung.validation.listvalidation.controller; import java.util.List; import javax.validation.Valid; +import javax.validation.constraints.NotEmpty; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpStatus; -import org.springframework.validation.BindingResult; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; -import org.springframework.web.server.ResponseStatusException; +import com.baeldung.validation.listvalidation.constraint.CustomConstraint; import com.baeldung.validation.listvalidation.model.Movie; -import com.baeldung.validation.listvalidation.repository.MovieRepository; +import com.baeldung.validation.listvalidation.service.MovieService; @Validated @RestController -@RequestMapping("/movie") +@RequestMapping("/movies") public class MovieController { - private final Logger LOGGER = LoggerFactory.getLogger(MovieController.class); - @Autowired - private MovieRepository movieRepository; + private MovieService movieService; - @RequestMapping(method = RequestMethod.POST) - public void add(@RequestBody @Valid Movie movie, BindingResult bindingResult) { - if (bindingResult.hasErrors()) { - StringBuilder builder = new StringBuilder(); - bindingResult.getAllErrors() - .forEach(error -> builder.append(" " + error.getDefaultMessage())); - LOGGER.error(builder.toString()); - throw new ResponseStatusException(HttpStatus.BAD_REQUEST, bindingResult.toString()); - } - movieRepository.add(movie); - } - - @RequestMapping(value = "/batch", method = RequestMethod.POST) - public void addAll(@RequestBody List<@Valid Movie> movie) { - movieRepository.addAll(movie); - } - - @RequestMapping(method = RequestMethod.GET, value = "/{name}") - public Movie get(@PathVariable String name) throws Exception { - return movieRepository.get(name); + @PostMapping + public void addAll(@RequestBody @NotEmpty(message = "Input movie list cannot be empty.") @CustomConstraint List<@Valid Movie> movie) { + movieService.addAll(movie); } } From d9abb296b74b4d8eb8c4fd80ac6e67ad4baf55a7 Mon Sep 17 00:00:00 2001 From: Pallavi Priyadarshani <50460471+pallavi-priyadarshani@users.noreply.github.com> Date: Fri, 2 Aug 2019 16:40:38 +0530 Subject: [PATCH 15/56] Update CustomConstraint.java --- .../validation/listvalidation/constraint/CustomConstraint.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/constraint/CustomConstraint.java b/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/constraint/CustomConstraint.java index 5d6e2213f1..033df5a25b 100644 --- a/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/constraint/CustomConstraint.java +++ b/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/constraint/CustomConstraint.java @@ -10,7 +10,7 @@ import javax.validation.Payload; @Retention(RetentionPolicy.RUNTIME) public @interface CustomConstraint { - String message() default "Invalid movie name."; + String message() default "Movie name should start with an alphanumeric character."; Class>[] groups() default {}; From a5f06318502750a5593578761cdbd7f3176554a3 Mon Sep 17 00:00:00 2001 From: Pallavi Priyadarshani <50460471+pallavi-priyadarshani@users.noreply.github.com> Date: Fri, 2 Aug 2019 16:42:36 +0530 Subject: [PATCH 16/56] Update CustomConstraintValidator.java --- .../constraint/CustomConstraintValidator.java | 27 ++++++++++++++----- 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/constraint/CustomConstraintValidator.java b/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/constraint/CustomConstraintValidator.java index 9f18a0c218..3e80a79afe 100644 --- a/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/constraint/CustomConstraintValidator.java +++ b/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/constraint/CustomConstraintValidator.java @@ -1,17 +1,32 @@ package com.baeldung.validation.listvalidation.constraint; +import java.util.List; +import java.util.regex.Pattern; + import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; -public class CustomConstraintValidator implements ConstraintValidator { +import com.baeldung.validation.listvalidation.model.Movie; + +public class CustomConstraintValidator implements ConstraintValidator> { @Override - public boolean isValid(String value, ConstraintValidatorContext context) { - if (value == null || value.isEmpty()) { - return false; - } else { - return true; + public boolean isValid(List values, ConstraintValidatorContext context) { + boolean isValid = true; + if (values == null || values.isEmpty()) { + isValid = false; + context.disableDefaultConstraintViolation(); + context.buildConstraintViolationWithTemplate("Movie list cannot be empty.") + .addConstraintViolation(); } + String regex = "[^A-Za-z0-9].*"; + for (Movie movie : values) { + if (Pattern.matches(regex, movie.getName())) { + isValid = false; + break; + } + } + return isValid; } } From 077f38e318d6157777d978d503db158104e283c1 Mon Sep 17 00:00:00 2001 From: Pallavi Priyadarshani <50460471+pallavi-priyadarshani@users.noreply.github.com> Date: Fri, 2 Aug 2019 16:45:16 +0530 Subject: [PATCH 17/56] Update MovieControllerIntegrationTest.java --- .../MovieControllerIntegrationTest.java | 46 +++++++++++-------- 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/spring-mvc-simple-2/src/test/java/com/baeldung/validation/listvalidation/MovieControllerIntegrationTest.java b/spring-mvc-simple-2/src/test/java/com/baeldung/validation/listvalidation/MovieControllerIntegrationTest.java index 226e609d5f..dd8685b54c 100644 --- a/spring-mvc-simple-2/src/test/java/com/baeldung/validation/listvalidation/MovieControllerIntegrationTest.java +++ b/spring-mvc-simple-2/src/test/java/com/baeldung/validation/listvalidation/MovieControllerIntegrationTest.java @@ -15,7 +15,6 @@ import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; import org.springframework.test.web.servlet.result.MockMvcResultMatchers; -import com.baeldung.validation.listvalidation.model.Actor; import com.baeldung.validation.listvalidation.model.Movie; import com.fasterxml.jackson.databind.ObjectMapper; @@ -28,38 +27,47 @@ public class MovieControllerIntegrationTest { private MockMvc mvc; ObjectMapper objectMapper = new ObjectMapper(); - + @Test - public void given1Genre_whenAddingMovie_thenThrowBadRequest() throws Exception { - Actor actor = new Actor("Actor1"); - Movie movie = new Movie("Movie1", Arrays.asList("Drama"), Arrays.asList(actor)); - mvc.perform(MockMvcRequestBuilders.post("/movie") + public void givenValidMovieList_whenAddingMovieList_thenIsOK() throws Exception { + List movies = new ArrayList<>(); + Movie movie = new Movie("Movie3"); + movies.add(movie); + mvc.perform(MockMvcRequestBuilders.post("/movies") .contentType(MediaType.APPLICATION_JSON_UTF8) - .content(objectMapper.writeValueAsString(movie))) + .content(objectMapper.writeValueAsString(movies))) + .andExpect(MockMvcResultMatchers.status() + .isOk()); + } + + @Test + public void givenEmptyMovieList_whenAddingMovieList_thenThrowBadRequest() throws Exception { + List movies = new ArrayList<>(); + mvc.perform(MockMvcRequestBuilders.post("/movies") + .contentType(MediaType.APPLICATION_JSON_UTF8) + .content(objectMapper.writeValueAsString(movies))) .andExpect(MockMvcResultMatchers.status() .isBadRequest()); } - + @Test - public void givenWithoutActor_whenAddingMovieList_thenThrowBadRequest() throws Exception { - List actors = new ArrayList<>(); - Movie movie = new Movie("Movie2", Arrays.asList("Action", "Thriller"), actors); - mvc.perform(MockMvcRequestBuilders.post("/movie/batch") + public void givenEmptyMovieName_whenAddingMovieList_thenThrowBadRequest() throws Exception { + Movie movie = new Movie(""); + mvc.perform(MockMvcRequestBuilders.post("/movies") .contentType(MediaType.APPLICATION_JSON_UTF8) .content(objectMapper.writeValueAsString(Arrays.asList(movie)))) .andExpect(MockMvcResultMatchers.status() .isBadRequest()); } - + @Test - public void givenEmptyMovieName_whenAddingMovie_thenThrowBadRequest() throws Exception { - Actor actor = new Actor("Actor1"); - Movie movie = new Movie("", Arrays.asList("Drama", "History"), Arrays.asList(actor)); - mvc.perform(MockMvcRequestBuilders.post("/movie") + public void givenInvalidMovieName_whenAddingMovieList_thenThrowBadRequest() throws Exception { + Movie movie = new Movie("$Movie2"); + mvc.perform(MockMvcRequestBuilders.post("/movies") .contentType(MediaType.APPLICATION_JSON_UTF8) - .content(objectMapper.writeValueAsString(movie))) + .content(objectMapper.writeValueAsString(Arrays.asList(movie)))) .andExpect(MockMvcResultMatchers.status() .isBadRequest()); } - + } From ebfee30bb9a841e9b58bb993fb845378927577d1 Mon Sep 17 00:00:00 2001 From: Marcos Lopez Gonzalez Date: Mon, 5 Aug 2019 22:46:01 +0200 Subject: [PATCH 18/56] improvements Spring httpTrace + added spring-boot-management to main pom --- pom.xml | 1 + .../management/trace/CustomTraceRepository.java | 13 ++++--------- .../src/main/resources/application.properties | 2 +- 3 files changed, 6 insertions(+), 10 deletions(-) diff --git a/pom.xml b/pom.xml index 5b5058763d..ed181cd919 100644 --- a/pom.xml +++ b/pom.xml @@ -652,6 +652,7 @@ spring-boot-keycloak spring-boot-kotlin spring-boot-logging-log4j2 + spring-boot-management spring-boot-mvc spring-boot-mvc-birt spring-boot-ops diff --git a/spring-boot-management/src/main/java/com/baeldung/spring/boot/management/trace/CustomTraceRepository.java b/spring-boot-management/src/main/java/com/baeldung/spring/boot/management/trace/CustomTraceRepository.java index 1478fc90a3..d85c043dc0 100644 --- a/spring-boot-management/src/main/java/com/baeldung/spring/boot/management/trace/CustomTraceRepository.java +++ b/spring-boot-management/src/main/java/com/baeldung/spring/boot/management/trace/CustomTraceRepository.java @@ -1,8 +1,8 @@ package com.baeldung.spring.boot.management.trace; -import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.concurrent.atomic.AtomicReference; import org.springframework.boot.actuate.trace.http.HttpTrace; import org.springframework.boot.actuate.trace.http.HttpTraceRepository; @@ -11,23 +11,18 @@ import org.springframework.stereotype.Repository; @Repository public class CustomTraceRepository implements HttpTraceRepository { - List traces = new ArrayList<>(1); + AtomicReference lastTrace = new AtomicReference<>(); @Override public List findAll() { - synchronized (this.traces) { - return Collections.unmodifiableList(new ArrayList<>(this.traces)); - } + return Collections.singletonList(lastTrace.get()); } @Override public void add(HttpTrace trace) { if ("GET".equals(trace.getRequest() .getMethod())) { - synchronized (this.traces) { - traces.clear(); - traces.add(trace); - } + lastTrace.set(trace); } } diff --git a/spring-boot-management/src/main/resources/application.properties b/spring-boot-management/src/main/resources/application.properties index b6c303afdb..835ca64eac 100644 --- a/spring-boot-management/src/main/resources/application.properties +++ b/spring-boot-management/src/main/resources/application.properties @@ -1,3 +1,3 @@ management.endpoints.web.exposure.include=httptrace -management.trace.http.include=REQUEST_HEADERS +management.trace.http.include=RESPONSE_HEADERS From b8a8a7f984789fd7c00628de3030c9f49b6a7c24 Mon Sep 17 00:00:00 2001 From: Marcos Lopez Gonzalez Date: Mon, 5 Aug 2019 23:47:32 +0200 Subject: [PATCH 19/56] added spring-boot-management to IT build --- pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/pom.xml b/pom.xml index ed181cd919..80181a2c32 100644 --- a/pom.xml +++ b/pom.xml @@ -1326,6 +1326,7 @@ spring-boot-jasypt spring-boot-keycloak spring-boot-logging-log4j2 + spring-boot-management spring-boot-mvc spring-boot-mvc-birt spring-boot-ops From b3af5e65b701683cd602345fe248e5541974abe7 Mon Sep 17 00:00:00 2001 From: Pallavi Priyadarshani <50460471+pallavi-priyadarshani@users.noreply.github.com> Date: Sat, 10 Aug 2019 14:58:43 +0530 Subject: [PATCH 20/56] 3005 | updated custom constraint and test case * Create MaxSizeConstraint.java * Delete CustomConstraintValidator.java * Delete CustomConstraint.java * Create MaxSizeConstraintValidator.java * Update MovieController.java * Update MovieControllerIntegrationTest.java --- ...tomConstraint.java => MaxSizeConstraint.java} | 10 +++++----- ...ator.java => MaxSizeConstraintValidator.java} | 14 ++++---------- .../controller/MovieController.java | 6 +++--- .../MovieControllerIntegrationTest.java | 16 +++++++++++++--- 4 files changed, 25 insertions(+), 21 deletions(-) rename spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/constraint/{CustomConstraint.java => MaxSizeConstraint.java} (64%) rename spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/constraint/{CustomConstraintValidator.java => MaxSizeConstraintValidator.java} (65%) diff --git a/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/constraint/CustomConstraint.java b/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/constraint/MaxSizeConstraint.java similarity index 64% rename from spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/constraint/CustomConstraint.java rename to spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/constraint/MaxSizeConstraint.java index 033df5a25b..b5adab5d86 100644 --- a/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/constraint/CustomConstraint.java +++ b/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/constraint/MaxSizeConstraint.java @@ -6,13 +6,13 @@ import java.lang.annotation.RetentionPolicy; import javax.validation.Constraint; import javax.validation.Payload; -@Constraint(validatedBy = CustomConstraintValidator.class) +@Constraint(validatedBy = MaxSizeConstraintValidator.class) @Retention(RetentionPolicy.RUNTIME) -public @interface CustomConstraint { - - String message() default "Movie name should start with an alphanumeric character."; +public @interface MaxSizeConstraint { + String message() default "The input list cannot contain more than 4 movies."; + Class>[] groups() default {}; - + Class extends Payload>[] payload() default {}; } diff --git a/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/constraint/CustomConstraintValidator.java b/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/constraint/MaxSizeConstraintValidator.java similarity index 65% rename from spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/constraint/CustomConstraintValidator.java rename to spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/constraint/MaxSizeConstraintValidator.java index 3e80a79afe..813ea3e657 100644 --- a/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/constraint/CustomConstraintValidator.java +++ b/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/constraint/MaxSizeConstraintValidator.java @@ -1,14 +1,13 @@ package com.baeldung.validation.listvalidation.constraint; import java.util.List; -import java.util.regex.Pattern; import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; import com.baeldung.validation.listvalidation.model.Movie; -public class CustomConstraintValidator implements ConstraintValidator> { +public class MaxSizeConstraintValidator implements ConstraintValidator> { @Override public boolean isValid(List values, ConstraintValidatorContext context) { @@ -18,15 +17,10 @@ public class CustomConstraintValidator implements ConstraintValidator 4) { + isValid = false; } return isValid; } - + } diff --git a/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/controller/MovieController.java b/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/controller/MovieController.java index b8db850809..45639cf303 100644 --- a/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/controller/MovieController.java +++ b/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/controller/MovieController.java @@ -12,7 +12,7 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import com.baeldung.validation.listvalidation.constraint.CustomConstraint; +import com.baeldung.validation.listvalidation.constraint.MaxSizeConstraint; import com.baeldung.validation.listvalidation.model.Movie; import com.baeldung.validation.listvalidation.service.MovieService; @@ -25,7 +25,7 @@ public class MovieController { private MovieService movieService; @PostMapping - public void addAll(@RequestBody @NotEmpty(message = "Input movie list cannot be empty.") @CustomConstraint List<@Valid Movie> movie) { - movieService.addAll(movie); + public void addAll(@RequestBody @NotEmpty(message = "Input movie list cannot be empty.") @MaxSizeConstraint List<@Valid Movie> movies) { + movieService.addAll(movies); } } diff --git a/spring-mvc-simple-2/src/test/java/com/baeldung/validation/listvalidation/MovieControllerIntegrationTest.java b/spring-mvc-simple-2/src/test/java/com/baeldung/validation/listvalidation/MovieControllerIntegrationTest.java index dd8685b54c..cddc6c6bd9 100644 --- a/spring-mvc-simple-2/src/test/java/com/baeldung/validation/listvalidation/MovieControllerIntegrationTest.java +++ b/spring-mvc-simple-2/src/test/java/com/baeldung/validation/listvalidation/MovieControllerIntegrationTest.java @@ -61,11 +61,21 @@ public class MovieControllerIntegrationTest { } @Test - public void givenInvalidMovieName_whenAddingMovieList_thenThrowBadRequest() throws Exception { - Movie movie = new Movie("$Movie2"); + public void given5MoviesInputList_whenAddingMovieList_thenThrowBadRequest() throws Exception { + Movie movie1 = new Movie("Movie1"); + Movie movie2 = new Movie("Movie2"); + Movie movie3 = new Movie("Movie3"); + Movie movie4 = new Movie("Movie4"); + Movie movie5 = new Movie("Movie5"); + List movies = new ArrayList<>(); + movies.add(movie1); + movies.add(movie2); + movies.add(movie3); + movies.add(movie4); + movies.add(movie5); mvc.perform(MockMvcRequestBuilders.post("/movies") .contentType(MediaType.APPLICATION_JSON_UTF8) - .content(objectMapper.writeValueAsString(Arrays.asList(movie)))) + .content(objectMapper.writeValueAsString(movies))) .andExpect(MockMvcResultMatchers.status() .isBadRequest()); } From 28e18be37aa125f89ff2d9aa382be66bbc276c50 Mon Sep 17 00:00:00 2001 From: Pallavi Priyadarshani <50460471+pallavi-priyadarshani@users.noreply.github.com> Date: Mon, 12 Aug 2019 03:55:13 +0530 Subject: [PATCH 21/56] Update MaxSizeConstraintValidator.java --- .../constraint/MaxSizeConstraintValidator.java | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/constraint/MaxSizeConstraintValidator.java b/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/constraint/MaxSizeConstraintValidator.java index 813ea3e657..0154fb636a 100644 --- a/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/constraint/MaxSizeConstraintValidator.java +++ b/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/constraint/MaxSizeConstraintValidator.java @@ -12,15 +12,10 @@ public class MaxSizeConstraintValidator implements ConstraintValidator values, ConstraintValidatorContext context) { boolean isValid = true; - if (values == null || values.isEmpty()) { - isValid = false; - context.disableDefaultConstraintViolation(); - context.buildConstraintViolationWithTemplate("Movie list cannot be empty.") - .addConstraintViolation(); - } else if (values.size() > 4) { + if (values.size() > 4) { isValid = false; } return isValid; } - + } From 6b1c8c29ec4aba9a764caf0743be5951eb8a2ce8 Mon Sep 17 00:00:00 2001 From: Krzysztof Majewski Date: Mon, 12 Aug 2019 12:15:45 +0200 Subject: [PATCH 22/56] BAEL-3125 --- .../logarithm/LogarithmUnitTest.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 java-math/src/test/java/com/baeldung/algorithms/logarithm/LogarithmUnitTest.java diff --git a/java-math/src/test/java/com/baeldung/algorithms/logarithm/LogarithmUnitTest.java b/java-math/src/test/java/com/baeldung/algorithms/logarithm/LogarithmUnitTest.java new file mode 100644 index 0000000000..a9a04c8d6f --- /dev/null +++ b/java-math/src/test/java/com/baeldung/algorithms/logarithm/LogarithmUnitTest.java @@ -0,0 +1,31 @@ +package com.baeldung.algorithms.logarithm; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.Test; + +public class CombinationUnitTest { + + @Test + public void givenLog10_shouldReturnValidResults() { + assertEquals(Math.log10(100), 2); + assertEquals(Math.log10(1000), 3); + } + + @Test + public void givenLog10_shouldReturnValidResults() { + assertEquals(Math.log(Math.E), 1); + assertEquals(Math.log(10), 2.30258); + } + + @Test + public void givenCustomLog_shouldReturnValidResults() { + assertEquals(customLog(2, 256), 8); + assertEquals(customLog(10, 100), 2); + } + + private static double customLog(double base, double logNumber) { + return Math.log(logNumber) / Math.log(base); + } + +} From 7d1499f5c3fa8c4d28764024a9ec4a251dc387c7 Mon Sep 17 00:00:00 2001 From: Jon Cook Date: Mon, 12 Aug 2019 13:37:48 +0200 Subject: [PATCH 23/56] BAEL-2947 - Guide to Junit 4 Rules --- testing-modules/junit-4/pom.xml | 18 ++++ .../junit-4/src/main/resources/logback.xml | 13 +++ .../com/baeldung/rules/MessageLogger.java | 34 +++++++ .../com/baeldung/rules/RuleChainUnitTest.java | 21 +++++ .../com/baeldung/rules/RulesUnitTest.java | 88 +++++++++++++++++++ .../baeldung/rules/TestMethodNameLogger.java | 32 +++++++ .../baeldung/rules/VerifierRuleUnitTest.java | 30 +++++++ testing-modules/pom.xml | 1 + 8 files changed, 237 insertions(+) create mode 100644 testing-modules/junit-4/pom.xml create mode 100644 testing-modules/junit-4/src/main/resources/logback.xml create mode 100644 testing-modules/junit-4/src/test/java/com/baeldung/rules/MessageLogger.java create mode 100644 testing-modules/junit-4/src/test/java/com/baeldung/rules/RuleChainUnitTest.java create mode 100644 testing-modules/junit-4/src/test/java/com/baeldung/rules/RulesUnitTest.java create mode 100644 testing-modules/junit-4/src/test/java/com/baeldung/rules/TestMethodNameLogger.java create mode 100644 testing-modules/junit-4/src/test/java/com/baeldung/rules/VerifierRuleUnitTest.java diff --git a/testing-modules/junit-4/pom.xml b/testing-modules/junit-4/pom.xml new file mode 100644 index 0000000000..272a9380b5 --- /dev/null +++ b/testing-modules/junit-4/pom.xml @@ -0,0 +1,18 @@ + + + 4.0.0 + junit-4 + 1.0-SNAPSHOT + junit-4 + JUnit 4 Topics + + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + ../../ + + + diff --git a/testing-modules/junit-4/src/main/resources/logback.xml b/testing-modules/junit-4/src/main/resources/logback.xml new file mode 100644 index 0000000000..7d900d8ea8 --- /dev/null +++ b/testing-modules/junit-4/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/testing-modules/junit-4/src/test/java/com/baeldung/rules/MessageLogger.java b/testing-modules/junit-4/src/test/java/com/baeldung/rules/MessageLogger.java new file mode 100644 index 0000000000..45afc067d5 --- /dev/null +++ b/testing-modules/junit-4/src/test/java/com/baeldung/rules/MessageLogger.java @@ -0,0 +1,34 @@ +package com.baeldung.rules; + +import org.junit.rules.TestRule; +import org.junit.runner.Description; +import org.junit.runners.model.Statement; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class MessageLogger implements TestRule { + + private static final Logger LOG = LoggerFactory.getLogger(MessageLogger.class); + + private String message; + + public MessageLogger(String message) { + this.message = message; + } + + @Override + public Statement apply(final Statement base, Description description) { + return new Statement() { + @Override + public void evaluate() throws Throwable { + try { + LOG.info("Starting: {}", message); + base.evaluate(); + } finally { + LOG.info("Finished: {}", message); + } + } + }; + } + +} diff --git a/testing-modules/junit-4/src/test/java/com/baeldung/rules/RuleChainUnitTest.java b/testing-modules/junit-4/src/test/java/com/baeldung/rules/RuleChainUnitTest.java new file mode 100644 index 0000000000..c66a62a3d0 --- /dev/null +++ b/testing-modules/junit-4/src/test/java/com/baeldung/rules/RuleChainUnitTest.java @@ -0,0 +1,21 @@ +package com.baeldung.rules; + +import static org.junit.Assert.assertTrue; + +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.RuleChain; + +public class RuleChainUnitTest { + + @Rule + public RuleChain chain = RuleChain.outerRule(new MessageLogger("First rule")) + .around(new MessageLogger("Second rule")) + .around(new MessageLogger("Third rule")); + + @Test + public void givenRuleChain_whenTestRuns_thenChainOrderApplied() { + assertTrue(true); + } + +} diff --git a/testing-modules/junit-4/src/test/java/com/baeldung/rules/RulesUnitTest.java b/testing-modules/junit-4/src/test/java/com/baeldung/rules/RulesUnitTest.java new file mode 100644 index 0000000000..cc1cfa376d --- /dev/null +++ b/testing-modules/junit-4/src/test/java/com/baeldung/rules/RulesUnitTest.java @@ -0,0 +1,88 @@ +package com.baeldung.rules; + +import static org.hamcrest.Matchers.containsString; +import static org.hamcrest.Matchers.isA; +import static org.hamcrest.Matchers.not; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import java.io.File; +import java.io.IOException; +import java.util.concurrent.TimeUnit; + +import org.junit.Ignore; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.DisableOnDebug; +import org.junit.rules.ErrorCollector; +import org.junit.rules.ExpectedException; +import org.junit.rules.TemporaryFolder; +import org.junit.rules.TestName; +import org.junit.rules.Timeout; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class RulesUnitTest { + + private static final Logger LOG = LoggerFactory.getLogger(RulesUnitTest.class); + + @Rule + public TemporaryFolder tmpFolder = new TemporaryFolder(); + + @Rule + public final ExpectedException thrown = ExpectedException.none(); + + @Rule + public TestName name = new TestName(); + + @Rule + public Timeout globalTimeout = Timeout.seconds(10); + + @Rule + public final ErrorCollector errorCollector = new ErrorCollector(); + + @Rule + public DisableOnDebug disableTimeout = new DisableOnDebug(Timeout.seconds(30)); + + @Rule + public TestMethodNameLogger testLogger = new TestMethodNameLogger(); + + @Test + public void givenTempFolderRule_whenNewFile_thenFileIsCreated() throws IOException { + File testFile = tmpFolder.newFile("test-file.txt"); + + assertTrue("The file should have been created: ", testFile.isFile()); + assertEquals("Temp folder and test file should match: ", tmpFolder.getRoot(), testFile.getParentFile()); + } + + @Test + public void givenIllegalArgument_whenExceptionThrown_thenMessageAndCauseMatches() { + thrown.expect(IllegalArgumentException.class); + thrown.expectCause(isA(NullPointerException.class)); + thrown.expectMessage("This is illegal"); + + throw new IllegalArgumentException("This is illegal", new NullPointerException()); + } + + @Test + public void givenAddition_whenPrintingTestName_thenTestNameIsDisplayed() { + LOG.info("Executing: {}", name.getMethodName()); + assertEquals("givenAddition_whenPrintingTestName_thenTestNameIsDisplayed", name.getMethodName()); + } + + @Ignore + @Test + public void givenLongRunningTest_whenTimout_thenTestFails() throws InterruptedException { + TimeUnit.SECONDS.sleep(20); + } + + @Ignore + @Test + public void givenMultipleErrors_whenTestRuns_thenCollectorReportsErrors() { + errorCollector.addError(new Throwable("First thing went wrong!")); + errorCollector.addError(new Throwable("Another thing went wrong!")); + + errorCollector.checkThat("Hello World", not(containsString("ERROR!"))); + } + +} diff --git a/testing-modules/junit-4/src/test/java/com/baeldung/rules/TestMethodNameLogger.java b/testing-modules/junit-4/src/test/java/com/baeldung/rules/TestMethodNameLogger.java new file mode 100644 index 0000000000..df4de56131 --- /dev/null +++ b/testing-modules/junit-4/src/test/java/com/baeldung/rules/TestMethodNameLogger.java @@ -0,0 +1,32 @@ +package com.baeldung.rules; + +import org.junit.rules.TestRule; +import org.junit.runner.Description; +import org.junit.runners.model.Statement; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class TestMethodNameLogger implements TestRule { + + private static final Logger LOG = LoggerFactory.getLogger(TestMethodNameLogger.class); + + @Override + public Statement apply(Statement base, Description description) { + logInfo("Before test", description); + try { + return new Statement() { + @Override + public void evaluate() throws Throwable { + base.evaluate(); + } + }; + } finally { + logInfo("After test", description); + } + } + + private void logInfo(String msg, Description description) { + LOG.info(msg + description.getMethodName()); + } + +} diff --git a/testing-modules/junit-4/src/test/java/com/baeldung/rules/VerifierRuleUnitTest.java b/testing-modules/junit-4/src/test/java/com/baeldung/rules/VerifierRuleUnitTest.java new file mode 100644 index 0000000000..ffc3f611c3 --- /dev/null +++ b/testing-modules/junit-4/src/test/java/com/baeldung/rules/VerifierRuleUnitTest.java @@ -0,0 +1,30 @@ +package com.baeldung.rules; + +import static org.junit.Assert.assertFalse; + +import java.util.ArrayList; +import java.util.List; + +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.Verifier; + +public class VerifierRuleUnitTest { + + private List messageLog = new ArrayList(); + + @Rule + public Verifier verifier = new Verifier() { + @Override + public void verify() { + assertFalse("Message Log is not Empty!", messageLog.isEmpty()); + } + }; + + @Test + public void givenNewMessage_whenVerified_thenMessageLogNotEmpty() { + // ... + messageLog.add("There is a new message!"); + } + +} diff --git a/testing-modules/pom.xml b/testing-modules/pom.xml index 8d40c668c0..e15fdb4a37 100644 --- a/testing-modules/pom.xml +++ b/testing-modules/pom.xml @@ -37,5 +37,6 @@ easymock junit-5-advanced xmlunit-2 + junit-4 From 16489a1de1955fa7110f96aa5fe532abaab2466d Mon Sep 17 00:00:00 2001 From: Sjmillington Date: Mon, 12 Aug 2019 17:35:47 +0100 Subject: [PATCH 24/56] library-mv-pt-2 --- libraries-data-3/README.md | 5 ++ libraries-data-3/log4j.properties | 1 + libraries-data-3/pom.xml | 55 ++++++++++++++++++ .../com/baeldung/derive4j/adt/Either.java | 0 .../baeldung/derive4j/lazy/LazyRequest.java | 0 .../derive4j/pattern/HTTPRequest.java | 0 .../derive4j/pattern/HTTPResponse.java | 0 .../baeldung/derive4j/pattern/HTTPServer.java | 0 .../main/java/com/baeldung/jmapper/User.java | 0 .../java/com/baeldung/jmapper/UserDto.java | 0 .../java/com/baeldung/jmapper/UserDto1.java | 0 .../com/baeldung/jmapper/relational/User.java | 0 .../baeldung/jmapper/relational/UserDto1.java | 0 .../baeldung/jmapper/relational/UserDto2.java | 0 .../java/com/baeldung/snakeyaml/Address.java | 0 .../java/com/baeldung/snakeyaml/Contact.java | 0 .../java/com/baeldung/snakeyaml/Customer.java | 0 .../com/baeldung/suanshu/SuanShuMath.java | 0 .../src/main/resources/user_jmapper.xml | 10 ++++ .../src/main/resources/user_jmapper1.xml | 5 ++ .../src/main/resources/user_jmapper2.xml | 21 +++++++ .../baeldung/derive4j/adt/EitherUnitTest.java | 0 .../derive4j/lazy/LazyRequestUnitTest.java | 0 .../derive4j/pattern/HTTPRequestUnitTest.java | 0 .../jmapper/JMapperIntegrationTest.java | 0 .../JMapperRelationalIntegrationTest.java | 0 .../JavaToYAMLSerializationUnitTest.java | 0 .../YAMLToJavaDeserialisationUnitTest.java | 0 .../src/test/resources/yaml/customer.yaml | 3 + .../yaml/customer_with_contact_details.yaml | 7 +++ ...omer_with_contact_details_and_address.yaml | 13 +++++ ...ustomer_with_contact_details_and_tags.yaml | 6 ++ .../resources/yaml/customer_with_type.yaml | 4 ++ .../src/test/resources/yaml/customers.yaml | 8 +++ .../java/com/baeldung/javalin/JavalinApp.java | 0 .../java/com/baeldung/javalin/User/User.java | 0 .../baeldung/javalin/User/UserController.java | 0 .../com/baeldung/javalin/User/UserDao.java | 0 .../retrofit/basic/GitHubBasicApi.java | 0 .../retrofit/basic/GitHubBasicApp.java | 0 .../retrofit/basic/GitHubBasicService.java | 0 .../baeldung/retrofit/models/Contributor.java | 0 .../baeldung/retrofit/models/Repository.java | 0 .../com/baeldung/retrofit/rx/GitHubRxApi.java | 0 .../com/baeldung/retrofit/rx/GitHubRxApp.java | 0 .../baeldung/retrofit/rx/GitHubRxService.java | 0 .../retrofitguide/GitHubServiceGenerator.java | 0 .../java/com/baeldung/retrofitguide/Main.java | 0 .../java/com/baeldung/retrofitguide/User.java | 0 .../baeldung/retrofitguide/UserService.java | 0 .../basic/GitHubBasicApiLiveTest.java | 0 .../retrofit/rx/GitHubRxLiveTest.java | 0 .../java/com/baeldung/unirest/Article.java | 0 .../baeldung/unirest/HttpClientLiveTest.java | 0 libraries/README.md | 8 --- libraries/pom.xml | 58 +++---------------- 56 files changed, 145 insertions(+), 59 deletions(-) create mode 100644 libraries-data-3/README.md create mode 100644 libraries-data-3/log4j.properties create mode 100644 libraries-data-3/pom.xml rename {libraries => libraries-data-3}/src/main/java/com/baeldung/derive4j/adt/Either.java (100%) rename {libraries => libraries-data-3}/src/main/java/com/baeldung/derive4j/lazy/LazyRequest.java (100%) rename {libraries => libraries-data-3}/src/main/java/com/baeldung/derive4j/pattern/HTTPRequest.java (100%) rename {libraries => libraries-data-3}/src/main/java/com/baeldung/derive4j/pattern/HTTPResponse.java (100%) rename {libraries => libraries-data-3}/src/main/java/com/baeldung/derive4j/pattern/HTTPServer.java (100%) rename {libraries-data => libraries-data-3}/src/main/java/com/baeldung/jmapper/User.java (100%) rename {libraries-data => libraries-data-3}/src/main/java/com/baeldung/jmapper/UserDto.java (100%) rename {libraries-data => libraries-data-3}/src/main/java/com/baeldung/jmapper/UserDto1.java (100%) rename {libraries-data => libraries-data-3}/src/main/java/com/baeldung/jmapper/relational/User.java (100%) rename {libraries-data => libraries-data-3}/src/main/java/com/baeldung/jmapper/relational/UserDto1.java (100%) rename {libraries-data => libraries-data-3}/src/main/java/com/baeldung/jmapper/relational/UserDto2.java (100%) rename {libraries => libraries-data-3}/src/main/java/com/baeldung/snakeyaml/Address.java (100%) rename {libraries => libraries-data-3}/src/main/java/com/baeldung/snakeyaml/Contact.java (100%) rename {libraries => libraries-data-3}/src/main/java/com/baeldung/snakeyaml/Customer.java (100%) rename {libraries => libraries-data-3}/src/main/java/com/baeldung/suanshu/SuanShuMath.java (100%) create mode 100644 libraries-data-3/src/main/resources/user_jmapper.xml create mode 100644 libraries-data-3/src/main/resources/user_jmapper1.xml create mode 100644 libraries-data-3/src/main/resources/user_jmapper2.xml rename {libraries => libraries-data-3}/src/test/java/com/baeldung/derive4j/adt/EitherUnitTest.java (100%) rename {libraries => libraries-data-3}/src/test/java/com/baeldung/derive4j/lazy/LazyRequestUnitTest.java (100%) rename {libraries => libraries-data-3}/src/test/java/com/baeldung/derive4j/pattern/HTTPRequestUnitTest.java (100%) rename {libraries-data => libraries-data-3}/src/test/java/com/baeldung/jmapper/JMapperIntegrationTest.java (100%) rename {libraries-data => libraries-data-3}/src/test/java/com/baeldung/jmapper/JMapperRelationalIntegrationTest.java (100%) rename {libraries => libraries-data-3}/src/test/java/com/baeldung/snakeyaml/JavaToYAMLSerializationUnitTest.java (100%) rename {libraries => libraries-data-3}/src/test/java/com/baeldung/snakeyaml/YAMLToJavaDeserialisationUnitTest.java (100%) create mode 100644 libraries-data-3/src/test/resources/yaml/customer.yaml create mode 100644 libraries-data-3/src/test/resources/yaml/customer_with_contact_details.yaml create mode 100644 libraries-data-3/src/test/resources/yaml/customer_with_contact_details_and_address.yaml create mode 100644 libraries-data-3/src/test/resources/yaml/customer_with_contact_details_and_tags.yaml create mode 100644 libraries-data-3/src/test/resources/yaml/customer_with_type.yaml create mode 100644 libraries-data-3/src/test/resources/yaml/customers.yaml rename {libraries => libraries-http}/src/main/java/com/baeldung/javalin/JavalinApp.java (100%) rename {libraries => libraries-http}/src/main/java/com/baeldung/javalin/User/User.java (100%) rename {libraries => libraries-http}/src/main/java/com/baeldung/javalin/User/UserController.java (100%) rename {libraries => libraries-http}/src/main/java/com/baeldung/javalin/User/UserDao.java (100%) rename {libraries => libraries-http}/src/main/java/com/baeldung/retrofit/basic/GitHubBasicApi.java (100%) rename {libraries => libraries-http}/src/main/java/com/baeldung/retrofit/basic/GitHubBasicApp.java (100%) rename {libraries => libraries-http}/src/main/java/com/baeldung/retrofit/basic/GitHubBasicService.java (100%) rename {libraries => libraries-http}/src/main/java/com/baeldung/retrofit/models/Contributor.java (100%) rename {libraries => libraries-http}/src/main/java/com/baeldung/retrofit/models/Repository.java (100%) rename {libraries => libraries-http}/src/main/java/com/baeldung/retrofit/rx/GitHubRxApi.java (100%) rename {libraries => libraries-http}/src/main/java/com/baeldung/retrofit/rx/GitHubRxApp.java (100%) rename {libraries => libraries-http}/src/main/java/com/baeldung/retrofit/rx/GitHubRxService.java (100%) rename {libraries => libraries-http}/src/main/java/com/baeldung/retrofitguide/GitHubServiceGenerator.java (100%) rename {libraries => libraries-http}/src/main/java/com/baeldung/retrofitguide/Main.java (100%) rename {libraries => libraries-http}/src/main/java/com/baeldung/retrofitguide/User.java (100%) rename {libraries => libraries-http}/src/main/java/com/baeldung/retrofitguide/UserService.java (100%) rename {libraries => libraries-http}/src/test/java/com/baeldung/retrofit/basic/GitHubBasicApiLiveTest.java (100%) rename {libraries => libraries-http}/src/test/java/com/baeldung/retrofit/rx/GitHubRxLiveTest.java (100%) rename {libraries => libraries-http}/src/test/java/com/baeldung/unirest/Article.java (100%) rename {libraries => libraries-http}/src/test/java/com/baeldung/unirest/HttpClientLiveTest.java (100%) diff --git a/libraries-data-3/README.md b/libraries-data-3/README.md new file mode 100644 index 0000000000..7f939e7909 --- /dev/null +++ b/libraries-data-3/README.md @@ -0,0 +1,5 @@ +### Relevant articles +- [Parsing YAML with SnakeYAML](http://www.baeldung.com/java-snake-yaml) +- [Guide to JMapper](https://www.baeldung.com/jmapper) +- [An Introduction to SuanShu](https://www.baeldung.com/suanshu) +- [Intro to Derive4J](https://www.baeldung.com/derive4j) diff --git a/libraries-data-3/log4j.properties b/libraries-data-3/log4j.properties new file mode 100644 index 0000000000..2173c5d96f --- /dev/null +++ b/libraries-data-3/log4j.properties @@ -0,0 +1 @@ +log4j.rootLogger=INFO, stdout diff --git a/libraries-data-3/pom.xml b/libraries-data-3/pom.xml new file mode 100644 index 0000000000..f55701f51c --- /dev/null +++ b/libraries-data-3/pom.xml @@ -0,0 +1,55 @@ + + + + 4.0.0 + libraries-data-3 + libraries-data-3 + + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + + + + + org.yaml + snakeyaml + ${snakeyaml.version} + + + com.googlecode.jmapper-framework + jmapper-core + ${jmapper.version} + + + com.numericalmethod + suanshu + ${suanshu.version} + + + org.derive4j + derive4j + ${derive4j.version} + + + + + + + nm-repo + Numerical Method's Maven Repository + http://repo.numericalmethod.com/maven/ + default + + + + + 1.21 + 1.6.0.1 + 4.0.0 + 1.1.0 + + \ No newline at end of file diff --git a/libraries/src/main/java/com/baeldung/derive4j/adt/Either.java b/libraries-data-3/src/main/java/com/baeldung/derive4j/adt/Either.java similarity index 100% rename from libraries/src/main/java/com/baeldung/derive4j/adt/Either.java rename to libraries-data-3/src/main/java/com/baeldung/derive4j/adt/Either.java diff --git a/libraries/src/main/java/com/baeldung/derive4j/lazy/LazyRequest.java b/libraries-data-3/src/main/java/com/baeldung/derive4j/lazy/LazyRequest.java similarity index 100% rename from libraries/src/main/java/com/baeldung/derive4j/lazy/LazyRequest.java rename to libraries-data-3/src/main/java/com/baeldung/derive4j/lazy/LazyRequest.java diff --git a/libraries/src/main/java/com/baeldung/derive4j/pattern/HTTPRequest.java b/libraries-data-3/src/main/java/com/baeldung/derive4j/pattern/HTTPRequest.java similarity index 100% rename from libraries/src/main/java/com/baeldung/derive4j/pattern/HTTPRequest.java rename to libraries-data-3/src/main/java/com/baeldung/derive4j/pattern/HTTPRequest.java diff --git a/libraries/src/main/java/com/baeldung/derive4j/pattern/HTTPResponse.java b/libraries-data-3/src/main/java/com/baeldung/derive4j/pattern/HTTPResponse.java similarity index 100% rename from libraries/src/main/java/com/baeldung/derive4j/pattern/HTTPResponse.java rename to libraries-data-3/src/main/java/com/baeldung/derive4j/pattern/HTTPResponse.java diff --git a/libraries/src/main/java/com/baeldung/derive4j/pattern/HTTPServer.java b/libraries-data-3/src/main/java/com/baeldung/derive4j/pattern/HTTPServer.java similarity index 100% rename from libraries/src/main/java/com/baeldung/derive4j/pattern/HTTPServer.java rename to libraries-data-3/src/main/java/com/baeldung/derive4j/pattern/HTTPServer.java diff --git a/libraries-data/src/main/java/com/baeldung/jmapper/User.java b/libraries-data-3/src/main/java/com/baeldung/jmapper/User.java similarity index 100% rename from libraries-data/src/main/java/com/baeldung/jmapper/User.java rename to libraries-data-3/src/main/java/com/baeldung/jmapper/User.java diff --git a/libraries-data/src/main/java/com/baeldung/jmapper/UserDto.java b/libraries-data-3/src/main/java/com/baeldung/jmapper/UserDto.java similarity index 100% rename from libraries-data/src/main/java/com/baeldung/jmapper/UserDto.java rename to libraries-data-3/src/main/java/com/baeldung/jmapper/UserDto.java diff --git a/libraries-data/src/main/java/com/baeldung/jmapper/UserDto1.java b/libraries-data-3/src/main/java/com/baeldung/jmapper/UserDto1.java similarity index 100% rename from libraries-data/src/main/java/com/baeldung/jmapper/UserDto1.java rename to libraries-data-3/src/main/java/com/baeldung/jmapper/UserDto1.java diff --git a/libraries-data/src/main/java/com/baeldung/jmapper/relational/User.java b/libraries-data-3/src/main/java/com/baeldung/jmapper/relational/User.java similarity index 100% rename from libraries-data/src/main/java/com/baeldung/jmapper/relational/User.java rename to libraries-data-3/src/main/java/com/baeldung/jmapper/relational/User.java diff --git a/libraries-data/src/main/java/com/baeldung/jmapper/relational/UserDto1.java b/libraries-data-3/src/main/java/com/baeldung/jmapper/relational/UserDto1.java similarity index 100% rename from libraries-data/src/main/java/com/baeldung/jmapper/relational/UserDto1.java rename to libraries-data-3/src/main/java/com/baeldung/jmapper/relational/UserDto1.java diff --git a/libraries-data/src/main/java/com/baeldung/jmapper/relational/UserDto2.java b/libraries-data-3/src/main/java/com/baeldung/jmapper/relational/UserDto2.java similarity index 100% rename from libraries-data/src/main/java/com/baeldung/jmapper/relational/UserDto2.java rename to libraries-data-3/src/main/java/com/baeldung/jmapper/relational/UserDto2.java diff --git a/libraries/src/main/java/com/baeldung/snakeyaml/Address.java b/libraries-data-3/src/main/java/com/baeldung/snakeyaml/Address.java similarity index 100% rename from libraries/src/main/java/com/baeldung/snakeyaml/Address.java rename to libraries-data-3/src/main/java/com/baeldung/snakeyaml/Address.java diff --git a/libraries/src/main/java/com/baeldung/snakeyaml/Contact.java b/libraries-data-3/src/main/java/com/baeldung/snakeyaml/Contact.java similarity index 100% rename from libraries/src/main/java/com/baeldung/snakeyaml/Contact.java rename to libraries-data-3/src/main/java/com/baeldung/snakeyaml/Contact.java diff --git a/libraries/src/main/java/com/baeldung/snakeyaml/Customer.java b/libraries-data-3/src/main/java/com/baeldung/snakeyaml/Customer.java similarity index 100% rename from libraries/src/main/java/com/baeldung/snakeyaml/Customer.java rename to libraries-data-3/src/main/java/com/baeldung/snakeyaml/Customer.java diff --git a/libraries/src/main/java/com/baeldung/suanshu/SuanShuMath.java b/libraries-data-3/src/main/java/com/baeldung/suanshu/SuanShuMath.java similarity index 100% rename from libraries/src/main/java/com/baeldung/suanshu/SuanShuMath.java rename to libraries-data-3/src/main/java/com/baeldung/suanshu/SuanShuMath.java diff --git a/libraries-data-3/src/main/resources/user_jmapper.xml b/libraries-data-3/src/main/resources/user_jmapper.xml new file mode 100644 index 0000000000..f007de9f0a --- /dev/null +++ b/libraries-data-3/src/main/resources/user_jmapper.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/libraries-data-3/src/main/resources/user_jmapper1.xml b/libraries-data-3/src/main/resources/user_jmapper1.xml new file mode 100644 index 0000000000..abcfd77e1c --- /dev/null +++ b/libraries-data-3/src/main/resources/user_jmapper1.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/libraries-data-3/src/main/resources/user_jmapper2.xml b/libraries-data-3/src/main/resources/user_jmapper2.xml new file mode 100644 index 0000000000..1e708e14bf --- /dev/null +++ b/libraries-data-3/src/main/resources/user_jmapper2.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/libraries/src/test/java/com/baeldung/derive4j/adt/EitherUnitTest.java b/libraries-data-3/src/test/java/com/baeldung/derive4j/adt/EitherUnitTest.java similarity index 100% rename from libraries/src/test/java/com/baeldung/derive4j/adt/EitherUnitTest.java rename to libraries-data-3/src/test/java/com/baeldung/derive4j/adt/EitherUnitTest.java diff --git a/libraries/src/test/java/com/baeldung/derive4j/lazy/LazyRequestUnitTest.java b/libraries-data-3/src/test/java/com/baeldung/derive4j/lazy/LazyRequestUnitTest.java similarity index 100% rename from libraries/src/test/java/com/baeldung/derive4j/lazy/LazyRequestUnitTest.java rename to libraries-data-3/src/test/java/com/baeldung/derive4j/lazy/LazyRequestUnitTest.java diff --git a/libraries/src/test/java/com/baeldung/derive4j/pattern/HTTPRequestUnitTest.java b/libraries-data-3/src/test/java/com/baeldung/derive4j/pattern/HTTPRequestUnitTest.java similarity index 100% rename from libraries/src/test/java/com/baeldung/derive4j/pattern/HTTPRequestUnitTest.java rename to libraries-data-3/src/test/java/com/baeldung/derive4j/pattern/HTTPRequestUnitTest.java diff --git a/libraries-data/src/test/java/com/baeldung/jmapper/JMapperIntegrationTest.java b/libraries-data-3/src/test/java/com/baeldung/jmapper/JMapperIntegrationTest.java similarity index 100% rename from libraries-data/src/test/java/com/baeldung/jmapper/JMapperIntegrationTest.java rename to libraries-data-3/src/test/java/com/baeldung/jmapper/JMapperIntegrationTest.java diff --git a/libraries-data/src/test/java/com/baeldung/jmapper/JMapperRelationalIntegrationTest.java b/libraries-data-3/src/test/java/com/baeldung/jmapper/JMapperRelationalIntegrationTest.java similarity index 100% rename from libraries-data/src/test/java/com/baeldung/jmapper/JMapperRelationalIntegrationTest.java rename to libraries-data-3/src/test/java/com/baeldung/jmapper/JMapperRelationalIntegrationTest.java diff --git a/libraries/src/test/java/com/baeldung/snakeyaml/JavaToYAMLSerializationUnitTest.java b/libraries-data-3/src/test/java/com/baeldung/snakeyaml/JavaToYAMLSerializationUnitTest.java similarity index 100% rename from libraries/src/test/java/com/baeldung/snakeyaml/JavaToYAMLSerializationUnitTest.java rename to libraries-data-3/src/test/java/com/baeldung/snakeyaml/JavaToYAMLSerializationUnitTest.java diff --git a/libraries/src/test/java/com/baeldung/snakeyaml/YAMLToJavaDeserialisationUnitTest.java b/libraries-data-3/src/test/java/com/baeldung/snakeyaml/YAMLToJavaDeserialisationUnitTest.java similarity index 100% rename from libraries/src/test/java/com/baeldung/snakeyaml/YAMLToJavaDeserialisationUnitTest.java rename to libraries-data-3/src/test/java/com/baeldung/snakeyaml/YAMLToJavaDeserialisationUnitTest.java diff --git a/libraries-data-3/src/test/resources/yaml/customer.yaml b/libraries-data-3/src/test/resources/yaml/customer.yaml new file mode 100644 index 0000000000..aa76141c7d --- /dev/null +++ b/libraries-data-3/src/test/resources/yaml/customer.yaml @@ -0,0 +1,3 @@ +firstName: "John" +lastName: "Doe" +age: 20 \ No newline at end of file diff --git a/libraries-data-3/src/test/resources/yaml/customer_with_contact_details.yaml b/libraries-data-3/src/test/resources/yaml/customer_with_contact_details.yaml new file mode 100644 index 0000000000..34563cbd21 --- /dev/null +++ b/libraries-data-3/src/test/resources/yaml/customer_with_contact_details.yaml @@ -0,0 +1,7 @@ +firstName: "John" +lastName: "Doe" +age: 31 +contactDetails: + - { type: "mobile", number: 123456789} + - { type: "landline", number: 456786868} + \ No newline at end of file diff --git a/libraries-data-3/src/test/resources/yaml/customer_with_contact_details_and_address.yaml b/libraries-data-3/src/test/resources/yaml/customer_with_contact_details_and_address.yaml new file mode 100644 index 0000000000..664afe8594 --- /dev/null +++ b/libraries-data-3/src/test/resources/yaml/customer_with_contact_details_and_address.yaml @@ -0,0 +1,13 @@ +firstName: "John" +lastName: "Doe" +age: 31 +contactDetails: + - type: "mobile" + number: 123456789 + - type: "landline" + number: 456786868 +homeAddress: + line: "Xyz, DEF Street" + city: "City Y" + state: "State Y" + zip: 345657 diff --git a/libraries-data-3/src/test/resources/yaml/customer_with_contact_details_and_tags.yaml b/libraries-data-3/src/test/resources/yaml/customer_with_contact_details_and_tags.yaml new file mode 100644 index 0000000000..145da256d9 --- /dev/null +++ b/libraries-data-3/src/test/resources/yaml/customer_with_contact_details_and_tags.yaml @@ -0,0 +1,6 @@ +firstName: "John" +lastName: "Doe" +age: 31 +contactDetails: + - !contact { type: "mobile", number: 123456789} + - !contact { type: "landline", number: 456786868} diff --git a/libraries-data-3/src/test/resources/yaml/customer_with_type.yaml b/libraries-data-3/src/test/resources/yaml/customer_with_type.yaml new file mode 100644 index 0000000000..6e13c26cea --- /dev/null +++ b/libraries-data-3/src/test/resources/yaml/customer_with_type.yaml @@ -0,0 +1,4 @@ +!!com.baeldung.snakeyaml.Customer +firstName: "John" +lastName: "Doe" +age: 20 \ No newline at end of file diff --git a/libraries-data-3/src/test/resources/yaml/customers.yaml b/libraries-data-3/src/test/resources/yaml/customers.yaml new file mode 100644 index 0000000000..23b9039c2e --- /dev/null +++ b/libraries-data-3/src/test/resources/yaml/customers.yaml @@ -0,0 +1,8 @@ +--- +firstName: "John" +lastName: "Doe" +age: 20 +--- +firstName: "Jack" +lastName: "Jones" +age: 25 \ No newline at end of file diff --git a/libraries/src/main/java/com/baeldung/javalin/JavalinApp.java b/libraries-http/src/main/java/com/baeldung/javalin/JavalinApp.java similarity index 100% rename from libraries/src/main/java/com/baeldung/javalin/JavalinApp.java rename to libraries-http/src/main/java/com/baeldung/javalin/JavalinApp.java diff --git a/libraries/src/main/java/com/baeldung/javalin/User/User.java b/libraries-http/src/main/java/com/baeldung/javalin/User/User.java similarity index 100% rename from libraries/src/main/java/com/baeldung/javalin/User/User.java rename to libraries-http/src/main/java/com/baeldung/javalin/User/User.java diff --git a/libraries/src/main/java/com/baeldung/javalin/User/UserController.java b/libraries-http/src/main/java/com/baeldung/javalin/User/UserController.java similarity index 100% rename from libraries/src/main/java/com/baeldung/javalin/User/UserController.java rename to libraries-http/src/main/java/com/baeldung/javalin/User/UserController.java diff --git a/libraries/src/main/java/com/baeldung/javalin/User/UserDao.java b/libraries-http/src/main/java/com/baeldung/javalin/User/UserDao.java similarity index 100% rename from libraries/src/main/java/com/baeldung/javalin/User/UserDao.java rename to libraries-http/src/main/java/com/baeldung/javalin/User/UserDao.java diff --git a/libraries/src/main/java/com/baeldung/retrofit/basic/GitHubBasicApi.java b/libraries-http/src/main/java/com/baeldung/retrofit/basic/GitHubBasicApi.java similarity index 100% rename from libraries/src/main/java/com/baeldung/retrofit/basic/GitHubBasicApi.java rename to libraries-http/src/main/java/com/baeldung/retrofit/basic/GitHubBasicApi.java diff --git a/libraries/src/main/java/com/baeldung/retrofit/basic/GitHubBasicApp.java b/libraries-http/src/main/java/com/baeldung/retrofit/basic/GitHubBasicApp.java similarity index 100% rename from libraries/src/main/java/com/baeldung/retrofit/basic/GitHubBasicApp.java rename to libraries-http/src/main/java/com/baeldung/retrofit/basic/GitHubBasicApp.java diff --git a/libraries/src/main/java/com/baeldung/retrofit/basic/GitHubBasicService.java b/libraries-http/src/main/java/com/baeldung/retrofit/basic/GitHubBasicService.java similarity index 100% rename from libraries/src/main/java/com/baeldung/retrofit/basic/GitHubBasicService.java rename to libraries-http/src/main/java/com/baeldung/retrofit/basic/GitHubBasicService.java diff --git a/libraries/src/main/java/com/baeldung/retrofit/models/Contributor.java b/libraries-http/src/main/java/com/baeldung/retrofit/models/Contributor.java similarity index 100% rename from libraries/src/main/java/com/baeldung/retrofit/models/Contributor.java rename to libraries-http/src/main/java/com/baeldung/retrofit/models/Contributor.java diff --git a/libraries/src/main/java/com/baeldung/retrofit/models/Repository.java b/libraries-http/src/main/java/com/baeldung/retrofit/models/Repository.java similarity index 100% rename from libraries/src/main/java/com/baeldung/retrofit/models/Repository.java rename to libraries-http/src/main/java/com/baeldung/retrofit/models/Repository.java diff --git a/libraries/src/main/java/com/baeldung/retrofit/rx/GitHubRxApi.java b/libraries-http/src/main/java/com/baeldung/retrofit/rx/GitHubRxApi.java similarity index 100% rename from libraries/src/main/java/com/baeldung/retrofit/rx/GitHubRxApi.java rename to libraries-http/src/main/java/com/baeldung/retrofit/rx/GitHubRxApi.java diff --git a/libraries/src/main/java/com/baeldung/retrofit/rx/GitHubRxApp.java b/libraries-http/src/main/java/com/baeldung/retrofit/rx/GitHubRxApp.java similarity index 100% rename from libraries/src/main/java/com/baeldung/retrofit/rx/GitHubRxApp.java rename to libraries-http/src/main/java/com/baeldung/retrofit/rx/GitHubRxApp.java diff --git a/libraries/src/main/java/com/baeldung/retrofit/rx/GitHubRxService.java b/libraries-http/src/main/java/com/baeldung/retrofit/rx/GitHubRxService.java similarity index 100% rename from libraries/src/main/java/com/baeldung/retrofit/rx/GitHubRxService.java rename to libraries-http/src/main/java/com/baeldung/retrofit/rx/GitHubRxService.java diff --git a/libraries/src/main/java/com/baeldung/retrofitguide/GitHubServiceGenerator.java b/libraries-http/src/main/java/com/baeldung/retrofitguide/GitHubServiceGenerator.java similarity index 100% rename from libraries/src/main/java/com/baeldung/retrofitguide/GitHubServiceGenerator.java rename to libraries-http/src/main/java/com/baeldung/retrofitguide/GitHubServiceGenerator.java diff --git a/libraries/src/main/java/com/baeldung/retrofitguide/Main.java b/libraries-http/src/main/java/com/baeldung/retrofitguide/Main.java similarity index 100% rename from libraries/src/main/java/com/baeldung/retrofitguide/Main.java rename to libraries-http/src/main/java/com/baeldung/retrofitguide/Main.java diff --git a/libraries/src/main/java/com/baeldung/retrofitguide/User.java b/libraries-http/src/main/java/com/baeldung/retrofitguide/User.java similarity index 100% rename from libraries/src/main/java/com/baeldung/retrofitguide/User.java rename to libraries-http/src/main/java/com/baeldung/retrofitguide/User.java diff --git a/libraries/src/main/java/com/baeldung/retrofitguide/UserService.java b/libraries-http/src/main/java/com/baeldung/retrofitguide/UserService.java similarity index 100% rename from libraries/src/main/java/com/baeldung/retrofitguide/UserService.java rename to libraries-http/src/main/java/com/baeldung/retrofitguide/UserService.java diff --git a/libraries/src/test/java/com/baeldung/retrofit/basic/GitHubBasicApiLiveTest.java b/libraries-http/src/test/java/com/baeldung/retrofit/basic/GitHubBasicApiLiveTest.java similarity index 100% rename from libraries/src/test/java/com/baeldung/retrofit/basic/GitHubBasicApiLiveTest.java rename to libraries-http/src/test/java/com/baeldung/retrofit/basic/GitHubBasicApiLiveTest.java diff --git a/libraries/src/test/java/com/baeldung/retrofit/rx/GitHubRxLiveTest.java b/libraries-http/src/test/java/com/baeldung/retrofit/rx/GitHubRxLiveTest.java similarity index 100% rename from libraries/src/test/java/com/baeldung/retrofit/rx/GitHubRxLiveTest.java rename to libraries-http/src/test/java/com/baeldung/retrofit/rx/GitHubRxLiveTest.java diff --git a/libraries/src/test/java/com/baeldung/unirest/Article.java b/libraries-http/src/test/java/com/baeldung/unirest/Article.java similarity index 100% rename from libraries/src/test/java/com/baeldung/unirest/Article.java rename to libraries-http/src/test/java/com/baeldung/unirest/Article.java diff --git a/libraries/src/test/java/com/baeldung/unirest/HttpClientLiveTest.java b/libraries-http/src/test/java/com/baeldung/unirest/HttpClientLiveTest.java similarity index 100% rename from libraries/src/test/java/com/baeldung/unirest/HttpClientLiveTest.java rename to libraries-http/src/test/java/com/baeldung/unirest/HttpClientLiveTest.java diff --git a/libraries/README.md b/libraries/README.md index 375863a5ab..f673b230ec 100644 --- a/libraries/README.md +++ b/libraries/README.md @@ -25,16 +25,13 @@ - [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) -- [Integrating Retrofit with RxJava](http://www.baeldung.com/retrofit-rxjava) - [Introduction to MBassador](http://www.baeldung.com/mbassador) -- [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 StreamEx](http://www.baeldung.com/streamex) - [Introduction to BouncyCastle with Java](http://www.baeldung.com/java-bouncy-castle) - [A Docker Guide for Java](http://www.baeldung.com/docker-java-api) - [Introduction to Akka Actors in Java](http://www.baeldung.com/akka-actors-java) -- [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) - [Introduction to jOOL](http://www.baeldung.com/jool) @@ -42,17 +39,12 @@ - [Introduction to Atlassian Fugue](http://www.baeldung.com/java-fugue) - [Publish and Receive Messages with Nats Java Client](http://www.baeldung.com/nats-java-client) - [Java Concurrency Utility with JCTools](http://www.baeldung.com/java-concurrency-jc-tools) -- [Creating REST Microservices with Javalin](http://www.baeldung.com/javalin-rest-microservices) - [Introduction to JavaPoet](http://www.baeldung.com/java-poet) - [Convert String to Date in Java](http://www.baeldung.com/java-string-to-date) - [Guide to Resilience4j](http://www.baeldung.com/resilience4j) -- [Parsing YAML with SnakeYAML](http://www.baeldung.com/java-snake-yaml) -- [Guide to JMapper](http://www.baeldung.com/jmapper) - [Exactly Once Processing in Kafka](https://www.baeldung.com/kafka-exactly-once) -- [An Introduction to SuanShu](https://www.baeldung.com/suanshu) - [Implementing a FTP-Client in Java](http://www.baeldung.com/java-ftp-client) - [Introduction to Functional Java](https://www.baeldung.com/java-functional-library) -- [Intro to Derive4J](https://www.baeldung.com/derive4j) - [A Guide to the Reflections Library](https://www.baeldung.com/reflections-library) The libraries module contains examples related to small libraries that are relatively easy to use and does not require any separate module of its own. diff --git a/libraries/pom.xml b/libraries/pom.xml index 438fe6a519..17630fd290 100644 --- a/libraries/pom.xml +++ b/libraries/pom.xml @@ -367,22 +367,7 @@ ${vavr.version} - - - com.squareup.retrofit2 - retrofit - ${retrofit.version} - - - com.squareup.retrofit2 - converter-gson - ${retrofit.version} - - - com.squareup.retrofit2 - adapter-rxjava - ${retrofit.version} - + com.squareup.okhttp3 logging-interceptor @@ -540,18 +525,9 @@ test test - - com.mashape.unirest - unirest-java - ${unirest.version} - - - - io.javalin - javalin - ${javalin.version} - + + io.atlassian.fugue @@ -608,24 +584,6 @@ test - - org.yaml - snakeyaml - ${snakeyaml.version} - - - - com.numericalmethod - suanshu - ${suanshu.version} - - - - org.derive4j - derive4j - ${derive4j.version} - true - org.mockftpserver MockFtpServer @@ -765,8 +723,7 @@ - 4.0.0 - 1.21 + 1.23.0 0.7.0 3.2.7 @@ -799,7 +756,7 @@ 0.9.0 15.2 1.5.1 - 2.3.0 + 2.10 1.5.1 1.15 @@ -810,7 +767,7 @@ v4-rev493-1.21.0 2.0.0 3.0.14 - 1.4.9 + 2.1.2 1.10.L001 0.9.4.0006L @@ -842,11 +799,10 @@ 1.0.1 1.58 1.19.4 - 1.6.0 + 4.5.1 3.3.0 3.0.2 - 1.1.0 2.7.1 3.6 0.9.11 From 23cc42b0f128e6d4eb3386e2962048c3431dc5ca Mon Sep 17 00:00:00 2001 From: Sjmillington Date: Mon, 12 Aug 2019 17:36:45 +0100 Subject: [PATCH 25/56] library move pt 2 --- libraries-data/README.md | 1 - libraries-data/pom.xml | 8 +----- libraries-http/README.md | 4 +++ libraries-http/pom.xml | 56 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 61 insertions(+), 8 deletions(-) diff --git a/libraries-data/README.md b/libraries-data/README.md index 1ad7e94a1f..92c546c258 100644 --- a/libraries-data/README.md +++ b/libraries-data/README.md @@ -9,7 +9,6 @@ - [Introduction to JCache](http://www.baeldung.com/jcache) - [A Guide to Apache Ignite](http://www.baeldung.com/apache-ignite) - [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) - [Intro to Apache Storm](https://www.baeldung.com/apache-storm) - [Guide to Ebean ORM](https://www.baeldung.com/ebean-orm) diff --git a/libraries-data/pom.xml b/libraries-data/pom.xml index 88dcceafaa..e255236480 100644 --- a/libraries-data/pom.xml +++ b/libraries-data/pom.xml @@ -141,12 +141,7 @@ hazelcast ${hazelcast.version} - - - com.googlecode.jmapper-framework - jmapper-core - ${jmapper.version} - + org.apache.crunch @@ -460,7 +455,6 @@ 5.0.2 5.0.0-release 5.0.4 - 1.6.0.1 0.15.0 2.2.0 11.22.4 diff --git a/libraries-http/README.md b/libraries-http/README.md index dd8c6a5f67..d5eaed0736 100644 --- a/libraries-http/README.md +++ b/libraries-http/README.md @@ -5,3 +5,7 @@ - [A Guide to Google-Http-Client](http://www.baeldung.com/google-http-client) - [Asynchronous HTTP with async-http-client in Java](http://www.baeldung.com/async-http-client) - [WebSockets with AsyncHttpClient](http://www.baeldung.com/async-http-client-websockets) +- [Integrating Retrofit with RxJava](http://www.baeldung.com/retrofit-rxjava) +- [Introduction to Retrofit](http://www.baeldung.com/retrofit) +- [A Guide to Unirest](http://www.baeldung.com/unirest) +- [Creating REST Microservices with Javalin](http://www.baeldung.com/javalin-rest-microservices) \ No newline at end of file diff --git a/libraries-http/pom.xml b/libraries-http/pom.xml index 6006a93aef..44280d848c 100644 --- a/libraries-http/pom.xml +++ b/libraries-http/pom.xml @@ -44,6 +44,23 @@ ${googleclient.version} + + + com.squareup.retrofit2 + retrofit + ${retrofit.version} + + + com.squareup.retrofit2 + converter-gson + ${retrofit.version} + + + com.squareup.retrofit2 + adapter-rxjava + ${retrofit.version} + + org.asynchttpclient @@ -69,13 +86,52 @@ ${com.squareup.okhttp3.version} test + + + com.mashape.unirest + unirest-java + ${unirest.version} + + + + io.javalin + javalin + ${javalin.version} + + + com.squareup.okhttp3 + logging-interceptor + ${logging-interceptor.version} + + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + + + org.apache.httpcomponents + httpclient + ${httpclient.version} + + + commons-logging + commons-logging + + + + 4.5.3 + 2.9.8 3.6.2 3.14.2 1.23.0 2.2.0 + 2.3.0 + 1.4.9 + 1.6.0 + 3.9.0 From 13f818cccf7af5da421e4072b6dc9e690b06d620 Mon Sep 17 00:00:00 2001 From: Sjmillington Date: Tue, 13 Aug 2019 16:47:26 +0100 Subject: [PATCH 26/56] [BAEL-16005] moved articles from libraries to libraries-security and libraries testing. Renamed TinkUnitTest to TinkLiveTest failing due InvalidKeyException --- libraries-security/pom.xml | 24 +- .../bouncycastle/BouncyCastleCrypto.java | 210 +++++++++--------- .../src/main/resources/Baeldung.cer | 20 ++ .../bouncycastle/BouncyCastleLiveTest.java | 100 ++++----- .../com/baeldung/jasypt/JasyptUnitTest.java | 0 .../{TinkUnitTest.java => TinkLiveTest.java} | 4 +- libraries-testing/README.md | 8 + libraries-testing/log4j.properties | 5 + libraries-testing/pom.xml | 170 ++++++++++++++ libraries-testing/serenity.properties | 4 + .../com/baeldung/awaitility/AsyncService.java | 0 .../baeldung/serenity/github/GitHubUser.java | 0 .../serenity/membership/Commodity.java | 0 .../baeldung/serenity/membership/Member.java | 0 .../serenity/membership/MemberGrade.java | 0 .../serenity/spring/AdderController.java | 0 .../serenity/spring/AdderService.java | 0 .../serenity/spring/PlainAdderController.java | 0 .../AsyncServiceLongRunningManualTest.java | 0 .../hoverfly/HoverflyApiLiveTest.java | 0 .../jsonassert/JsonAssertUnitTest.java | 0 ...thubUserProfilePayloadIntegrationTest.java | 0 .../serenity/GoogleSearchLiveTest.java | 0 .../GoogleSearchPageObjectLiveTest.java | 0 .../GoogleSearchScreenplayLiveTest.java | 0 .../serenity/MemberStatusIntegrationTest.java | 0 .../github/GithubRestAssuredUserAPISteps.java | 0 .../github/GithubRestUserAPISteps.java | 0 ...thubUserProfilePayloadStepDefinitions.java | 0 .../membership/MemberStatusSteps.java | 0 .../pageobjects/GoogleSearchPageObject.java | 0 .../serenity/screenplay/GoogleSearchPage.java | 0 .../screenplay/GoogleSearchResults.java | 0 .../serenity/screenplay/SearchForKeyword.java | 0 .../serenity/screenplay/StartWith.java | 0 ...derClassDirtiesContextIntegrationTest.java | 0 .../serenity/spring/AdderIntegrationTest.java | 0 ...xtDependencyWorkaroundIntegrationTest.java | 0 ...sContextInitWorkaroundIntegrationTest.java | 0 ...erMethodDirtiesContextIntegrationTest.java | 0 .../AdderMethodRuleIntegrationTest.java | 0 .../spring/AdderMockMvcIntegrationTest.java | 0 .../spring/AdderServiceIntegrationTest.java | 0 ...erSpringSerenityRunnerIntegrationTest.java | 0 .../serenity/spring/RandomNumberUtil.java | 0 .../AdderConstructorDependencySteps.java | 0 .../serenity/spring/steps/AdderRestSteps.java | 0 .../spring/steps/AdderServiceSteps.java | 0 .../serenity/spring/steps/AdderSteps.java | 0 .../serenity/spring/stories/AdderStory.java | 0 .../src/test/resources/adder-beans.xml | 0 libraries/README.md | 7 - libraries/pom.xml | 41 +--- 53 files changed, 400 insertions(+), 193 deletions(-) rename {libraries => libraries-security}/src/main/java/com/baeldung/bouncycastle/BouncyCastleCrypto.java (98%) create mode 100644 libraries-security/src/main/resources/Baeldung.cer rename {libraries => libraries-security}/src/test/java/com/baeldung/bouncycastle/BouncyCastleLiveTest.java (97%) rename {libraries => libraries-security}/src/test/java/com/baeldung/jasypt/JasyptUnitTest.java (100%) rename libraries-security/src/test/java/com/baeldung/tink/{TinkUnitTest.java => TinkLiveTest.java} (96%) create mode 100644 libraries-testing/README.md create mode 100644 libraries-testing/log4j.properties create mode 100644 libraries-testing/pom.xml create mode 100644 libraries-testing/serenity.properties rename {libraries => libraries-testing}/src/main/java/com/baeldung/awaitility/AsyncService.java (100%) rename {libraries => libraries-testing}/src/main/java/com/baeldung/serenity/github/GitHubUser.java (100%) rename {libraries => libraries-testing}/src/main/java/com/baeldung/serenity/membership/Commodity.java (100%) rename {libraries => libraries-testing}/src/main/java/com/baeldung/serenity/membership/Member.java (100%) rename {libraries => libraries-testing}/src/main/java/com/baeldung/serenity/membership/MemberGrade.java (100%) rename {libraries => libraries-testing}/src/main/java/com/baeldung/serenity/spring/AdderController.java (100%) rename {libraries => libraries-testing}/src/main/java/com/baeldung/serenity/spring/AdderService.java (100%) rename {libraries => libraries-testing}/src/main/java/com/baeldung/serenity/spring/PlainAdderController.java (100%) rename {libraries => libraries-testing}/src/test/java/com/baeldung/awaitility/AsyncServiceLongRunningManualTest.java (100%) rename {libraries => libraries-testing}/src/test/java/com/baeldung/hoverfly/HoverflyApiLiveTest.java (100%) rename {libraries => libraries-testing}/src/test/java/com/baeldung/jsonassert/JsonAssertUnitTest.java (100%) rename {libraries => libraries-testing}/src/test/java/com/baeldung/serenity/GithubUserProfilePayloadIntegrationTest.java (100%) rename {libraries => libraries-testing}/src/test/java/com/baeldung/serenity/GoogleSearchLiveTest.java (100%) rename {libraries => libraries-testing}/src/test/java/com/baeldung/serenity/GoogleSearchPageObjectLiveTest.java (100%) rename {libraries => libraries-testing}/src/test/java/com/baeldung/serenity/GoogleSearchScreenplayLiveTest.java (100%) rename {libraries => libraries-testing}/src/test/java/com/baeldung/serenity/MemberStatusIntegrationTest.java (100%) rename {libraries => libraries-testing}/src/test/java/com/baeldung/serenity/github/GithubRestAssuredUserAPISteps.java (100%) rename {libraries => libraries-testing}/src/test/java/com/baeldung/serenity/github/GithubRestUserAPISteps.java (100%) rename {libraries => libraries-testing}/src/test/java/com/baeldung/serenity/github/GithubUserProfilePayloadStepDefinitions.java (100%) rename {libraries => libraries-testing}/src/test/java/com/baeldung/serenity/membership/MemberStatusSteps.java (100%) rename {libraries => libraries-testing}/src/test/java/com/baeldung/serenity/pageobjects/GoogleSearchPageObject.java (100%) rename {libraries => libraries-testing}/src/test/java/com/baeldung/serenity/screenplay/GoogleSearchPage.java (100%) rename {libraries => libraries-testing}/src/test/java/com/baeldung/serenity/screenplay/GoogleSearchResults.java (100%) rename {libraries => libraries-testing}/src/test/java/com/baeldung/serenity/screenplay/SearchForKeyword.java (100%) rename {libraries => libraries-testing}/src/test/java/com/baeldung/serenity/screenplay/StartWith.java (100%) rename {libraries => libraries-testing}/src/test/java/com/baeldung/serenity/spring/AdderClassDirtiesContextIntegrationTest.java (100%) rename {libraries => libraries-testing}/src/test/java/com/baeldung/serenity/spring/AdderIntegrationTest.java (100%) rename {libraries => libraries-testing}/src/test/java/com/baeldung/serenity/spring/AdderMethodDirtiesContextDependencyWorkaroundIntegrationTest.java (100%) rename {libraries => libraries-testing}/src/test/java/com/baeldung/serenity/spring/AdderMethodDirtiesContextInitWorkaroundIntegrationTest.java (100%) rename {libraries => libraries-testing}/src/test/java/com/baeldung/serenity/spring/AdderMethodDirtiesContextIntegrationTest.java (100%) rename {libraries => libraries-testing}/src/test/java/com/baeldung/serenity/spring/AdderMethodRuleIntegrationTest.java (100%) rename {libraries => libraries-testing}/src/test/java/com/baeldung/serenity/spring/AdderMockMvcIntegrationTest.java (100%) rename {libraries => libraries-testing}/src/test/java/com/baeldung/serenity/spring/AdderServiceIntegrationTest.java (100%) rename {libraries => libraries-testing}/src/test/java/com/baeldung/serenity/spring/AdderSpringSerenityRunnerIntegrationTest.java (100%) rename {libraries => libraries-testing}/src/test/java/com/baeldung/serenity/spring/RandomNumberUtil.java (100%) rename {libraries => libraries-testing}/src/test/java/com/baeldung/serenity/spring/steps/AdderConstructorDependencySteps.java (100%) rename {libraries => libraries-testing}/src/test/java/com/baeldung/serenity/spring/steps/AdderRestSteps.java (100%) rename {libraries => libraries-testing}/src/test/java/com/baeldung/serenity/spring/steps/AdderServiceSteps.java (100%) rename {libraries => libraries-testing}/src/test/java/com/baeldung/serenity/spring/steps/AdderSteps.java (100%) rename {libraries => libraries-testing}/src/test/java/com/baeldung/serenity/spring/stories/AdderStory.java (100%) rename {libraries => libraries-testing}/src/test/resources/adder-beans.xml (100%) diff --git a/libraries-security/pom.xml b/libraries-security/pom.xml index 17d57fe203..eb16575be8 100644 --- a/libraries-security/pom.xml +++ b/libraries-security/pom.xml @@ -25,6 +25,11 @@ spring-security-oauth2 ${spring-security-oauth2.version} + + org.springframework + spring-web + ${spring.version} + com.github.scribejava @@ -37,7 +42,16 @@ tink ${tink.version} - + + org.bouncycastle + bcprov-jdk15on + ${bouncycastle.version} + + + org.bouncycastle + bcpkix-jdk15on + ${bouncycastle.version} + junit junit @@ -54,6 +68,11 @@ cryptacular ${cryptacular.version} + + org.jasypt + jasypt + ${jasypt.version} + @@ -63,5 +82,8 @@ 1.3.1 1.2.2 1.2.2 + 1.9.2 + 1.58 + 4.3.8.RELEASE diff --git a/libraries/src/main/java/com/baeldung/bouncycastle/BouncyCastleCrypto.java b/libraries-security/src/main/java/com/baeldung/bouncycastle/BouncyCastleCrypto.java similarity index 98% rename from libraries/src/main/java/com/baeldung/bouncycastle/BouncyCastleCrypto.java rename to libraries-security/src/main/java/com/baeldung/bouncycastle/BouncyCastleCrypto.java index d7040407db..e351552c78 100644 --- a/libraries/src/main/java/com/baeldung/bouncycastle/BouncyCastleCrypto.java +++ b/libraries-security/src/main/java/com/baeldung/bouncycastle/BouncyCastleCrypto.java @@ -1,105 +1,105 @@ -package com.baeldung.bouncycastle; - -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.security.PrivateKey; -import java.security.cert.CertificateEncodingException; -import java.security.cert.CertificateException; -import java.security.cert.X509Certificate; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Iterator; -import java.util.List; - -import org.bouncycastle.asn1.ASN1InputStream; -import org.bouncycastle.asn1.cms.ContentInfo; -import org.bouncycastle.cert.X509CertificateHolder; -import org.bouncycastle.cert.jcajce.JcaCertStore; -import org.bouncycastle.cms.CMSAlgorithm; -import org.bouncycastle.cms.CMSEnvelopedData; -import org.bouncycastle.cms.CMSEnvelopedDataGenerator; -import org.bouncycastle.cms.CMSException; -import org.bouncycastle.cms.CMSProcessableByteArray; -import org.bouncycastle.cms.CMSSignedData; -import org.bouncycastle.cms.CMSSignedDataGenerator; -import org.bouncycastle.cms.CMSTypedData; -import org.bouncycastle.cms.KeyTransRecipientInformation; -import org.bouncycastle.cms.RecipientInformation; -import org.bouncycastle.cms.SignerInformation; -import org.bouncycastle.cms.SignerInformationStore; -import org.bouncycastle.cms.jcajce.JcaSignerInfoGeneratorBuilder; -import org.bouncycastle.cms.jcajce.JcaSimpleSignerInfoVerifierBuilder; -import org.bouncycastle.cms.jcajce.JceCMSContentEncryptorBuilder; -import org.bouncycastle.cms.jcajce.JceKeyTransEnvelopedRecipient; -import org.bouncycastle.cms.jcajce.JceKeyTransRecipient; -import org.bouncycastle.cms.jcajce.JceKeyTransRecipientInfoGenerator; -import org.bouncycastle.operator.ContentSigner; -import org.bouncycastle.operator.OperatorCreationException; -import org.bouncycastle.operator.OutputEncryptor; -import org.bouncycastle.operator.jcajce.JcaContentSignerBuilder; -import org.bouncycastle.operator.jcajce.JcaDigestCalculatorProviderBuilder; -import org.bouncycastle.util.Store; - -public class BouncyCastleCrypto { - - public static byte[] signData(byte[] data, final X509Certificate signingCertificate, final PrivateKey signingKey) throws CertificateEncodingException, OperatorCreationException, CMSException, IOException { - byte[] signedMessage = null; - List certList = new ArrayList(); - CMSTypedData cmsData = new CMSProcessableByteArray(data); - certList.add(signingCertificate); - Store certs = new JcaCertStore(certList); - CMSSignedDataGenerator cmsGenerator = new CMSSignedDataGenerator(); - ContentSigner contentSigner = new JcaContentSignerBuilder("SHA256withRSA").build(signingKey); - cmsGenerator.addSignerInfoGenerator(new JcaSignerInfoGeneratorBuilder(new JcaDigestCalculatorProviderBuilder().setProvider("BC").build()).build(contentSigner, signingCertificate)); - cmsGenerator.addCertificates(certs); - CMSSignedData cms = cmsGenerator.generate(cmsData, true); - signedMessage = cms.getEncoded(); - return signedMessage; - } - - public static boolean verifSignData(final byte[] signedData) throws CMSException, IOException, OperatorCreationException, CertificateException { - ByteArrayInputStream bIn = new ByteArrayInputStream(signedData); - ASN1InputStream aIn = new ASN1InputStream(bIn); - CMSSignedData s = new CMSSignedData(ContentInfo.getInstance(aIn.readObject())); - aIn.close(); - bIn.close(); - Store certs = s.getCertificates(); - SignerInformationStore signers = s.getSignerInfos(); - Collection c = signers.getSigners(); - SignerInformation signer = c.iterator().next(); - Collection certCollection = certs.getMatches(signer.getSID()); - Iterator certIt = certCollection.iterator(); - X509CertificateHolder certHolder = certIt.next(); - boolean verifResult = signer.verify(new JcaSimpleSignerInfoVerifierBuilder().build(certHolder)); - if (!verifResult) { - return false; - } - return true; - } - - public static byte[] encryptData(final byte[] data, X509Certificate encryptionCertificate) throws CertificateEncodingException, CMSException, IOException { - byte[] encryptedData = null; - if (null != data && null != encryptionCertificate) { - CMSEnvelopedDataGenerator cmsEnvelopedDataGenerator = new CMSEnvelopedDataGenerator(); - JceKeyTransRecipientInfoGenerator jceKey = new JceKeyTransRecipientInfoGenerator(encryptionCertificate); - cmsEnvelopedDataGenerator.addRecipientInfoGenerator(jceKey); - CMSTypedData msg = new CMSProcessableByteArray(data); - OutputEncryptor encryptor = new JceCMSContentEncryptorBuilder(CMSAlgorithm.AES128_CBC).setProvider("BC").build(); - CMSEnvelopedData cmsEnvelopedData = cmsEnvelopedDataGenerator.generate(msg, encryptor); - encryptedData = cmsEnvelopedData.getEncoded(); - } - return encryptedData; - } - - public static byte[] decryptData(final byte[] encryptedData, final PrivateKey decryptionKey) throws CMSException { - byte[] decryptedData = null; - if (null != encryptedData && null != decryptionKey) { - CMSEnvelopedData envelopedData = new CMSEnvelopedData(encryptedData); - Collection recip = envelopedData.getRecipientInfos().getRecipients(); - KeyTransRecipientInformation recipientInfo = (KeyTransRecipientInformation) recip.iterator().next(); - JceKeyTransRecipient recipient = new JceKeyTransEnvelopedRecipient(decryptionKey); - decryptedData = recipientInfo.getContent(recipient); - } - return decryptedData; - } -} +package com.baeldung.bouncycastle; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.security.PrivateKey; +import java.security.cert.CertificateEncodingException; +import java.security.cert.CertificateException; +import java.security.cert.X509Certificate; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; + +import org.bouncycastle.asn1.ASN1InputStream; +import org.bouncycastle.asn1.cms.ContentInfo; +import org.bouncycastle.cert.X509CertificateHolder; +import org.bouncycastle.cert.jcajce.JcaCertStore; +import org.bouncycastle.cms.CMSAlgorithm; +import org.bouncycastle.cms.CMSEnvelopedData; +import org.bouncycastle.cms.CMSEnvelopedDataGenerator; +import org.bouncycastle.cms.CMSException; +import org.bouncycastle.cms.CMSProcessableByteArray; +import org.bouncycastle.cms.CMSSignedData; +import org.bouncycastle.cms.CMSSignedDataGenerator; +import org.bouncycastle.cms.CMSTypedData; +import org.bouncycastle.cms.KeyTransRecipientInformation; +import org.bouncycastle.cms.RecipientInformation; +import org.bouncycastle.cms.SignerInformation; +import org.bouncycastle.cms.SignerInformationStore; +import org.bouncycastle.cms.jcajce.JcaSignerInfoGeneratorBuilder; +import org.bouncycastle.cms.jcajce.JcaSimpleSignerInfoVerifierBuilder; +import org.bouncycastle.cms.jcajce.JceCMSContentEncryptorBuilder; +import org.bouncycastle.cms.jcajce.JceKeyTransEnvelopedRecipient; +import org.bouncycastle.cms.jcajce.JceKeyTransRecipient; +import org.bouncycastle.cms.jcajce.JceKeyTransRecipientInfoGenerator; +import org.bouncycastle.operator.ContentSigner; +import org.bouncycastle.operator.OperatorCreationException; +import org.bouncycastle.operator.OutputEncryptor; +import org.bouncycastle.operator.jcajce.JcaContentSignerBuilder; +import org.bouncycastle.operator.jcajce.JcaDigestCalculatorProviderBuilder; +import org.bouncycastle.util.Store; + +public class BouncyCastleCrypto { + + public static byte[] signData(byte[] data, final X509Certificate signingCertificate, final PrivateKey signingKey) throws CertificateEncodingException, OperatorCreationException, CMSException, IOException { + byte[] signedMessage = null; + List certList = new ArrayList(); + CMSTypedData cmsData = new CMSProcessableByteArray(data); + certList.add(signingCertificate); + Store certs = new JcaCertStore(certList); + CMSSignedDataGenerator cmsGenerator = new CMSSignedDataGenerator(); + ContentSigner contentSigner = new JcaContentSignerBuilder("SHA256withRSA").build(signingKey); + cmsGenerator.addSignerInfoGenerator(new JcaSignerInfoGeneratorBuilder(new JcaDigestCalculatorProviderBuilder().setProvider("BC").build()).build(contentSigner, signingCertificate)); + cmsGenerator.addCertificates(certs); + CMSSignedData cms = cmsGenerator.generate(cmsData, true); + signedMessage = cms.getEncoded(); + return signedMessage; + } + + public static boolean verifSignData(final byte[] signedData) throws CMSException, IOException, OperatorCreationException, CertificateException { + ByteArrayInputStream bIn = new ByteArrayInputStream(signedData); + ASN1InputStream aIn = new ASN1InputStream(bIn); + CMSSignedData s = new CMSSignedData(ContentInfo.getInstance(aIn.readObject())); + aIn.close(); + bIn.close(); + Store certs = s.getCertificates(); + SignerInformationStore signers = s.getSignerInfos(); + Collection c = signers.getSigners(); + SignerInformation signer = c.iterator().next(); + Collection certCollection = certs.getMatches(signer.getSID()); + Iterator certIt = certCollection.iterator(); + X509CertificateHolder certHolder = certIt.next(); + boolean verifResult = signer.verify(new JcaSimpleSignerInfoVerifierBuilder().build(certHolder)); + if (!verifResult) { + return false; + } + return true; + } + + public static byte[] encryptData(final byte[] data, X509Certificate encryptionCertificate) throws CertificateEncodingException, CMSException, IOException { + byte[] encryptedData = null; + if (null != data && null != encryptionCertificate) { + CMSEnvelopedDataGenerator cmsEnvelopedDataGenerator = new CMSEnvelopedDataGenerator(); + JceKeyTransRecipientInfoGenerator jceKey = new JceKeyTransRecipientInfoGenerator(encryptionCertificate); + cmsEnvelopedDataGenerator.addRecipientInfoGenerator(jceKey); + CMSTypedData msg = new CMSProcessableByteArray(data); + OutputEncryptor encryptor = new JceCMSContentEncryptorBuilder(CMSAlgorithm.AES128_CBC).setProvider("BC").build(); + CMSEnvelopedData cmsEnvelopedData = cmsEnvelopedDataGenerator.generate(msg, encryptor); + encryptedData = cmsEnvelopedData.getEncoded(); + } + return encryptedData; + } + + public static byte[] decryptData(final byte[] encryptedData, final PrivateKey decryptionKey) throws CMSException { + byte[] decryptedData = null; + if (null != encryptedData && null != decryptionKey) { + CMSEnvelopedData envelopedData = new CMSEnvelopedData(encryptedData); + Collection recip = envelopedData.getRecipientInfos().getRecipients(); + KeyTransRecipientInformation recipientInfo = (KeyTransRecipientInformation) recip.iterator().next(); + JceKeyTransRecipient recipient = new JceKeyTransEnvelopedRecipient(decryptionKey); + decryptedData = recipientInfo.getContent(recipient); + } + return decryptedData; + } +} diff --git a/libraries-security/src/main/resources/Baeldung.cer b/libraries-security/src/main/resources/Baeldung.cer new file mode 100644 index 0000000000..72d0918424 --- /dev/null +++ b/libraries-security/src/main/resources/Baeldung.cer @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDPjCCAiagAwIBAgIJAPvd1gx14C3CMA0GCSqGSIb3DQEBBQUAMEcxCzAJBgNV +BAYTAk1BMRAwDgYDVQQIEwdNb3JvY2NvMRMwEQYDVQQHEwpDYXNhYmxhbmNhMREw +DwYDVQQDEwhCYWVsZHVuZzAeFw0xNzEwMTIxMDQzMTRaFw0yNzEwMTMxMDQzMTRa +MEcxCzAJBgNVBAYTAk1BMRAwDgYDVQQIEwdNb3JvY2NvMRMwEQYDVQQHEwpDYXNh +YmxhbmNhMREwDwYDVQQDEwhCYWVsZHVuZzCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBAMyi5GmOeN4QaH/CP5gSOyHX8znb5TDHWV8wc+ZT7kNU8zt5tGMh +jozK6hax155/6tOsBDR0rSYBhL+Dm/+uCVS7qOlRHhf6cNGtzGF1gnNJB2WjI8oM +AYm24xpLj1WphKUwKrn3nTMPnQup5OoNAMYl99flANrRYVjjxrLQvDZDUio6Iujr +CZ2TtXGM0g/gP++28KT7g1KlUui3xtB0u33wx7UN8Fix3JmjOaPHGwxGpwP3VGSj +fs8cuhqVwRQaZpCOoHU/P8wpXKw80sSdhz+SRueMPtVYqK0CiLL5/O0h0Y3le4IV +whgg3KG1iTGOWn60UMFn1EYmQ18k5Nsma6UCAwEAAaMtMCswCQYDVR0TBAIwADAR +BglghkgBhvhCAQEEBAMCBPAwCwYDVR0PBAQDAgUgMA0GCSqGSIb3DQEBBQUAA4IB +AQC8DDBmJ3p4xytxBiE0s4p1715WT6Dm/QJHp0XC0hkSoyZKDh+XVmrzm+J3SiW1 +vpswb5hLgPo040YX9jnDmgOD+TpleTuKHxZRYj92UYWmdjkWLVtFMcvOh+gxBiAP +pHIqZsqo8lfcyAuh8Jx834IXbknfCUtERDLG/rU9P/3XJhrM2GC5qPQznrW4EYhU +CGPyIJXmvATMVvXMWCtfogAL+n42vjYXQXZoAWomHhLHoNbSJUErnNdWDOh4WoJt +XJCxA6U5LSBplqb3wB2hUTqw+0admKltvmy+KA1PD7OxoGiY7V544zeGqJam1qxU +ia7y5BL6uOa/4ShSV8pcJDYz +-----END CERTIFICATE----- diff --git a/libraries/src/test/java/com/baeldung/bouncycastle/BouncyCastleLiveTest.java b/libraries-security/src/test/java/com/baeldung/bouncycastle/BouncyCastleLiveTest.java similarity index 97% rename from libraries/src/test/java/com/baeldung/bouncycastle/BouncyCastleLiveTest.java rename to libraries-security/src/test/java/com/baeldung/bouncycastle/BouncyCastleLiveTest.java index 009119d97a..37e8e5f6ba 100644 --- a/libraries/src/test/java/com/baeldung/bouncycastle/BouncyCastleLiveTest.java +++ b/libraries-security/src/test/java/com/baeldung/bouncycastle/BouncyCastleLiveTest.java @@ -1,50 +1,50 @@ -package com.baeldung.bouncycastle; - -import static org.junit.Assert.assertTrue; - -import java.io.FileInputStream; -import java.io.IOException; -import java.security.KeyStore; -import java.security.KeyStoreException; -import java.security.NoSuchAlgorithmException; -import java.security.NoSuchProviderException; -import java.security.PrivateKey; -import java.security.Security; -import java.security.UnrecoverableKeyException; -import java.security.cert.CertificateException; -import java.security.cert.CertificateFactory; -import java.security.cert.X509Certificate; - -import org.bouncycastle.cms.CMSException; -import org.bouncycastle.jce.provider.BouncyCastleProvider; -import org.bouncycastle.operator.OperatorCreationException; -import org.junit.Test; - -public class BouncyCastleLiveTest { - - String certificatePath = "src/main/resources/Baeldung.cer"; - String privateKeyPath = "src/main/resources/Baeldung.p12"; - char[] p12Password = "password".toCharArray(); - char[] keyPassword = "password".toCharArray(); - - @Test - public void givenCryptographicResource_whenOperationSuccess_returnTrue() throws CertificateException, NoSuchProviderException, NoSuchAlgorithmException, IOException, KeyStoreException, UnrecoverableKeyException, CMSException, OperatorCreationException { - Security.addProvider(new BouncyCastleProvider()); - - CertificateFactory certFactory = CertificateFactory.getInstance("X.509", "BC"); - X509Certificate certificate = (X509Certificate) certFactory.generateCertificate(new FileInputStream(certificatePath)); - KeyStore keystore = KeyStore.getInstance("PKCS12"); - keystore.load(new FileInputStream(privateKeyPath), p12Password); - PrivateKey privateKey = (PrivateKey) keystore.getKey("baeldung", keyPassword); - String secretMessage = "My password is 123456Seven"; - System.out.println("Original Message : " + secretMessage); - byte[] stringToEncrypt = secretMessage.getBytes(); - byte[] encryptedData = BouncyCastleCrypto.encryptData(stringToEncrypt, certificate); - byte[] rawData = BouncyCastleCrypto.decryptData(encryptedData, privateKey); - String decryptedMessage = new String(rawData); - assertTrue(decryptedMessage.equals(secretMessage)); - byte[] signedData = BouncyCastleCrypto.signData(rawData, certificate, privateKey); - Boolean check = BouncyCastleCrypto.verifSignData(signedData); - assertTrue(check); - } -} +package com.baeldung.bouncycastle; + +import static org.junit.Assert.assertTrue; + +import java.io.FileInputStream; +import java.io.IOException; +import java.security.KeyStore; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; +import java.security.NoSuchProviderException; +import java.security.PrivateKey; +import java.security.Security; +import java.security.UnrecoverableKeyException; +import java.security.cert.CertificateException; +import java.security.cert.CertificateFactory; +import java.security.cert.X509Certificate; + +import org.bouncycastle.cms.CMSException; +import org.bouncycastle.jce.provider.BouncyCastleProvider; +import org.bouncycastle.operator.OperatorCreationException; +import org.junit.Test; + +public class BouncyCastleLiveTest { + + String certificatePath = "src/main/resources/Baeldung.cer"; + String privateKeyPath = "src/main/resources/Baeldung.p12"; + char[] p12Password = "password".toCharArray(); + char[] keyPassword = "password".toCharArray(); + + @Test + public void givenCryptographicResource_whenOperationSuccess_returnTrue() throws CertificateException, NoSuchProviderException, NoSuchAlgorithmException, IOException, KeyStoreException, UnrecoverableKeyException, CMSException, OperatorCreationException { + Security.addProvider(new BouncyCastleProvider()); + + CertificateFactory certFactory = CertificateFactory.getInstance("X.509", "BC"); + X509Certificate certificate = (X509Certificate) certFactory.generateCertificate(new FileInputStream(certificatePath)); + KeyStore keystore = KeyStore.getInstance("PKCS12"); + keystore.load(new FileInputStream(privateKeyPath), p12Password); + PrivateKey privateKey = (PrivateKey) keystore.getKey("baeldung", keyPassword); + String secretMessage = "My password is 123456Seven"; + System.out.println("Original Message : " + secretMessage); + byte[] stringToEncrypt = secretMessage.getBytes(); + byte[] encryptedData = BouncyCastleCrypto.encryptData(stringToEncrypt, certificate); + byte[] rawData = BouncyCastleCrypto.decryptData(encryptedData, privateKey); + String decryptedMessage = new String(rawData); + assertTrue(decryptedMessage.equals(secretMessage)); + byte[] signedData = BouncyCastleCrypto.signData(rawData, certificate, privateKey); + Boolean check = BouncyCastleCrypto.verifSignData(signedData); + assertTrue(check); + } +} diff --git a/libraries/src/test/java/com/baeldung/jasypt/JasyptUnitTest.java b/libraries-security/src/test/java/com/baeldung/jasypt/JasyptUnitTest.java similarity index 100% rename from libraries/src/test/java/com/baeldung/jasypt/JasyptUnitTest.java rename to libraries-security/src/test/java/com/baeldung/jasypt/JasyptUnitTest.java diff --git a/libraries-security/src/test/java/com/baeldung/tink/TinkUnitTest.java b/libraries-security/src/test/java/com/baeldung/tink/TinkLiveTest.java similarity index 96% rename from libraries-security/src/test/java/com/baeldung/tink/TinkUnitTest.java rename to libraries-security/src/test/java/com/baeldung/tink/TinkLiveTest.java index b98c698016..c4bd487457 100644 --- a/libraries-security/src/test/java/com/baeldung/tink/TinkUnitTest.java +++ b/libraries-security/src/test/java/com/baeldung/tink/TinkLiveTest.java @@ -18,7 +18,9 @@ import org.junit.Test; import java.security.GeneralSecurityException; -public class TinkUnitTest { +public class TinkLiveTest { + + //need to download policy files and put them into ${java.home}/jre/lib/security/ private static final String PLAINTEXT = "BAELDUNG"; private static final String DATA = "TINK"; diff --git a/libraries-testing/README.md b/libraries-testing/README.md new file mode 100644 index 0000000000..6b25a3b875 --- /dev/null +++ b/libraries-testing/README.md @@ -0,0 +1,8 @@ +### Relevant articles + +- [Introduction to Serenity BDD](http://www.baeldung.com/serenity-bdd) +- [Introduction to JSONassert](http://www.baeldung.com/jsonassert) +- [Serenity BDD and Screenplay](http://www.baeldung.com/serenity-screenplay) +- [Serenity BDD with Spring and JBehave](http://www.baeldung.com/serenity-spring-jbehave) +- [Introduction to Awaitlity](http://www.baeldung.com/awaitlity-testing) +- [Introduction to Hoverfly in Java](http://www.baeldung.com/hoverfly) \ No newline at end of file diff --git a/libraries-testing/log4j.properties b/libraries-testing/log4j.properties new file mode 100644 index 0000000000..ed367509d1 --- /dev/null +++ b/libraries-testing/log4j.properties @@ -0,0 +1,5 @@ +log4j.rootLogger=INFO, stdout +log4j.appender.stdout=org.apache.log4j.ConsoleAppender +log4j.appender.stdout.Target=System.out +log4j.appender.stdout.layout=org.apache.log4j.PatternLayout +log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n \ No newline at end of file diff --git a/libraries-testing/pom.xml b/libraries-testing/pom.xml new file mode 100644 index 0000000000..8f7a27bbfa --- /dev/null +++ b/libraries-testing/pom.xml @@ -0,0 +1,170 @@ + + + + 4.0.0 + libraries-testing + libraries-testing + + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + + + + + net.serenity-bdd + serenity-core + ${serenity.version} + test + + + org.asciidoctor + asciidoctorj + + + + + net.serenity-bdd + serenity-junit + ${serenity.version} + test + + + net.serenity-bdd + serenity-jbehave + ${serenity.jbehave.version} + test + + + net.serenity-bdd + serenity-rest-assured + ${serenity.version} + test + + + net.serenity-bdd + serenity-jira-requirements-provider + ${serenity.jira.version} + test + + + net.serenity-bdd + serenity-spring + ${serenity.version} + test + + + org.springframework + spring-test + + + + + net.serenity-bdd + serenity-screenplay + ${serenity.version} + test + + + net.serenity-bdd + serenity-screenplay-webdriver + ${serenity.version} + test + + + org.skyscreamer + jsonassert + ${jsonassert.version} + + + org.awaitility + awaitility + ${awaitility.version} + test + + + org.awaitility + awaitility-proxy + ${awaitility.version} + test + + + io.specto + hoverfly-java + ${hoverfly-java.version} + + + org.springframework + spring-web + ${spring.version} + + + io.rest-assured + spring-mock-mvc + ${spring-mock-mvc.version} + test + + + org.assertj + assertj-core + ${assertj.version} + + + + net.serenity-bdd + serenity-core + ${serenity.version} + test + + + org.asciidoctor + asciidoctorj + + + + + org.asciidoctor + asciidoctor-maven-plugin + 1.5.7.1 + + + + + + + + + net.serenity-bdd.maven.plugins + serenity-maven-plugin + ${serenity.plugin.version} + + + serenity-reports + post-integration-test + + aggregate + + + + + + + + + + 1.9.26 + 1.41.0 + 1.9.0 + 1.9.27 + 1.5.0 + 3.0.0 + 0.8.1 + 4.3.8.RELEASE + 3.0.3 + 3.6.2 + + + diff --git a/libraries-testing/serenity.properties b/libraries-testing/serenity.properties new file mode 100644 index 0000000000..c77df9c0f7 --- /dev/null +++ b/libraries-testing/serenity.properties @@ -0,0 +1,4 @@ +jira.url= +jira.project= +jira.username= +jira.password= \ No newline at end of file diff --git a/libraries/src/main/java/com/baeldung/awaitility/AsyncService.java b/libraries-testing/src/main/java/com/baeldung/awaitility/AsyncService.java similarity index 100% rename from libraries/src/main/java/com/baeldung/awaitility/AsyncService.java rename to libraries-testing/src/main/java/com/baeldung/awaitility/AsyncService.java diff --git a/libraries/src/main/java/com/baeldung/serenity/github/GitHubUser.java b/libraries-testing/src/main/java/com/baeldung/serenity/github/GitHubUser.java similarity index 100% rename from libraries/src/main/java/com/baeldung/serenity/github/GitHubUser.java rename to libraries-testing/src/main/java/com/baeldung/serenity/github/GitHubUser.java diff --git a/libraries/src/main/java/com/baeldung/serenity/membership/Commodity.java b/libraries-testing/src/main/java/com/baeldung/serenity/membership/Commodity.java similarity index 100% rename from libraries/src/main/java/com/baeldung/serenity/membership/Commodity.java rename to libraries-testing/src/main/java/com/baeldung/serenity/membership/Commodity.java diff --git a/libraries/src/main/java/com/baeldung/serenity/membership/Member.java b/libraries-testing/src/main/java/com/baeldung/serenity/membership/Member.java similarity index 100% rename from libraries/src/main/java/com/baeldung/serenity/membership/Member.java rename to libraries-testing/src/main/java/com/baeldung/serenity/membership/Member.java diff --git a/libraries/src/main/java/com/baeldung/serenity/membership/MemberGrade.java b/libraries-testing/src/main/java/com/baeldung/serenity/membership/MemberGrade.java similarity index 100% rename from libraries/src/main/java/com/baeldung/serenity/membership/MemberGrade.java rename to libraries-testing/src/main/java/com/baeldung/serenity/membership/MemberGrade.java diff --git a/libraries/src/main/java/com/baeldung/serenity/spring/AdderController.java b/libraries-testing/src/main/java/com/baeldung/serenity/spring/AdderController.java similarity index 100% rename from libraries/src/main/java/com/baeldung/serenity/spring/AdderController.java rename to libraries-testing/src/main/java/com/baeldung/serenity/spring/AdderController.java diff --git a/libraries/src/main/java/com/baeldung/serenity/spring/AdderService.java b/libraries-testing/src/main/java/com/baeldung/serenity/spring/AdderService.java similarity index 100% rename from libraries/src/main/java/com/baeldung/serenity/spring/AdderService.java rename to libraries-testing/src/main/java/com/baeldung/serenity/spring/AdderService.java diff --git a/libraries/src/main/java/com/baeldung/serenity/spring/PlainAdderController.java b/libraries-testing/src/main/java/com/baeldung/serenity/spring/PlainAdderController.java similarity index 100% rename from libraries/src/main/java/com/baeldung/serenity/spring/PlainAdderController.java rename to libraries-testing/src/main/java/com/baeldung/serenity/spring/PlainAdderController.java diff --git a/libraries/src/test/java/com/baeldung/awaitility/AsyncServiceLongRunningManualTest.java b/libraries-testing/src/test/java/com/baeldung/awaitility/AsyncServiceLongRunningManualTest.java similarity index 100% rename from libraries/src/test/java/com/baeldung/awaitility/AsyncServiceLongRunningManualTest.java rename to libraries-testing/src/test/java/com/baeldung/awaitility/AsyncServiceLongRunningManualTest.java diff --git a/libraries/src/test/java/com/baeldung/hoverfly/HoverflyApiLiveTest.java b/libraries-testing/src/test/java/com/baeldung/hoverfly/HoverflyApiLiveTest.java similarity index 100% rename from libraries/src/test/java/com/baeldung/hoverfly/HoverflyApiLiveTest.java rename to libraries-testing/src/test/java/com/baeldung/hoverfly/HoverflyApiLiveTest.java diff --git a/libraries/src/test/java/com/baeldung/jsonassert/JsonAssertUnitTest.java b/libraries-testing/src/test/java/com/baeldung/jsonassert/JsonAssertUnitTest.java similarity index 100% rename from libraries/src/test/java/com/baeldung/jsonassert/JsonAssertUnitTest.java rename to libraries-testing/src/test/java/com/baeldung/jsonassert/JsonAssertUnitTest.java diff --git a/libraries/src/test/java/com/baeldung/serenity/GithubUserProfilePayloadIntegrationTest.java b/libraries-testing/src/test/java/com/baeldung/serenity/GithubUserProfilePayloadIntegrationTest.java similarity index 100% rename from libraries/src/test/java/com/baeldung/serenity/GithubUserProfilePayloadIntegrationTest.java rename to libraries-testing/src/test/java/com/baeldung/serenity/GithubUserProfilePayloadIntegrationTest.java diff --git a/libraries/src/test/java/com/baeldung/serenity/GoogleSearchLiveTest.java b/libraries-testing/src/test/java/com/baeldung/serenity/GoogleSearchLiveTest.java similarity index 100% rename from libraries/src/test/java/com/baeldung/serenity/GoogleSearchLiveTest.java rename to libraries-testing/src/test/java/com/baeldung/serenity/GoogleSearchLiveTest.java diff --git a/libraries/src/test/java/com/baeldung/serenity/GoogleSearchPageObjectLiveTest.java b/libraries-testing/src/test/java/com/baeldung/serenity/GoogleSearchPageObjectLiveTest.java similarity index 100% rename from libraries/src/test/java/com/baeldung/serenity/GoogleSearchPageObjectLiveTest.java rename to libraries-testing/src/test/java/com/baeldung/serenity/GoogleSearchPageObjectLiveTest.java diff --git a/libraries/src/test/java/com/baeldung/serenity/GoogleSearchScreenplayLiveTest.java b/libraries-testing/src/test/java/com/baeldung/serenity/GoogleSearchScreenplayLiveTest.java similarity index 100% rename from libraries/src/test/java/com/baeldung/serenity/GoogleSearchScreenplayLiveTest.java rename to libraries-testing/src/test/java/com/baeldung/serenity/GoogleSearchScreenplayLiveTest.java diff --git a/libraries/src/test/java/com/baeldung/serenity/MemberStatusIntegrationTest.java b/libraries-testing/src/test/java/com/baeldung/serenity/MemberStatusIntegrationTest.java similarity index 100% rename from libraries/src/test/java/com/baeldung/serenity/MemberStatusIntegrationTest.java rename to libraries-testing/src/test/java/com/baeldung/serenity/MemberStatusIntegrationTest.java diff --git a/libraries/src/test/java/com/baeldung/serenity/github/GithubRestAssuredUserAPISteps.java b/libraries-testing/src/test/java/com/baeldung/serenity/github/GithubRestAssuredUserAPISteps.java similarity index 100% rename from libraries/src/test/java/com/baeldung/serenity/github/GithubRestAssuredUserAPISteps.java rename to libraries-testing/src/test/java/com/baeldung/serenity/github/GithubRestAssuredUserAPISteps.java diff --git a/libraries/src/test/java/com/baeldung/serenity/github/GithubRestUserAPISteps.java b/libraries-testing/src/test/java/com/baeldung/serenity/github/GithubRestUserAPISteps.java similarity index 100% rename from libraries/src/test/java/com/baeldung/serenity/github/GithubRestUserAPISteps.java rename to libraries-testing/src/test/java/com/baeldung/serenity/github/GithubRestUserAPISteps.java diff --git a/libraries/src/test/java/com/baeldung/serenity/github/GithubUserProfilePayloadStepDefinitions.java b/libraries-testing/src/test/java/com/baeldung/serenity/github/GithubUserProfilePayloadStepDefinitions.java similarity index 100% rename from libraries/src/test/java/com/baeldung/serenity/github/GithubUserProfilePayloadStepDefinitions.java rename to libraries-testing/src/test/java/com/baeldung/serenity/github/GithubUserProfilePayloadStepDefinitions.java diff --git a/libraries/src/test/java/com/baeldung/serenity/membership/MemberStatusSteps.java b/libraries-testing/src/test/java/com/baeldung/serenity/membership/MemberStatusSteps.java similarity index 100% rename from libraries/src/test/java/com/baeldung/serenity/membership/MemberStatusSteps.java rename to libraries-testing/src/test/java/com/baeldung/serenity/membership/MemberStatusSteps.java diff --git a/libraries/src/test/java/com/baeldung/serenity/pageobjects/GoogleSearchPageObject.java b/libraries-testing/src/test/java/com/baeldung/serenity/pageobjects/GoogleSearchPageObject.java similarity index 100% rename from libraries/src/test/java/com/baeldung/serenity/pageobjects/GoogleSearchPageObject.java rename to libraries-testing/src/test/java/com/baeldung/serenity/pageobjects/GoogleSearchPageObject.java diff --git a/libraries/src/test/java/com/baeldung/serenity/screenplay/GoogleSearchPage.java b/libraries-testing/src/test/java/com/baeldung/serenity/screenplay/GoogleSearchPage.java similarity index 100% rename from libraries/src/test/java/com/baeldung/serenity/screenplay/GoogleSearchPage.java rename to libraries-testing/src/test/java/com/baeldung/serenity/screenplay/GoogleSearchPage.java diff --git a/libraries/src/test/java/com/baeldung/serenity/screenplay/GoogleSearchResults.java b/libraries-testing/src/test/java/com/baeldung/serenity/screenplay/GoogleSearchResults.java similarity index 100% rename from libraries/src/test/java/com/baeldung/serenity/screenplay/GoogleSearchResults.java rename to libraries-testing/src/test/java/com/baeldung/serenity/screenplay/GoogleSearchResults.java diff --git a/libraries/src/test/java/com/baeldung/serenity/screenplay/SearchForKeyword.java b/libraries-testing/src/test/java/com/baeldung/serenity/screenplay/SearchForKeyword.java similarity index 100% rename from libraries/src/test/java/com/baeldung/serenity/screenplay/SearchForKeyword.java rename to libraries-testing/src/test/java/com/baeldung/serenity/screenplay/SearchForKeyword.java diff --git a/libraries/src/test/java/com/baeldung/serenity/screenplay/StartWith.java b/libraries-testing/src/test/java/com/baeldung/serenity/screenplay/StartWith.java similarity index 100% rename from libraries/src/test/java/com/baeldung/serenity/screenplay/StartWith.java rename to libraries-testing/src/test/java/com/baeldung/serenity/screenplay/StartWith.java diff --git a/libraries/src/test/java/com/baeldung/serenity/spring/AdderClassDirtiesContextIntegrationTest.java b/libraries-testing/src/test/java/com/baeldung/serenity/spring/AdderClassDirtiesContextIntegrationTest.java similarity index 100% rename from libraries/src/test/java/com/baeldung/serenity/spring/AdderClassDirtiesContextIntegrationTest.java rename to libraries-testing/src/test/java/com/baeldung/serenity/spring/AdderClassDirtiesContextIntegrationTest.java diff --git a/libraries/src/test/java/com/baeldung/serenity/spring/AdderIntegrationTest.java b/libraries-testing/src/test/java/com/baeldung/serenity/spring/AdderIntegrationTest.java similarity index 100% rename from libraries/src/test/java/com/baeldung/serenity/spring/AdderIntegrationTest.java rename to libraries-testing/src/test/java/com/baeldung/serenity/spring/AdderIntegrationTest.java diff --git a/libraries/src/test/java/com/baeldung/serenity/spring/AdderMethodDirtiesContextDependencyWorkaroundIntegrationTest.java b/libraries-testing/src/test/java/com/baeldung/serenity/spring/AdderMethodDirtiesContextDependencyWorkaroundIntegrationTest.java similarity index 100% rename from libraries/src/test/java/com/baeldung/serenity/spring/AdderMethodDirtiesContextDependencyWorkaroundIntegrationTest.java rename to libraries-testing/src/test/java/com/baeldung/serenity/spring/AdderMethodDirtiesContextDependencyWorkaroundIntegrationTest.java diff --git a/libraries/src/test/java/com/baeldung/serenity/spring/AdderMethodDirtiesContextInitWorkaroundIntegrationTest.java b/libraries-testing/src/test/java/com/baeldung/serenity/spring/AdderMethodDirtiesContextInitWorkaroundIntegrationTest.java similarity index 100% rename from libraries/src/test/java/com/baeldung/serenity/spring/AdderMethodDirtiesContextInitWorkaroundIntegrationTest.java rename to libraries-testing/src/test/java/com/baeldung/serenity/spring/AdderMethodDirtiesContextInitWorkaroundIntegrationTest.java diff --git a/libraries/src/test/java/com/baeldung/serenity/spring/AdderMethodDirtiesContextIntegrationTest.java b/libraries-testing/src/test/java/com/baeldung/serenity/spring/AdderMethodDirtiesContextIntegrationTest.java similarity index 100% rename from libraries/src/test/java/com/baeldung/serenity/spring/AdderMethodDirtiesContextIntegrationTest.java rename to libraries-testing/src/test/java/com/baeldung/serenity/spring/AdderMethodDirtiesContextIntegrationTest.java diff --git a/libraries/src/test/java/com/baeldung/serenity/spring/AdderMethodRuleIntegrationTest.java b/libraries-testing/src/test/java/com/baeldung/serenity/spring/AdderMethodRuleIntegrationTest.java similarity index 100% rename from libraries/src/test/java/com/baeldung/serenity/spring/AdderMethodRuleIntegrationTest.java rename to libraries-testing/src/test/java/com/baeldung/serenity/spring/AdderMethodRuleIntegrationTest.java diff --git a/libraries/src/test/java/com/baeldung/serenity/spring/AdderMockMvcIntegrationTest.java b/libraries-testing/src/test/java/com/baeldung/serenity/spring/AdderMockMvcIntegrationTest.java similarity index 100% rename from libraries/src/test/java/com/baeldung/serenity/spring/AdderMockMvcIntegrationTest.java rename to libraries-testing/src/test/java/com/baeldung/serenity/spring/AdderMockMvcIntegrationTest.java diff --git a/libraries/src/test/java/com/baeldung/serenity/spring/AdderServiceIntegrationTest.java b/libraries-testing/src/test/java/com/baeldung/serenity/spring/AdderServiceIntegrationTest.java similarity index 100% rename from libraries/src/test/java/com/baeldung/serenity/spring/AdderServiceIntegrationTest.java rename to libraries-testing/src/test/java/com/baeldung/serenity/spring/AdderServiceIntegrationTest.java diff --git a/libraries/src/test/java/com/baeldung/serenity/spring/AdderSpringSerenityRunnerIntegrationTest.java b/libraries-testing/src/test/java/com/baeldung/serenity/spring/AdderSpringSerenityRunnerIntegrationTest.java similarity index 100% rename from libraries/src/test/java/com/baeldung/serenity/spring/AdderSpringSerenityRunnerIntegrationTest.java rename to libraries-testing/src/test/java/com/baeldung/serenity/spring/AdderSpringSerenityRunnerIntegrationTest.java diff --git a/libraries/src/test/java/com/baeldung/serenity/spring/RandomNumberUtil.java b/libraries-testing/src/test/java/com/baeldung/serenity/spring/RandomNumberUtil.java similarity index 100% rename from libraries/src/test/java/com/baeldung/serenity/spring/RandomNumberUtil.java rename to libraries-testing/src/test/java/com/baeldung/serenity/spring/RandomNumberUtil.java diff --git a/libraries/src/test/java/com/baeldung/serenity/spring/steps/AdderConstructorDependencySteps.java b/libraries-testing/src/test/java/com/baeldung/serenity/spring/steps/AdderConstructorDependencySteps.java similarity index 100% rename from libraries/src/test/java/com/baeldung/serenity/spring/steps/AdderConstructorDependencySteps.java rename to libraries-testing/src/test/java/com/baeldung/serenity/spring/steps/AdderConstructorDependencySteps.java diff --git a/libraries/src/test/java/com/baeldung/serenity/spring/steps/AdderRestSteps.java b/libraries-testing/src/test/java/com/baeldung/serenity/spring/steps/AdderRestSteps.java similarity index 100% rename from libraries/src/test/java/com/baeldung/serenity/spring/steps/AdderRestSteps.java rename to libraries-testing/src/test/java/com/baeldung/serenity/spring/steps/AdderRestSteps.java diff --git a/libraries/src/test/java/com/baeldung/serenity/spring/steps/AdderServiceSteps.java b/libraries-testing/src/test/java/com/baeldung/serenity/spring/steps/AdderServiceSteps.java similarity index 100% rename from libraries/src/test/java/com/baeldung/serenity/spring/steps/AdderServiceSteps.java rename to libraries-testing/src/test/java/com/baeldung/serenity/spring/steps/AdderServiceSteps.java diff --git a/libraries/src/test/java/com/baeldung/serenity/spring/steps/AdderSteps.java b/libraries-testing/src/test/java/com/baeldung/serenity/spring/steps/AdderSteps.java similarity index 100% rename from libraries/src/test/java/com/baeldung/serenity/spring/steps/AdderSteps.java rename to libraries-testing/src/test/java/com/baeldung/serenity/spring/steps/AdderSteps.java diff --git a/libraries/src/test/java/com/baeldung/serenity/spring/stories/AdderStory.java b/libraries-testing/src/test/java/com/baeldung/serenity/spring/stories/AdderStory.java similarity index 100% rename from libraries/src/test/java/com/baeldung/serenity/spring/stories/AdderStory.java rename to libraries-testing/src/test/java/com/baeldung/serenity/spring/stories/AdderStory.java diff --git a/libraries/src/test/resources/adder-beans.xml b/libraries-testing/src/test/resources/adder-beans.xml similarity index 100% rename from libraries/src/test/resources/adder-beans.xml rename to libraries-testing/src/test/resources/adder-beans.xml diff --git a/libraries/README.md b/libraries/README.md index f673b230ec..4ac63e044f 100644 --- a/libraries/README.md +++ b/libraries/README.md @@ -1,24 +1,19 @@ ### Relevant articles -- [Intro to Jasypt](http://www.baeldung.com/jasypt) - [Introduction to Javatuples](http://www.baeldung.com/java-tuples) - [Introduction to Javassist](http://www.baeldung.com/javassist) - [Introduction to Apache Flink with Java](http://www.baeldung.com/apache-flink) - [Introduction to JSONassert](http://www.baeldung.com/jsonassert) - [Intro to JaVers](http://www.baeldung.com/javers) -- [Introduction to Serenity BDD](http://www.baeldung.com/serenity-bdd) - [Merging Streams in Java](http://www.baeldung.com/java-merge-streams) -- [Serenity BDD and Screenplay](http://www.baeldung.com/serenity-screenplay) - [Introduction to Quartz](http://www.baeldung.com/quartz) - [How to Warm Up the JVM](http://www.baeldung.com/java-jvm-warmup) - [Software Transactional Memory in Java Using Multiverse](http://www.baeldung.com/java-multiverse-stm) - [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) - [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) -- [Introduction to Hoverfly in Java](http://www.baeldung.com/hoverfly) - [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) @@ -29,10 +24,8 @@ - [Using Pairs in Java](http://www.baeldung.com/java-pairs) - [Introduction to Caffeine](http://www.baeldung.com/java-caching-caffeine) - [Introduction to StreamEx](http://www.baeldung.com/streamex) -- [Introduction to BouncyCastle with Java](http://www.baeldung.com/java-bouncy-castle) - [A Docker Guide for Java](http://www.baeldung.com/docker-java-api) - [Introduction to Akka Actors in Java](http://www.baeldung.com/akka-actors-java) -- [Introduction to Akka Actors in Java](http://www.baeldung.com/akka-actors-java) - [A Guide to Byte Buddy](http://www.baeldung.com/byte-buddy) - [Introduction to jOOL](http://www.baeldung.com/jool) - [Consumer Driven Contracts with Pact](http://www.baeldung.com/pact-junit-consumer-driven-contracts) diff --git a/libraries/pom.xml b/libraries/pom.xml index 17630fd290..a8ded19a1e 100644 --- a/libraries/pom.xml +++ b/libraries/pom.xml @@ -46,11 +46,7 @@ commons-net ${commons-net.version} - - org.jasypt - jasypt - ${jasypt.version} - + org.javatuples javatuples @@ -106,17 +102,17 @@ - net.serenity-bdd - serenity-core - ${serenity.version} - test - - - org.asciidoctor - asciidoctorj - - - + net.serenity-bdd + serenity-core + ${serenity.version} + test + + + org.asciidoctor + asciidoctorj + + + net.serenity-bdd serenity-junit @@ -438,16 +434,6 @@ caffeine ${caffeine.version} - - org.bouncycastle - bcprov-jdk15on - ${bouncycastle.version} - - - org.bouncycastle - bcpkix-jdk15on - ${bouncycastle.version} - com.google.http-client google-http-client @@ -727,7 +713,6 @@ 1.23.0 0.7.0 3.2.7 - 1.9.2 1.2 3.21.0-GA 3.6.2 @@ -797,9 +782,7 @@ 1.2.6 4.8.1 1.0.1 - 1.58 1.19.4 - 4.5.1 3.3.0 3.0.2 From 78850538418622e1bc84b5afda5778c5c9cd196a Mon Sep 17 00:00:00 2001 From: amit2103 Date: Tue, 13 Aug 2019 23:45:56 +0530 Subject: [PATCH 27/56] [BAEL-16694] - Fixed spring-jooq Integration Tests --- .../baeldung/jooq/introduction/QueryIntegrationTest.java | 6 ++++-- .../baeldung/jooq/springboot/SpringBootIntegrationTest.java | 3 ++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/spring-jooq/src/test/java/com/baeldung/jooq/introduction/QueryIntegrationTest.java b/spring-jooq/src/test/java/com/baeldung/jooq/introduction/QueryIntegrationTest.java index 28bc4c63c7..ff1e8dc6f8 100644 --- a/spring-jooq/src/test/java/com/baeldung/jooq/introduction/QueryIntegrationTest.java +++ b/spring-jooq/src/test/java/com/baeldung/jooq/introduction/QueryIntegrationTest.java @@ -47,12 +47,14 @@ public class QueryIntegrationTest { .from(AUTHOR) .join(AUTHOR_BOOK).on(AUTHOR.ID.equal(AUTHOR_BOOK.AUTHOR_ID)) .join(BOOK).on(AUTHOR_BOOK.BOOK_ID.equal(BOOK.ID)) - .groupBy(AUTHOR.LAST_NAME).fetch(); + .groupBy(AUTHOR.LAST_NAME) + .orderBy(AUTHOR.LAST_NAME.desc()) + .fetch(); assertEquals(3, result.size()); assertEquals("Sierra", result.getValue(0, AUTHOR.LAST_NAME)); assertEquals(Integer.valueOf(2), result.getValue(0, DSL.count())); - assertEquals("Schildt", result.getValue(2, AUTHOR.LAST_NAME)); + assertEquals("Bates", result.getValue(2, AUTHOR.LAST_NAME)); assertEquals(Integer.valueOf(1), result.getValue(2, DSL.count())); } diff --git a/spring-jooq/src/test/java/com/baeldung/jooq/springboot/SpringBootIntegrationTest.java b/spring-jooq/src/test/java/com/baeldung/jooq/springboot/SpringBootIntegrationTest.java index 5e76fb3c93..3b3e865108 100644 --- a/spring-jooq/src/test/java/com/baeldung/jooq/springboot/SpringBootIntegrationTest.java +++ b/spring-jooq/src/test/java/com/baeldung/jooq/springboot/SpringBootIntegrationTest.java @@ -49,12 +49,13 @@ public class SpringBootIntegrationTest { .from(AUTHOR).join(AUTHOR_BOOK).on(AUTHOR.ID.equal(AUTHOR_BOOK.AUTHOR_ID)) .join(BOOK).on(AUTHOR_BOOK.BOOK_ID.equal(BOOK.ID)) .groupBy(AUTHOR.LAST_NAME) + .orderBy(AUTHOR.LAST_NAME.desc()) .fetch(); assertEquals(3, result.size()); assertEquals("Sierra", result.getValue(0, AUTHOR.LAST_NAME)); assertEquals(Integer.valueOf(2), result.getValue(0, DSL.count())); - assertEquals("Schildt", result.getValue(2, AUTHOR.LAST_NAME)); + assertEquals("Bates", result.getValue(2, AUTHOR.LAST_NAME)); assertEquals(Integer.valueOf(1), result.getValue(2, DSL.count())); } From 04672018c5edd950a446b44716a02cbfa2e88835 Mon Sep 17 00:00:00 2001 From: Tapan Avasthi Date: Tue, 30 Jul 2019 16:03:25 +0530 Subject: [PATCH 28/56] BAEL-3116: Finding the Least Common Multiple in Java - Add tutorial to implement algorithms used for computing LCM of two or more numbers. - List of Algorithms covered: - Simple Method - Prime Factorization Method - Euclidean Algorithm - BigInteger Class for large numbers - Lambda Implementation for LCM of more than two numbers - Reference: BAEL-3116 --- .../java/com/baeldung/lcm/BigIntegerLCM.java | 13 ++++++ .../com/baeldung/lcm/EuclideanAlgorithm.java | 40 ++++++++++++++++++ .../lcm/PrimeFactorizationAlgorithm.java | 42 +++++++++++++++++++ .../com/baeldung/lcm/SimpleAlgorithm.java | 18 ++++++++ .../baeldung/lcm/BigIntegerLCMUnitTest.java | 18 ++++++++ .../lcm/EuclideanAlgorithmUnitTest.java | 27 ++++++++++++ .../PrimeFactorizationAlgorithmUnitTest.java | 30 +++++++++++++ .../baeldung/lcm/SimpleAlgorithmUnitTest.java | 15 +++++++ 8 files changed, 203 insertions(+) create mode 100644 java-numbers-2/src/main/java/com/baeldung/lcm/BigIntegerLCM.java create mode 100644 java-numbers-2/src/main/java/com/baeldung/lcm/EuclideanAlgorithm.java create mode 100644 java-numbers-2/src/main/java/com/baeldung/lcm/PrimeFactorizationAlgorithm.java create mode 100644 java-numbers-2/src/main/java/com/baeldung/lcm/SimpleAlgorithm.java create mode 100644 java-numbers-2/src/test/java/com/baeldung/lcm/BigIntegerLCMUnitTest.java create mode 100644 java-numbers-2/src/test/java/com/baeldung/lcm/EuclideanAlgorithmUnitTest.java create mode 100644 java-numbers-2/src/test/java/com/baeldung/lcm/PrimeFactorizationAlgorithmUnitTest.java create mode 100644 java-numbers-2/src/test/java/com/baeldung/lcm/SimpleAlgorithmUnitTest.java diff --git a/java-numbers-2/src/main/java/com/baeldung/lcm/BigIntegerLCM.java b/java-numbers-2/src/main/java/com/baeldung/lcm/BigIntegerLCM.java new file mode 100644 index 0000000000..affface9c0 --- /dev/null +++ b/java-numbers-2/src/main/java/com/baeldung/lcm/BigIntegerLCM.java @@ -0,0 +1,13 @@ +package com.baeldung.lcm; + +import java.math.BigInteger; + +public class BigIntegerLCM { + + public static BigInteger lcm(BigInteger number1, BigInteger number2) { + BigInteger gcd = number1.gcd(number2); + BigInteger absProduct = number1.multiply(number2).abs(); + return absProduct.divide(gcd); + } + +} diff --git a/java-numbers-2/src/main/java/com/baeldung/lcm/EuclideanAlgorithm.java b/java-numbers-2/src/main/java/com/baeldung/lcm/EuclideanAlgorithm.java new file mode 100644 index 0000000000..4032d119fa --- /dev/null +++ b/java-numbers-2/src/main/java/com/baeldung/lcm/EuclideanAlgorithm.java @@ -0,0 +1,40 @@ +package com.baeldung.lcm; + +import java.util.Arrays; + +public class EuclideanAlgorithm { + + public static int gcd(int number1, int number2) { + if (number1 == 0 || number2 == 0) { + return number1 + number2; + } else { + int absNumber1 = Math.abs(number1); + int absNumber2 = Math.abs(number2); + int biggerValue = Math.max(absNumber1, absNumber2); + int smallerValue = Math.min(absNumber1, absNumber2); + return gcd(biggerValue % smallerValue, smallerValue); + } + } + + public static int lcm(int number1, int number2) { + if (number1 == 0 || number2 == 0) + return 0; + else { + int gcd = gcd(number1, number2); + return Math.abs(number1 * number2) / gcd; + } + } + + public static int lcmForArray(int[] numbers) { + int lcm = numbers[0]; + for (int i = 1; i <= numbers.length - 1; i++) { + lcm = lcm(lcm, numbers[i]); + } + return lcm; + } + + public static int lcmByLambda(int... numbers) { + return Arrays.stream(numbers).reduce(1, (lcmSoFar, currentNumber) -> Math.abs(lcmSoFar * currentNumber) / gcd(lcmSoFar, currentNumber)); + } + +} diff --git a/java-numbers-2/src/main/java/com/baeldung/lcm/PrimeFactorizationAlgorithm.java b/java-numbers-2/src/main/java/com/baeldung/lcm/PrimeFactorizationAlgorithm.java new file mode 100644 index 0000000000..cfdc3bfe96 --- /dev/null +++ b/java-numbers-2/src/main/java/com/baeldung/lcm/PrimeFactorizationAlgorithm.java @@ -0,0 +1,42 @@ +package com.baeldung.lcm; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +public class PrimeFactorizationAlgorithm { + + public static Map getPrimeFactors(int number) { + int absNumber = Math.abs(number); + Map primeFactorsMap = new HashMap(); + for (int factor = 2; factor <= absNumber; factor++) { + while (absNumber % factor == 0) { + Integer power = primeFactorsMap.get(factor); + if (power == null) { + power = 0; + } + primeFactorsMap.put(factor, power + 1); + absNumber /= factor; + } + } + return primeFactorsMap; + } + + public static int lcm(int number1, int number2) { + if (number1 == 0 || number2 == 0) { + return 0; + } + Map primeFactorsForNum1 = getPrimeFactors(number1); + Map primeFactorsForNum2 = getPrimeFactors(number2); + Set primeFactorsUnionSet = new HashSet(primeFactorsForNum1.keySet()); + primeFactorsUnionSet.addAll(primeFactorsForNum2.keySet()); + int lcm = 1; + for (Integer primeFactor : primeFactorsUnionSet) { + lcm *= Math.pow(primeFactor, Math.max(primeFactorsForNum1.getOrDefault(primeFactor, 0), + primeFactorsForNum2.getOrDefault(primeFactor, 0))); + } + return lcm; + } + +} diff --git a/java-numbers-2/src/main/java/com/baeldung/lcm/SimpleAlgorithm.java b/java-numbers-2/src/main/java/com/baeldung/lcm/SimpleAlgorithm.java new file mode 100644 index 0000000000..6ba4966dc7 --- /dev/null +++ b/java-numbers-2/src/main/java/com/baeldung/lcm/SimpleAlgorithm.java @@ -0,0 +1,18 @@ +package com.baeldung.lcm; + +public class SimpleAlgorithm { + public static int lcm(int number1, int number2) { + if (number1 == 0 || number2 == 0) { + return 0; + } + int absNumber1 = Math.abs(number1); + int absNumber2 = Math.abs(number2); + int absHigherNumber = Math.max(absNumber1, absNumber2); + int absLowerNumber = Math.min(absNumber1, absNumber2); + int lcm = absHigherNumber; + while (lcm % absLowerNumber != 0) { + lcm += absHigherNumber; + } + return lcm; + } +} diff --git a/java-numbers-2/src/test/java/com/baeldung/lcm/BigIntegerLCMUnitTest.java b/java-numbers-2/src/test/java/com/baeldung/lcm/BigIntegerLCMUnitTest.java new file mode 100644 index 0000000000..10bee4c087 --- /dev/null +++ b/java-numbers-2/src/test/java/com/baeldung/lcm/BigIntegerLCMUnitTest.java @@ -0,0 +1,18 @@ +package com.baeldung.lcm; + + +import org.junit.Assert; +import org.junit.Test; + +import java.math.BigInteger; + +public class BigIntegerLCMUnitTest { + + @Test + public void testLCM() { + BigInteger number1 = new BigInteger("12"); + BigInteger number2 = new BigInteger("18"); + BigInteger expectedLCM = new BigInteger("36"); + Assert.assertEquals(expectedLCM, BigIntegerLCM.lcm(number1, number2)); + } +} diff --git a/java-numbers-2/src/test/java/com/baeldung/lcm/EuclideanAlgorithmUnitTest.java b/java-numbers-2/src/test/java/com/baeldung/lcm/EuclideanAlgorithmUnitTest.java new file mode 100644 index 0000000000..09a53cfa4e --- /dev/null +++ b/java-numbers-2/src/test/java/com/baeldung/lcm/EuclideanAlgorithmUnitTest.java @@ -0,0 +1,27 @@ +package com.baeldung.lcm; + +import org.junit.Assert; +import org.junit.Test; + +public class EuclideanAlgorithmUnitTest { + + @Test + public void testGCD() { + Assert.assertEquals(6, EuclideanAlgorithm.gcd(12, 18)); + } + + @Test + public void testLCM() { + Assert.assertEquals(36, EuclideanAlgorithm.lcm(12, 18)); + } + + @Test + public void testLCMForArray() { + Assert.assertEquals(15, EuclideanAlgorithm.lcmForArray(new int[]{3, 5, 15})); + } + + @Test + public void testLCMByLambdaForArray() { + Assert.assertEquals(15, EuclideanAlgorithm.lcmByLambda(new int[]{3, 5, 15})); + } +} diff --git a/java-numbers-2/src/test/java/com/baeldung/lcm/PrimeFactorizationAlgorithmUnitTest.java b/java-numbers-2/src/test/java/com/baeldung/lcm/PrimeFactorizationAlgorithmUnitTest.java new file mode 100644 index 0000000000..b33b81f85e --- /dev/null +++ b/java-numbers-2/src/test/java/com/baeldung/lcm/PrimeFactorizationAlgorithmUnitTest.java @@ -0,0 +1,30 @@ +package com.baeldung.lcm; + +import org.junit.Assert; +import org.junit.Test; + +import java.util.HashMap; +import java.util.Map; + +import static com.baeldung.lcm.PrimeFactorizationAlgorithm.*; + + +public class PrimeFactorizationAlgorithmUnitTest { + + @Test + public void testGetPrimeFactors() { + Map expectedPrimeFactorsMapForTwelve = new HashMap<>(); + expectedPrimeFactorsMapForTwelve.put(2, 2); + expectedPrimeFactorsMapForTwelve.put(3, 1); + Map expectedPrimeFactorsMapForEighteen = new HashMap<>(); + expectedPrimeFactorsMapForEighteen.put(2, 1); + expectedPrimeFactorsMapForEighteen.put(3, 2); + Assert.assertEquals(expectedPrimeFactorsMapForTwelve, getPrimeFactors(12)); + Assert.assertEquals(expectedPrimeFactorsMapForEighteen, getPrimeFactors(18)); + } + + @Test + public void testLCM() { + Assert.assertEquals(36, PrimeFactorizationAlgorithm.lcm(12, 18)); + } +} diff --git a/java-numbers-2/src/test/java/com/baeldung/lcm/SimpleAlgorithmUnitTest.java b/java-numbers-2/src/test/java/com/baeldung/lcm/SimpleAlgorithmUnitTest.java new file mode 100644 index 0000000000..bc0a1690f4 --- /dev/null +++ b/java-numbers-2/src/test/java/com/baeldung/lcm/SimpleAlgorithmUnitTest.java @@ -0,0 +1,15 @@ +package com.baeldung.lcm; + +import org.junit.Assert; +import org.junit.Test; + +import static com.baeldung.lcm.SimpleAlgorithm.*; + +public class SimpleAlgorithmUnitTest { + + @Test + public void testLCM() { + Assert.assertEquals(36, lcm(12, 18)); + } + +} From 4ca253fe0f4663339e017cc9c3c81cf40a6b5367 Mon Sep 17 00:00:00 2001 From: amit2103 Date: Wed, 14 Aug 2019 23:37:02 +0530 Subject: [PATCH 29/56] [BAEL-16780] - Fixed the integrations tests in spring-5-reactive --- spring-5-reactive/pom.xml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/spring-5-reactive/pom.xml b/spring-5-reactive/pom.xml index 8d5324a673..99cdd11f24 100644 --- a/spring-5-reactive/pom.xml +++ b/spring-5-reactive/pom.xml @@ -120,6 +120,12 @@ ${project-reactor-test} test + + org.apache.httpcomponents + httpclient + ${httpclient.version} + + @@ -165,6 +171,7 @@ 1.0 4.1 3.2.3.RELEASE + 4.5.8 From e79a2858c3010ebc10f88ef13a6901c93e4b171b Mon Sep 17 00:00:00 2001 From: smokeyrobot Date: Thu, 15 Aug 2019 03:55:05 -0400 Subject: [PATCH 30/56] Bael 3000 (#7384) * Commit for Eval Article pull request * Revert "Commit for Eval Article pull request" * BAEL-46 - Deleted duplicate class. * BAEL-46 - Fixed old script version * BAEL-46 - Updated per editor review * BAEL-46 - Updated JMX for corrected parameters * BAEL-46 - Corrected Name and Directory * Bael-3000 - initial commit * Bael-3000 - update per review * Bael-3000 - Updated per code review * Bael-3000 - Updated per code review * Update core-java-modules/core-java-jndi/pom.xml Co-Authored-By: KevinGilmore * Update core-java-modules/core-java-jndi/pom.xml Co-Authored-By: KevinGilmore --- core-java-modules/core-java-jndi/pom.xml | 65 +++++++++++++++++++ .../java/com/baeldung/jndi/JndiUnitTest.java | 60 +++++++++++++++++ .../exceptions/JndiExceptionsUnitTest.java | 42 ++++++++++++ 3 files changed, 167 insertions(+) create mode 100644 core-java-modules/core-java-jndi/pom.xml create mode 100644 core-java-modules/core-java-jndi/src/test/java/com/baeldung/jndi/JndiUnitTest.java create mode 100644 core-java-modules/core-java-jndi/src/test/java/com/baeldung/jndi/exceptions/JndiExceptionsUnitTest.java diff --git a/core-java-modules/core-java-jndi/pom.xml b/core-java-modules/core-java-jndi/pom.xml new file mode 100644 index 0000000000..eb363f8598 --- /dev/null +++ b/core-java-modules/core-java-jndi/pom.xml @@ -0,0 +1,65 @@ + + + 4.0.0 + + com.baeldung.jndi + core-java-jndi + 1.0-SNAPSHOT + + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + ../../ + + + + + org.junit.jupiter + junit-jupiter + 5.5.1 + test + + + org.springframework + spring-core + 5.0.9.RELEASE + + + org.springframework + spring-context + 5.0.9.RELEASE + + + org.springframework + spring-jdbc + 5.0.9.RELEASE + + + org.springframework + spring-test + 5.0.9.RELEASE + test + + + com.h2database + h2 + 1.4.199 + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + + + diff --git a/core-java-modules/core-java-jndi/src/test/java/com/baeldung/jndi/JndiUnitTest.java b/core-java-modules/core-java-jndi/src/test/java/com/baeldung/jndi/JndiUnitTest.java new file mode 100644 index 0000000000..9eea420e7a --- /dev/null +++ b/core-java-modules/core-java-jndi/src/test/java/com/baeldung/jndi/JndiUnitTest.java @@ -0,0 +1,60 @@ +package com.baeldung.jndi; + +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.springframework.jdbc.datasource.DriverManagerDataSource; +import org.springframework.jndi.JndiTemplate; +import org.springframework.mock.jndi.SimpleNamingContextBuilder; + +import javax.naming.*; +import javax.sql.DataSource; + +import java.util.Enumeration; + +import static org.junit.jupiter.api.Assertions.*; + +class JndiUnitTest { + + private static InitialContext ctx; + private static DriverManagerDataSource ds; + + @BeforeAll + static void setUp() throws Exception { + SimpleNamingContextBuilder builder = new SimpleNamingContextBuilder(); + ds = new DriverManagerDataSource("jdbc:h2:mem:mydb"); + builder.activate(); + + JndiTemplate jndiTemplate = new JndiTemplate(); + ctx = (InitialContext) jndiTemplate.getContext(); + } + + @Test + void givenACompositeName_whenAddingAnElement_thenNameIncludesIt() throws Exception { + Name objectName = new CompositeName("java:comp/env/jdbc"); + + Enumeration elements = objectName.getAll(); + while(elements.hasMoreElements()) { + System.out.println(elements.nextElement()); + } + + objectName.add("example"); + + assertEquals("env", objectName.get(1)); + assertEquals("example", objectName.get(objectName.size() - 1)); + } + + @Test + void givenADataSource_whenAddingDriver_thenBind() throws Exception { + ds.setDriverClassName("org.h2.Driver"); + ctx.bind("java:comp/env/jdbc/datasource", ds); + } + + @Test + void givenContext_whenLookupByName_thenValidDataSource() throws Exception { + DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/datasource"); + + assertNotNull(ds); + assertNotNull(ds.getConnection()); + } + +} diff --git a/core-java-modules/core-java-jndi/src/test/java/com/baeldung/jndi/exceptions/JndiExceptionsUnitTest.java b/core-java-modules/core-java-jndi/src/test/java/com/baeldung/jndi/exceptions/JndiExceptionsUnitTest.java new file mode 100644 index 0000000000..49d4facffb --- /dev/null +++ b/core-java-modules/core-java-jndi/src/test/java/com/baeldung/jndi/exceptions/JndiExceptionsUnitTest.java @@ -0,0 +1,42 @@ +package com.baeldung.jndi.exceptions; + +import org.junit.jupiter.api.MethodOrderer; +import org.junit.jupiter.api.Order; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestMethodOrder; +import org.springframework.jndi.JndiTemplate; +import org.springframework.mock.jndi.SimpleNamingContextBuilder; + +import javax.naming.InitialContext; +import javax.naming.NameNotFoundException; +import javax.naming.NoInitialContextException; + +import static org.junit.jupiter.api.Assertions.assertThrows; + +@TestMethodOrder(MethodOrderer.OrderAnnotation.class) +public class JndiExceptionsUnitTest { + + @Test + @Order(1) + void givenNoContext_whenLookupObject_thenThrowNoInitialContext() { + assertThrows(NoInitialContextException.class, () -> { + JndiTemplate jndiTemplate = new JndiTemplate(); + InitialContext ctx = (InitialContext) jndiTemplate.getContext(); + ctx.lookup("java:comp/env/jdbc/datasource"); + }).printStackTrace(); + } + + @Test + @Order(2) + void givenEmptyContext_whenLookupNotBounds_thenThrowNameNotFound() { + assertThrows(NameNotFoundException.class, () -> { + SimpleNamingContextBuilder builder = new SimpleNamingContextBuilder(); + builder.activate(); + + JndiTemplate jndiTemplate = new JndiTemplate(); + InitialContext ctx = (InitialContext) jndiTemplate.getContext(); + ctx.lookup("badJndiName"); + }).printStackTrace(); + } + +} From 5a2120c629463cf34473815cc09b3efe0ede51e7 Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Thu, 15 Aug 2019 11:02:15 +0300 Subject: [PATCH 31/56] Create README.md --- spring-di/README.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 spring-di/README.md diff --git a/spring-di/README.md b/spring-di/README.md new file mode 100644 index 0000000000..a61ebe5127 --- /dev/null +++ b/spring-di/README.md @@ -0,0 +1,3 @@ +### Relevant Articles + +- [The Spring @Qualifier Annotation](https://www.baeldung.com/spring-qualifier-annotation) From 7a80e2efea4f7808502610e6f384781fbeef4992 Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Thu, 15 Aug 2019 11:06:26 +0300 Subject: [PATCH 32/56] Update README.md --- spring-all/README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/spring-all/README.md b/spring-all/README.md index 22c51525f3..c5825b47fb 100644 --- a/spring-all/README.md +++ b/spring-all/README.md @@ -33,4 +33,3 @@ 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 c28bfc9c676f09ab9e5a1bd4b03afd3f0002f323 Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Thu, 15 Aug 2019 11:09:05 +0300 Subject: [PATCH 33/56] Create README.md --- core-java-modules/core-java-networking-2/README.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 core-java-modules/core-java-networking-2/README.md diff --git a/core-java-modules/core-java-networking-2/README.md b/core-java-modules/core-java-networking-2/README.md new file mode 100644 index 0000000000..6b6151248e --- /dev/null +++ b/core-java-modules/core-java-networking-2/README.md @@ -0,0 +1,3 @@ +### Relevant Articles + +- [Checking if a URL Exists in Java](https://www.baeldung.com/java-check-url-exists) From e05d0cd44730b197ea37d23ae420e36b5e4ffcd5 Mon Sep 17 00:00:00 2001 From: Loredana Date: Thu, 15 Aug 2019 11:20:10 +0300 Subject: [PATCH 34/56] remove extra bin folder from resteasy --- resteasy/bin/pom.xml | 82 ------------------- .../main/webapp/WEB-INF/classes/logback.xml | 19 ----- .../WEB-INF/jboss-deployment-structure.xml | 13 --- .../bin/src/main/webapp/WEB-INF/jboss-web.xml | 4 - resteasy/bin/src/main/webapp/WEB-INF/web.xml | 13 --- resteasy/bin/src/main/webapp/script.js | 16 ---- .../com/baeldung/server/movies/batman.json | 4 - .../baeldung/server/movies/transformer.json | 4 - 8 files changed, 155 deletions(-) delete mode 100644 resteasy/bin/pom.xml delete mode 100644 resteasy/bin/src/main/webapp/WEB-INF/classes/logback.xml delete mode 100644 resteasy/bin/src/main/webapp/WEB-INF/jboss-deployment-structure.xml delete mode 100644 resteasy/bin/src/main/webapp/WEB-INF/jboss-web.xml delete mode 100644 resteasy/bin/src/main/webapp/WEB-INF/web.xml delete mode 100644 resteasy/bin/src/main/webapp/script.js delete mode 100644 resteasy/bin/src/test/resources/com/baeldung/server/movies/batman.json delete mode 100644 resteasy/bin/src/test/resources/com/baeldung/server/movies/transformer.json diff --git a/resteasy/bin/pom.xml b/resteasy/bin/pom.xml deleted file mode 100644 index 15d8b5bd18..0000000000 --- a/resteasy/bin/pom.xml +++ /dev/null @@ -1,82 +0,0 @@ - - - 4.0.0 - com.baeldung - resteasy-tutorial - 1.0 - war - - - com.baeldung - resteasy-tutorial - 1.0 - - - - RestEasyTutorial - - - org.codehaus.cargo - cargo-maven2-plugin - ${cargo-maven2-plugin.version} - - true - - jetty8x - embedded - - - - 8082 - - - - - - - - - - - - - org.jboss.resteasy - resteasy-servlet-initializer - ${resteasy.version} - - - - - org.jboss.resteasy - resteasy-client - ${resteasy.version} - - - - - - org.jboss.resteasy - resteasy-jaxb-provider - ${resteasy.version} - - - - org.jboss.resteasy - resteasy-jackson-provider - ${resteasy.version} - - - - commons-io - commons-io - ${commons-io.version} - - - - - 3.0.19.Final - 2.5 - 1.6.1 - - \ No newline at end of file diff --git a/resteasy/bin/src/main/webapp/WEB-INF/classes/logback.xml b/resteasy/bin/src/main/webapp/WEB-INF/classes/logback.xml deleted file mode 100644 index ec0dc2469a..0000000000 --- a/resteasy/bin/src/main/webapp/WEB-INF/classes/logback.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - web - %date [%thread] %-5level %logger{36} - %message%n - - - - - - - - - - - - - - \ No newline at end of file diff --git a/resteasy/bin/src/main/webapp/WEB-INF/jboss-deployment-structure.xml b/resteasy/bin/src/main/webapp/WEB-INF/jboss-deployment-structure.xml deleted file mode 100644 index cb258374a1..0000000000 --- a/resteasy/bin/src/main/webapp/WEB-INF/jboss-deployment-structure.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/resteasy/bin/src/main/webapp/WEB-INF/jboss-web.xml b/resteasy/bin/src/main/webapp/WEB-INF/jboss-web.xml deleted file mode 100644 index 694bb71332..0000000000 --- a/resteasy/bin/src/main/webapp/WEB-INF/jboss-web.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/resteasy/bin/src/main/webapp/WEB-INF/web.xml b/resteasy/bin/src/main/webapp/WEB-INF/web.xml deleted file mode 100644 index d5f00293f4..0000000000 --- a/resteasy/bin/src/main/webapp/WEB-INF/web.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - RestEasy Example - - - resteasy.servlet.mapping.prefix - /rest - - - \ No newline at end of file diff --git a/resteasy/bin/src/main/webapp/script.js b/resteasy/bin/src/main/webapp/script.js deleted file mode 100644 index 88198887b0..0000000000 --- a/resteasy/bin/src/main/webapp/script.js +++ /dev/null @@ -1,16 +0,0 @@ -function call(url, type, data) { - var request = $.ajax({ - url : url, - method : "GET", - data : (data) ? JSON.stringify(data) : "", - dataType : type - }); - - request.done(function(resp) { - console.log(resp); - }); - - request.fail(function(jqXHR, textStatus) { - console.log("Request failed: " + textStatus); - }); -}; \ No newline at end of file diff --git a/resteasy/bin/src/test/resources/com/baeldung/server/movies/batman.json b/resteasy/bin/src/test/resources/com/baeldung/server/movies/batman.json deleted file mode 100644 index 82aaaa8f40..0000000000 --- a/resteasy/bin/src/test/resources/com/baeldung/server/movies/batman.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "title": "Batman", - "imdbId": "tt0096895" -} \ No newline at end of file diff --git a/resteasy/bin/src/test/resources/com/baeldung/server/movies/transformer.json b/resteasy/bin/src/test/resources/com/baeldung/server/movies/transformer.json deleted file mode 100644 index 634cefc73c..0000000000 --- a/resteasy/bin/src/test/resources/com/baeldung/server/movies/transformer.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "title": "Transformers", - "imdbId": "tt0418279" -} \ No newline at end of file From 84b0724b8c67b165dfef59dcb68e6e4e8e1c3391 Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Thu, 15 Aug 2019 11:23:24 +0300 Subject: [PATCH 35/56] Delete pom.xml --- .../src/main/java/com/baeldung/pom.xml | 50 ------------------- 1 file changed, 50 deletions(-) delete mode 100644 spring-boot-angular/src/main/java/com/baeldung/pom.xml diff --git a/spring-boot-angular/src/main/java/com/baeldung/pom.xml b/spring-boot-angular/src/main/java/com/baeldung/pom.xml deleted file mode 100644 index ac86f932b4..0000000000 --- a/spring-boot-angular/src/main/java/com/baeldung/pom.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - 4.0.0 - com.baeldung.springbootangular - spring-boot-angular - 1.0 - jar - Spring Boot Angular Application - - - org.springframework.boot - spring-boot-starter-parent - 2.1.3.RELEASE - - - - - - org.springframework.boot - spring-boot-starter-data-jpa - - - org.springframework.boot - spring-boot-starter-web - - - com.h2database - h2 - runtime - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - - - 1.8 - - \ No newline at end of file From 4562a2fa073f943e2764a58eacc8f6cc575d1393 Mon Sep 17 00:00:00 2001 From: Kamlesh Kumar Date: Fri, 16 Aug 2019 11:28:26 +0530 Subject: [PATCH 36/56] Code example: Using a Mutex Object in Java (#7587) --- .../concurrent/mutex/SequenceGenerator.java | 11 +++ .../mutex/SequenceGeneratorUsingMonitor.java | 18 +++++ .../SequenceGeneratorUsingReentrantLock.java | 18 +++++ .../SequenceGeneratorUsingSemaphore.java | 18 +++++ ...quenceGeneratorUsingSynchronizedBlock.java | 12 +++ ...uenceGeneratorUsingSynchronizedMethod.java | 10 +++ .../concurrent/mutex/MutexUnitTest.java | 81 +++++++++++++++++++ 7 files changed, 168 insertions(+) create mode 100644 core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/mutex/SequenceGenerator.java create mode 100644 core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/mutex/SequenceGeneratorUsingMonitor.java create mode 100644 core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/mutex/SequenceGeneratorUsingReentrantLock.java create mode 100644 core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/mutex/SequenceGeneratorUsingSemaphore.java create mode 100644 core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/mutex/SequenceGeneratorUsingSynchronizedBlock.java create mode 100644 core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/mutex/SequenceGeneratorUsingSynchronizedMethod.java create mode 100644 core-java-modules/core-java-concurrency-basic/src/test/java/com/baeldung/concurrent/mutex/MutexUnitTest.java diff --git a/core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/mutex/SequenceGenerator.java b/core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/mutex/SequenceGenerator.java new file mode 100644 index 0000000000..97d44e5156 --- /dev/null +++ b/core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/mutex/SequenceGenerator.java @@ -0,0 +1,11 @@ +package com.baeldung.concurrent.mutex; + +public class SequenceGenerator { + private int currentValue = 0; + + public int getNextSequence() throws InterruptedException { + currentValue = currentValue + 1; + Thread.sleep(500); + return currentValue; + } +} diff --git a/core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/mutex/SequenceGeneratorUsingMonitor.java b/core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/mutex/SequenceGeneratorUsingMonitor.java new file mode 100644 index 0000000000..30c8da4865 --- /dev/null +++ b/core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/mutex/SequenceGeneratorUsingMonitor.java @@ -0,0 +1,18 @@ +package com.baeldung.concurrent.mutex; + +import com.google.common.util.concurrent.Monitor; + +public class SequenceGeneratorUsingMonitor extends SequenceGenerator { + + private Monitor monitor = new Monitor(); + + @Override + public int getNextSequence() throws InterruptedException { + monitor.enter(); + try { + return super.getNextSequence(); + } finally { + monitor.leave(); + } + } +} diff --git a/core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/mutex/SequenceGeneratorUsingReentrantLock.java b/core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/mutex/SequenceGeneratorUsingReentrantLock.java new file mode 100644 index 0000000000..85ce780bda --- /dev/null +++ b/core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/mutex/SequenceGeneratorUsingReentrantLock.java @@ -0,0 +1,18 @@ +package com.baeldung.concurrent.mutex; + +import java.util.concurrent.locks.ReentrantLock; + +public class SequenceGeneratorUsingReentrantLock extends SequenceGenerator { + + private ReentrantLock mutex = new ReentrantLock(); + + @Override + public int getNextSequence() throws InterruptedException { + try { + mutex.lock(); + return super.getNextSequence(); + } finally { + mutex.unlock(); + } + } +} diff --git a/core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/mutex/SequenceGeneratorUsingSemaphore.java b/core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/mutex/SequenceGeneratorUsingSemaphore.java new file mode 100644 index 0000000000..fdece049e6 --- /dev/null +++ b/core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/mutex/SequenceGeneratorUsingSemaphore.java @@ -0,0 +1,18 @@ +package com.baeldung.concurrent.mutex; + +import java.util.concurrent.Semaphore; + +public class SequenceGeneratorUsingSemaphore extends SequenceGenerator { + + private Semaphore mutex = new Semaphore(1); + + @Override + public int getNextSequence() throws InterruptedException { + try { + mutex.acquire(); + return super.getNextSequence(); + } finally { + mutex.release(); + } + } +} diff --git a/core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/mutex/SequenceGeneratorUsingSynchronizedBlock.java b/core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/mutex/SequenceGeneratorUsingSynchronizedBlock.java new file mode 100644 index 0000000000..d485eae21c --- /dev/null +++ b/core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/mutex/SequenceGeneratorUsingSynchronizedBlock.java @@ -0,0 +1,12 @@ +package com.baeldung.concurrent.mutex; + +public class SequenceGeneratorUsingSynchronizedBlock extends SequenceGenerator { + + @Override + public int getNextSequence() throws InterruptedException { + synchronized (this) { + return super.getNextSequence(); + } + } + +} diff --git a/core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/mutex/SequenceGeneratorUsingSynchronizedMethod.java b/core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/mutex/SequenceGeneratorUsingSynchronizedMethod.java new file mode 100644 index 0000000000..441b33dc43 --- /dev/null +++ b/core-java-modules/core-java-concurrency-basic/src/main/java/com/baeldung/concurrent/mutex/SequenceGeneratorUsingSynchronizedMethod.java @@ -0,0 +1,10 @@ +package com.baeldung.concurrent.mutex; + +public class SequenceGeneratorUsingSynchronizedMethod extends SequenceGenerator { + + @Override + public synchronized int getNextSequence() throws InterruptedException { + return super.getNextSequence(); + } + +} diff --git a/core-java-modules/core-java-concurrency-basic/src/test/java/com/baeldung/concurrent/mutex/MutexUnitTest.java b/core-java-modules/core-java-concurrency-basic/src/test/java/com/baeldung/concurrent/mutex/MutexUnitTest.java new file mode 100644 index 0000000000..620179800a --- /dev/null +++ b/core-java-modules/core-java-concurrency-basic/src/test/java/com/baeldung/concurrent/mutex/MutexUnitTest.java @@ -0,0 +1,81 @@ +package com.baeldung.concurrent.mutex; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; + +import org.junit.Assert; +import org.junit.Test; + +import com.baeldung.concurrent.mutex.SequenceGenerator; +import com.baeldung.concurrent.mutex.SequenceGeneratorUsingMonitor; +import com.baeldung.concurrent.mutex.SequenceGeneratorUsingReentrantLock; +import com.baeldung.concurrent.mutex.SequenceGeneratorUsingSemaphore; +import com.baeldung.concurrent.mutex.SequenceGeneratorUsingSynchronizedBlock; +import com.baeldung.concurrent.mutex.SequenceGeneratorUsingSynchronizedMethod; + +public class MutexUnitTest { + + private final int RANGE = 30; + + @Test + public void givenUnsafeSequenceGenerator_whenRaceCondition_thenUnexpectedBehavior() throws Exception { + Set uniqueSequences = getASetOFUniqueSequences(new SequenceGenerator()); + Assert.assertNotEquals(RANGE, uniqueSequences.size()); + } + + @Test + public void givenSequenceGeneratorUsingSynchronizedMethod_whenRaceCondition_thenSuccess() throws Exception { + Set uniqueSequences = getASetOFUniqueSequences(new SequenceGeneratorUsingSynchronizedMethod()); + Assert.assertEquals(RANGE, uniqueSequences.size()); + } + + @Test + public void givenSequenceGeneratorUsingSynchronizedBlock_whenRaceCondition_thenSuccess() throws Exception { + Set uniqueSequences = getASetOFUniqueSequences(new SequenceGeneratorUsingSynchronizedBlock()); + Assert.assertEquals(RANGE, uniqueSequences.size()); + } + + @Test + public void givenSequenceGeneratorUsingReentrantLock_whenRaceCondition_thenSuccess() throws Exception { + Set uniqueSequences = getASetOFUniqueSequences(new SequenceGeneratorUsingReentrantLock()); + Assert.assertEquals(RANGE, uniqueSequences.size()); + } + + @Test + public void givenSequenceGeneratorUsingSemaphore_whenRaceCondition_thenSuccess() throws Exception { + Set uniqueSequences = getASetOFUniqueSequences(new SequenceGeneratorUsingSemaphore()); + Assert.assertEquals(RANGE, uniqueSequences.size()); + } + + @Test + public void givenSequenceGeneratorUsingMonitor_whenRaceCondition_thenSuccess() throws Exception { + Set uniqueSequences = getASetOFUniqueSequences(new SequenceGeneratorUsingMonitor()); + Assert.assertEquals(RANGE, uniqueSequences.size()); + } + + private Set getASetOFUniqueSequences(SequenceGenerator generator) throws Exception { + ExecutorService executor = Executors.newFixedThreadPool(3); + Set uniqueSequences = new HashSet<>(); + List> futures = new ArrayList<>(); + + for (int i = 0; i < RANGE; i++) { + futures.add(executor.submit(generator::getNextSequence)); + } + + for (Future future : futures) { + uniqueSequences.add(future.get()); + } + + executor.awaitTermination(15, TimeUnit.SECONDS); + executor.shutdown(); + + return uniqueSequences; + } + +} From d84f97cf7e4c197850b3035ff89f542eb3e3ac36 Mon Sep 17 00:00:00 2001 From: Pazis Date: Fri, 16 Aug 2019 10:34:45 +0430 Subject: [PATCH 37/56] InterpolationSearch (#7575) --- .../InterpolationSearch.java | 35 +++++++++++++++++++ .../InterpolationSearchUnitTest.java | 29 +++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 algorithms-miscellaneous-3/src/main/java/com/baeldung/algorithms/interpolationsearch/InterpolationSearch.java create mode 100644 algorithms-miscellaneous-3/src/test/java/com/baeldung/algorithms/interpolationsearch/InterpolationSearchUnitTest.java diff --git a/algorithms-miscellaneous-3/src/main/java/com/baeldung/algorithms/interpolationsearch/InterpolationSearch.java b/algorithms-miscellaneous-3/src/main/java/com/baeldung/algorithms/interpolationsearch/InterpolationSearch.java new file mode 100644 index 0000000000..91423eeaa8 --- /dev/null +++ b/algorithms-miscellaneous-3/src/main/java/com/baeldung/algorithms/interpolationsearch/InterpolationSearch.java @@ -0,0 +1,35 @@ +package com.baeldung.algorithms.interpolationsearch; + +public class InterpolationSearch { + + public static int interpolationSearch(int[] data, int item) { + + int highEnd = (data.length - 1); + int lowEnd = 0; + + while (item >= data[lowEnd] && item <= data[highEnd] && lowEnd <= highEnd) { + + int probe = lowEnd + (highEnd - lowEnd) * (item - data[lowEnd]) / (data[highEnd] - data[lowEnd]); + + if (highEnd == lowEnd) { + if (data[lowEnd] == item) { + return lowEnd; + } else { + return -1; + } + } + + if (data[probe] == item) { + return probe; + } + + if (data[probe] < item) { + lowEnd = probe + 1; + } else { + highEnd = probe - 1; + } + } + return -1; + } + +} diff --git a/algorithms-miscellaneous-3/src/test/java/com/baeldung/algorithms/interpolationsearch/InterpolationSearchUnitTest.java b/algorithms-miscellaneous-3/src/test/java/com/baeldung/algorithms/interpolationsearch/InterpolationSearchUnitTest.java new file mode 100644 index 0000000000..8ad962055e --- /dev/null +++ b/algorithms-miscellaneous-3/src/test/java/com/baeldung/algorithms/interpolationsearch/InterpolationSearchUnitTest.java @@ -0,0 +1,29 @@ +package com.baeldung.algorithms.interpolationsearch; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.Before; +import org.junit.Test; + +public class InterpolationSearchUnitTest { + + private int[] myData; + + @Before + public void setUp() { + myData = new int[]{13,21,34,55,69,73,84,101}; + } + + @Test + public void givenSortedArray_whenLookingFor84_thenReturn6() { + int pos = InterpolationSearch.interpolationSearch(myData, 84); + assertEquals(6, pos); + } + + @Test + public void givenSortedArray_whenLookingFor19_thenReturnMinusOne() { + int pos = InterpolationSearch.interpolationSearch(myData, 19); + assertEquals(-1, pos); + } + +} From 5e8cc65f3549ab3b9d7d08cc659354933b717316 Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Fri, 16 Aug 2019 10:12:27 +0300 Subject: [PATCH 38/56] Update README.md --- libraries-security/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libraries-security/README.md b/libraries-security/README.md index b9bbf11cdf..96f3fcdac6 100644 --- a/libraries-security/README.md +++ b/libraries-security/README.md @@ -3,3 +3,5 @@ - [Guide to ScribeJava](https://www.baeldung.com/scribejava) - [Guide to Passay](https://www.baeldung.com/java-passay) - [Guide to Google Tink](https://www.baeldung.com/google-tink) +- [Introduction to BouncyCastle with Java](https://www.baeldung.com/java-bouncy-castle) +- [Intro to Jasypt](https://www.baeldung.com/jasypt) From 11adece4ea3ea1cad5ac5dbcab4fcc2391ce231c Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Fri, 16 Aug 2019 10:15:14 +0300 Subject: [PATCH 39/56] Update README.md --- libraries/README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/libraries/README.md b/libraries/README.md index 4ac63e044f..ebf087ccd8 100644 --- a/libraries/README.md +++ b/libraries/README.md @@ -3,13 +3,11 @@ - [Introduction to Javatuples](http://www.baeldung.com/java-tuples) - [Introduction to Javassist](http://www.baeldung.com/javassist) - [Introduction to Apache Flink with Java](http://www.baeldung.com/apache-flink) -- [Introduction to JSONassert](http://www.baeldung.com/jsonassert) - [Intro to JaVers](http://www.baeldung.com/javers) - [Merging Streams in Java](http://www.baeldung.com/java-merge-streams) - [Introduction to Quartz](http://www.baeldung.com/quartz) - [How to Warm Up the JVM](http://www.baeldung.com/java-jvm-warmup) - [Software Transactional Memory in Java Using Multiverse](http://www.baeldung.com/java-multiverse-stm) -- [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 Neuroph](http://www.baeldung.com/neuroph) - [Quick Guide to RSS with Rome](http://www.baeldung.com/rome-rss) From bd5480e3b35fe7256b5fce2fd605fc7d6b3cb4f2 Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Fri, 16 Aug 2019 10:21:21 +0300 Subject: [PATCH 40/56] Update pom.xml --- pom.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pom.xml b/pom.xml index afe165cf4d..cd0ff05e8a 100644 --- a/pom.xml +++ b/pom.xml @@ -507,6 +507,7 @@ libraries-data-2 libraries-apache-commons libraries-primitive + libraries-testing libraries-security libraries-server libraries-http @@ -1200,6 +1201,7 @@ libraries-data libraries-data-2 libraries-apache-commons + libraries-testing libraries-security libraries-server libraries-http From a7a7e6ce9c606be47cd257c64c1bec3aa3f0b499 Mon Sep 17 00:00:00 2001 From: dupirefr Date: Fri, 16 Aug 2019 09:44:25 +0200 Subject: [PATCH 41/56] [BAEL-2996] Using OptionsBuilder instead of main method for benchmarking --- .../com/baeldung/matrices/HomemadeMatrix.java | 23 ++++++ .../logarithm/LogarithmUnitTest.java | 6 +- .../MatrixMultiplicationBenchmarking.java | 79 ++++++++++++++++++- .../com/baeldung/matrices/MatrixProvider.java | 33 ++++++++ .../matrices/apache/RealMatrixUnitTest.java | 10 +-- .../matrices/colt/DoubleMatrix2DUnitTest.java | 11 +-- .../matrices/ejml/SimpleMatrixUnitTest.java | 11 +-- .../homemade/HomemadeMatrixUnitTest.java | 12 +-- .../matrices/la4j/Basic2DMatrixUnitTest.java | 11 +-- .../matrices/nd4j/INDArrayUnitTest.java | 10 +-- 10 files changed, 154 insertions(+), 52 deletions(-) create mode 100644 java-math/src/main/java/com/baeldung/matrices/HomemadeMatrix.java create mode 100644 java-math/src/test/java/com/baeldung/matrices/MatrixProvider.java diff --git a/java-math/src/main/java/com/baeldung/matrices/HomemadeMatrix.java b/java-math/src/main/java/com/baeldung/matrices/HomemadeMatrix.java new file mode 100644 index 0000000000..0676250959 --- /dev/null +++ b/java-math/src/main/java/com/baeldung/matrices/HomemadeMatrix.java @@ -0,0 +1,23 @@ +package com.baeldung.matrices; + +public class HomemadeMatrix { + public static double[][] multiplyMatrices(double[][] firstMatrix, double[][] secondMatrix) { + double[][] result = new double[firstMatrix.length][secondMatrix[0].length]; + + for (int row = 0; row < result.length; row++) { + for (int col = 0; col < result[row].length; col++) { + result[row][col] = multiplyMatricesCell(firstMatrix, secondMatrix, row, col); + } + } + + return result; + } + + private static double multiplyMatricesCell(double[][] firstMatrix, double[][] secondMatrix, int row, int col) { + double cell = 0; + for (int i = 0; i < secondMatrix.length; i++) { + cell += firstMatrix[row][i] * secondMatrix[i][col]; + } + return cell; + } +} \ No newline at end of file diff --git a/java-math/src/test/java/com/baeldung/algorithms/logarithm/LogarithmUnitTest.java b/java-math/src/test/java/com/baeldung/algorithms/logarithm/LogarithmUnitTest.java index a9a04c8d6f..facad1edc4 100644 --- a/java-math/src/test/java/com/baeldung/algorithms/logarithm/LogarithmUnitTest.java +++ b/java-math/src/test/java/com/baeldung/algorithms/logarithm/LogarithmUnitTest.java @@ -4,7 +4,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.Test; -public class CombinationUnitTest { +public class LogarithmUnitTest { @Test public void givenLog10_shouldReturnValidResults() { @@ -13,9 +13,9 @@ public class CombinationUnitTest { } @Test - public void givenLog10_shouldReturnValidResults() { + public void givenLogE_shouldReturnValidResults() { assertEquals(Math.log(Math.E), 1); - assertEquals(Math.log(10), 2.30258); + assertEquals(Math.log(10), 2.30258, 0.00001); } @Test diff --git a/java-math/src/test/java/com/baeldung/matrices/MatrixMultiplicationBenchmarking.java b/java-math/src/test/java/com/baeldung/matrices/MatrixMultiplicationBenchmarking.java index 1e3b183aa7..171a1d28a4 100644 --- a/java-math/src/test/java/com/baeldung/matrices/MatrixMultiplicationBenchmarking.java +++ b/java-math/src/test/java/com/baeldung/matrices/MatrixMultiplicationBenchmarking.java @@ -1,9 +1,84 @@ package com.baeldung.matrices; +import cern.colt.matrix.DoubleFactory2D; +import cern.colt.matrix.DoubleMatrix2D; +import cern.colt.matrix.linalg.Algebra; +import org.apache.commons.math3.linear.Array2DRowRealMatrix; +import org.apache.commons.math3.linear.RealMatrix; +import org.ejml.simple.SimpleMatrix; +import org.la4j.Matrix; +import org.la4j.matrix.dense.Basic2DMatrix; +import org.nd4j.linalg.api.ndarray.INDArray; +import org.nd4j.linalg.factory.Nd4j; +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.runner.Runner; +import org.openjdk.jmh.runner.options.Options; +import org.openjdk.jmh.runner.options.OptionsBuilder; + +import java.util.concurrent.TimeUnit; + public class MatrixMultiplicationBenchmarking { public static void main(String[] args) throws Exception { - org.openjdk.jmh.Main.main(args); + Options opt = new OptionsBuilder() + .include(MatrixMultiplicationBenchmarking.class.getSimpleName()) + .mode(Mode.AverageTime) + .forks(2) + .warmupIterations(5) + .measurementIterations(10) + .timeUnit(TimeUnit.MICROSECONDS) + .build(); + + new Runner(opt).run(); } -} + @Benchmark + public Object homemadeMatrixMultiplication(MatrixProvider matrixProvider) { + return HomemadeMatrix.multiplyMatrices(matrixProvider.getFirstMatrix(), matrixProvider.getSecondMatrix()); + } + + @Benchmark + public Object ejmlMatrixMultiplication(MatrixProvider matrixProvider) { + SimpleMatrix firstMatrix = new SimpleMatrix(matrixProvider.getFirstMatrix()); + SimpleMatrix secondMatrix = new SimpleMatrix(matrixProvider.getSecondMatrix()); + + return firstMatrix.mult(secondMatrix); + } + + @Benchmark + public Object apacheCommonsMatrixMultiplication(MatrixProvider matrixProvider) { + RealMatrix firstMatrix = new Array2DRowRealMatrix(matrixProvider.getFirstMatrix()); + RealMatrix secondMatrix = new Array2DRowRealMatrix(matrixProvider.getSecondMatrix()); + + return firstMatrix.multiply(secondMatrix); + } + + @Benchmark + public Object la4jMatrixMultiplication(MatrixProvider matrixProvider) { + Matrix firstMatrix = new Basic2DMatrix(matrixProvider.getFirstMatrix()); + Matrix secondMatrix = new Basic2DMatrix(matrixProvider.getSecondMatrix()); + + return firstMatrix.multiply(secondMatrix); + } + + @Benchmark + public Object nd4jMatrixMultiplication(MatrixProvider matrixProvider) { + INDArray firstMatrix = Nd4j.create(matrixProvider.getFirstMatrix()); + INDArray secondMatrix = Nd4j.create(matrixProvider.getSecondMatrix()); + + return firstMatrix.mmul(secondMatrix); + } + + @Benchmark + public Object coltMatrixMultiplication(MatrixProvider matrixProvider) { + DoubleFactory2D doubleFactory2D = DoubleFactory2D.dense; + + DoubleMatrix2D firstMatrix = doubleFactory2D.make(matrixProvider.getFirstMatrix()); + DoubleMatrix2D secondMatrix = doubleFactory2D.make(matrixProvider.getSecondMatrix()); + + Algebra algebra = new Algebra(); + return algebra.mult(firstMatrix, secondMatrix); + } + +} \ No newline at end of file diff --git a/java-math/src/test/java/com/baeldung/matrices/MatrixProvider.java b/java-math/src/test/java/com/baeldung/matrices/MatrixProvider.java new file mode 100644 index 0000000000..33bd074b6e --- /dev/null +++ b/java-math/src/test/java/com/baeldung/matrices/MatrixProvider.java @@ -0,0 +1,33 @@ +package com.baeldung.matrices; + +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.State; + +@State(Scope.Benchmark) +public class MatrixProvider { + private double[][] firstMatrix; + private double[][] secondMatrix; + + public MatrixProvider() { + firstMatrix = + new double[][] { + new double[] {1d, 5d}, + new double[] {2d, 3d}, + new double[] {1d ,7d} + }; + + secondMatrix = + new double[][] { + new double[] {1d, 2d, 3d, 7d}, + new double[] {5d, 2d, 8d, 1d} + }; + } + + public double[][] getFirstMatrix() { + return firstMatrix; + } + + public double[][] getSecondMatrix() { + return secondMatrix; + } +} \ No newline at end of file diff --git a/java-math/src/test/java/com/baeldung/matrices/apache/RealMatrixUnitTest.java b/java-math/src/test/java/com/baeldung/matrices/apache/RealMatrixUnitTest.java index 05944e7b3a..e7d99fbe3e 100644 --- a/java-math/src/test/java/com/baeldung/matrices/apache/RealMatrixUnitTest.java +++ b/java-math/src/test/java/com/baeldung/matrices/apache/RealMatrixUnitTest.java @@ -7,15 +7,10 @@ import org.openjdk.jmh.annotations.*; import static org.assertj.core.api.Assertions.assertThat; -@BenchmarkMode(Mode.AverageTime) -@Fork(value = 2) -@Warmup(iterations = 5) -@Measurement(iterations = 10) -public class RealMatrixUnitTest { +class RealMatrixUnitTest { @Test - @Benchmark - public void givenTwoMatrices_whenMultiply_thenMultiplicatedMatrix() { + void givenTwoMatrices_whenMultiply_thenMultiplicatedMatrix() { RealMatrix firstMatrix = new Array2DRowRealMatrix( new double[][] { new double[] {1d, 5d}, @@ -43,5 +38,4 @@ public class RealMatrixUnitTest { assertThat(actual).isEqualTo(expected); } - } diff --git a/java-math/src/test/java/com/baeldung/matrices/colt/DoubleMatrix2DUnitTest.java b/java-math/src/test/java/com/baeldung/matrices/colt/DoubleMatrix2DUnitTest.java index fb4a419eb0..da66cd7d61 100644 --- a/java-math/src/test/java/com/baeldung/matrices/colt/DoubleMatrix2DUnitTest.java +++ b/java-math/src/test/java/com/baeldung/matrices/colt/DoubleMatrix2DUnitTest.java @@ -8,15 +8,10 @@ import org.openjdk.jmh.annotations.*; import static org.assertj.core.api.Assertions.assertThat; -@BenchmarkMode(Mode.AverageTime) -@Fork(value = 2) -@Warmup(iterations = 5) -@Measurement(iterations = 10) -public class DoubleMatrix2DUnitTest { +class DoubleMatrix2DUnitTest { @Test - @Benchmark - public void givenTwoMatrices_whenMultiply_thenMultiplicatedMatrix() { + void givenTwoMatrices_whenMultiply_thenMultiplicatedMatrix() { DoubleFactory2D doubleFactory2D = DoubleFactory2D.dense; DoubleMatrix2D firstMatrix = doubleFactory2D.make( @@ -48,4 +43,4 @@ public class DoubleMatrix2DUnitTest { assertThat(actual).isEqualTo(expected); } -} +} \ No newline at end of file diff --git a/java-math/src/test/java/com/baeldung/matrices/ejml/SimpleMatrixUnitTest.java b/java-math/src/test/java/com/baeldung/matrices/ejml/SimpleMatrixUnitTest.java index b025266a1d..60381ece63 100644 --- a/java-math/src/test/java/com/baeldung/matrices/ejml/SimpleMatrixUnitTest.java +++ b/java-math/src/test/java/com/baeldung/matrices/ejml/SimpleMatrixUnitTest.java @@ -6,15 +6,10 @@ import org.openjdk.jmh.annotations.*; import static org.assertj.core.api.Assertions.assertThat; -@BenchmarkMode(Mode.AverageTime) -@Fork(value = 2) -@Warmup(iterations = 5) -@Measurement(iterations = 10) -public class SimpleMatrixUnitTest { +class SimpleMatrixUnitTest { @Test - @Benchmark - public void givenTwoMatrices_whenMultiply_thenMultiplicatedMatrix() { + void givenTwoMatrices_whenMultiply_thenMultiplicatedMatrix() { SimpleMatrix firstMatrix = new SimpleMatrix( new double[][] { new double[] {1d, 5d}, @@ -43,4 +38,4 @@ public class SimpleMatrixUnitTest { assertThat(actual).matches(m -> m.isIdentical(expected, 0d)); } -} +} \ No newline at end of file diff --git a/java-math/src/test/java/com/baeldung/matrices/homemade/HomemadeMatrixUnitTest.java b/java-math/src/test/java/com/baeldung/matrices/homemade/HomemadeMatrixUnitTest.java index be9e483d5b..d1a062ee79 100644 --- a/java-math/src/test/java/com/baeldung/matrices/homemade/HomemadeMatrixUnitTest.java +++ b/java-math/src/test/java/com/baeldung/matrices/homemade/HomemadeMatrixUnitTest.java @@ -5,15 +5,10 @@ import org.openjdk.jmh.annotations.*; import static org.assertj.core.api.Assertions.assertThat; -@BenchmarkMode(Mode.AverageTime) -@Fork(value = 2) -@Warmup(iterations = 5) -@Measurement(iterations = 10) -public class HomemadeMatrixUnitTest { +class HomemadeMatrixUnitTest { @Test - @Benchmark - public void givenTwoMatrices_whenMultiply_thenMultiplicatedMatrix() { + void givenTwoMatrices_whenMultiply_thenMultiplicatedMatrix() { double[][] firstMatrix = { new double[]{1d, 5d}, new double[]{2d, 3d}, @@ -55,4 +50,5 @@ public class HomemadeMatrixUnitTest { } return cell; } -} + +} \ No newline at end of file diff --git a/java-math/src/test/java/com/baeldung/matrices/la4j/Basic2DMatrixUnitTest.java b/java-math/src/test/java/com/baeldung/matrices/la4j/Basic2DMatrixUnitTest.java index afb84ff3db..01731a3dd5 100644 --- a/java-math/src/test/java/com/baeldung/matrices/la4j/Basic2DMatrixUnitTest.java +++ b/java-math/src/test/java/com/baeldung/matrices/la4j/Basic2DMatrixUnitTest.java @@ -7,15 +7,10 @@ import org.openjdk.jmh.annotations.*; import static org.assertj.core.api.Assertions.assertThat; -@BenchmarkMode(Mode.AverageTime) -@Fork(value = 2) -@Warmup(iterations = 5) -@Measurement(iterations = 10) -public class Basic2DMatrixUnitTest { +class Basic2DMatrixUnitTest { @Test - @Benchmark - public void givenTwoMatrices_whenMultiply_thenMultiplicatedMatrix() { + void givenTwoMatrices_whenMultiply_thenMultiplicatedMatrix() { Matrix firstMatrix = new Basic2DMatrix( new double[][]{ new double[]{1d, 5d}, @@ -44,4 +39,4 @@ public class Basic2DMatrixUnitTest { assertThat(actual).isEqualTo(expected); } -} +} \ No newline at end of file diff --git a/java-math/src/test/java/com/baeldung/matrices/nd4j/INDArrayUnitTest.java b/java-math/src/test/java/com/baeldung/matrices/nd4j/INDArrayUnitTest.java index fb3030bccf..72ef60a571 100644 --- a/java-math/src/test/java/com/baeldung/matrices/nd4j/INDArrayUnitTest.java +++ b/java-math/src/test/java/com/baeldung/matrices/nd4j/INDArrayUnitTest.java @@ -7,14 +7,10 @@ import org.openjdk.jmh.annotations.*; import static org.assertj.core.api.Assertions.assertThat; -@BenchmarkMode(Mode.AverageTime) -@Fork(value = 2) -@Warmup(iterations = 5) -@Measurement(iterations = 10) -public class INDArrayUnitTest { +class INDArrayUnitTest { @Test - public void givenTwoMatrices_whenMultiply_thenMultiplicatedMatrix() { + void givenTwoMatrices_whenMultiply_thenMultiplicatedMatrix() { INDArray firstMatrix = Nd4j.create( new double[][]{ new double[]{1d, 5d}, @@ -43,4 +39,4 @@ public class INDArrayUnitTest { assertThat(actual).isEqualTo(expected); } -} +} \ No newline at end of file From a7c0f0b0d963e29e02dcc5108137bd023fe78910 Mon Sep 17 00:00:00 2001 From: Dhawal Kapil Date: Sat, 17 Aug 2019 00:57:57 +0530 Subject: [PATCH 42/56] BAEL-16783 Slice 2 | The top 100 articles should have their own package in the module --- .../{java/io => writetofile}/JavaWriteToFileUnitTest.java | 2 +- .../persistence/{dao/user => jpaquery}/UserRepository.java | 2 +- .../{dao/user => jpaquery}/UserRepositoryCustom.java | 2 +- .../{dao/user => jpaquery}/UserRepositoryCustomImpl.java | 2 +- .../{dao/user => jpaquery}/UserRepositoryCommon.java | 3 ++- .../{dao/user => jpaquery}/UserRepositoryIntegrationTest.java | 2 +- .../BarMappingExamplesController.java | 2 +- .../BazzNewMappingsExampleController.java | 2 +- .../FooMappingExamplesController.java | 2 +- 9 files changed, 10 insertions(+), 9 deletions(-) rename core-java-modules/core-java-io/src/test/java/org/baeldung/{java/io => writetofile}/JavaWriteToFileUnitTest.java (99%) rename persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/spring/data/persistence/{dao/user => jpaquery}/UserRepository.java (98%) rename persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/spring/data/persistence/{dao/user => jpaquery}/UserRepositoryCustom.java (86%) rename persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/spring/data/persistence/{dao/user => jpaquery}/UserRepositoryCustomImpl.java (97%) rename persistence-modules/spring-persistence-simple/src/test/java/com/baeldung/spring/data/persistence/{dao/user => jpaquery}/UserRepositoryCommon.java (99%) rename persistence-modules/spring-persistence-simple/src/test/java/com/baeldung/spring/data/persistence/{dao/user => jpaquery}/UserRepositoryIntegrationTest.java (96%) rename spring-rest-simple/src/main/java/com/baeldung/{web/controller => requestmapping}/BarMappingExamplesController.java (97%) rename spring-rest-simple/src/main/java/com/baeldung/{web/controller => requestmapping}/BazzNewMappingsExampleController.java (98%) rename spring-rest-simple/src/main/java/com/baeldung/{web/controller => requestmapping}/FooMappingExamplesController.java (98%) diff --git a/core-java-modules/core-java-io/src/test/java/org/baeldung/java/io/JavaWriteToFileUnitTest.java b/core-java-modules/core-java-io/src/test/java/org/baeldung/writetofile/JavaWriteToFileUnitTest.java similarity index 99% rename from core-java-modules/core-java-io/src/test/java/org/baeldung/java/io/JavaWriteToFileUnitTest.java rename to core-java-modules/core-java-io/src/test/java/org/baeldung/writetofile/JavaWriteToFileUnitTest.java index 9ff95c4e16..bdc6b34b5c 100644 --- a/core-java-modules/core-java-io/src/test/java/org/baeldung/java/io/JavaWriteToFileUnitTest.java +++ b/core-java-modules/core-java-io/src/test/java/org/baeldung/writetofile/JavaWriteToFileUnitTest.java @@ -1,4 +1,4 @@ -package org.baeldung.java.io; +package org.baeldung.writetofile; import static org.junit.Assert.assertEquals; diff --git a/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/spring/data/persistence/dao/user/UserRepository.java b/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/spring/data/persistence/jpaquery/UserRepository.java similarity index 98% rename from persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/spring/data/persistence/dao/user/UserRepository.java rename to persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/spring/data/persistence/jpaquery/UserRepository.java index e8f95302ef..f22970c401 100644 --- a/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/spring/data/persistence/dao/user/UserRepository.java +++ b/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/spring/data/persistence/jpaquery/UserRepository.java @@ -1,4 +1,4 @@ -package com.baeldung.spring.data.persistence.dao.user; +package com.baeldung.spring.data.persistence.jpaquery; import java.time.LocalDate; import java.util.Collection; diff --git a/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/spring/data/persistence/dao/user/UserRepositoryCustom.java b/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/spring/data/persistence/jpaquery/UserRepositoryCustom.java similarity index 86% rename from persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/spring/data/persistence/dao/user/UserRepositoryCustom.java rename to persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/spring/data/persistence/jpaquery/UserRepositoryCustom.java index ff92159077..8bfcb93158 100644 --- a/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/spring/data/persistence/dao/user/UserRepositoryCustom.java +++ b/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/spring/data/persistence/jpaquery/UserRepositoryCustom.java @@ -1,4 +1,4 @@ -package com.baeldung.spring.data.persistence.dao.user; +package com.baeldung.spring.data.persistence.jpaquery; import java.util.Collection; import java.util.List; diff --git a/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/spring/data/persistence/dao/user/UserRepositoryCustomImpl.java b/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/spring/data/persistence/jpaquery/UserRepositoryCustomImpl.java similarity index 97% rename from persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/spring/data/persistence/dao/user/UserRepositoryCustomImpl.java rename to persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/spring/data/persistence/jpaquery/UserRepositoryCustomImpl.java index 8bd8217e83..f264ca0b44 100644 --- a/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/spring/data/persistence/dao/user/UserRepositoryCustomImpl.java +++ b/persistence-modules/spring-persistence-simple/src/main/java/com/baeldung/spring/data/persistence/jpaquery/UserRepositoryCustomImpl.java @@ -1,4 +1,4 @@ -package com.baeldung.spring.data.persistence.dao.user; +package com.baeldung.spring.data.persistence.jpaquery; import java.util.ArrayList; import java.util.Collection; diff --git a/persistence-modules/spring-persistence-simple/src/test/java/com/baeldung/spring/data/persistence/dao/user/UserRepositoryCommon.java b/persistence-modules/spring-persistence-simple/src/test/java/com/baeldung/spring/data/persistence/jpaquery/UserRepositoryCommon.java similarity index 99% rename from persistence-modules/spring-persistence-simple/src/test/java/com/baeldung/spring/data/persistence/dao/user/UserRepositoryCommon.java rename to persistence-modules/spring-persistence-simple/src/test/java/com/baeldung/spring/data/persistence/jpaquery/UserRepositoryCommon.java index d002ff7575..69ddbb9b9f 100644 --- a/persistence-modules/spring-persistence-simple/src/test/java/com/baeldung/spring/data/persistence/dao/user/UserRepositoryCommon.java +++ b/persistence-modules/spring-persistence-simple/src/test/java/com/baeldung/spring/data/persistence/jpaquery/UserRepositoryCommon.java @@ -1,4 +1,4 @@ -package com.baeldung.spring.data.persistence.dao.user; +package com.baeldung.spring.data.persistence.jpaquery; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.assertEquals; @@ -19,6 +19,7 @@ import javax.persistence.EntityManager; import javax.persistence.Query; import com.baeldung.spring.data.persistence.config.PersistenceConfig; +import com.baeldung.spring.data.persistence.jpaquery.UserRepository; import com.baeldung.spring.data.persistence.model.User; import org.junit.After; import org.junit.Test; diff --git a/persistence-modules/spring-persistence-simple/src/test/java/com/baeldung/spring/data/persistence/dao/user/UserRepositoryIntegrationTest.java b/persistence-modules/spring-persistence-simple/src/test/java/com/baeldung/spring/data/persistence/jpaquery/UserRepositoryIntegrationTest.java similarity index 96% rename from persistence-modules/spring-persistence-simple/src/test/java/com/baeldung/spring/data/persistence/dao/user/UserRepositoryIntegrationTest.java rename to persistence-modules/spring-persistence-simple/src/test/java/com/baeldung/spring/data/persistence/jpaquery/UserRepositoryIntegrationTest.java index 2a9bffaeae..3bffb51917 100644 --- a/persistence-modules/spring-persistence-simple/src/test/java/com/baeldung/spring/data/persistence/dao/user/UserRepositoryIntegrationTest.java +++ b/persistence-modules/spring-persistence-simple/src/test/java/com/baeldung/spring/data/persistence/jpaquery/UserRepositoryIntegrationTest.java @@ -1,4 +1,4 @@ -package com.baeldung.spring.data.persistence.dao.user; +package com.baeldung.spring.data.persistence.jpaquery; import static org.assertj.core.api.Assertions.assertThat; diff --git a/spring-rest-simple/src/main/java/com/baeldung/web/controller/BarMappingExamplesController.java b/spring-rest-simple/src/main/java/com/baeldung/requestmapping/BarMappingExamplesController.java similarity index 97% rename from spring-rest-simple/src/main/java/com/baeldung/web/controller/BarMappingExamplesController.java rename to spring-rest-simple/src/main/java/com/baeldung/requestmapping/BarMappingExamplesController.java index 3611a4e6cc..e238c545cf 100644 --- a/spring-rest-simple/src/main/java/com/baeldung/web/controller/BarMappingExamplesController.java +++ b/spring-rest-simple/src/main/java/com/baeldung/requestmapping/BarMappingExamplesController.java @@ -1,4 +1,4 @@ -package com.baeldung.web.controller; +package com.baeldung.requestmapping; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; diff --git a/spring-rest-simple/src/main/java/com/baeldung/web/controller/BazzNewMappingsExampleController.java b/spring-rest-simple/src/main/java/com/baeldung/requestmapping/BazzNewMappingsExampleController.java similarity index 98% rename from spring-rest-simple/src/main/java/com/baeldung/web/controller/BazzNewMappingsExampleController.java rename to spring-rest-simple/src/main/java/com/baeldung/requestmapping/BazzNewMappingsExampleController.java index 6c7da0296f..0c64006fd4 100644 --- a/spring-rest-simple/src/main/java/com/baeldung/web/controller/BazzNewMappingsExampleController.java +++ b/spring-rest-simple/src/main/java/com/baeldung/requestmapping/BazzNewMappingsExampleController.java @@ -1,4 +1,4 @@ -package com.baeldung.web.controller; +package com.baeldung.requestmapping; import java.util.Arrays; import java.util.List; diff --git a/spring-rest-simple/src/main/java/com/baeldung/web/controller/FooMappingExamplesController.java b/spring-rest-simple/src/main/java/com/baeldung/requestmapping/FooMappingExamplesController.java similarity index 98% rename from spring-rest-simple/src/main/java/com/baeldung/web/controller/FooMappingExamplesController.java rename to spring-rest-simple/src/main/java/com/baeldung/requestmapping/FooMappingExamplesController.java index ec75e4c859..2c11e36141 100644 --- a/spring-rest-simple/src/main/java/com/baeldung/web/controller/FooMappingExamplesController.java +++ b/spring-rest-simple/src/main/java/com/baeldung/requestmapping/FooMappingExamplesController.java @@ -1,4 +1,4 @@ -package com.baeldung.web.controller; +package com.baeldung.requestmapping; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; From 376f6f9871a2d9671f05b4031236d274bdf328f9 Mon Sep 17 00:00:00 2001 From: amit2103 Date: Sat, 17 Aug 2019 16:06:49 +0530 Subject: [PATCH 43/56] [BAEL-16739] - Fixed the integrations tests in rest-assured --- testing-modules/rest-assured/pom.xml | 5 ----- .../restassured/controller/AppControllerIntegrationTest.java | 2 +- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/testing-modules/rest-assured/pom.xml b/testing-modules/rest-assured/pom.xml index eb85c6c8be..75f33c26f1 100644 --- a/testing-modules/rest-assured/pom.xml +++ b/testing-modules/rest-assured/pom.xml @@ -162,11 +162,6 @@ commons-collections ${commons-collections.version} - - - org.springframework.boot - spring-boot-starter-security - diff --git a/testing-modules/rest-assured/src/test/java/com/baeldung/restassured/controller/AppControllerIntegrationTest.java b/testing-modules/rest-assured/src/test/java/com/baeldung/restassured/controller/AppControllerIntegrationTest.java index a55c0a69e4..83a6e544b7 100644 --- a/testing-modules/rest-assured/src/test/java/com/baeldung/restassured/controller/AppControllerIntegrationTest.java +++ b/testing-modules/rest-assured/src/test/java/com/baeldung/restassured/controller/AppControllerIntegrationTest.java @@ -17,7 +17,7 @@ import java.util.Set; import javax.annotation.PostConstruct; -import org.junit.jupiter.api.Test; +import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; From e9d0959e1f421349f0cfd4777cad08784ad64675 Mon Sep 17 00:00:00 2001 From: amit2103 Date: Sat, 17 Aug 2019 21:27:47 +0530 Subject: [PATCH 44/56] [BAEL-16680] - Modified Spring Milestone/RC repos to GA --- spring-roo/pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/spring-roo/pom.xml b/spring-roo/pom.xml index baa0e7f5e6..eb3a680d93 100644 --- a/spring-roo/pom.xml +++ b/spring-roo/pom.xml @@ -604,14 +604,14 @@ - 2.0.0.RC1 + 2.0.0.RELEASE 8 UTF-8 1.8 1.5.4 - 1.4.1.RELEASE + 2.1.7.RELEASE 1.8 - 1.2.0.RC1 + 1.2.0.RELEASE 1.1.2 3.0.0.RELEASE 2.0.0 From 8b68e172349ec77272dad7c11eaac5d0051e23dc Mon Sep 17 00:00:00 2001 From: Pallavi Priyadarshani <50460471+pallavi-priyadarshani@users.noreply.github.com> Date: Sun, 18 Aug 2019 02:55:55 +0530 Subject: [PATCH 45/56] Update Movie.java --- .../listvalidation/model/Movie.java | 29 ++++++++++++++----- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/model/Movie.java b/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/model/Movie.java index 035c5f4412..f5a49877bf 100644 --- a/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/model/Movie.java +++ b/spring-mvc-simple-2/src/main/java/com/baeldung/validation/listvalidation/model/Movie.java @@ -4,13 +4,6 @@ import java.util.UUID; import javax.validation.constraints.NotEmpty; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; - -@Getter -@Setter -@NoArgsConstructor public class Movie { private String id; @@ -23,5 +16,25 @@ public class Movie { .toString(); this.name = name; } - + + public Movie(){ + + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + } From d4b8f8696532b3a19e1a5abfb707757d1d9f5263 Mon Sep 17 00:00:00 2001 From: Pallavi Priyadarshani <50460471+pallavi-priyadarshani@users.noreply.github.com> Date: Sun, 18 Aug 2019 03:05:51 +0530 Subject: [PATCH 46/56] Update pom.xml --- spring-mvc-simple-2/pom.xml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/spring-mvc-simple-2/pom.xml b/spring-mvc-simple-2/pom.xml index 2fe93f1fae..74302cff78 100644 --- a/spring-mvc-simple-2/pom.xml +++ b/spring-mvc-simple-2/pom.xml @@ -18,10 +18,6 @@ org.springframework.boot spring-boot-starter-web - - org.projectlombok - lombok - From db1b7f1f1415ca90ed62457a92eac987c4f48a4d Mon Sep 17 00:00:00 2001 From: mikr Date: Sun, 18 Aug 2019 22:46:19 +0200 Subject: [PATCH 47/56] BAEL-3012 Spring Request Parameters with Thymeleaf - move to new module --- spring-thymeleaf-2/README.md | 1 + .../baeldung/thymeleaf/controller/ParticipantController.java | 4 ++-- .../src/main/resources/templates-2}/participants.html | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) rename {spring-thymeleaf => spring-thymeleaf-2}/src/main/java/com/baeldung/thymeleaf/controller/ParticipantController.java (91%) rename {spring-thymeleaf/src/main/resources/templates => spring-thymeleaf-2/src/main/resources/templates-2}/participants.html (86%) diff --git a/spring-thymeleaf-2/README.md b/spring-thymeleaf-2/README.md index 9e12f2d99f..ce83032cb5 100644 --- a/spring-thymeleaf-2/README.md +++ b/spring-thymeleaf-2/README.md @@ -2,3 +2,4 @@ - [Working with Enums in Thymeleaf](https://www.baeldung.com/thymeleaf-enums) - [Changing the Thymeleaf Template Directory in Spring Boot](https://www.baeldung.com/spring-thymeleaf-template-directory) +- [Spring Request Parameters with Thymeleaf](https://www.baeldung.com/spring-thymeleaf-request-parameters) diff --git a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/ParticipantController.java b/spring-thymeleaf-2/src/main/java/com/baeldung/thymeleaf/controller/ParticipantController.java similarity index 91% rename from spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/ParticipantController.java rename to spring-thymeleaf-2/src/main/java/com/baeldung/thymeleaf/controller/ParticipantController.java index eebe37e000..9a354e709c 100644 --- a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/ParticipantController.java +++ b/spring-thymeleaf-2/src/main/java/com/baeldung/thymeleaf/controller/ParticipantController.java @@ -1,4 +1,4 @@ -package com.example.demo; +package com.baeldung.thymeleaf.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; @@ -12,7 +12,7 @@ import static java.util.Arrays.asList; @Controller public class ParticipantController { - @RequestMapping("/") + @RequestMapping("/participants") public String index( @RequestParam(value = "participant", required = false) String participant, @RequestParam(value = "country", required = false) String country, diff --git a/spring-thymeleaf/src/main/resources/templates/participants.html b/spring-thymeleaf-2/src/main/resources/templates-2/participants.html similarity index 86% rename from spring-thymeleaf/src/main/resources/templates/participants.html rename to spring-thymeleaf-2/src/main/resources/templates-2/participants.html index 8d4e552093..f7e017e777 100644 --- a/spring-thymeleaf/src/main/resources/templates/participants.html +++ b/spring-thymeleaf-2/src/main/resources/templates-2/participants.html @@ -4,7 +4,7 @@ Enter participant - + @@ -25,7 +25,7 @@ Users - User [[${userId}]] + User [[${userId}]] From 2c7c520a444eaec5f2fce8851182851b9b384eb1 Mon Sep 17 00:00:00 2001 From: Catalin Burcea Date: Mon, 19 Aug 2019 05:35:36 +0300 Subject: [PATCH 48/56] create triangles with for loops - examples (#7573) --- .../printtriangles/PrintTriangleExamples.java | 16 +++++++++++++-- .../PrintTriangleExamplesUnitTest.java | 20 +++++++++++++------ 2 files changed, 28 insertions(+), 8 deletions(-) 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 index a67c54a922..156766f382 100644 --- 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 @@ -4,7 +4,7 @@ import org.apache.commons.lang3.StringUtils; public class PrintTriangleExamples { - public static String printARightAngledTriangle(int N) { + public static String printARightTriangle(int N) { StringBuilder result = new StringBuilder(); for (int r = 1; r <= N; r++) { for (int j = 1; j <= r; j++) { @@ -29,6 +29,17 @@ public class PrintTriangleExamples { return result.toString(); } + public static String printAnIsoscelesTriangleUsingStringUtils(int N) { + StringBuilder result = new StringBuilder(); + + for (int r = 1; r <= N; r++) { + result.append(StringUtils.repeat(' ', N - r)); + result.append(StringUtils.repeat('*', 2 * r - 1)); + 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); @@ -41,8 +52,9 @@ public class PrintTriangleExamples { } public static void main(String[] args) { - System.out.println(printARightAngledTriangle(5)); + System.out.println(printARightTriangle(5)); System.out.println(printAnIsoscelesTriangle(5)); + System.out.println(printAnIsoscelesTriangleUsingStringUtils(5)); System.out.println(printAnIsoscelesTriangleUsingSubstring(5)); } 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 index 6fa6584b8e..97e99290c9 100644 --- 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 @@ -9,9 +9,9 @@ import static org.junit.Assert.assertEquals; @RunWith(JUnitParamsRunner.class) public class PrintTriangleExamplesUnitTest { - - private static Object[][] rightAngledTriangles() { - String expected0 = ""; + + private static Object[][] rightTriangles() { + String expected0 = ""; String expected2 = "*" + System.lineSeparator() + "**" + System.lineSeparator(); @@ -39,9 +39,9 @@ public class PrintTriangleExamplesUnitTest { } @Test - @Parameters(method = "rightAngledTriangles") - public void whenPrintARightAngledTriangleIsCalled_ThenTheCorrectStringIsReturned(int nrOfRows, String expected) { - String actual = PrintTriangleExamples.printARightAngledTriangle(nrOfRows); + @Parameters(method = "rightTriangles") + public void whenPrintARightTriangleIsCalled_ThenTheCorrectStringIsReturned(int nrOfRows, String expected) { + String actual = PrintTriangleExamples.printARightTriangle(nrOfRows); assertEquals(expected, actual); } @@ -81,6 +81,14 @@ public class PrintTriangleExamplesUnitTest { assertEquals(expected, actual); } + + @Test + @Parameters(method = "isoscelesTriangles") + public void whenPrintAnIsoscelesTriangleUsingStringUtilsIsCalled_ThenTheCorrectStringIsReturned(int nrOfRows, String expected) { + String actual = PrintTriangleExamples.printAnIsoscelesTriangleUsingStringUtils(nrOfRows); + + assertEquals(expected, actual); + } @Test @Parameters(method = "isoscelesTriangles") From 92aa2bd43724f05041af2df6d5a1a21d5ff7be66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Norberto=20Ritzmann=20J=C3=BAnior?= Date: Mon, 19 Aug 2019 22:27:36 +0200 Subject: [PATCH 49/56] Adding Metrics AspectJ article code changes (#7387) * Adding Metrics AspectJ article code changes * BAEL-3050 - Changes required by the code review in the PR * BAEL-3050 - Small fixes * fixed a { in the wrong place --- metrics/pom.xml | 19 +++++++++++ .../metrics/aspectj/MetricsAspectJMain.java | 34 +++++++++++++++++++ .../metrics/aspectj/ObjectRunner.java | 22 ++++++++++++ 3 files changed, 75 insertions(+) create mode 100644 metrics/src/main/java/com/baeldung/metrics/aspectj/MetricsAspectJMain.java create mode 100644 metrics/src/main/java/com/baeldung/metrics/aspectj/ObjectRunner.java diff --git a/metrics/pom.xml b/metrics/pom.xml index 014931a957..4cd9f3de79 100644 --- a/metrics/pom.xml +++ b/metrics/pom.xml @@ -86,6 +86,24 @@ ${spectator-api.version} + + io.astefanutti.metrics.aspectj + metrics-aspectj + ${metrics-aspectj.version} + + + org.slf4j + slf4j-api + + + + + + io.astefanutti.metrics.aspectj + metrics-aspectj-deps + ${metrics-aspectj.version} + + org.assertj assertj-core @@ -104,6 +122,7 @@ 0.57.1 2.0.7.RELEASE 3.11.1 + 1.1.0 diff --git a/metrics/src/main/java/com/baeldung/metrics/aspectj/MetricsAspectJMain.java b/metrics/src/main/java/com/baeldung/metrics/aspectj/MetricsAspectJMain.java new file mode 100644 index 0000000000..5bcf196035 --- /dev/null +++ b/metrics/src/main/java/com/baeldung/metrics/aspectj/MetricsAspectJMain.java @@ -0,0 +1,34 @@ +package com.baeldung.metrics.aspectj; + +import com.codahale.metrics.ConsoleReporter; +import com.codahale.metrics.MetricRegistry; +import com.codahale.metrics.SharedMetricRegistries; +import java.io.PrintStream; +import java.util.concurrent.TimeUnit; + +public class MetricsAspectJMain { + private static final MetricRegistry REGISTRY = new MetricRegistry(); + + public static void main(String args[]) throws InterruptedException { + startReport(); + + ObjectRunner runner = new ObjectRunner(); + + for (int i = 0; i < 5; i++) { + runner.run(); + } + + Thread.sleep(3000L); + } + + private static void startReport() { + SharedMetricRegistries.add(ObjectRunner.REGISTRY_NAME, REGISTRY); + + ConsoleReporter.forRegistry(REGISTRY) + .convertRatesTo(TimeUnit.SECONDS) + .convertDurationsTo(TimeUnit.MILLISECONDS) + .outputTo(new PrintStream(System.out)) + .build() + .start(3, TimeUnit.SECONDS); + } +} diff --git a/metrics/src/main/java/com/baeldung/metrics/aspectj/ObjectRunner.java b/metrics/src/main/java/com/baeldung/metrics/aspectj/ObjectRunner.java new file mode 100644 index 0000000000..ffded9bdb6 --- /dev/null +++ b/metrics/src/main/java/com/baeldung/metrics/aspectj/ObjectRunner.java @@ -0,0 +1,22 @@ +package com.baeldung.metrics.aspectj; + +import com.codahale.metrics.annotation.Timed; +import io.astefanutti.metrics.aspectj.Metrics; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +@Metrics( registry = ObjectRunner.REGISTRY_NAME) +public class ObjectRunner { + + private static final Logger logger = LoggerFactory.getLogger(ObjectRunner.class); + public static final String REGISTRY_NAME = "ObjectRunner"; + + @Timed(name = "timerName") + public void run() { + logger.info("run"); + try { + Thread.sleep(1000L); + } catch (InterruptedException e) { + } + } +} From 5f538f6680b993298df18726eb4a28393e729e89 Mon Sep 17 00:00:00 2001 From: Sam Millington Date: Tue, 20 Aug 2019 03:07:23 +0100 Subject: [PATCH 50/56] [BAEL-2951] moved packages (#7605) * moved packages * fixed import --- .../algorithms/sort/bynumber}/NaturalOrderComparators.java | 2 +- .../sort/bynumber}/NaturalOrderComparatorsUnitTest.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) rename {algorithms-miscellaneous-3/src/main/java/com/baeldung/algorithms/stringsortingbynumber => algorithms-sorting/src/main/java/com/baeldung/algorithms/sort/bynumber}/NaturalOrderComparators.java (93%) rename {algorithms-miscellaneous-3/src/test/java/com/baeldung/algorithms/stringsortingbynumber => algorithms-sorting/src/test/java/com/baeldung/algorithms/sort/bynumber}/NaturalOrderComparatorsUnitTest.java (94%) diff --git a/algorithms-miscellaneous-3/src/main/java/com/baeldung/algorithms/stringsortingbynumber/NaturalOrderComparators.java b/algorithms-sorting/src/main/java/com/baeldung/algorithms/sort/bynumber/NaturalOrderComparators.java similarity index 93% rename from algorithms-miscellaneous-3/src/main/java/com/baeldung/algorithms/stringsortingbynumber/NaturalOrderComparators.java rename to algorithms-sorting/src/main/java/com/baeldung/algorithms/sort/bynumber/NaturalOrderComparators.java index 376b196aa1..b177bd60fc 100644 --- a/algorithms-miscellaneous-3/src/main/java/com/baeldung/algorithms/stringsortingbynumber/NaturalOrderComparators.java +++ b/algorithms-sorting/src/main/java/com/baeldung/algorithms/sort/bynumber/NaturalOrderComparators.java @@ -1,4 +1,4 @@ -package com.baeldung.algorithms.stringsortingbynumber; +package com.baeldung.algorithms.sort.bynumber; import java.util.Comparator; diff --git a/algorithms-miscellaneous-3/src/test/java/com/baeldung/algorithms/stringsortingbynumber/NaturalOrderComparatorsUnitTest.java b/algorithms-sorting/src/test/java/com/baeldung/algorithms/sort/bynumber/NaturalOrderComparatorsUnitTest.java similarity index 94% rename from algorithms-miscellaneous-3/src/test/java/com/baeldung/algorithms/stringsortingbynumber/NaturalOrderComparatorsUnitTest.java rename to algorithms-sorting/src/test/java/com/baeldung/algorithms/sort/bynumber/NaturalOrderComparatorsUnitTest.java index 549151bc93..2f05f62147 100644 --- a/algorithms-miscellaneous-3/src/test/java/com/baeldung/algorithms/stringsortingbynumber/NaturalOrderComparatorsUnitTest.java +++ b/algorithms-sorting/src/test/java/com/baeldung/algorithms/sort/bynumber/NaturalOrderComparatorsUnitTest.java @@ -1,6 +1,6 @@ -package com.baeldung.algorithms.stringsortingbynumber; +package com.baeldung.algorithms.sort.bynumber; -import com.baeldung.algorithms.stringsortingbynumber.NaturalOrderComparators; +import com.baeldung.algorithms.sort.bynumber.NaturalOrderComparators; import org.junit.Test; import java.util.ArrayList; From 5bc7d85eee86448619320fcfbc0a04299e522ebe Mon Sep 17 00:00:00 2001 From: Ger Roza Date: Tue, 20 Aug 2019 01:42:47 -0300 Subject: [PATCH 51/56] [BAEL-3066] (Reverted and Redone) Spring Security: Exploring JDBC Authentication article (#7565) * Revert "[BAEL-3066] Spring Security: Exploring JDBC Authentication (#7441)" This reverts commit 5aecdeb0211c9dc44e3e5138d4a30bf837d19204. * Redone Spring-Security-Exploring-JDBC-Authentication code, now witout using submodules --- spring-security-mvc-boot/pom.xml | 35 ++++++++++++--- .../spring-security-mvc-boot-default/pom.xml | 42 ------------------ .../spring-security-mvc-boot-mysql/pom.xml | 28 ------------ .../spring-security-mvc-boot-postgre/pom.xml | 28 ------------ .../postgre/SpringContextIntegrationTest.java | 17 ------- .../src/main/java/com/baeldung/AppConfig.java | 2 +- .../com/baeldung/SpringSecurityConfig.java | 0 .../data/repositories/TweetRepository.java | 0 .../data/repositories/UserRepository.java | 0 .../java/com/baeldung/models/AppUser.java | 0 .../main/java/com/baeldung/models/Tweet.java | 0 .../baeldung/security/AppUserPrincipal.java | 0 .../AuthenticationSuccessHandlerImpl.java | 0 .../security/CustomUserDetailsService.java | 0 .../com/baeldung/util/DummyContentUtil.java | 0 .../java/org/baeldung/custom/Application.java | 2 + .../custom/config/MethodSecurityConfig.java | 0 .../org/baeldung/custom/config/MvcConfig.java | 0 .../custom/config/SecurityConfig.java | 0 .../custom/persistence/SetupData.java | 0 .../dao/OrganizationRepository.java | 0 .../persistence/dao/PrivilegeRepository.java | 0 .../persistence/dao/UserRepository.java | 0 .../custom/persistence/model/Foo.java | 0 .../persistence/model/Organization.java | 0 .../custom/persistence/model/Privilege.java | 0 .../custom/persistence/model/User.java | 0 ...CustomMethodSecurityExpressionHandler.java | 0 .../CustomMethodSecurityExpressionRoot.java | 0 .../security/CustomPermissionEvaluator.java | 0 .../security/MySecurityExpressionRoot.java | 0 .../custom/security/MyUserDetailsService.java | 0 .../custom/security/MyUserPrincipal.java | 0 .../baeldung/custom/web/MainController.java | 0 .../java/org/baeldung/ip/IpApplication.java | 2 + .../CustomIpAuthenticationProvider.java | 0 .../baeldung/ip/config/SecurityConfig.java | 0 .../baeldung/ip/config/SecurityXmlConfig.java | 0 .../org/baeldung/ip/web/MainController.java | 0 .../h2/H2JdbcAuthenticationApplication.java | 2 + .../h2/config/SecurityConfiguration.java | 0 .../h2/web/UserController.java | 0 .../MySqlJdbcAuthenticationApplication.java | 4 +- .../mysql/config/SecurityConfiguration.java | 2 +- .../mysql/web/UserController.java | 2 +- .../PostgreJdbcAuthenticationApplication.java | 4 +- .../postgre/config/SecurityConfiguration.java | 2 +- .../postgre/web/UserController.java | 2 +- .../CustomAuthenticationProvider.java | 0 .../MultipleAuthController.java | 0 .../MultipleAuthProvidersApplication.java | 2 + .../MultipleAuthProvidersSecurityConfig.java | 0 .../MultipleEntryPointsApplication.java | 2 + .../MultipleEntryPointsSecurityConfig.java | 0 .../multipleentrypoints/PagesController.java | 0 .../MultipleLoginApplication.java | 2 + .../multiplelogin/MultipleLoginMvcConfig.java | 0 .../MultipleLoginSecurityConfig.java | 0 .../multiplelogin/UsersController.java | 0 .../CustomAuthenticationProvider.java | 0 .../MyLogoutSuccessHandler.java | 0 .../MyUserDetailsService.java | 0 .../RolesAuthoritiesApplication.java | 0 .../rolesauthorities/config/MvcConfig.java | 0 .../config/SecurityConfig.java | 0 .../rolesauthorities/model/Privilege.java | 0 .../baeldung/rolesauthorities/model/Role.java | 0 .../baeldung/rolesauthorities/model/User.java | 0 .../persistence/IUserService.java | 0 .../persistence/PrivilegeRepository.java | 0 .../persistence/RoleRepository.java | 0 .../persistence/SetupDataLoader.java | 0 .../persistence/UserRepository.java | 0 .../persistence/UserService.java | 0 .../baeldung/ssl/HttpsEnabledApplication.java | 2 + .../java/org/baeldung/ssl/SecurityConfig.java | 0 .../org/baeldung/ssl/WelcomeController.java | 0 .../org/baeldung/voter/MinuteBasedVoter.java | 0 .../org/baeldung/voter/VoterApplication.java | 0 .../org/baeldung/voter/VoterMvcConfig.java | 0 .../org/baeldung/voter/WebSecurityConfig.java | 0 .../org/baeldung/voter/XmlSecurityConfig.java | 0 .../application-defaults.properties} | 3 +- .../resources/application-mysql.properties} | 5 ++- .../resources/application-postgre.properties} | 3 +- .../main/resources/application-ssl.properties | 0 .../src/main/resources/application.properties | 1 + .../main/resources/data-mysql.sql} | 0 .../main/resources/data-postgre.sql} | 0 .../src/main/resources/keystore/baeldung.p12 | Bin .../src/main/resources/logback.xml | 0 .../main/resources/persistence-h2.properties | 0 .../main/resources/schema-mysql.sql} | 0 .../main/resources/schema-postgre.sql} | 0 .../spring-security-custom-voter.xml | 0 .../src/main/resources/spring-security-ip.xml | 0 ...pring-security-multiple-auth-providers.xml | 0 .../spring-security-multiple-entry.xml | 0 .../src/main/resources/templates/403.html | 0 .../main/resources/templates/adminPage.html | 0 .../src/main/resources/templates/index.html | 0 .../src/main/resources/templates/login.html | 0 .../main/resources/templates/loginAdmin.html | 0 .../main/resources/templates/loginUser.html | 0 .../templates/multipleHttpElems/login.html | 0 .../multipleHttpElems/loginWithWarning.html | 0 .../multipleHttpElems/multipleHttpLinks.html | 0 .../multipleHttpElems/myAdminPage.html | 0 .../multipleHttpElems/myGuestPage.html | 0 .../multipleHttpElems/myPrivateUserPage.html | 0 .../multipleHttpElems/myUserPage.html | 0 .../src/main/resources/templates/private.html | 0 .../resources/templates/protectedLinks.html | 0 .../templates/rolesauthorities/home.html | 0 .../templates/rolesauthorities/login.html | 0 .../protectedbyauthority.html | 0 .../rolesauthorities/protectedbynothing.html | 0 .../rolesauthorities/protectedbyrole.html | 0 .../main/resources/templates/ssl/welcome.html | 0 .../main/resources/templates/userPage.html | 0 ...SpringDataWithSecurityIntegrationTest.java | 0 .../SpringContextIntegrationTest.java | 0 .../h2}/SpringContextIntegrationTest.java | 4 +- .../h2/web/UserControllerLiveTest.java | 0 .../mysql/web/UserControllerLiveTest.java | 2 +- .../postgre/web/UserControllerLiveTest.java | 4 +- .../org/baeldung/web/ApplicationLiveTest.java | 0 ...stomUserDetailsServiceIntegrationTest.java | 0 .../web/HttpsApplicationIntegrationTest.java | 0 .../java/org/baeldung/web/IpLiveTest.java | 0 ...thProvidersApplicationIntegrationTest.java | 0 .../MultipleEntryPointsIntegrationTest.java | 0 132 files changed, 65 insertions(+), 139 deletions(-) delete mode 100644 spring-security-mvc-boot/spring-security-mvc-boot-default/pom.xml delete mode 100644 spring-security-mvc-boot/spring-security-mvc-boot-mysql/pom.xml delete mode 100644 spring-security-mvc-boot/spring-security-mvc-boot-postgre/pom.xml delete mode 100644 spring-security-mvc-boot/spring-security-mvc-boot-postgre/src/test/java/com/baeldung/jdbcauthentication/postgre/SpringContextIntegrationTest.java rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/com/baeldung/AppConfig.java (96%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/com/baeldung/SpringSecurityConfig.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/com/baeldung/data/repositories/TweetRepository.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/com/baeldung/data/repositories/UserRepository.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/com/baeldung/models/AppUser.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/com/baeldung/models/Tweet.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/com/baeldung/security/AppUserPrincipal.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/com/baeldung/security/AuthenticationSuccessHandlerImpl.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/com/baeldung/security/CustomUserDetailsService.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/com/baeldung/util/DummyContentUtil.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/custom/Application.java (77%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/custom/config/MethodSecurityConfig.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/custom/config/MvcConfig.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/custom/config/SecurityConfig.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/custom/persistence/SetupData.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/custom/persistence/dao/OrganizationRepository.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/custom/persistence/dao/PrivilegeRepository.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/custom/persistence/dao/UserRepository.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/custom/persistence/model/Foo.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/custom/persistence/model/Organization.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/custom/persistence/model/Privilege.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/custom/persistence/model/User.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/custom/security/CustomMethodSecurityExpressionHandler.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/custom/security/CustomMethodSecurityExpressionRoot.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/custom/security/CustomPermissionEvaluator.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/custom/security/MySecurityExpressionRoot.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/custom/security/MyUserDetailsService.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/custom/security/MyUserPrincipal.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/custom/web/MainController.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/ip/IpApplication.java (77%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/ip/config/CustomIpAuthenticationProvider.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/ip/config/SecurityConfig.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/ip/config/SecurityXmlConfig.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/ip/web/MainController.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/jdbcauthentication/h2/H2JdbcAuthenticationApplication.java (79%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/jdbcauthentication/h2/config/SecurityConfiguration.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/jdbcauthentication/h2/web/UserController.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-mysql/src/main/java/com => src/main/java/org}/baeldung/jdbcauthentication/mysql/MySqlJdbcAuthenticationApplication.java (66%) rename spring-security-mvc-boot/{spring-security-mvc-boot-mysql/src/main/java/com => src/main/java/org}/baeldung/jdbcauthentication/mysql/config/SecurityConfiguration.java (95%) rename spring-security-mvc-boot/{spring-security-mvc-boot-mysql/src/main/java/com => src/main/java/org}/baeldung/jdbcauthentication/mysql/web/UserController.java (88%) rename spring-security-mvc-boot/{spring-security-mvc-boot-postgre/src/main/java/com => src/main/java/org}/baeldung/jdbcauthentication/postgre/PostgreJdbcAuthenticationApplication.java (66%) rename spring-security-mvc-boot/{spring-security-mvc-boot-postgre/src/main/java/com => src/main/java/org}/baeldung/jdbcauthentication/postgre/config/SecurityConfiguration.java (93%) rename spring-security-mvc-boot/{spring-security-mvc-boot-postgre/src/main/java/com => src/main/java/org}/baeldung/jdbcauthentication/postgre/web/UserController.java (88%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/multipleauthproviders/CustomAuthenticationProvider.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/multipleauthproviders/MultipleAuthController.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/multipleauthproviders/MultipleAuthProvidersApplication.java (78%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/multipleauthproviders/MultipleAuthProvidersSecurityConfig.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/multipleentrypoints/MultipleEntryPointsApplication.java (77%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/multipleentrypoints/MultipleEntryPointsSecurityConfig.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/multipleentrypoints/PagesController.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/multiplelogin/MultipleLoginApplication.java (78%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/multiplelogin/MultipleLoginMvcConfig.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/multiplelogin/MultipleLoginSecurityConfig.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/multiplelogin/UsersController.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/rolesauthorities/CustomAuthenticationProvider.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/rolesauthorities/MyLogoutSuccessHandler.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/rolesauthorities/MyUserDetailsService.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/rolesauthorities/RolesAuthoritiesApplication.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/rolesauthorities/config/MvcConfig.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/rolesauthorities/config/SecurityConfig.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/rolesauthorities/model/Privilege.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/rolesauthorities/model/Role.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/rolesauthorities/model/User.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/rolesauthorities/persistence/IUserService.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/rolesauthorities/persistence/PrivilegeRepository.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/rolesauthorities/persistence/RoleRepository.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/rolesauthorities/persistence/SetupDataLoader.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/rolesauthorities/persistence/UserRepository.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/rolesauthorities/persistence/UserService.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/ssl/HttpsEnabledApplication.java (78%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/ssl/SecurityConfig.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/ssl/WelcomeController.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/voter/MinuteBasedVoter.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/voter/VoterApplication.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/voter/VoterMvcConfig.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/voter/WebSecurityConfig.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/java/org/baeldung/voter/XmlSecurityConfig.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default/src/main/resources/application.properties => src/main/resources/application-defaults.properties} (76%) rename spring-security-mvc-boot/{spring-security-mvc-boot-mysql/src/main/resources/application.properties => src/main/resources/application-mysql.properties} (77%) rename spring-security-mvc-boot/{spring-security-mvc-boot-postgre/src/main/resources/application.properties => src/main/resources/application-postgre.properties} (86%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/resources/application-ssl.properties (100%) create mode 100644 spring-security-mvc-boot/src/main/resources/application.properties rename spring-security-mvc-boot/{spring-security-mvc-boot-mysql/src/main/resources/data.sql => src/main/resources/data-mysql.sql} (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-postgre/src/main/resources/data.sql => src/main/resources/data-postgre.sql} (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/resources/keystore/baeldung.p12 (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/resources/logback.xml (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/resources/persistence-h2.properties (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-mysql/src/main/resources/schema.sql => src/main/resources/schema-mysql.sql} (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-postgre/src/main/resources/schema.sql => src/main/resources/schema-postgre.sql} (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/resources/spring-security-custom-voter.xml (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/resources/spring-security-ip.xml (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/resources/spring-security-multiple-auth-providers.xml (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/resources/spring-security-multiple-entry.xml (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/resources/templates/403.html (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/resources/templates/adminPage.html (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/resources/templates/index.html (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/resources/templates/login.html (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/resources/templates/loginAdmin.html (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/resources/templates/loginUser.html (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/resources/templates/multipleHttpElems/login.html (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/resources/templates/multipleHttpElems/loginWithWarning.html (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/resources/templates/multipleHttpElems/multipleHttpLinks.html (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/resources/templates/multipleHttpElems/myAdminPage.html (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/resources/templates/multipleHttpElems/myGuestPage.html (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/resources/templates/multipleHttpElems/myPrivateUserPage.html (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/resources/templates/multipleHttpElems/myUserPage.html (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/resources/templates/private.html (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/resources/templates/protectedLinks.html (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/resources/templates/rolesauthorities/home.html (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/resources/templates/rolesauthorities/login.html (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/resources/templates/rolesauthorities/protectedbyauthority.html (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/resources/templates/rolesauthorities/protectedbynothing.html (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/resources/templates/rolesauthorities/protectedbyrole.html (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/resources/templates/ssl/welcome.html (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/main/resources/templates/userPage.html (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/test/java/com/baeldung/relationships/SpringDataWithSecurityIntegrationTest.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/test/java/org/baeldung/SpringContextIntegrationTest.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-mysql/src/test/java/com/baeldung/jdbcauthentication/mysql => src/test/java/org/baeldung/jdbcauthentication/h2}/SpringContextIntegrationTest.java (74%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/test/java/org/baeldung/jdbcauthentication/h2/web/UserControllerLiveTest.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-mysql/src/test/java/com => src/test/java/org}/baeldung/jdbcauthentication/mysql/web/UserControllerLiveTest.java (95%) rename spring-security-mvc-boot/{spring-security-mvc-boot-postgre/src/test/java/com => src/test/java/org}/baeldung/jdbcauthentication/postgre/web/UserControllerLiveTest.java (92%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/test/java/org/baeldung/web/ApplicationLiveTest.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/test/java/org/baeldung/web/CustomUserDetailsServiceIntegrationTest.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/test/java/org/baeldung/web/HttpsApplicationIntegrationTest.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/test/java/org/baeldung/web/IpLiveTest.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/test/java/org/baeldung/web/MultipleAuthProvidersApplicationIntegrationTest.java (100%) rename spring-security-mvc-boot/{spring-security-mvc-boot-default => }/src/test/java/org/baeldung/web/MultipleEntryPointsIntegrationTest.java (100%) diff --git a/spring-security-mvc-boot/pom.xml b/spring-security-mvc-boot/pom.xml index 906bebf442..0063a2d82b 100644 --- a/spring-security-mvc-boot/pom.xml +++ b/spring-security-mvc-boot/pom.xml @@ -7,7 +7,7 @@ spring-security-mvc-boot 0.0.1-SNAPSHOT spring-security-mvc-boot - pom + war Spring Security MVC Boot @@ -46,6 +46,20 @@ org.springframework.security spring-security-data + + mysql + mysql-connector-java + runtime + + + com.h2database + h2 + + + org.postgresql + postgresql + runtime + org.hamcrest hamcrest-core @@ -214,13 +228,22 @@ - - spring-security-mvc-boot-default - spring-security-mvc-boot-mysql - spring-security-mvc-boot-postgre - + org.baeldung.custom.Application + + + + + + + + + 1.1.2 1.6.1 2.6.11 diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/pom.xml b/spring-security-mvc-boot/spring-security-mvc-boot-default/pom.xml deleted file mode 100644 index 8f7f18f093..0000000000 --- a/spring-security-mvc-boot/spring-security-mvc-boot-default/pom.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - 4.0.0 - com.baeldung - spring-security-mvc-boot-default - 0.0.1-SNAPSHOT - spring-security-mvc-boot-default - jar - Spring Security MVC Boot - - - spring-security-mvc-boot - com.baeldung - 0.0.1-SNAPSHOT - ../ - - - - - com.h2database - h2 - - - - - org.baeldung.custom.Application - - - - - - - - - - - diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-mysql/pom.xml b/spring-security-mvc-boot/spring-security-mvc-boot-mysql/pom.xml deleted file mode 100644 index 765953c557..0000000000 --- a/spring-security-mvc-boot/spring-security-mvc-boot-mysql/pom.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - 4.0.0 - com.baeldung - spring-security-mvc-boot-mysql - 0.0.1-SNAPSHOT - spring-security-mvc-boot-mysql - jar - Spring Security MVC Boot using MySQL - - - spring-security-mvc-boot - com.baeldung - 0.0.1-SNAPSHOT - .. - - - - - mysql - mysql-connector-java - runtime - - - - diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-postgre/pom.xml b/spring-security-mvc-boot/spring-security-mvc-boot-postgre/pom.xml deleted file mode 100644 index e68e47b596..0000000000 --- a/spring-security-mvc-boot/spring-security-mvc-boot-postgre/pom.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - 4.0.0 - com.baeldung - spring-security-mvc-boot-postgre - 0.0.1-SNAPSHOT - spring-security-mvc-boot-postgre - jar - Spring Security MVC Boot using PostgreSQL - - - spring-security-mvc-boot - com.baeldung - 0.0.1-SNAPSHOT - .. - - - - - org.postgresql - postgresql - runtime - - - - diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-postgre/src/test/java/com/baeldung/jdbcauthentication/postgre/SpringContextIntegrationTest.java b/spring-security-mvc-boot/spring-security-mvc-boot-postgre/src/test/java/com/baeldung/jdbcauthentication/postgre/SpringContextIntegrationTest.java deleted file mode 100644 index f133ef73be..0000000000 --- a/spring-security-mvc-boot/spring-security-mvc-boot-postgre/src/test/java/com/baeldung/jdbcauthentication/postgre/SpringContextIntegrationTest.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.baeldung.jdbcauthentication.postgre; - -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.jdbcauthentication.postgre.PostgreJdbcAuthenticationApplication; - -@RunWith(SpringRunner.class) -@SpringBootTest(classes = PostgreJdbcAuthenticationApplication.class) -public class SpringContextIntegrationTest { - - @Test - public void whenSpringContextIsBootstrapped_thenNoExceptions() { - } -} diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/com/baeldung/AppConfig.java b/spring-security-mvc-boot/src/main/java/com/baeldung/AppConfig.java similarity index 96% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/com/baeldung/AppConfig.java rename to spring-security-mvc-boot/src/main/java/com/baeldung/AppConfig.java index 16bbe8b326..8719e39a20 100644 --- a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/com/baeldung/AppConfig.java +++ b/spring-security-mvc-boot/src/main/java/com/baeldung/AppConfig.java @@ -18,7 +18,7 @@ import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; @SpringBootApplication -@PropertySource("classpath:persistence-h2.properties") +@PropertySource({"classpath:persistence-h2.properties", "classpath:application-defaults.properties"}) @EnableJpaRepositories(basePackages = { "com.baeldung.data.repositories" }) @EnableWebMvc @Import(SpringSecurityConfig.class) diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/com/baeldung/SpringSecurityConfig.java b/spring-security-mvc-boot/src/main/java/com/baeldung/SpringSecurityConfig.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/com/baeldung/SpringSecurityConfig.java rename to spring-security-mvc-boot/src/main/java/com/baeldung/SpringSecurityConfig.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/com/baeldung/data/repositories/TweetRepository.java b/spring-security-mvc-boot/src/main/java/com/baeldung/data/repositories/TweetRepository.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/com/baeldung/data/repositories/TweetRepository.java rename to spring-security-mvc-boot/src/main/java/com/baeldung/data/repositories/TweetRepository.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/com/baeldung/data/repositories/UserRepository.java b/spring-security-mvc-boot/src/main/java/com/baeldung/data/repositories/UserRepository.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/com/baeldung/data/repositories/UserRepository.java rename to spring-security-mvc-boot/src/main/java/com/baeldung/data/repositories/UserRepository.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/com/baeldung/models/AppUser.java b/spring-security-mvc-boot/src/main/java/com/baeldung/models/AppUser.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/com/baeldung/models/AppUser.java rename to spring-security-mvc-boot/src/main/java/com/baeldung/models/AppUser.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/com/baeldung/models/Tweet.java b/spring-security-mvc-boot/src/main/java/com/baeldung/models/Tweet.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/com/baeldung/models/Tweet.java rename to spring-security-mvc-boot/src/main/java/com/baeldung/models/Tweet.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/com/baeldung/security/AppUserPrincipal.java b/spring-security-mvc-boot/src/main/java/com/baeldung/security/AppUserPrincipal.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/com/baeldung/security/AppUserPrincipal.java rename to spring-security-mvc-boot/src/main/java/com/baeldung/security/AppUserPrincipal.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/com/baeldung/security/AuthenticationSuccessHandlerImpl.java b/spring-security-mvc-boot/src/main/java/com/baeldung/security/AuthenticationSuccessHandlerImpl.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/com/baeldung/security/AuthenticationSuccessHandlerImpl.java rename to spring-security-mvc-boot/src/main/java/com/baeldung/security/AuthenticationSuccessHandlerImpl.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/com/baeldung/security/CustomUserDetailsService.java b/spring-security-mvc-boot/src/main/java/com/baeldung/security/CustomUserDetailsService.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/com/baeldung/security/CustomUserDetailsService.java rename to spring-security-mvc-boot/src/main/java/com/baeldung/security/CustomUserDetailsService.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/com/baeldung/util/DummyContentUtil.java b/spring-security-mvc-boot/src/main/java/com/baeldung/util/DummyContentUtil.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/com/baeldung/util/DummyContentUtil.java rename to spring-security-mvc-boot/src/main/java/com/baeldung/util/DummyContentUtil.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/custom/Application.java b/spring-security-mvc-boot/src/main/java/org/baeldung/custom/Application.java similarity index 77% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/custom/Application.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/custom/Application.java index 682d429963..2bd0da48d2 100644 --- a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/custom/Application.java +++ b/spring-security-mvc-boot/src/main/java/org/baeldung/custom/Application.java @@ -3,8 +3,10 @@ package org.baeldung.custom; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; +import org.springframework.context.annotation.PropertySource; @SpringBootApplication +@PropertySource("classpath:application-defaults.properties") public class Application extends SpringBootServletInitializer { public static void main(String[] args) { SpringApplication.run(Application.class, args); diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/custom/config/MethodSecurityConfig.java b/spring-security-mvc-boot/src/main/java/org/baeldung/custom/config/MethodSecurityConfig.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/custom/config/MethodSecurityConfig.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/custom/config/MethodSecurityConfig.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/custom/config/MvcConfig.java b/spring-security-mvc-boot/src/main/java/org/baeldung/custom/config/MvcConfig.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/custom/config/MvcConfig.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/custom/config/MvcConfig.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/custom/config/SecurityConfig.java b/spring-security-mvc-boot/src/main/java/org/baeldung/custom/config/SecurityConfig.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/custom/config/SecurityConfig.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/custom/config/SecurityConfig.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/custom/persistence/SetupData.java b/spring-security-mvc-boot/src/main/java/org/baeldung/custom/persistence/SetupData.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/custom/persistence/SetupData.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/custom/persistence/SetupData.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/custom/persistence/dao/OrganizationRepository.java b/spring-security-mvc-boot/src/main/java/org/baeldung/custom/persistence/dao/OrganizationRepository.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/custom/persistence/dao/OrganizationRepository.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/custom/persistence/dao/OrganizationRepository.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/custom/persistence/dao/PrivilegeRepository.java b/spring-security-mvc-boot/src/main/java/org/baeldung/custom/persistence/dao/PrivilegeRepository.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/custom/persistence/dao/PrivilegeRepository.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/custom/persistence/dao/PrivilegeRepository.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/custom/persistence/dao/UserRepository.java b/spring-security-mvc-boot/src/main/java/org/baeldung/custom/persistence/dao/UserRepository.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/custom/persistence/dao/UserRepository.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/custom/persistence/dao/UserRepository.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/custom/persistence/model/Foo.java b/spring-security-mvc-boot/src/main/java/org/baeldung/custom/persistence/model/Foo.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/custom/persistence/model/Foo.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/custom/persistence/model/Foo.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/custom/persistence/model/Organization.java b/spring-security-mvc-boot/src/main/java/org/baeldung/custom/persistence/model/Organization.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/custom/persistence/model/Organization.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/custom/persistence/model/Organization.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/custom/persistence/model/Privilege.java b/spring-security-mvc-boot/src/main/java/org/baeldung/custom/persistence/model/Privilege.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/custom/persistence/model/Privilege.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/custom/persistence/model/Privilege.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/custom/persistence/model/User.java b/spring-security-mvc-boot/src/main/java/org/baeldung/custom/persistence/model/User.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/custom/persistence/model/User.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/custom/persistence/model/User.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/custom/security/CustomMethodSecurityExpressionHandler.java b/spring-security-mvc-boot/src/main/java/org/baeldung/custom/security/CustomMethodSecurityExpressionHandler.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/custom/security/CustomMethodSecurityExpressionHandler.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/custom/security/CustomMethodSecurityExpressionHandler.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/custom/security/CustomMethodSecurityExpressionRoot.java b/spring-security-mvc-boot/src/main/java/org/baeldung/custom/security/CustomMethodSecurityExpressionRoot.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/custom/security/CustomMethodSecurityExpressionRoot.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/custom/security/CustomMethodSecurityExpressionRoot.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/custom/security/CustomPermissionEvaluator.java b/spring-security-mvc-boot/src/main/java/org/baeldung/custom/security/CustomPermissionEvaluator.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/custom/security/CustomPermissionEvaluator.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/custom/security/CustomPermissionEvaluator.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/custom/security/MySecurityExpressionRoot.java b/spring-security-mvc-boot/src/main/java/org/baeldung/custom/security/MySecurityExpressionRoot.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/custom/security/MySecurityExpressionRoot.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/custom/security/MySecurityExpressionRoot.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/custom/security/MyUserDetailsService.java b/spring-security-mvc-boot/src/main/java/org/baeldung/custom/security/MyUserDetailsService.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/custom/security/MyUserDetailsService.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/custom/security/MyUserDetailsService.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/custom/security/MyUserPrincipal.java b/spring-security-mvc-boot/src/main/java/org/baeldung/custom/security/MyUserPrincipal.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/custom/security/MyUserPrincipal.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/custom/security/MyUserPrincipal.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/custom/web/MainController.java b/spring-security-mvc-boot/src/main/java/org/baeldung/custom/web/MainController.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/custom/web/MainController.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/custom/web/MainController.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/ip/IpApplication.java b/spring-security-mvc-boot/src/main/java/org/baeldung/ip/IpApplication.java similarity index 77% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/ip/IpApplication.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/ip/IpApplication.java index fd270686a2..b68abbaed1 100644 --- a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/ip/IpApplication.java +++ b/spring-security-mvc-boot/src/main/java/org/baeldung/ip/IpApplication.java @@ -3,8 +3,10 @@ package org.baeldung.ip; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; +import org.springframework.context.annotation.PropertySource; @SpringBootApplication +@PropertySource("classpath:application-defaults.properties") public class IpApplication extends SpringBootServletInitializer { public static void main(String[] args) { SpringApplication.run(IpApplication.class, args); diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/ip/config/CustomIpAuthenticationProvider.java b/spring-security-mvc-boot/src/main/java/org/baeldung/ip/config/CustomIpAuthenticationProvider.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/ip/config/CustomIpAuthenticationProvider.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/ip/config/CustomIpAuthenticationProvider.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/ip/config/SecurityConfig.java b/spring-security-mvc-boot/src/main/java/org/baeldung/ip/config/SecurityConfig.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/ip/config/SecurityConfig.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/ip/config/SecurityConfig.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/ip/config/SecurityXmlConfig.java b/spring-security-mvc-boot/src/main/java/org/baeldung/ip/config/SecurityXmlConfig.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/ip/config/SecurityXmlConfig.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/ip/config/SecurityXmlConfig.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/ip/web/MainController.java b/spring-security-mvc-boot/src/main/java/org/baeldung/ip/web/MainController.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/ip/web/MainController.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/ip/web/MainController.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/jdbcauthentication/h2/H2JdbcAuthenticationApplication.java b/spring-security-mvc-boot/src/main/java/org/baeldung/jdbcauthentication/h2/H2JdbcAuthenticationApplication.java similarity index 79% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/jdbcauthentication/h2/H2JdbcAuthenticationApplication.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/jdbcauthentication/h2/H2JdbcAuthenticationApplication.java index 6bd30414ef..6936cdc560 100644 --- a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/jdbcauthentication/h2/H2JdbcAuthenticationApplication.java +++ b/spring-security-mvc-boot/src/main/java/org/baeldung/jdbcauthentication/h2/H2JdbcAuthenticationApplication.java @@ -2,10 +2,12 @@ package org.baeldung.jdbcauthentication.h2; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.PropertySource; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; @SpringBootApplication @EnableWebSecurity +@PropertySource("classpath:application-defaults.properties") public class H2JdbcAuthenticationApplication { public static void main(String[] args) { diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/jdbcauthentication/h2/config/SecurityConfiguration.java b/spring-security-mvc-boot/src/main/java/org/baeldung/jdbcauthentication/h2/config/SecurityConfiguration.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/jdbcauthentication/h2/config/SecurityConfiguration.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/jdbcauthentication/h2/config/SecurityConfiguration.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/jdbcauthentication/h2/web/UserController.java b/spring-security-mvc-boot/src/main/java/org/baeldung/jdbcauthentication/h2/web/UserController.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/jdbcauthentication/h2/web/UserController.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/jdbcauthentication/h2/web/UserController.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-mysql/src/main/java/com/baeldung/jdbcauthentication/mysql/MySqlJdbcAuthenticationApplication.java b/spring-security-mvc-boot/src/main/java/org/baeldung/jdbcauthentication/mysql/MySqlJdbcAuthenticationApplication.java similarity index 66% rename from spring-security-mvc-boot/spring-security-mvc-boot-mysql/src/main/java/com/baeldung/jdbcauthentication/mysql/MySqlJdbcAuthenticationApplication.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/jdbcauthentication/mysql/MySqlJdbcAuthenticationApplication.java index 238a48730c..52934e0096 100644 --- a/spring-security-mvc-boot/spring-security-mvc-boot-mysql/src/main/java/com/baeldung/jdbcauthentication/mysql/MySqlJdbcAuthenticationApplication.java +++ b/spring-security-mvc-boot/src/main/java/org/baeldung/jdbcauthentication/mysql/MySqlJdbcAuthenticationApplication.java @@ -1,9 +1,11 @@ -package com.baeldung.jdbcauthentication.mysql; +package org.baeldung.jdbcauthentication.mysql; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.PropertySource; @SpringBootApplication +@PropertySource("classpath:application-mysql.properties") public class MySqlJdbcAuthenticationApplication { public static void main(String[] args) { diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-mysql/src/main/java/com/baeldung/jdbcauthentication/mysql/config/SecurityConfiguration.java b/spring-security-mvc-boot/src/main/java/org/baeldung/jdbcauthentication/mysql/config/SecurityConfiguration.java similarity index 95% rename from spring-security-mvc-boot/spring-security-mvc-boot-mysql/src/main/java/com/baeldung/jdbcauthentication/mysql/config/SecurityConfiguration.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/jdbcauthentication/mysql/config/SecurityConfiguration.java index a0584818cd..157c0be748 100644 --- a/spring-security-mvc-boot/spring-security-mvc-boot-mysql/src/main/java/com/baeldung/jdbcauthentication/mysql/config/SecurityConfiguration.java +++ b/spring-security-mvc-boot/src/main/java/org/baeldung/jdbcauthentication/mysql/config/SecurityConfiguration.java @@ -1,4 +1,4 @@ -package com.baeldung.jdbcauthentication.mysql.config; +package org.baeldung.jdbcauthentication.mysql.config; import javax.sql.DataSource; diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-mysql/src/main/java/com/baeldung/jdbcauthentication/mysql/web/UserController.java b/spring-security-mvc-boot/src/main/java/org/baeldung/jdbcauthentication/mysql/web/UserController.java similarity index 88% rename from spring-security-mvc-boot/spring-security-mvc-boot-mysql/src/main/java/com/baeldung/jdbcauthentication/mysql/web/UserController.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/jdbcauthentication/mysql/web/UserController.java index ed15f8bfe6..f1060b5f78 100644 --- a/spring-security-mvc-boot/spring-security-mvc-boot-mysql/src/main/java/com/baeldung/jdbcauthentication/mysql/web/UserController.java +++ b/spring-security-mvc-boot/src/main/java/org/baeldung/jdbcauthentication/mysql/web/UserController.java @@ -1,4 +1,4 @@ -package com.baeldung.jdbcauthentication.mysql.web; +package org.baeldung.jdbcauthentication.mysql.web; import java.security.Principal; diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-postgre/src/main/java/com/baeldung/jdbcauthentication/postgre/PostgreJdbcAuthenticationApplication.java b/spring-security-mvc-boot/src/main/java/org/baeldung/jdbcauthentication/postgre/PostgreJdbcAuthenticationApplication.java similarity index 66% rename from spring-security-mvc-boot/spring-security-mvc-boot-postgre/src/main/java/com/baeldung/jdbcauthentication/postgre/PostgreJdbcAuthenticationApplication.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/jdbcauthentication/postgre/PostgreJdbcAuthenticationApplication.java index d4b555e8c6..2c4d1a5255 100644 --- a/spring-security-mvc-boot/spring-security-mvc-boot-postgre/src/main/java/com/baeldung/jdbcauthentication/postgre/PostgreJdbcAuthenticationApplication.java +++ b/spring-security-mvc-boot/src/main/java/org/baeldung/jdbcauthentication/postgre/PostgreJdbcAuthenticationApplication.java @@ -1,9 +1,11 @@ -package com.baeldung.jdbcauthentication.postgre; +package org.baeldung.jdbcauthentication.postgre; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.PropertySource; @SpringBootApplication +@PropertySource("classpath:application-postgre.properties") public class PostgreJdbcAuthenticationApplication { public static void main(String[] args) { diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-postgre/src/main/java/com/baeldung/jdbcauthentication/postgre/config/SecurityConfiguration.java b/spring-security-mvc-boot/src/main/java/org/baeldung/jdbcauthentication/postgre/config/SecurityConfiguration.java similarity index 93% rename from spring-security-mvc-boot/spring-security-mvc-boot-postgre/src/main/java/com/baeldung/jdbcauthentication/postgre/config/SecurityConfiguration.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/jdbcauthentication/postgre/config/SecurityConfiguration.java index 85dc9d364c..ba79635852 100644 --- a/spring-security-mvc-boot/spring-security-mvc-boot-postgre/src/main/java/com/baeldung/jdbcauthentication/postgre/config/SecurityConfiguration.java +++ b/spring-security-mvc-boot/src/main/java/org/baeldung/jdbcauthentication/postgre/config/SecurityConfiguration.java @@ -1,4 +1,4 @@ -package com.baeldung.jdbcauthentication.postgre.config; +package org.baeldung.jdbcauthentication.postgre.config; import javax.sql.DataSource; diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-postgre/src/main/java/com/baeldung/jdbcauthentication/postgre/web/UserController.java b/spring-security-mvc-boot/src/main/java/org/baeldung/jdbcauthentication/postgre/web/UserController.java similarity index 88% rename from spring-security-mvc-boot/spring-security-mvc-boot-postgre/src/main/java/com/baeldung/jdbcauthentication/postgre/web/UserController.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/jdbcauthentication/postgre/web/UserController.java index da85a46562..c8fd3812b1 100644 --- a/spring-security-mvc-boot/spring-security-mvc-boot-postgre/src/main/java/com/baeldung/jdbcauthentication/postgre/web/UserController.java +++ b/spring-security-mvc-boot/src/main/java/org/baeldung/jdbcauthentication/postgre/web/UserController.java @@ -1,4 +1,4 @@ -package com.baeldung.jdbcauthentication.postgre.web; +package org.baeldung.jdbcauthentication.postgre.web; import java.security.Principal; diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/multipleauthproviders/CustomAuthenticationProvider.java b/spring-security-mvc-boot/src/main/java/org/baeldung/multipleauthproviders/CustomAuthenticationProvider.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/multipleauthproviders/CustomAuthenticationProvider.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/multipleauthproviders/CustomAuthenticationProvider.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/multipleauthproviders/MultipleAuthController.java b/spring-security-mvc-boot/src/main/java/org/baeldung/multipleauthproviders/MultipleAuthController.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/multipleauthproviders/MultipleAuthController.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/multipleauthproviders/MultipleAuthController.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/multipleauthproviders/MultipleAuthProvidersApplication.java b/spring-security-mvc-boot/src/main/java/org/baeldung/multipleauthproviders/MultipleAuthProvidersApplication.java similarity index 78% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/multipleauthproviders/MultipleAuthProvidersApplication.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/multipleauthproviders/MultipleAuthProvidersApplication.java index 077f558bd2..1f641298c3 100644 --- a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/multipleauthproviders/MultipleAuthProvidersApplication.java +++ b/spring-security-mvc-boot/src/main/java/org/baeldung/multipleauthproviders/MultipleAuthProvidersApplication.java @@ -2,8 +2,10 @@ package org.baeldung.multipleauthproviders; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.PropertySource; @SpringBootApplication +@PropertySource("classpath:application-defaults.properties") // @ImportResource({ "classpath*:spring-security-multiple-auth-providers.xml" }) public class MultipleAuthProvidersApplication { public static void main(String[] args) { diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/multipleauthproviders/MultipleAuthProvidersSecurityConfig.java b/spring-security-mvc-boot/src/main/java/org/baeldung/multipleauthproviders/MultipleAuthProvidersSecurityConfig.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/multipleauthproviders/MultipleAuthProvidersSecurityConfig.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/multipleauthproviders/MultipleAuthProvidersSecurityConfig.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/multipleentrypoints/MultipleEntryPointsApplication.java b/spring-security-mvc-boot/src/main/java/org/baeldung/multipleentrypoints/MultipleEntryPointsApplication.java similarity index 77% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/multipleentrypoints/MultipleEntryPointsApplication.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/multipleentrypoints/MultipleEntryPointsApplication.java index 4e5fafcd99..847dab073e 100644 --- a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/multipleentrypoints/MultipleEntryPointsApplication.java +++ b/spring-security-mvc-boot/src/main/java/org/baeldung/multipleentrypoints/MultipleEntryPointsApplication.java @@ -2,8 +2,10 @@ package org.baeldung.multipleentrypoints; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.PropertySource; @SpringBootApplication +@PropertySource("classpath:application-defaults.properties") // @ImportResource({"classpath*:spring-security-multiple-entry.xml"}) public class MultipleEntryPointsApplication { public static void main(String[] args) { diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/multipleentrypoints/MultipleEntryPointsSecurityConfig.java b/spring-security-mvc-boot/src/main/java/org/baeldung/multipleentrypoints/MultipleEntryPointsSecurityConfig.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/multipleentrypoints/MultipleEntryPointsSecurityConfig.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/multipleentrypoints/MultipleEntryPointsSecurityConfig.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/multipleentrypoints/PagesController.java b/spring-security-mvc-boot/src/main/java/org/baeldung/multipleentrypoints/PagesController.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/multipleentrypoints/PagesController.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/multipleentrypoints/PagesController.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/multiplelogin/MultipleLoginApplication.java b/spring-security-mvc-boot/src/main/java/org/baeldung/multiplelogin/MultipleLoginApplication.java similarity index 78% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/multiplelogin/MultipleLoginApplication.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/multiplelogin/MultipleLoginApplication.java index d25324eb54..90bb5e4260 100644 --- a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/multiplelogin/MultipleLoginApplication.java +++ b/spring-security-mvc-boot/src/main/java/org/baeldung/multiplelogin/MultipleLoginApplication.java @@ -3,8 +3,10 @@ package org.baeldung.multiplelogin; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.PropertySource; @SpringBootApplication +@PropertySource("classpath:application-defaults.properties") @ComponentScan("org.baeldung.multiplelogin") public class MultipleLoginApplication { public static void main(String[] args) { diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/multiplelogin/MultipleLoginMvcConfig.java b/spring-security-mvc-boot/src/main/java/org/baeldung/multiplelogin/MultipleLoginMvcConfig.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/multiplelogin/MultipleLoginMvcConfig.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/multiplelogin/MultipleLoginMvcConfig.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/multiplelogin/MultipleLoginSecurityConfig.java b/spring-security-mvc-boot/src/main/java/org/baeldung/multiplelogin/MultipleLoginSecurityConfig.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/multiplelogin/MultipleLoginSecurityConfig.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/multiplelogin/MultipleLoginSecurityConfig.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/multiplelogin/UsersController.java b/spring-security-mvc-boot/src/main/java/org/baeldung/multiplelogin/UsersController.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/multiplelogin/UsersController.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/multiplelogin/UsersController.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/rolesauthorities/CustomAuthenticationProvider.java b/spring-security-mvc-boot/src/main/java/org/baeldung/rolesauthorities/CustomAuthenticationProvider.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/rolesauthorities/CustomAuthenticationProvider.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/rolesauthorities/CustomAuthenticationProvider.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/rolesauthorities/MyLogoutSuccessHandler.java b/spring-security-mvc-boot/src/main/java/org/baeldung/rolesauthorities/MyLogoutSuccessHandler.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/rolesauthorities/MyLogoutSuccessHandler.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/rolesauthorities/MyLogoutSuccessHandler.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/rolesauthorities/MyUserDetailsService.java b/spring-security-mvc-boot/src/main/java/org/baeldung/rolesauthorities/MyUserDetailsService.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/rolesauthorities/MyUserDetailsService.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/rolesauthorities/MyUserDetailsService.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/rolesauthorities/RolesAuthoritiesApplication.java b/spring-security-mvc-boot/src/main/java/org/baeldung/rolesauthorities/RolesAuthoritiesApplication.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/rolesauthorities/RolesAuthoritiesApplication.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/rolesauthorities/RolesAuthoritiesApplication.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/rolesauthorities/config/MvcConfig.java b/spring-security-mvc-boot/src/main/java/org/baeldung/rolesauthorities/config/MvcConfig.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/rolesauthorities/config/MvcConfig.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/rolesauthorities/config/MvcConfig.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/rolesauthorities/config/SecurityConfig.java b/spring-security-mvc-boot/src/main/java/org/baeldung/rolesauthorities/config/SecurityConfig.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/rolesauthorities/config/SecurityConfig.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/rolesauthorities/config/SecurityConfig.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/rolesauthorities/model/Privilege.java b/spring-security-mvc-boot/src/main/java/org/baeldung/rolesauthorities/model/Privilege.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/rolesauthorities/model/Privilege.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/rolesauthorities/model/Privilege.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/rolesauthorities/model/Role.java b/spring-security-mvc-boot/src/main/java/org/baeldung/rolesauthorities/model/Role.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/rolesauthorities/model/Role.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/rolesauthorities/model/Role.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/rolesauthorities/model/User.java b/spring-security-mvc-boot/src/main/java/org/baeldung/rolesauthorities/model/User.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/rolesauthorities/model/User.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/rolesauthorities/model/User.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/rolesauthorities/persistence/IUserService.java b/spring-security-mvc-boot/src/main/java/org/baeldung/rolesauthorities/persistence/IUserService.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/rolesauthorities/persistence/IUserService.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/rolesauthorities/persistence/IUserService.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/rolesauthorities/persistence/PrivilegeRepository.java b/spring-security-mvc-boot/src/main/java/org/baeldung/rolesauthorities/persistence/PrivilegeRepository.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/rolesauthorities/persistence/PrivilegeRepository.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/rolesauthorities/persistence/PrivilegeRepository.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/rolesauthorities/persistence/RoleRepository.java b/spring-security-mvc-boot/src/main/java/org/baeldung/rolesauthorities/persistence/RoleRepository.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/rolesauthorities/persistence/RoleRepository.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/rolesauthorities/persistence/RoleRepository.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/rolesauthorities/persistence/SetupDataLoader.java b/spring-security-mvc-boot/src/main/java/org/baeldung/rolesauthorities/persistence/SetupDataLoader.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/rolesauthorities/persistence/SetupDataLoader.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/rolesauthorities/persistence/SetupDataLoader.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/rolesauthorities/persistence/UserRepository.java b/spring-security-mvc-boot/src/main/java/org/baeldung/rolesauthorities/persistence/UserRepository.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/rolesauthorities/persistence/UserRepository.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/rolesauthorities/persistence/UserRepository.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/rolesauthorities/persistence/UserService.java b/spring-security-mvc-boot/src/main/java/org/baeldung/rolesauthorities/persistence/UserService.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/rolesauthorities/persistence/UserService.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/rolesauthorities/persistence/UserService.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/ssl/HttpsEnabledApplication.java b/spring-security-mvc-boot/src/main/java/org/baeldung/ssl/HttpsEnabledApplication.java similarity index 78% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/ssl/HttpsEnabledApplication.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/ssl/HttpsEnabledApplication.java index 70fe30abdc..17c249067c 100644 --- a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/ssl/HttpsEnabledApplication.java +++ b/spring-security-mvc-boot/src/main/java/org/baeldung/ssl/HttpsEnabledApplication.java @@ -2,8 +2,10 @@ package org.baeldung.ssl; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.PropertySource; @SpringBootApplication +@PropertySource("classpath:application-defaults.properties") public class HttpsEnabledApplication { public static void main(String... args) { diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/ssl/SecurityConfig.java b/spring-security-mvc-boot/src/main/java/org/baeldung/ssl/SecurityConfig.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/ssl/SecurityConfig.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/ssl/SecurityConfig.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/ssl/WelcomeController.java b/spring-security-mvc-boot/src/main/java/org/baeldung/ssl/WelcomeController.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/ssl/WelcomeController.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/ssl/WelcomeController.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/voter/MinuteBasedVoter.java b/spring-security-mvc-boot/src/main/java/org/baeldung/voter/MinuteBasedVoter.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/voter/MinuteBasedVoter.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/voter/MinuteBasedVoter.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/voter/VoterApplication.java b/spring-security-mvc-boot/src/main/java/org/baeldung/voter/VoterApplication.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/voter/VoterApplication.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/voter/VoterApplication.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/voter/VoterMvcConfig.java b/spring-security-mvc-boot/src/main/java/org/baeldung/voter/VoterMvcConfig.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/voter/VoterMvcConfig.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/voter/VoterMvcConfig.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/voter/WebSecurityConfig.java b/spring-security-mvc-boot/src/main/java/org/baeldung/voter/WebSecurityConfig.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/voter/WebSecurityConfig.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/voter/WebSecurityConfig.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/voter/XmlSecurityConfig.java b/spring-security-mvc-boot/src/main/java/org/baeldung/voter/XmlSecurityConfig.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/java/org/baeldung/voter/XmlSecurityConfig.java rename to spring-security-mvc-boot/src/main/java/org/baeldung/voter/XmlSecurityConfig.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/application.properties b/spring-security-mvc-boot/src/main/resources/application-defaults.properties similarity index 76% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/application.properties rename to spring-security-mvc-boot/src/main/resources/application-defaults.properties index 365dedab9e..e2032c4a6b 100644 --- a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/application.properties +++ b/spring-security-mvc-boot/src/main/resources/application-defaults.properties @@ -1,4 +1,3 @@ -server.port=8082 spring.datasource.driver-class-name=org.h2.Driver spring.datasource.url=jdbc:h2:mem:security_permission;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE spring.datasource.username=sa @@ -8,7 +7,7 @@ spring.jpa.database=H2 spring.jpa.show-sql=false spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect -logging.level.org.springframework.security.web.FilterChainProxy=DEBUG +#logging.level.org.springframework.security.web.FilterChainProxy=DEBUG spring.h2.console.enabled=true spring.h2.console.path=/h2-console \ No newline at end of file diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-mysql/src/main/resources/application.properties b/spring-security-mvc-boot/src/main/resources/application-mysql.properties similarity index 77% rename from spring-security-mvc-boot/spring-security-mvc-boot-mysql/src/main/resources/application.properties rename to spring-security-mvc-boot/src/main/resources/application-mysql.properties index 2962475108..568d0c5ca3 100644 --- a/spring-security-mvc-boot/spring-security-mvc-boot-mysql/src/main/resources/application.properties +++ b/spring-security-mvc-boot/src/main/resources/application-mysql.properties @@ -1,8 +1,9 @@ -server.port=8082 - +spring.datasource.platform=mysql spring.datasource.url=jdbc:mysql://localhost:3306/jdbc_authentication spring.datasource.username=root spring.datasource.password=pass spring.datasource.initialization-mode=always spring.jpa.hibernate.ddl-auto=none + +spring.profiles.active=mysql diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-postgre/src/main/resources/application.properties b/spring-security-mvc-boot/src/main/resources/application-postgre.properties similarity index 86% rename from spring-security-mvc-boot/spring-security-mvc-boot-postgre/src/main/resources/application.properties rename to spring-security-mvc-boot/src/main/resources/application-postgre.properties index 2940c5121e..69faece45e 100644 --- a/spring-security-mvc-boot/spring-security-mvc-boot-postgre/src/main/resources/application.properties +++ b/spring-security-mvc-boot/src/main/resources/application-postgre.properties @@ -1,5 +1,4 @@ -server.port=8082 - +spring.datasource.platform=postgre spring.datasource.url=jdbc:postgresql://localhost:5432/jdbc_authentication spring.datasource.username=postgres spring.datasource.password=pass diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/application-ssl.properties b/spring-security-mvc-boot/src/main/resources/application-ssl.properties similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/application-ssl.properties rename to spring-security-mvc-boot/src/main/resources/application-ssl.properties diff --git a/spring-security-mvc-boot/src/main/resources/application.properties b/spring-security-mvc-boot/src/main/resources/application.properties new file mode 100644 index 0000000000..3cf12afeb9 --- /dev/null +++ b/spring-security-mvc-boot/src/main/resources/application.properties @@ -0,0 +1 @@ +server.port=8082 diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-mysql/src/main/resources/data.sql b/spring-security-mvc-boot/src/main/resources/data-mysql.sql similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-mysql/src/main/resources/data.sql rename to spring-security-mvc-boot/src/main/resources/data-mysql.sql diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-postgre/src/main/resources/data.sql b/spring-security-mvc-boot/src/main/resources/data-postgre.sql similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-postgre/src/main/resources/data.sql rename to spring-security-mvc-boot/src/main/resources/data-postgre.sql diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/keystore/baeldung.p12 b/spring-security-mvc-boot/src/main/resources/keystore/baeldung.p12 similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/keystore/baeldung.p12 rename to spring-security-mvc-boot/src/main/resources/keystore/baeldung.p12 diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/logback.xml b/spring-security-mvc-boot/src/main/resources/logback.xml similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/logback.xml rename to spring-security-mvc-boot/src/main/resources/logback.xml diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/persistence-h2.properties b/spring-security-mvc-boot/src/main/resources/persistence-h2.properties similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/persistence-h2.properties rename to spring-security-mvc-boot/src/main/resources/persistence-h2.properties diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-mysql/src/main/resources/schema.sql b/spring-security-mvc-boot/src/main/resources/schema-mysql.sql similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-mysql/src/main/resources/schema.sql rename to spring-security-mvc-boot/src/main/resources/schema-mysql.sql diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-postgre/src/main/resources/schema.sql b/spring-security-mvc-boot/src/main/resources/schema-postgre.sql similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-postgre/src/main/resources/schema.sql rename to spring-security-mvc-boot/src/main/resources/schema-postgre.sql diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/spring-security-custom-voter.xml b/spring-security-mvc-boot/src/main/resources/spring-security-custom-voter.xml similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/spring-security-custom-voter.xml rename to spring-security-mvc-boot/src/main/resources/spring-security-custom-voter.xml diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/spring-security-ip.xml b/spring-security-mvc-boot/src/main/resources/spring-security-ip.xml similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/spring-security-ip.xml rename to spring-security-mvc-boot/src/main/resources/spring-security-ip.xml diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/spring-security-multiple-auth-providers.xml b/spring-security-mvc-boot/src/main/resources/spring-security-multiple-auth-providers.xml similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/spring-security-multiple-auth-providers.xml rename to spring-security-mvc-boot/src/main/resources/spring-security-multiple-auth-providers.xml diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/spring-security-multiple-entry.xml b/spring-security-mvc-boot/src/main/resources/spring-security-multiple-entry.xml similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/spring-security-multiple-entry.xml rename to spring-security-mvc-boot/src/main/resources/spring-security-multiple-entry.xml diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/templates/403.html b/spring-security-mvc-boot/src/main/resources/templates/403.html similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/templates/403.html rename to spring-security-mvc-boot/src/main/resources/templates/403.html diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/templates/adminPage.html b/spring-security-mvc-boot/src/main/resources/templates/adminPage.html similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/templates/adminPage.html rename to spring-security-mvc-boot/src/main/resources/templates/adminPage.html diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/templates/index.html b/spring-security-mvc-boot/src/main/resources/templates/index.html similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/templates/index.html rename to spring-security-mvc-boot/src/main/resources/templates/index.html diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/templates/login.html b/spring-security-mvc-boot/src/main/resources/templates/login.html similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/templates/login.html rename to spring-security-mvc-boot/src/main/resources/templates/login.html diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/templates/loginAdmin.html b/spring-security-mvc-boot/src/main/resources/templates/loginAdmin.html similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/templates/loginAdmin.html rename to spring-security-mvc-boot/src/main/resources/templates/loginAdmin.html diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/templates/loginUser.html b/spring-security-mvc-boot/src/main/resources/templates/loginUser.html similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/templates/loginUser.html rename to spring-security-mvc-boot/src/main/resources/templates/loginUser.html diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/templates/multipleHttpElems/login.html b/spring-security-mvc-boot/src/main/resources/templates/multipleHttpElems/login.html similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/templates/multipleHttpElems/login.html rename to spring-security-mvc-boot/src/main/resources/templates/multipleHttpElems/login.html diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/templates/multipleHttpElems/loginWithWarning.html b/spring-security-mvc-boot/src/main/resources/templates/multipleHttpElems/loginWithWarning.html similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/templates/multipleHttpElems/loginWithWarning.html rename to spring-security-mvc-boot/src/main/resources/templates/multipleHttpElems/loginWithWarning.html diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/templates/multipleHttpElems/multipleHttpLinks.html b/spring-security-mvc-boot/src/main/resources/templates/multipleHttpElems/multipleHttpLinks.html similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/templates/multipleHttpElems/multipleHttpLinks.html rename to spring-security-mvc-boot/src/main/resources/templates/multipleHttpElems/multipleHttpLinks.html diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/templates/multipleHttpElems/myAdminPage.html b/spring-security-mvc-boot/src/main/resources/templates/multipleHttpElems/myAdminPage.html similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/templates/multipleHttpElems/myAdminPage.html rename to spring-security-mvc-boot/src/main/resources/templates/multipleHttpElems/myAdminPage.html diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/templates/multipleHttpElems/myGuestPage.html b/spring-security-mvc-boot/src/main/resources/templates/multipleHttpElems/myGuestPage.html similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/templates/multipleHttpElems/myGuestPage.html rename to spring-security-mvc-boot/src/main/resources/templates/multipleHttpElems/myGuestPage.html diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/templates/multipleHttpElems/myPrivateUserPage.html b/spring-security-mvc-boot/src/main/resources/templates/multipleHttpElems/myPrivateUserPage.html similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/templates/multipleHttpElems/myPrivateUserPage.html rename to spring-security-mvc-boot/src/main/resources/templates/multipleHttpElems/myPrivateUserPage.html diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/templates/multipleHttpElems/myUserPage.html b/spring-security-mvc-boot/src/main/resources/templates/multipleHttpElems/myUserPage.html similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/templates/multipleHttpElems/myUserPage.html rename to spring-security-mvc-boot/src/main/resources/templates/multipleHttpElems/myUserPage.html diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/templates/private.html b/spring-security-mvc-boot/src/main/resources/templates/private.html similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/templates/private.html rename to spring-security-mvc-boot/src/main/resources/templates/private.html diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/templates/protectedLinks.html b/spring-security-mvc-boot/src/main/resources/templates/protectedLinks.html similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/templates/protectedLinks.html rename to spring-security-mvc-boot/src/main/resources/templates/protectedLinks.html diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/templates/rolesauthorities/home.html b/spring-security-mvc-boot/src/main/resources/templates/rolesauthorities/home.html similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/templates/rolesauthorities/home.html rename to spring-security-mvc-boot/src/main/resources/templates/rolesauthorities/home.html diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/templates/rolesauthorities/login.html b/spring-security-mvc-boot/src/main/resources/templates/rolesauthorities/login.html similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/templates/rolesauthorities/login.html rename to spring-security-mvc-boot/src/main/resources/templates/rolesauthorities/login.html diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/templates/rolesauthorities/protectedbyauthority.html b/spring-security-mvc-boot/src/main/resources/templates/rolesauthorities/protectedbyauthority.html similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/templates/rolesauthorities/protectedbyauthority.html rename to spring-security-mvc-boot/src/main/resources/templates/rolesauthorities/protectedbyauthority.html diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/templates/rolesauthorities/protectedbynothing.html b/spring-security-mvc-boot/src/main/resources/templates/rolesauthorities/protectedbynothing.html similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/templates/rolesauthorities/protectedbynothing.html rename to spring-security-mvc-boot/src/main/resources/templates/rolesauthorities/protectedbynothing.html diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/templates/rolesauthorities/protectedbyrole.html b/spring-security-mvc-boot/src/main/resources/templates/rolesauthorities/protectedbyrole.html similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/templates/rolesauthorities/protectedbyrole.html rename to spring-security-mvc-boot/src/main/resources/templates/rolesauthorities/protectedbyrole.html diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/templates/ssl/welcome.html b/spring-security-mvc-boot/src/main/resources/templates/ssl/welcome.html similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/templates/ssl/welcome.html rename to spring-security-mvc-boot/src/main/resources/templates/ssl/welcome.html diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/templates/userPage.html b/spring-security-mvc-boot/src/main/resources/templates/userPage.html similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/main/resources/templates/userPage.html rename to spring-security-mvc-boot/src/main/resources/templates/userPage.html diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/test/java/com/baeldung/relationships/SpringDataWithSecurityIntegrationTest.java b/spring-security-mvc-boot/src/test/java/com/baeldung/relationships/SpringDataWithSecurityIntegrationTest.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/test/java/com/baeldung/relationships/SpringDataWithSecurityIntegrationTest.java rename to spring-security-mvc-boot/src/test/java/com/baeldung/relationships/SpringDataWithSecurityIntegrationTest.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/test/java/org/baeldung/SpringContextIntegrationTest.java b/spring-security-mvc-boot/src/test/java/org/baeldung/SpringContextIntegrationTest.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/test/java/org/baeldung/SpringContextIntegrationTest.java rename to spring-security-mvc-boot/src/test/java/org/baeldung/SpringContextIntegrationTest.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-mysql/src/test/java/com/baeldung/jdbcauthentication/mysql/SpringContextIntegrationTest.java b/spring-security-mvc-boot/src/test/java/org/baeldung/jdbcauthentication/h2/SpringContextIntegrationTest.java similarity index 74% rename from spring-security-mvc-boot/spring-security-mvc-boot-mysql/src/test/java/com/baeldung/jdbcauthentication/mysql/SpringContextIntegrationTest.java rename to spring-security-mvc-boot/src/test/java/org/baeldung/jdbcauthentication/h2/SpringContextIntegrationTest.java index 2c19e2c0ca..55a7b9e2be 100644 --- a/spring-security-mvc-boot/spring-security-mvc-boot-mysql/src/test/java/com/baeldung/jdbcauthentication/mysql/SpringContextIntegrationTest.java +++ b/spring-security-mvc-boot/src/test/java/org/baeldung/jdbcauthentication/h2/SpringContextIntegrationTest.java @@ -1,4 +1,4 @@ -package com.baeldung.jdbcauthentication.mysql; +package org.baeldung.jdbcauthentication.h2; import org.junit.Test; import org.junit.runner.RunWith; @@ -6,7 +6,7 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class) -@SpringBootTest(classes = MySqlJdbcAuthenticationApplication.class) +@SpringBootTest(classes = H2JdbcAuthenticationApplication.class) public class SpringContextIntegrationTest { @Test diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/test/java/org/baeldung/jdbcauthentication/h2/web/UserControllerLiveTest.java b/spring-security-mvc-boot/src/test/java/org/baeldung/jdbcauthentication/h2/web/UserControllerLiveTest.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/test/java/org/baeldung/jdbcauthentication/h2/web/UserControllerLiveTest.java rename to spring-security-mvc-boot/src/test/java/org/baeldung/jdbcauthentication/h2/web/UserControllerLiveTest.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-mysql/src/test/java/com/baeldung/jdbcauthentication/mysql/web/UserControllerLiveTest.java b/spring-security-mvc-boot/src/test/java/org/baeldung/jdbcauthentication/mysql/web/UserControllerLiveTest.java similarity index 95% rename from spring-security-mvc-boot/spring-security-mvc-boot-mysql/src/test/java/com/baeldung/jdbcauthentication/mysql/web/UserControllerLiveTest.java rename to spring-security-mvc-boot/src/test/java/org/baeldung/jdbcauthentication/mysql/web/UserControllerLiveTest.java index 79bc84ea69..261063cbb6 100644 --- a/spring-security-mvc-boot/spring-security-mvc-boot-mysql/src/test/java/com/baeldung/jdbcauthentication/mysql/web/UserControllerLiveTest.java +++ b/spring-security-mvc-boot/src/test/java/org/baeldung/jdbcauthentication/mysql/web/UserControllerLiveTest.java @@ -1,4 +1,4 @@ -package com.baeldung.jdbcauthentication.mysql.web; +package org.baeldung.jdbcauthentication.mysql.web; import static io.restassured.RestAssured.given; import static org.hamcrest.CoreMatchers.is; diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-postgre/src/test/java/com/baeldung/jdbcauthentication/postgre/web/UserControllerLiveTest.java b/spring-security-mvc-boot/src/test/java/org/baeldung/jdbcauthentication/postgre/web/UserControllerLiveTest.java similarity index 92% rename from spring-security-mvc-boot/spring-security-mvc-boot-postgre/src/test/java/com/baeldung/jdbcauthentication/postgre/web/UserControllerLiveTest.java rename to spring-security-mvc-boot/src/test/java/org/baeldung/jdbcauthentication/postgre/web/UserControllerLiveTest.java index b5f4379c0a..82bf6df8db 100644 --- a/spring-security-mvc-boot/spring-security-mvc-boot-postgre/src/test/java/com/baeldung/jdbcauthentication/postgre/web/UserControllerLiveTest.java +++ b/spring-security-mvc-boot/src/test/java/org/baeldung/jdbcauthentication/postgre/web/UserControllerLiveTest.java @@ -1,4 +1,4 @@ -package com.baeldung.jdbcauthentication.postgre.web; +package org.baeldung.jdbcauthentication.postgre.web; import static io.restassured.RestAssured.given; import static org.hamcrest.CoreMatchers.is; @@ -10,7 +10,7 @@ import org.springframework.http.HttpStatus; * This Live Test requires: * * a PostgreSQL instance running, that allows a 'root' user with password 'pass', and with a database named jdbc_authentication * (e.g. with the following command `docker run -p 5432:5432 --name bael-postgre -e POSTGRES_PASSWORD=pass -e POSTGRES_DB=jdbc_authentication postgres:latest`) - * * the service up and running + * * the service up and running * */ public class UserControllerLiveTest { diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/test/java/org/baeldung/web/ApplicationLiveTest.java b/spring-security-mvc-boot/src/test/java/org/baeldung/web/ApplicationLiveTest.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/test/java/org/baeldung/web/ApplicationLiveTest.java rename to spring-security-mvc-boot/src/test/java/org/baeldung/web/ApplicationLiveTest.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/test/java/org/baeldung/web/CustomUserDetailsServiceIntegrationTest.java b/spring-security-mvc-boot/src/test/java/org/baeldung/web/CustomUserDetailsServiceIntegrationTest.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/test/java/org/baeldung/web/CustomUserDetailsServiceIntegrationTest.java rename to spring-security-mvc-boot/src/test/java/org/baeldung/web/CustomUserDetailsServiceIntegrationTest.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/test/java/org/baeldung/web/HttpsApplicationIntegrationTest.java b/spring-security-mvc-boot/src/test/java/org/baeldung/web/HttpsApplicationIntegrationTest.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/test/java/org/baeldung/web/HttpsApplicationIntegrationTest.java rename to spring-security-mvc-boot/src/test/java/org/baeldung/web/HttpsApplicationIntegrationTest.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/test/java/org/baeldung/web/IpLiveTest.java b/spring-security-mvc-boot/src/test/java/org/baeldung/web/IpLiveTest.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/test/java/org/baeldung/web/IpLiveTest.java rename to spring-security-mvc-boot/src/test/java/org/baeldung/web/IpLiveTest.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/test/java/org/baeldung/web/MultipleAuthProvidersApplicationIntegrationTest.java b/spring-security-mvc-boot/src/test/java/org/baeldung/web/MultipleAuthProvidersApplicationIntegrationTest.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/test/java/org/baeldung/web/MultipleAuthProvidersApplicationIntegrationTest.java rename to spring-security-mvc-boot/src/test/java/org/baeldung/web/MultipleAuthProvidersApplicationIntegrationTest.java diff --git a/spring-security-mvc-boot/spring-security-mvc-boot-default/src/test/java/org/baeldung/web/MultipleEntryPointsIntegrationTest.java b/spring-security-mvc-boot/src/test/java/org/baeldung/web/MultipleEntryPointsIntegrationTest.java similarity index 100% rename from spring-security-mvc-boot/spring-security-mvc-boot-default/src/test/java/org/baeldung/web/MultipleEntryPointsIntegrationTest.java rename to spring-security-mvc-boot/src/test/java/org/baeldung/web/MultipleEntryPointsIntegrationTest.java From b5272dedb5746ee8d28538e078ec416f38576ecf Mon Sep 17 00:00:00 2001 From: Anshul Bansal Date: Wed, 21 Aug 2019 09:27:31 +0300 Subject: [PATCH 52/56] BAEL-2846- Intro to the Java Debug Interface (#7606) --- java-jdi/pom.xml | 130 +++++++++++++ .../java/com/baeldung/jdi/JDIExample.java | 14 ++ .../com/baeldung/jdi/JDIExampleDebugger.java | 171 ++++++++++++++++++ pom.xml | 2 + 4 files changed, 317 insertions(+) create mode 100644 java-jdi/pom.xml create mode 100644 java-jdi/src/main/java/com/baeldung/jdi/JDIExample.java create mode 100644 java-jdi/src/main/java/com/baeldung/jdi/JDIExampleDebugger.java diff --git a/java-jdi/pom.xml b/java-jdi/pom.xml new file mode 100644 index 0000000000..3d70461dce --- /dev/null +++ b/java-jdi/pom.xml @@ -0,0 +1,130 @@ + + 4.0.0 + java-jdi + 0.1.0-SNAPSHOT + java-jdi + jar + + + com.baeldung + parent-java + 0.0.1-SNAPSHOT + ../parent-java + + + + + log4j + log4j + ${log4j.version} + + + org.slf4j + slf4j-api + ${org.slf4j.version} + + + ch.qos.logback + logback-classic + ${logback.version} + + + org.openjdk.jmh + jmh-core + ${jmh-core.version} + + + org.openjdk.jmh + jmh-generator-annprocess + ${jmh-generator.version} + + + org.apache.commons + commons-lang3 + ${commons-lang3.version} + + + org.assertj + assertj-core + ${assertj.version} + test + + + com.sun + tools + ${tools.version} + system + ${java.home}/../lib/tools.jar + + + + + java-jdi + + + src/main/resources + true + + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + ${maven-javadoc-plugin.version} + + 1.8 + 1.8 + + + + + + + + integration + + + + org.apache.maven.plugins + maven-surefire-plugin + + + integration-test + + test + + + + **/*IntegrationTest.java + + + + + + + json + + + + + + + + + + 3.5 + + 3.6.1 + 1.8 + 1.7.21 + 1.1.7 + 1.8 + 2.21.0 + 3.0.0-M1 + 3.0.2 + + diff --git a/java-jdi/src/main/java/com/baeldung/jdi/JDIExample.java b/java-jdi/src/main/java/com/baeldung/jdi/JDIExample.java new file mode 100644 index 0000000000..f8f20553b8 --- /dev/null +++ b/java-jdi/src/main/java/com/baeldung/jdi/JDIExample.java @@ -0,0 +1,14 @@ +package com.baeldung.jdi; + +public class JDIExample { + + public static void main(String[] args) { + String jpda = "Java Platform Debugger Architecture"; + System.out.println("Hi Everyone, Welcome to " + jpda); //add a break point here + + String jdi = "Java Debug Interface"; //add a break point here and also stepping in here + String text = "Today, we'll dive into " + jdi; + System.out.println(text); + } + +} diff --git a/java-jdi/src/main/java/com/baeldung/jdi/JDIExampleDebugger.java b/java-jdi/src/main/java/com/baeldung/jdi/JDIExampleDebugger.java new file mode 100644 index 0000000000..1d9de57ddb --- /dev/null +++ b/java-jdi/src/main/java/com/baeldung/jdi/JDIExampleDebugger.java @@ -0,0 +1,171 @@ +package com.baeldung.jdi; + +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.util.Map; + +import com.sun.jdi.AbsentInformationException; +import com.sun.jdi.Bootstrap; +import com.sun.jdi.ClassType; +import com.sun.jdi.IncompatibleThreadStateException; +import com.sun.jdi.LocalVariable; +import com.sun.jdi.Location; +import com.sun.jdi.StackFrame; +import com.sun.jdi.VMDisconnectedException; +import com.sun.jdi.Value; +import com.sun.jdi.VirtualMachine; +import com.sun.jdi.connect.Connector; +import com.sun.jdi.connect.IllegalConnectorArgumentsException; +import com.sun.jdi.connect.LaunchingConnector; +import com.sun.jdi.connect.VMStartException; +import com.sun.jdi.event.BreakpointEvent; +import com.sun.jdi.event.ClassPrepareEvent; +import com.sun.jdi.event.Event; +import com.sun.jdi.event.EventSet; +import com.sun.jdi.event.LocatableEvent; +import com.sun.jdi.event.StepEvent; +import com.sun.jdi.request.BreakpointRequest; +import com.sun.jdi.request.ClassPrepareRequest; +import com.sun.jdi.request.StepRequest; + +public class JDIExampleDebugger { + + private Class debugClass; + private int[] breakPointLines; + + public Class getDebugClass() { + return debugClass; + } + + public void setDebugClass(Class debugClass) { + this.debugClass = debugClass; + } + + public int[] getBreakPointLines() { + return breakPointLines; + } + + public void setBreakPointLines(int[] breakPointLines) { + this.breakPointLines = breakPointLines; + } + + /** + * Sets the debug class as the main argument in the connector and launches the VM + * @return VirtualMachine + * @throws IOException + * @throws IllegalConnectorArgumentsException + * @throws VMStartException + */ + public VirtualMachine connectAndLaunchVM() throws IOException, IllegalConnectorArgumentsException, VMStartException { + LaunchingConnector launchingConnector = Bootstrap.virtualMachineManager().defaultConnector(); + Map arguments = launchingConnector.defaultArguments(); + arguments.get("main").setValue(debugClass.getName()); + VirtualMachine vm = launchingConnector.launch(arguments); + return vm; + } + + /** + * Creates a request to prepare the debug class, add filter as the debug class and enables it + * @param vm + */ + public void enableClassPrepareRequest(VirtualMachine vm) { + ClassPrepareRequest classPrepareRequest = vm.eventRequestManager().createClassPrepareRequest(); + classPrepareRequest.addClassFilter(debugClass.getName()); + classPrepareRequest.enable(); + } + + /** + * Sets the break points at the line numbers mentioned in breakPointLines array + * @param vm + * @param event + * @throws AbsentInformationException + */ + public void setBreakPoints(VirtualMachine vm, ClassPrepareEvent event) throws AbsentInformationException { + ClassType classType = (ClassType) event.referenceType(); + for(int lineNumber: breakPointLines) { + Location location = classType.locationsOfLine(lineNumber).get(0); + BreakpointRequest bpReq = vm.eventRequestManager().createBreakpointRequest(location); + bpReq.enable(); + } + } + + /** + * Displays the visible variables + * @param event + * @throws IncompatibleThreadStateException + * @throws AbsentInformationException + */ + public void displayVariables(LocatableEvent event) throws IncompatibleThreadStateException, AbsentInformationException { + StackFrame stackFrame = event.thread().frame(0); + if(stackFrame.location().toString().contains(debugClass.getName())) { + Map visibleVariables = stackFrame.getValues(stackFrame.visibleVariables()); + System.out.println("Variables at " +stackFrame.location().toString() + " > "); + for (Map.Entry entry : visibleVariables.entrySet()) { + System.out.println(entry.getKey().name() + " = " + entry.getValue()); + } + } + } + + /** + * Enables step request for a break point + * @param vm + * @param event + */ + public void enableStepRequest(VirtualMachine vm, BreakpointEvent event) { + //enable step request for last break point + if(event.location().toString().contains(debugClass.getName()+":"+breakPointLines[breakPointLines.length-1])) { + StepRequest stepRequest = vm.eventRequestManager().createStepRequest(event.thread(), StepRequest.STEP_LINE, StepRequest.STEP_OVER); + stepRequest.enable(); + } + } + + public static void main(String[] args) throws Exception { + + JDIExampleDebugger debuggerInstance = new JDIExampleDebugger(); + debuggerInstance.setDebugClass(JDIExample.class); + int[] breakPoints = {6, 9}; + debuggerInstance.setBreakPointLines(breakPoints); + VirtualMachine vm = null; + + try { + vm = debuggerInstance.connectAndLaunchVM(); + debuggerInstance.enableClassPrepareRequest(vm); + + EventSet eventSet = null; + while ((eventSet = vm.eventQueue().remove()) != null) { + for (Event event : eventSet) { + if (event instanceof ClassPrepareEvent) { + debuggerInstance.setBreakPoints(vm, (ClassPrepareEvent)event); + } + + if (event instanceof BreakpointEvent) { + event.request().disable(); + debuggerInstance.displayVariables((BreakpointEvent) event); + debuggerInstance.enableStepRequest(vm, (BreakpointEvent)event); + } + + if (event instanceof StepEvent) { + debuggerInstance.displayVariables((StepEvent) event); + } + vm.resume(); + } + } + } catch (VMDisconnectedException e) { + System.out.println("Virtual Machine is disconnected."); + } catch (Exception e) { + e.printStackTrace(); + } + finally { + InputStreamReader reader = new InputStreamReader(vm.process().getInputStream()); + OutputStreamWriter writer = new OutputStreamWriter(System.out); + char[] buf = new char[512]; + + reader.read(buf); + writer.write(buf); + writer.flush(); + } + + } + +} diff --git a/pom.xml b/pom.xml index fc3567be51..58c5473744 100644 --- a/pom.xml +++ b/pom.xml @@ -457,6 +457,7 @@ java-collections-conversions java-collections-maps java-collections-maps-2 + java-jdi @@ -1156,6 +1157,7 @@ java-collections-conversions java-collections-maps java-collections-maps-2 + java-jdi java-ee-8-security-api java-lite From d3ba9f47efe8d5bb1cf160b356cb574ff94bb7cf Mon Sep 17 00:00:00 2001 From: Sandip Singh Date: Fri, 23 Aug 2019 18:10:59 +0530 Subject: [PATCH 53/56] Bael 2989 (#7609) * Added examples for building Java project with Bazel * Added examples for building Java project with Bazel --- bazel/WORKSPACE | 31 +++++++++++++++++++ bazel/bazelapp/BUILD | 7 +++++ bazel/bazelapp/pom.xml | 28 +++++++++++++++++ .../src/main/java/com/baeldung/BazelApp.java | 15 +++++++++ bazel/bazelgreeting/BUILD | 6 ++++ bazel/bazelgreeting/pom.xml | 15 +++++++++ .../src/main/java/com/baeldung/Greetings.java | 8 +++++ bazel/pom.xml | 20 ++++++++++++ 8 files changed, 130 insertions(+) create mode 100644 bazel/WORKSPACE create mode 100644 bazel/bazelapp/BUILD create mode 100644 bazel/bazelapp/pom.xml create mode 100644 bazel/bazelapp/src/main/java/com/baeldung/BazelApp.java create mode 100644 bazel/bazelgreeting/BUILD create mode 100644 bazel/bazelgreeting/pom.xml create mode 100644 bazel/bazelgreeting/src/main/java/com/baeldung/Greetings.java create mode 100644 bazel/pom.xml diff --git a/bazel/WORKSPACE b/bazel/WORKSPACE new file mode 100644 index 0000000000..415aa398f9 --- /dev/null +++ b/bazel/WORKSPACE @@ -0,0 +1,31 @@ + +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_jar") +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + + +RULES_JVM_EXTERNAL_TAG = "2.0.1" +RULES_JVM_EXTERNAL_SHA = "55e8d3951647ae3dffde22b4f7f8dee11b3f70f3f89424713debd7076197eaca" + +http_archive( + name = "rules_jvm_external", + strip_prefix = "rules_jvm_external-%s" % RULES_JVM_EXTERNAL_TAG, + sha256 = RULES_JVM_EXTERNAL_SHA, + url = "https://github.com/bazelbuild/rules_jvm_external/archive/%s.zip" % RULES_JVM_EXTERNAL_TAG, +) + +load("@rules_jvm_external//:defs.bzl", "maven_install") + +maven_install( + artifacts = [ + "org.apache.commons:commons-lang3:3.9" + ], + repositories = [ + "https://repo1.maven.org/maven2", + ] +) + +http_jar ( + name = "apache-commons-lang", + url = "https://repo1.maven.org/maven2/org/apache/commons/commons-lang3/3.9/commons-lang3-3.9.jar" +) + diff --git a/bazel/bazelapp/BUILD b/bazel/bazelapp/BUILD new file mode 100644 index 0000000000..1de95aada5 --- /dev/null +++ b/bazel/bazelapp/BUILD @@ -0,0 +1,7 @@ + +java_binary ( + name = "BazelApp", + srcs = glob(["src/main/java/com/baeldung/*.java"]), + main_class = "com.baeldung.BazelApp", + deps = ["//bazelgreeting:greeter", "@maven//:org_apache_commons_commons_lang3"] +) diff --git a/bazel/bazelapp/pom.xml b/bazel/bazelapp/pom.xml new file mode 100644 index 0000000000..b8c658eaae --- /dev/null +++ b/bazel/bazelapp/pom.xml @@ -0,0 +1,28 @@ + + + + bazel + com.baeldung + 1.0.0-SNAPSHOT + + 4.0.0 + + bazelapp + + + + com.baeldung + bazelgreeting + 1.0.0-SNAPSHOT + + + org.apache.commons + commons-lang3 + 3.9 + + + + + \ No newline at end of file diff --git a/bazel/bazelapp/src/main/java/com/baeldung/BazelApp.java b/bazel/bazelapp/src/main/java/com/baeldung/BazelApp.java new file mode 100644 index 0000000000..e92d85018b --- /dev/null +++ b/bazel/bazelapp/src/main/java/com/baeldung/BazelApp.java @@ -0,0 +1,15 @@ +package com.baeldung; + +import com.baeldung.Greetings; +import org.apache.commons.lang3.StringUtils; + +public class BazelApp { + + public static void main(String ... args) { + Greetings greetings = new Greetings(); + + System.out.println(greetings.greet("Bazel")); + + System.out.println(StringUtils.lowerCase("Bazel")); + } +} diff --git a/bazel/bazelgreeting/BUILD b/bazel/bazelgreeting/BUILD new file mode 100644 index 0000000000..6cd8bc13f7 --- /dev/null +++ b/bazel/bazelgreeting/BUILD @@ -0,0 +1,6 @@ + +java_library ( + name = "greeter", + srcs = glob(["src/main/java/com/baeldung/*.java"]), + visibility = ["//bazelapp:__pkg__"] +) diff --git a/bazel/bazelgreeting/pom.xml b/bazel/bazelgreeting/pom.xml new file mode 100644 index 0000000000..d02cc02cae --- /dev/null +++ b/bazel/bazelgreeting/pom.xml @@ -0,0 +1,15 @@ + + + + bazel + com.baeldung + 1.0.0-SNAPSHOT + + 4.0.0 + + bazelgreeting + + + \ No newline at end of file diff --git a/bazel/bazelgreeting/src/main/java/com/baeldung/Greetings.java b/bazel/bazelgreeting/src/main/java/com/baeldung/Greetings.java new file mode 100644 index 0000000000..0e8fae7fbe --- /dev/null +++ b/bazel/bazelgreeting/src/main/java/com/baeldung/Greetings.java @@ -0,0 +1,8 @@ +package com.baeldung; + +public class Greetings { + + public String greet(String name) { + return "Hello ".concat(name); + } +} diff --git a/bazel/pom.xml b/bazel/pom.xml new file mode 100644 index 0000000000..7350d1dbe4 --- /dev/null +++ b/bazel/pom.xml @@ -0,0 +1,20 @@ + + + + parent-modules + com.baeldung + 1.0.0-SNAPSHOT + + 4.0.0 + + bazel + pom + + bazelgreeting + bazelapp + + + + \ No newline at end of file From 721542f2486492078a3802a873e83761acf0e643 Mon Sep 17 00:00:00 2001 From: Dhawal Kapil Date: Fri, 23 Aug 2019 23:07:21 +0530 Subject: [PATCH 54/56] BAEL-16781 Moving top articles to their respective packages (#7594) --- .../com/baeldung/{swaggerboot => swagger2boot}/Application.java | 2 +- .../configuration/SpringFoxConfig.java | 2 +- .../controller/RegularRestController.java | 2 +- .../{client => resttemplate}/RestTemplateBasicLiveTest.java | 2 +- .../java/org/baeldung/{spring => swagger2}/SwaggerConfig.java | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) rename spring-boot-mvc/src/main/java/com/baeldung/{swaggerboot => swagger2boot}/Application.java (88%) rename spring-boot-mvc/src/main/java/com/baeldung/{swaggerboot => swagger2boot}/configuration/SpringFoxConfig.java (97%) rename spring-boot-mvc/src/main/java/com/baeldung/{swaggerboot => swagger2boot}/controller/RegularRestController.java (84%) rename spring-resttemplate/src/test/java/org/baeldung/{client => resttemplate}/RestTemplateBasicLiveTest.java (99%) rename spring-security-rest/src/main/java/org/baeldung/{spring => swagger2}/SwaggerConfig.java (98%) diff --git a/spring-boot-mvc/src/main/java/com/baeldung/swaggerboot/Application.java b/spring-boot-mvc/src/main/java/com/baeldung/swagger2boot/Application.java similarity index 88% rename from spring-boot-mvc/src/main/java/com/baeldung/swaggerboot/Application.java rename to spring-boot-mvc/src/main/java/com/baeldung/swagger2boot/Application.java index 14e46b2306..51598aeacb 100644 --- a/spring-boot-mvc/src/main/java/com/baeldung/swaggerboot/Application.java +++ b/spring-boot-mvc/src/main/java/com/baeldung/swagger2boot/Application.java @@ -1,4 +1,4 @@ -package com.baeldung.swaggerboot; +package com.baeldung.swagger2boot; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; diff --git a/spring-boot-mvc/src/main/java/com/baeldung/swaggerboot/configuration/SpringFoxConfig.java b/spring-boot-mvc/src/main/java/com/baeldung/swagger2boot/configuration/SpringFoxConfig.java similarity index 97% rename from spring-boot-mvc/src/main/java/com/baeldung/swaggerboot/configuration/SpringFoxConfig.java rename to spring-boot-mvc/src/main/java/com/baeldung/swagger2boot/configuration/SpringFoxConfig.java index 3041dfdcc8..68e2c55deb 100644 --- a/spring-boot-mvc/src/main/java/com/baeldung/swaggerboot/configuration/SpringFoxConfig.java +++ b/spring-boot-mvc/src/main/java/com/baeldung/swagger2boot/configuration/SpringFoxConfig.java @@ -1,4 +1,4 @@ -package com.baeldung.swaggerboot.configuration; +package com.baeldung.swagger2boot.configuration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; diff --git a/spring-boot-mvc/src/main/java/com/baeldung/swaggerboot/controller/RegularRestController.java b/spring-boot-mvc/src/main/java/com/baeldung/swagger2boot/controller/RegularRestController.java similarity index 84% rename from spring-boot-mvc/src/main/java/com/baeldung/swaggerboot/controller/RegularRestController.java rename to spring-boot-mvc/src/main/java/com/baeldung/swagger2boot/controller/RegularRestController.java index 676937f7d7..df8714d041 100644 --- a/spring-boot-mvc/src/main/java/com/baeldung/swaggerboot/controller/RegularRestController.java +++ b/spring-boot-mvc/src/main/java/com/baeldung/swagger2boot/controller/RegularRestController.java @@ -1,4 +1,4 @@ -package com.baeldung.swaggerboot.controller; +package com.baeldung.swagger2boot.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; diff --git a/spring-resttemplate/src/test/java/org/baeldung/client/RestTemplateBasicLiveTest.java b/spring-resttemplate/src/test/java/org/baeldung/resttemplate/RestTemplateBasicLiveTest.java similarity index 99% rename from spring-resttemplate/src/test/java/org/baeldung/client/RestTemplateBasicLiveTest.java rename to spring-resttemplate/src/test/java/org/baeldung/resttemplate/RestTemplateBasicLiveTest.java index ff3034a50d..54e416d008 100644 --- a/spring-resttemplate/src/test/java/org/baeldung/client/RestTemplateBasicLiveTest.java +++ b/spring-resttemplate/src/test/java/org/baeldung/resttemplate/RestTemplateBasicLiveTest.java @@ -1,4 +1,4 @@ -package org.baeldung.client; +package org.baeldung.resttemplate; import static org.apache.commons.codec.binary.Base64.encodeBase64; import static org.baeldung.client.Consts.APPLICATION_PORT; diff --git a/spring-security-rest/src/main/java/org/baeldung/spring/SwaggerConfig.java b/spring-security-rest/src/main/java/org/baeldung/swagger2/SwaggerConfig.java similarity index 98% rename from spring-security-rest/src/main/java/org/baeldung/spring/SwaggerConfig.java rename to spring-security-rest/src/main/java/org/baeldung/swagger2/SwaggerConfig.java index aa00e8455e..67c760353d 100644 --- a/spring-security-rest/src/main/java/org/baeldung/spring/SwaggerConfig.java +++ b/spring-security-rest/src/main/java/org/baeldung/swagger2/SwaggerConfig.java @@ -1,4 +1,4 @@ -package org.baeldung.spring; +package org.baeldung.swagger2; import static com.google.common.collect.Lists.newArrayList; From ce027707d09b90b81b4b9be46b4d15357bffda20 Mon Sep 17 00:00:00 2001 From: Michael Pratt Date: Fri, 23 Aug 2019 11:38:48 -0600 Subject: [PATCH 55/56] BAEL-2741: JHipster authentication with external service (#7588) * BAEL-2741: JHipster authentication using 3rd party service * BAEL-2741: Remove Angular account mgmt routes * BAEL-2741: Remove password reset register links from navbar * BAEL-2741: Remove password and register links from login form * BAEL-2741: Cleanup CustomAuthenticationManager code * Update README.md * BAEL-2741: Fix unit test --- .../security/CustomAuthenticationManager.java | 126 ++++++++++++++++++ .../jhipster5/security/dto/LoginRequest.java | 30 +++++ .../jhipster5/security/dto/LoginResponse.java | 50 +++++++ .../main/webapp/app/account/account.route.ts | 4 +- .../app/layouts/navbar/navbar.component.html | 12 -- .../app/shared/login/login.component.html | 8 -- .../security/MockAuthenticationManager.java | 54 ++++++++ 7 files changed, 262 insertions(+), 22 deletions(-) create mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/CustomAuthenticationManager.java create mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/dto/LoginRequest.java create mode 100644 jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/dto/LoginResponse.java create mode 100644 jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/security/MockAuthenticationManager.java diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/CustomAuthenticationManager.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/CustomAuthenticationManager.java new file mode 100644 index 0000000000..0a7dd66b24 --- /dev/null +++ b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/CustomAuthenticationManager.java @@ -0,0 +1,126 @@ +package com.baeldung.jhipster5.security; + +import com.baeldung.jhipster5.domain.User; +import com.baeldung.jhipster5.security.dto.LoginRequest; +import com.baeldung.jhipster5.security.dto.LoginResponse; +import com.baeldung.jhipster5.service.UserService; +import com.baeldung.jhipster5.service.dto.UserDTO; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.authentication.AuthenticationServiceException; +import org.springframework.security.authentication.BadCredentialsException; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.AuthenticationException; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.stereotype.Component; +import org.springframework.web.client.RestTemplate; + +import java.util.Collection; +import java.util.Collections; +import java.util.stream.Collectors; + +@Component +public class CustomAuthenticationManager implements AuthenticationManager { + + private final static Logger LOG = LoggerFactory.getLogger(CustomAuthenticationManager.class); + + private final String REMOTE_LOGIN_URL = "https://example.com/login"; + + private final RestTemplate restTemplate = new RestTemplate(); + + @Autowired + private UserService userService; + + @Override + public Authentication authenticate(Authentication authentication) throws AuthenticationException { + + LoginRequest loginRequest = new LoginRequest(); + loginRequest.setUsername(authentication.getPrincipal().toString()); + loginRequest.setPassword(authentication.getCredentials().toString()); + + try + { + ResponseEntity response = + restTemplate.postForEntity( + REMOTE_LOGIN_URL, + loginRequest, + LoginResponse.class); + + if(response.getStatusCode().is2xxSuccessful()) + { + // + // Need to create a new local user if this is the first time logging in; this + // is required so they can be issued JWTs. We can use this flow to also keep + // our local use entry up to date with data from the remote service if needed + // (for example, if the first and last name might change, this is where we would + // update the local user entry) + // + + User user = userService.getUserWithAuthoritiesByLogin(authentication.getPrincipal().toString()) + .orElseGet(() -> userService.createUser(createUserDTO(response.getBody(), authentication))); + return createAuthentication(authentication, user); + } + else + { + throw new BadCredentialsException("Invalid username or password"); + } + } + catch (Exception e) + { + LOG.warn("Failed to authenticate", e); + throw new AuthenticationServiceException("Failed to login", e); + } + } + + /** + * Creates a new authentication with basic roles + * @param auth Contains auth details that will be copied into the new one. + * @param user User object representing who is logging in + * @return Authentication + */ + private Authentication createAuthentication(Authentication auth, User user) { + + // + // Honor any roles the user already has set; default is just USER role + // but could be modified after account creation + // + + Collection extends GrantedAuthority> authorities = user + .getAuthorities() + .stream() + .map(a -> new SimpleGrantedAuthority(a.getName())) + .collect(Collectors.toSet()); + + UsernamePasswordAuthenticationToken token + = new UsernamePasswordAuthenticationToken( + user.getId(), + auth.getCredentials().toString(), + authorities); + + return token; + } + + /** + * Creates a new UserDTO with basic info. + * @param loginResponse Response from peloton login API + * @param authentication Contains user login info (namely username and password) + * @return UserDTO + */ + private UserDTO createUserDTO(LoginResponse loginResponse, Authentication authentication) { + + UserDTO dto = new UserDTO(); + + dto.setActivated(true); + dto.setEmail(loginResponse.getEmail()); + dto.setAuthorities(Collections.singleton(AuthoritiesConstants.USER)); + dto.setFirstName(loginResponse.getFirstName()); + dto.setLastName(loginResponse.getLastName()); + + return dto; + } +} diff --git a/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/dto/LoginRequest.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/dto/LoginRequest.java new file mode 100644 index 0000000000..f45c23fa39 --- /dev/null +++ b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/dto/LoginRequest.java @@ -0,0 +1,30 @@ +package com.baeldung.jhipster5.security.dto; + +/** + * Simple DTO representing a login request to a remote service. + */ +public class LoginRequest { + + private String username; + + private String password; + + public LoginRequest() { + } + + 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/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/dto/LoginResponse.java b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/dto/LoginResponse.java new file mode 100644 index 0000000000..ad1fe37a2f --- /dev/null +++ b/jhipster-5/bookstore-monolith/src/main/java/com/baeldung/jhipster5/security/dto/LoginResponse.java @@ -0,0 +1,50 @@ +package com.baeldung.jhipster5.security.dto; + +/** + * Simple DTO representing the response of logging in using a remote service. + */ +public class LoginResponse { + + private String username; + + private String firstName; + + private String lastName; + + private String email; + + public LoginResponse() { + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } +} diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/account.route.ts b/jhipster-5/bookstore-monolith/src/main/webapp/app/account/account.route.ts index f849342e69..cba5d40716 100644 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/account/account.route.ts +++ b/jhipster-5/bookstore-monolith/src/main/webapp/app/account/account.route.ts @@ -1,8 +1,8 @@ import { Routes } from '@angular/router'; -import { activateRoute, passwordRoute, passwordResetFinishRoute, passwordResetInitRoute, registerRoute, settingsRoute } from './'; +import { settingsRoute } from './'; -const ACCOUNT_ROUTES = [activateRoute, passwordRoute, passwordResetFinishRoute, passwordResetInitRoute, registerRoute, settingsRoute]; +const ACCOUNT_ROUTES = [settingsRoute]; export const accountState: Routes = [ { diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/navbar/navbar.component.html b/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/navbar/navbar.component.html index e58d234c22..4fab5c76ac 100644 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/navbar/navbar.component.html +++ b/jhipster-5/bookstore-monolith/src/main/webapp/app/layouts/navbar/navbar.component.html @@ -114,12 +114,6 @@ Settings - - - - Password - - @@ -132,12 +126,6 @@ Sign in - - - - Register - - diff --git a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/login/login.component.html b/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/login/login.component.html index 60d593bd4b..7eb35364b4 100644 --- a/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/login/login.component.html +++ b/jhipster-5/bookstore-monolith/src/main/webapp/app/shared/login/login.component.html @@ -30,14 +30,6 @@ Sign in - - - Did you forget your password? - - - You don't have an account yet? - Register a new account - diff --git a/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/security/MockAuthenticationManager.java b/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/security/MockAuthenticationManager.java new file mode 100644 index 0000000000..bdcdba7644 --- /dev/null +++ b/jhipster-5/bookstore-monolith/src/test/java/com/baeldung/jhipster5/security/MockAuthenticationManager.java @@ -0,0 +1,54 @@ +package com.baeldung.jhipster5.security; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Primary; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.authentication.BadCredentialsException; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.AuthenticationException; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.stereotype.Component; + +import java.util.Collection; +import java.util.Collections; + +/** + * AuthenticationManager used solely by unit tests. + */ +@Component +@Primary +public class MockAuthenticationManager implements AuthenticationManager +{ + private final static Collection extends GrantedAuthority> ROLES = + Collections.singleton(new SimpleGrantedAuthority("ROLE_USER")); + + @Autowired + private UserDetailsService userDetailsService; + + @Autowired + private PasswordEncoder passwordEncoder; + + @Override + public Authentication authenticate(Authentication authentication) throws AuthenticationException + { + + UserDetails userDetails = userDetailsService.loadUserByUsername(authentication.getName()); + + if(userDetails == null || !passwordEncoder.matches(authentication.getCredentials().toString(), userDetails.getPassword())) + { + throw new BadCredentialsException("Invalid username/password"); + } + + UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken( + authentication.getPrincipal().toString(), + authentication.getCredentials().toString(), + ROLES); + + return token; + } +} From 8e190c76af721cdae529b4a6d01f8dc9d8666379 Mon Sep 17 00:00:00 2001 From: Kumar Chandrakant Date: Sat, 24 Aug 2019 02:02:02 +0530 Subject: [PATCH 56/56] Adding source code for the tutorial tracked under BAEL-3203. (#7600) --- apache-spark/data/iris.data | 150 ++++++++++++++++++ .../logistic-regression/data/._SUCCESS.crc | Bin 0 -> 8 bytes ...-80d9-8e1edf399601-c000.snappy.parquet.crc | Bin 0 -> 24 bytes .../model/logistic-regression/data/_SUCCESS | 0 ...41ff-80d9-8e1edf399601-c000.snappy.parquet | Bin 0 -> 1789 bytes .../metadata/._SUCCESS.crc | Bin 0 -> 8 bytes .../metadata/.part-00000.crc | Bin 0 -> 12 bytes .../logistic-regression/metadata/_SUCCESS | 0 .../logistic-regression/metadata/part-00000 | 1 + apache-spark/pom.xml | 132 +++++++-------- .../com/baeldung/ml/MachineLearningApp.java | 111 +++++++++++++ 11 files changed, 332 insertions(+), 62 deletions(-) create mode 100644 apache-spark/data/iris.data create mode 100644 apache-spark/model/logistic-regression/data/._SUCCESS.crc create mode 100644 apache-spark/model/logistic-regression/data/.part-00000-f3a3ee61-f200-41ff-80d9-8e1edf399601-c000.snappy.parquet.crc create mode 100644 apache-spark/model/logistic-regression/data/_SUCCESS create mode 100644 apache-spark/model/logistic-regression/data/part-00000-f3a3ee61-f200-41ff-80d9-8e1edf399601-c000.snappy.parquet create mode 100644 apache-spark/model/logistic-regression/metadata/._SUCCESS.crc create mode 100644 apache-spark/model/logistic-regression/metadata/.part-00000.crc create mode 100644 apache-spark/model/logistic-regression/metadata/_SUCCESS create mode 100644 apache-spark/model/logistic-regression/metadata/part-00000 create mode 100644 apache-spark/src/main/java/com/baeldung/ml/MachineLearningApp.java diff --git a/apache-spark/data/iris.data b/apache-spark/data/iris.data new file mode 100644 index 0000000000..396653cc98 --- /dev/null +++ b/apache-spark/data/iris.data @@ -0,0 +1,150 @@ +5.1,3.5,1.4,0.2,Iris-setosa +4.9,3.0,1.4,0.2,Iris-setosa +4.7,3.2,1.3,0.2,Iris-setosa +4.6,3.1,1.5,0.2,Iris-setosa +5.0,3.6,1.4,0.2,Iris-setosa +5.4,3.9,1.7,0.4,Iris-setosa +4.6,3.4,1.4,0.3,Iris-setosa +5.0,3.4,1.5,0.2,Iris-setosa +4.4,2.9,1.4,0.2,Iris-setosa +4.9,3.1,1.5,0.1,Iris-setosa +5.4,3.7,1.5,0.2,Iris-setosa +4.8,3.4,1.6,0.2,Iris-setosa +4.8,3.0,1.4,0.1,Iris-setosa +4.3,3.0,1.1,0.1,Iris-setosa +5.8,4.0,1.2,0.2,Iris-setosa +5.7,4.4,1.5,0.4,Iris-setosa +5.4,3.9,1.3,0.4,Iris-setosa +5.1,3.5,1.4,0.3,Iris-setosa +5.7,3.8,1.7,0.3,Iris-setosa +5.1,3.8,1.5,0.3,Iris-setosa +5.4,3.4,1.7,0.2,Iris-setosa +5.1,3.7,1.5,0.4,Iris-setosa +4.6,3.6,1.0,0.2,Iris-setosa +5.1,3.3,1.7,0.5,Iris-setosa +4.8,3.4,1.9,0.2,Iris-setosa +5.0,3.0,1.6,0.2,Iris-setosa +5.0,3.4,1.6,0.4,Iris-setosa +5.2,3.5,1.5,0.2,Iris-setosa +5.2,3.4,1.4,0.2,Iris-setosa +4.7,3.2,1.6,0.2,Iris-setosa +4.8,3.1,1.6,0.2,Iris-setosa +5.4,3.4,1.5,0.4,Iris-setosa +5.2,4.1,1.5,0.1,Iris-setosa +5.5,4.2,1.4,0.2,Iris-setosa +4.9,3.1,1.5,0.1,Iris-setosa +5.0,3.2,1.2,0.2,Iris-setosa +5.5,3.5,1.3,0.2,Iris-setosa +4.9,3.1,1.5,0.1,Iris-setosa +4.4,3.0,1.3,0.2,Iris-setosa +5.1,3.4,1.5,0.2,Iris-setosa +5.0,3.5,1.3,0.3,Iris-setosa +4.5,2.3,1.3,0.3,Iris-setosa +4.4,3.2,1.3,0.2,Iris-setosa +5.0,3.5,1.6,0.6,Iris-setosa +5.1,3.8,1.9,0.4,Iris-setosa +4.8,3.0,1.4,0.3,Iris-setosa +5.1,3.8,1.6,0.2,Iris-setosa +4.6,3.2,1.4,0.2,Iris-setosa +5.3,3.7,1.5,0.2,Iris-setosa +5.0,3.3,1.4,0.2,Iris-setosa +7.0,3.2,4.7,1.4,Iris-versicolor +6.4,3.2,4.5,1.5,Iris-versicolor +6.9,3.1,4.9,1.5,Iris-versicolor +5.5,2.3,4.0,1.3,Iris-versicolor +6.5,2.8,4.6,1.5,Iris-versicolor +5.7,2.8,4.5,1.3,Iris-versicolor +6.3,3.3,4.7,1.6,Iris-versicolor +4.9,2.4,3.3,1.0,Iris-versicolor +6.6,2.9,4.6,1.3,Iris-versicolor +5.2,2.7,3.9,1.4,Iris-versicolor +5.0,2.0,3.5,1.0,Iris-versicolor +5.9,3.0,4.2,1.5,Iris-versicolor +6.0,2.2,4.0,1.0,Iris-versicolor +6.1,2.9,4.7,1.4,Iris-versicolor +5.6,2.9,3.6,1.3,Iris-versicolor +6.7,3.1,4.4,1.4,Iris-versicolor +5.6,3.0,4.5,1.5,Iris-versicolor +5.8,2.7,4.1,1.0,Iris-versicolor +6.2,2.2,4.5,1.5,Iris-versicolor +5.6,2.5,3.9,1.1,Iris-versicolor +5.9,3.2,4.8,1.8,Iris-versicolor +6.1,2.8,4.0,1.3,Iris-versicolor +6.3,2.5,4.9,1.5,Iris-versicolor +6.1,2.8,4.7,1.2,Iris-versicolor +6.4,2.9,4.3,1.3,Iris-versicolor +6.6,3.0,4.4,1.4,Iris-versicolor +6.8,2.8,4.8,1.4,Iris-versicolor +6.7,3.0,5.0,1.7,Iris-versicolor +6.0,2.9,4.5,1.5,Iris-versicolor +5.7,2.6,3.5,1.0,Iris-versicolor +5.5,2.4,3.8,1.1,Iris-versicolor +5.5,2.4,3.7,1.0,Iris-versicolor +5.8,2.7,3.9,1.2,Iris-versicolor +6.0,2.7,5.1,1.6,Iris-versicolor +5.4,3.0,4.5,1.5,Iris-versicolor +6.0,3.4,4.5,1.6,Iris-versicolor +6.7,3.1,4.7,1.5,Iris-versicolor +6.3,2.3,4.4,1.3,Iris-versicolor +5.6,3.0,4.1,1.3,Iris-versicolor +5.5,2.5,4.0,1.3,Iris-versicolor +5.5,2.6,4.4,1.2,Iris-versicolor +6.1,3.0,4.6,1.4,Iris-versicolor +5.8,2.6,4.0,1.2,Iris-versicolor +5.0,2.3,3.3,1.0,Iris-versicolor +5.6,2.7,4.2,1.3,Iris-versicolor +5.7,3.0,4.2,1.2,Iris-versicolor +5.7,2.9,4.2,1.3,Iris-versicolor +6.2,2.9,4.3,1.3,Iris-versicolor +5.1,2.5,3.0,1.1,Iris-versicolor +5.7,2.8,4.1,1.3,Iris-versicolor +6.3,3.3,6.0,2.5,Iris-virginica +5.8,2.7,5.1,1.9,Iris-virginica +7.1,3.0,5.9,2.1,Iris-virginica +6.3,2.9,5.6,1.8,Iris-virginica +6.5,3.0,5.8,2.2,Iris-virginica +7.6,3.0,6.6,2.1,Iris-virginica +4.9,2.5,4.5,1.7,Iris-virginica +7.3,2.9,6.3,1.8,Iris-virginica +6.7,2.5,5.8,1.8,Iris-virginica +7.2,3.6,6.1,2.5,Iris-virginica +6.5,3.2,5.1,2.0,Iris-virginica +6.4,2.7,5.3,1.9,Iris-virginica +6.8,3.0,5.5,2.1,Iris-virginica +5.7,2.5,5.0,2.0,Iris-virginica +5.8,2.8,5.1,2.4,Iris-virginica +6.4,3.2,5.3,2.3,Iris-virginica +6.5,3.0,5.5,1.8,Iris-virginica +7.7,3.8,6.7,2.2,Iris-virginica +7.7,2.6,6.9,2.3,Iris-virginica +6.0,2.2,5.0,1.5,Iris-virginica +6.9,3.2,5.7,2.3,Iris-virginica +5.6,2.8,4.9,2.0,Iris-virginica +7.7,2.8,6.7,2.0,Iris-virginica +6.3,2.7,4.9,1.8,Iris-virginica +6.7,3.3,5.7,2.1,Iris-virginica +7.2,3.2,6.0,1.8,Iris-virginica +6.2,2.8,4.8,1.8,Iris-virginica +6.1,3.0,4.9,1.8,Iris-virginica +6.4,2.8,5.6,2.1,Iris-virginica +7.2,3.0,5.8,1.6,Iris-virginica +7.4,2.8,6.1,1.9,Iris-virginica +7.9,3.8,6.4,2.0,Iris-virginica +6.4,2.8,5.6,2.2,Iris-virginica +6.3,2.8,5.1,1.5,Iris-virginica +6.1,2.6,5.6,1.4,Iris-virginica +7.7,3.0,6.1,2.3,Iris-virginica +6.3,3.4,5.6,2.4,Iris-virginica +6.4,3.1,5.5,1.8,Iris-virginica +6.0,3.0,4.8,1.8,Iris-virginica +6.9,3.1,5.4,2.1,Iris-virginica +6.7,3.1,5.6,2.4,Iris-virginica +6.9,3.1,5.1,2.3,Iris-virginica +5.8,2.7,5.1,1.9,Iris-virginica +6.8,3.2,5.9,2.3,Iris-virginica +6.7,3.3,5.7,2.5,Iris-virginica +6.7,3.0,5.2,2.3,Iris-virginica +6.3,2.5,5.0,1.9,Iris-virginica +6.5,3.0,5.2,2.0,Iris-virginica +6.2,3.4,5.4,2.3,Iris-virginica +5.9,3.0,5.1,1.8,Iris-virginica \ No newline at end of file diff --git a/apache-spark/model/logistic-regression/data/._SUCCESS.crc b/apache-spark/model/logistic-regression/data/._SUCCESS.crc new file mode 100644 index 0000000000000000000000000000000000000000..3b7b044936a890cd8d651d349a752d819d71d22c GIT binary patch literal 8 PcmYc;N@ieSU}69O2$TUk literal 0 HcmV?d00001 diff --git a/apache-spark/model/logistic-regression/data/.part-00000-f3a3ee61-f200-41ff-80d9-8e1edf399601-c000.snappy.parquet.crc b/apache-spark/model/logistic-regression/data/.part-00000-f3a3ee61-f200-41ff-80d9-8e1edf399601-c000.snappy.parquet.crc new file mode 100644 index 0000000000000000000000000000000000000000..46311024cff2ce7756c0f80479f5268efd069597 GIT binary patch literal 24 gcmYc;N@ieSU}Bj6=FX}-{Q+{WxhI4AG>Jn!?q=Q-)j)TKNU z&>&KCNPALPhCV&d1-K9e6nmU9)0k9=4AQg$b9Kj+`QqM3#5Tj zLMTXT@(!`;3!aN)0ZBtJWUtdAL;KlAQsb_*NO+cIS1psca3p|=t8r?%9+G@Wl2Fnh zw#O0^w=r#Rkk=2?VIE?;9hU78$0RLJfW4&d@D?26E;MOXP^45kMYD1mL>FWskvbfx zSyl9eacIU|*Z`G6>BI%{lzX6a&HD}X zbA~g@boQyZo?;a!`qxr)C$gSlK=~;uzs2mTII)S_qSC&^IIk?EB6H(945gO+5(AFF zA-xs&AjgT>CjhRXt*IdtOo1T`_Y8IhYR~x^&q}jN^LR}j|%+C!m?J5J9 z6uXeG{ZqCtTSGZ{^NT1~b!=hUV;fRn$htH z6tmluVuL~>HB4QS(}M1`@ulVET-YTuVA!I@Za|$lYw$3k&EZ`)h76%z>^Qgsue&$V z?y=GPjB2T1`8X*Gu|v=CIMWXfsrBZQtj1 - 4.0.0 - com.baeldung - apache-spark - 1.0-SNAPSHOT - apache-spark - jar - http://maven.apache.org + + 4.0.0 + com.baeldung + apache-spark + 1.0-SNAPSHOT + apache-spark + jar + http://maven.apache.org - - com.baeldung - parent-modules - 1.0.0-SNAPSHOT - + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + - - - org.apache.spark - spark-core_2.11 - ${org.apache.spark.spark-core.version} - provided - + - org.apache.spark - spark-sql_2.11 - ${org.apache.spark.spark-sql.version} - provided + org.apache.spark + spark-core_2.11 + ${org.apache.spark.spark-core.version} + provided + + + org.apache.spark + spark-sql_2.11 + ${org.apache.spark.spark-sql.version} + provided org.apache.spark @@ -33,6 +34,12 @@ ${org.apache.spark.spark-streaming.version} provided + + org.apache.spark + spark-mllib_2.11 + ${org.apache.spark.spark-mllib.version} + provided + org.apache.spark spark-streaming-kafka-0-10_2.11 @@ -48,46 +55,47 @@ spark-cassandra-connector-java_2.11 ${com.datastax.spark.spark-cassandra-connector-java.version} - + - - - org.apache.maven.plugins - maven-compiler-plugin - ${maven-compiler-plugin.version} - - ${java.version} - ${java.version} - - - - maven-assembly-plugin - - - package - - single - - - - - - jar-with-dependencies - - - - - + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + ${java.version} + ${java.version} + + + + maven-assembly-plugin + + + package + + single + + + + + + jar-with-dependencies + + + + + - - 2.3.0 - 2.3.0 - 2.3.0 - 2.3.0 - 2.3.0 - 1.5.2 + + 2.3.0 + 2.3.0 + 2.3.0 + 2.3.0 + 2.3.0 + 2.3.0 + 1.5.2 3.2 - + diff --git a/apache-spark/src/main/java/com/baeldung/ml/MachineLearningApp.java b/apache-spark/src/main/java/com/baeldung/ml/MachineLearningApp.java new file mode 100644 index 0000000000..6094683031 --- /dev/null +++ b/apache-spark/src/main/java/com/baeldung/ml/MachineLearningApp.java @@ -0,0 +1,111 @@ +package com.baeldung.ml; + +import java.util.HashMap; +import java.util.Map; + +import org.apache.log4j.Level; +import org.apache.log4j.Logger; +import org.apache.spark.SparkConf; +import org.apache.spark.api.java.JavaPairRDD; +import org.apache.spark.api.java.JavaRDD; +import org.apache.spark.api.java.JavaSparkContext; +import org.apache.spark.mllib.classification.LogisticRegressionModel; +import org.apache.spark.mllib.classification.LogisticRegressionWithLBFGS; +import org.apache.spark.mllib.evaluation.MulticlassMetrics; +import org.apache.spark.mllib.linalg.Matrix; +import org.apache.spark.mllib.linalg.Vector; +import org.apache.spark.mllib.linalg.Vectors; +import org.apache.spark.mllib.regression.LabeledPoint; +import org.apache.spark.mllib.stat.MultivariateStatisticalSummary; +import org.apache.spark.mllib.stat.Statistics; + +import scala.Tuple2; + +public class MachineLearningApp { + + public static void main(String[] args) { + + // 1. Setting the Spark Context + SparkConf conf = new SparkConf().setAppName("Main") + .setMaster("local[2]") + .set("spark.executor.memory", "3g") + .set("spark.driver.memory", "3g"); + JavaSparkContext sc = new JavaSparkContext(conf); + Logger.getLogger("org") + .setLevel(Level.OFF); + Logger.getLogger("akka") + .setLevel(Level.OFF); + + // 2. Loading the Data-set + String dataFile = "data\\iris.data"; + JavaRDD data = sc.textFile(dataFile); + + // 3. Exploratory Data Analysis + // 3.1. Creating Vector of Input Data + JavaRDD inputData = data.map(line -> { + String[] parts = line.split(","); + double[] v = new double[parts.length - 1]; + for (int i = 0; i < parts.length - 1; i++) { + v[i] = Double.parseDouble(parts[i]); + } + return Vectors.dense(v); + }); + // 3.2. Performing Statistical Analysis + MultivariateStatisticalSummary summary = Statistics.colStats(inputData.rdd()); + System.out.println("Summary Mean:"); + System.out.println(summary.mean()); + System.out.println("Summary Variance:"); + System.out.println(summary.variance()); + System.out.println("Summary Non-zero:"); + System.out.println(summary.numNonzeros()); + // 3.3. Performing Correlation Analysis + Matrix correlMatrix = Statistics.corr(inputData.rdd(), "pearson"); + System.out.println("Correlation Matrix:"); + System.out.println(correlMatrix.toString()); + + // 4. Data Preparation + // 4.1. Creating Map for Textual Output Labels + Map map = new HashMap(); + map.put("Iris-setosa", 0); + map.put("Iris-versicolor", 1); + map.put("Iris-virginica", 2); + // 4.2. Creating LabeledPoint of Input and Output Data + JavaRDD parsedData = data.map(line -> { + String[] parts = line.split(","); + double[] v = new double[parts.length - 1]; + for (int i = 0; i < parts.length - 1; i++) { + v[i] = Double.parseDouble(parts[i]); + } + return new LabeledPoint(map.get(parts[parts.length - 1]), Vectors.dense(v)); + }); + + // 5. Data Splitting into 80% Training and 20% Test Sets + JavaRDD[] splits = parsedData.randomSplit(new double[] { 0.8, 0.2 }, 11L); + JavaRDD trainingData = splits[0].cache(); + JavaRDD testData = splits[1]; + + // 6. Modeling + // 6.1. Model Training + LogisticRegressionModel model = new LogisticRegressionWithLBFGS().setNumClasses(3) + .run(trainingData.rdd()); + // 6.2. Model Evaluation + JavaPairRDD predictionAndLabels = testData.mapToPair(p -> new Tuple2<>(model.predict(p.features()), p.label())); + MulticlassMetrics metrics = new MulticlassMetrics(predictionAndLabels.rdd()); + double accuracy = metrics.accuracy(); + System.out.println("Model Accuracy on Test Data: " + accuracy); + + // 7. Model Saving and Loading + // 7.1. Model Saving + model.save(sc.sc(), "model\\logistic-regression"); + // 7.2. Model Loading + LogisticRegressionModel sameModel = LogisticRegressionModel.load(sc.sc(), "model\\logistic-regression"); + // 7.3. Prediction on New Data + Vector newData = Vectors.dense(new double[] { 1, 1, 1, 1 }); + double prediction = sameModel.predict(newData); + System.out.println("Model Prediction on New Data = " + prediction); + + // 8. Clean-up + sc.close(); + } + +}
- User [[${userId}]] + User [[${userId}]]